en.osm.town is one of the many independent Mastodon servers you can use to participate in the fediverse.
An independent, community of OpenStreetMap people on the Fediverse/Mastodon. Funding graciously provided by the OpenStreetMap Foundation.

Server stats:

267
active users

#fedify

3 posts3 participants0 posts today

We're incredibly honored to announce that #Ghost (@index) has become a formal sponsor of Fedify through Open Collective!

This is a significant milestone for our project, and we're deeply grateful to @johnonolan and the entire Ghost team for their support and recognition of our work in the #ActivityPub ecosystem.

Ghost's social web integration built on #Fedify is a perfect example of how open standards can connect different publishing platforms in the fediverse. Their backing over the past months has been invaluable, and this formal sponsorship will help ensure Fedify remains sustainable as we continue to develop and improve the framework.

If you're building with ActivityPub or interested in federated applications, please consider joining Ghost in supporting open source development through our Open Collective:

https://opencollective.com/fedify

Every contribution, no matter the size, helps us maintain and enhance the tools that make the fediverse more accessible to developers. Thank you for being part of this journey with us! :fedify: ❤️ :ghost:

MastodonJohn O'Nolan (@johnonolan@mastodon.xyz)Attached: 1 image Ghost's social web integration is built on the fantastic work of @hongminhee@hollo.social and the Fedify.dev framework. We've been backing work on the project for 6 months or so, and now we're thrilled to be formal sponsor of the project on Open Collective! If you're building with Fedify and ActivityPub, please consider joining us to keep helping to make great open source work sustainable ❤️ Every little helps https://opencollective.com/fedify
Hackers' Pub · Fedify CLI로 Content Warnings 이해하기Warning 제목이 적절한지 잘 모르겠다. 본문은 Mastodon에 있는 Content Warnings이라는 것이 ActivityPub Activity 객체에서 어떻게 묘사되는지 확인하는 내용이다. 정확한 내용이 아닐 수 있다.<서문 (동기) Mastodon에서 글을 쓸 때 Content Warnings을 자주 쓰는데:내가 쓰는 글이 어떤 사람에게는 기분 상할 글일 수도 있을까 하는 걱정도 있고,혼자 말을 자주 적는데 소음같이 느껴져서 보고 싶지 않을 사람도 있을까 싶어서 "혼자 말" 같은 경고문을 달고 적어놓는다.<요즘은 "혼자 말" 대신 요약을 좀 적어놓는 편인 것 같다. 그런데 Mastodon에서 글을 적으면 몇 글자 더 적을 수 있는지, 글자 수 제한을 표시해준다. Content Warnings을 적는데도 글자 수 제한이 줄어드는 것을 보고 본문과 Content Warnings가 같은 필드에 있는 걸까 그런 궁금증이 들었다. 어떻게 생겼는지 보고 글을 적고 있는 지금 다시 생각하면, 조금 잘못된(?) 상상이었던 것 같지만 암튼 그랬다.본문 Activity 객체 읽어오기 내가 적은 글의 Activity 객체 버전을 확인해보려면 어떻게 해야 하지 싶던 중, @hongminhee 님이 만드신 Fedify에서 제공하는 CLI 도구에 관련 기능이 있었던 것 같아 살펴보니 fedify lookup이라는 명령어가 있었다. 사용법은 아래와 같이 인자로 글 URL을 넘겨주면 됐다.fedify lookup https://social.silicon.moe/@moreal/114252336335817713<그러면 아래와 같이 Activity 객체 내용을 보여준다:$ fedify lookup https://social.silicon.moe/@moreal/114252336335817713✔ Fetched object: https://social.silicon.moe/@moreal/114252336335817713.Note { id: URL "https://social.silicon.moe/users/moreal/statuses/114252336335817713", attribution: URL "https://social.silicon.moe/users/moreal", contents: [ "<p>본문</p>", <ko> "<p>본문</p>" ], published: 2025-03-30T16:31:40Z, replies: Collection { id: URL "https://social.silicon.moe/users/moreal/statuses/114252336335817713/replies", first: CollectionPage { partOf: URL "https://social.silicon.moe/users/moreal/statuses/114252336335817713/replies", next: URL "https://social.silicon.moe/users/moreal/statuses/114252336335817713/replies?only_other_accounts=true&page=true" } }, shares: Collection { id: URL "https://social.silicon.moe/users/moreal/statuses/114252336335817713/shares", totalItems: 0 }, likes: Collection { id: URL "https://social.silicon.moe/users/moreal/statuses/114252336335817713/likes", totalItems: 0 }, summary: "Content Warning 테스트", url: URL "https://social.silicon.moe/@moreal/114252336335817713", to: URL "https://social.silicon.moe/users/moreal/followers", cc: URL "https://www.w3.org/ns/activitystreams#Public", sensitive: true}✔ Successfully fetched the object.<Activity 객체 이해하기 "Content Warnings"에 넣었던 Content Warning 테스트라는 문구는 summary 필드에 들어있었다. summary 필드에 대해 살펴보기 위해서 ActivityPub 문서에 들어갔다. "Note"를 키워드로 검색해보니 아래 같은 예제를 발견했다:{"@context": "https://www.w3.org/ns/activitystreams", "type": "Note", "to": ["https://chatty.example/ben/"], "attributedTo": "https://social.example/alyssa/", "content": "Say, did you finish reading that book I lent you?"}<예전에 Fedify에 기여할 때 기억으로는 Activity가 JSON-LD 포맷으로 표현되므로 스키마를 확인하고자 @context 필드의 링크로 들어갔다. 그렇게 타고 들어가서 Note의 정의를 발견했는데 Object를 상속하였고, 상속받은 것 외에 자신만의 필드는 없어 보였다. 링크를 또 타고 들어가 summary의 정의를 볼 수 있었다. 설명은 아래와 같다:A natural language summarization of the object encoded as HTML. Multiple language tagged summaries MAY be provided.<HTML로 스타일링할 수도 있고, 여러 언어별로 요약을 제공할 수도 있다고 한다. 아래 JSON은 문서에 있는 예제인데, 영어(en)와 스페인어(es), 중국어 간체(zh-Hans) 언어마다 요약을 각각 제공하는 것으로 보인다.{ "@context": "https://www.w3.org/ns/activitystreams", "name": "Cane Sugar Processing", "type": "Note", "summaryMap": { "en": "A simple <em>note</em>", "es": "Una <em>nota</em> sencilla", "zh-Hans": "一段<em>简单的</em>笔记" }}<결론 Content Warnings에 요약을 적는 건 적절한 용례이다! (?)사용자가 주로 사용하는 언어로 작성하면, 애플리케이션 단에서 다른 요약들도 번역해서 자동으로 채워줄 수도 있겠다. (읽는 쪽에서 번역하는 게 나으려나)

I received a heartwarming #testimonial about #Fedify today!

@bgl shared in the FediDev KR Discord server:

I had trouble finding good resources explaining ActivityPub, but after reading through the Fedify docs from start to finish, I feel like I've actually digested it.

They also posted on their Hackers' Pub:

If you want to learn ActivityPub efficiently, just read the Fedify docs from beginning to end.

This makes all the documentation work worthwhile. Glad our docs are helping people understand not just Fedify, but #ActivityPub itself.

fedidev.kr한국 연합우주 개발자 모임한국에 거주하거나 한국어를 사용하는 연합우주(fediverse) 개발자들의 모임입니다.

We're excited to announce the release of Fedify 1.5.0! This version brings several significant improvements to performance, configurability, and developer experience. Let's dive into what's new:

Two-Stage Fan-out Architecture for Efficient Activity Delivery

#Fedify now implements a smart fan-out mechanism for delivering activities to large audiences. This change is particularly valuable for accounts with many followers. When sending activities to many recipients, Fedify now creates a single consolidated message containing the activity payload and recipient list, which a background worker then processes to re-enqueue individual delivery tasks.

This architectural improvement delivers several benefits: Context.sendActivity() returns almost instantly even with thousands of recipients, memory consumption is dramatically reduced by avoiding payload duplication, UI responsiveness improves since web requests complete quickly, and the system maintains reliability with independent retry logic for each delivery.

For specific requirements, we've added a new fanout option with three settings:

// Configuring fan-out behavior
await ctx.sendActivity(
  { identifier: "alice" },
  recipients,
  activity,
  { fanout: "auto" }  // Default: automatic based on recipient count
  // Other options: "skip" (never use fan-out) or "force" (always use fan-out)
);

Canonical Origin Support for Multi-Domain Setups

You can now explicitly configure a canonical origin for your server, which is especially useful for multi-domain setups. This feature allows you to set different domains for WebFinger handles and #ActivityPub URIs, configured through the new origin option in createFederation(). This enhancement prevents unexpected URL construction when requests bypass proxies and improves security by ensuring consistent domain usage.

const federation = createFederation({
  // Use example.com for handles but ap.example.com for ActivityPub URIs
  origin: {
    handleHost: "example.com",
    webOrigin: "https://ap.example.com",
  },
  // Other options...
});

Optional Followers Collection Synchronization

Followers collection synchronization (FEP-8fcf) is now opt-in rather than automatic. This feature must now be explicitly enabled through the syncCollection option, giving developers more control over when to include followers collection digests. This change improves network efficiency by reducing unnecessary synchronization traffic.

await ctx.sendActivity(
  { identifier: sender },
  "followers",
  activity,
  { 
    preferSharedInbox: true,
    syncCollection: true,  // Explicitly enable collection synchronization
  }
);

Enhanced Key Format Compatibility

Key format support has been expanded for better interoperability. Fedify now accepts PEM-PKCS#1 format in addition to PEM-SPKI for RSA public keys. We've added importPkcs1() and importPem() functions for additional flexibility, which improves compatibility with a wider range of ActivityPub implementations.

Improved Key Selection Logic

The key selection process is now more intelligent. The fetchKey() function can now select the public key of an actor if keyId has no fragment and the actor has only one public key. This enhancement simplifies key handling in common scenarios and provides better compatibility with implementations that don't specify fragment identifiers.

New Authorization Options

Authorization handling has been enhanced with new options for the RequestContext.getSignedKey() and getSignedKeyOwner() methods. This provides more flexible control over authentication and authorization flows. We've deprecated older parameter-based approaches in favor of the more flexible method-based approach.

Efficient Bulk Message Queueing

Message queue performance is improved with bulk operations. We've added an optional enqueueMany() method to the MessageQueue interface, enabling efficient queueing of multiple messages in a single operation. This reduces overhead when processing batches of activities. All our message queue implementations have been updated to support this new operation:

If you're using any of these packages, make sure to update them alongside Fedify to take advantage of the more efficient bulk message queueing.

CLI Improvements

The Fedify command-line tools have been enhanced with an improved web interface for the fedify inbox command. We've added the Fedify logo with the cute dinosaur at the top of the page and made it easier to copy the fediverse handle of the ephemeral actor. We've also fixed issues with the web interface when installed via deno install from JSR.

Additional Improvements and Bug Fixes

  • Updated dependencies, including @js-temporal/polyfill to 0.5.0 for Node.js and Bun
  • Fixed bundler errors with uri-template-router on Rollup
  • Improved error handling and logging for document loader when KV store operations fail
  • Added more log messages using the LogTape library
  • Internalized the multibase package for better maintenance and compatibility

For the complete list of changes, please refer to the changelog.

To update to Fedify 1.5.0, run:

# For Deno
deno add jsr:@fedify/fedify@1.5.0

# For npm
npm  add     @fedify/fedify@1.5.0

# For Bun
bun  add     @fedify/fedify@1.5.0

Thank you to all contributors who helped make this release possible!

I just discovered why some of my followers from larger #Mastodon instances (like mastodon.social) would mysteriously unfollow me after a while!

A pull request was just merged in Mastodon that fixes a critical bug in their follower synchronization mechanism.

Turns out Mastodon implements the FEP-8fcf specification (Followers collection synchronization across servers), but it expected all followers to be in a single page collection. When followers were split across multiple pages, it would only see the first page and incorrectly remove all followers from subsequent pages!

This explains so much about the strange behavior I've been seeing with #Hollo and other #Fedify-based servers over the past few months. Some people would follow me from large instances, then mysteriously unfollow later without any action on their part.

Thankfully this fix has been marked for backporting, so it should appear in an upcoming patch release rather than waiting for the next major version. Great news for all of us building on #ActivityPub!

This is why I love open source—we can identify, understand, and fix these kinds of interoperability issues together. 😊

Continued thread

Coming soon in #Fedify 1.5.0: Smart fan-out for efficient activity delivery!

After getting feedback about our queue design, we're excited to introduce a significant improvement for accounts with large follower counts.

As we discussed in our previous post, Fedify currently creates separate queue messages for each recipient. While this approach offers excellent reliability and individual retry capabilities, it causes performance issues when sending activities to thousands of followers.

Our solution? A new two-stage “fan-out” approach:

  1. When you call Context.sendActivity(), we'll now enqueue just one consolidated message containing your activity payload and recipient list
  2. A background worker then processes this message and re-enqueues individual delivery tasks

The benefits are substantial:

  • Context.sendActivity() returns almost instantly, even for massive follower counts
  • Memory usage is dramatically reduced by avoiding payload duplication
  • UI responsiveness improves since web requests complete quickly
  • The same reliability for individual deliveries is maintained

For developers with specific needs, we're adding a fanout option with three settings:

  • "auto" (default): Uses fanout for large recipient lists, direct delivery for small ones
  • "skip": Bypasses fanout when you need different payload per recipient
  • "force": Always uses fanout even with few recipients
// Example with custom fanout setting
await ctx.sendActivity(
  { identifier: "alice" },
  recipients,
  activity,
  { fanout: "skip" }  // Directly enqueues individual messages
);

This change represents months of performance testing and should make Fedify work beautifully even for extremely popular accounts!

For more details, check out our docs.

What other #performance optimizations would you like to see in future Fedify releases?

Continued thread

We've been working on adding custom background task support to #Fedify as planned for version 1.5.0. After diving deeper into implementation, we've realized this is a more substantial undertaking than initially anticipated.

The feature would require significant API changes that would be too disruptive for a minor version update. Therefore, we've decided to postpone this feature to Fedify 2.0.0.

This allows us to:

  • Design a more robust and flexible worker architecture
  • Ensure better integration with existing task queue systems
  • Properly document the new APIs without rushing

We believe this decision will result in a more stable and well-designed feature that better serves your needs. However, some smaller improvements from our work that don't require API changes will still be included in Fedify 1.5.0 or subsequent minor updates.

We appreciate your understanding and continued support.

If you have specific use cases or requirements for background task support, please share them in our GitHub issue. Your input will help shape this feature for 2.0.0.

NoteWe've decided to postpone custom background task support to Fedify 2.0.0 instead of 1.5.0 as originally planned. This feature requires significant API changes that would be too disruptive for a...
GitHubSupport custom background tasks in worker · Issue #206 · fedify-dev/fedifyBy dahlia

Patch releases for #Fedify versions 1.0.21, 1.1.18, 1.2.18, 1.3.14, and 1.4.7 are now available. These updates address two important bugs across all supported release lines:

  1. Fixed a WebFinger handler bug that prevented matching acct: URIs with port numbers in the host. Thanks to @revathskumar for reporting and debugging the bug!
  2. Resolved server errors that occurred when invalid URLs were passed to the base-url parameter of followers collections.

We recommend all users upgrade to these latest patch versions for improved stability and federation compatibility.

Continued thread

今回、@lqez さんの『我々のコードを求めて』というYouTubeに出演させていただき、#フェディバース#ActivityPub#Fedify#Hollo 等についてお話させていただきました。日本語字幕が用意されていますので、FedifyやHolloの開発秘話などが気になる方はぜひご覧ください!

https://www.youtube.com/watch?v=sqxR8zscSDo

()@lqez 님의 《우리의 코드를 찾아서》에 出演(출연)하여 #페디버스, #ActivityPub, #Fedify, #Hollo ()()해 이야기를 나눴습니다. Fedify와 Hollo의 開發(개발) 祕話(비화) 같은 게 궁금하시다면 한 () 보셔도 재밌을지도 모르겠습니다. ㅎㅎㅎ

https://www.youtube.com/watch?v=sqxR8zscSDo

Is the world in need of a federated Craigslist/Kleinanzeigen platform? I am currently thinking about a project to dig into #fediverse development and learning #golang or stay with #deno and using #fedify.

EDIT: There is already something like that on the fediverse! It's called Flohmarkt. Thanks for the comments mentioning that!
codeberg.org/flohmarkt/flohmar

Summary card of repository flohmarkt/flohmarkt
Forgejo: Beyond coding. We Forge.flohmarktfederated decentral classified ad software using activitypub

Got an interesting question today about #Fedify's outgoing #queue design!

Some users noticed we create separate queue messages for each recipient inbox rather than queuing a single message and handling the splitting later. There's a good reason for this approach.

In the #fediverse, server response times vary dramatically—some respond quickly, others slowly, and some might be temporarily down. If we processed deliveries in a single task, the entire batch would be held up by the slowest server in the group.

By creating individual queue items for each recipient:

  • Fast servers get messages delivered promptly
  • Slow servers don't delay delivery to others
  • Failed deliveries can be retried independently
  • Your UI remains responsive while deliveries happen in the background

It's a classic trade-off: we generate more queue messages, but gain better resilience and user experience in return.

This is particularly important in federated networks where server behavior is unpredictable and outside our control. We'd rather optimize for making sure your posts reach their destinations as quickly as possible!

What other aspects of Fedify's design would you like to hear about? Let us know!

BotKit by Fedify

Simple ActivityPub bot framework. A framework for creating your fediverse bots. Using @botkit, you can create standalone ActivityPub bots rather than Mastodon/Misskey bots. Hence, you are free from the constraints of the existing platforms. BotKit is powered by @fedify, a lower-level rock-solid ActivityPub framework.

🐢 botkit.fedify.dev

botkit.fedify.devBotKit by FedifyA framework for creating your ActivityPub bots

【輪読会やってみます!】
#FediLUG :fedilug: 輪読会📖第零弾として #fedify の開発者である
Hong Minhee (洪 民憙) @hongminhee さんの著書『自分だけのフェディバースのマイクロブログを作ろう!』の輪読会を行います!

この機会に #Fedify を使用して皆さんで #ActivityPub#TypeScript などの知識を強化しませんか?

本はGitHubから無料で読むことができます:
github.com/dahlia/fedify-micro
参加:
fedilug.connpass.com/event/348

『自分だけのフェディバースのマイクロブログを作ろう!』のAsciiDocのソースコード. Contribute to dahlia/fedify-microblog-tutorial-ja development by creating an account on GitHub.
GitHubGitHub - dahlia/fedify-microblog-tutorial-ja: 『自分だけのフェディバースのマイクロブログを作ろう!』のAsciiDocのソースコード『自分だけのフェディバースのマイクロブログを作ろう!』のAsciiDocのソースコード. Contribute to dahlia/fedify-microblog-tutorial-ja development by creating an account on GitHub.
Continued thread

Fedify는 새로운 후원 파트너를 찾고 있습니다!

:fedify: Fedify란?

Fedify는 #ActivityPub 기반 연합형 서버 프레임워크로, 개발자들이 분산형 소셜 네트워크인 #연합우주(#fediverse)에 애플리케이션을 쉽게 통합할 수 있도록 돕습니다. 복잡한 ActivityPub 프로토콜 구현을 단순화하여 개발 시간을 크게 단축시킵니다. MIT 라이선스 하에 제공되는 오픈 소스 프로젝트입니다.

💼 Fedify를 활용하는 프로젝트들

다양한 프로젝트들이 이미 Fedify를 활용하고 있습니다:

  • Ghost: 수백만 사용자를 보유한 전문적인 오픈 소스(MIT 라이선스) 퍼블리싱 플랫폼으로, Fedify의 주요 후원사이자 파트너입니다.
  • Hollo: 개인 사용자를 위한 경량 마이크로블로그 (오픈 소스, AGPL-3.0)
  • Hackers' Pub: 소프트웨어 엔지니어를 위한 연합우주 블로그 플랫폼 (오픈 소스, AGPL-3.0)
  • Encyclia: ORCID 학술 기록을 ActivityPub을 통해 제공하는 브리지 서비스

🚀 Fedify가 제공하는 가치

  • 개발 시간 80% 단축: ActivityPub의 복잡한 구현 대신 검증된 프레임워크 활용
  • 즉각적인 연합우주 호환성: Mastodon, Misskey, Pleroma, Pixelfed, PeerTube 등 다양한 연합우주 서비스와 즉시 호환
  • 전문 기술 지원: ActivityPub 및 연합 프로토콜 전문가의 직접 지원
  • 맞춤형 개발: 귀사의 특정 요구사항에 맞는 맞춤형 기능 개발

🤝 가능한 협력 모델

  • 맞춤형 컨설팅 및 통합 지원: 귀사 플랫폼에 #Fedify 통합을 위한 전문적 지원
  • 맞춤형 기능 개발 의뢰: 귀사에 필요한 특정 기능의 개발 및 구현
  • 장기적인 기술 파트너십: 지속적인 개발 및 유지보수를 위한 장기 협력 관계

🌟 Fedify와 협력했을 때의 이점

  • 기술적 이점: 자체 구현 대비 시간과 리소스 절약
  • 브랜드 이미지: 오픈 소스 생태계 지원을 통한 기업 이미지 강화
  • 분산형 소셜 네트워크 진입: 연합우주 생태계에 쉽게 참여
  • 경쟁 우위: 소셜 기능을 통한 제품 경쟁력 강화

📩 관심이 있으신가요?

ActivityPub 구현을 고려 중이시거나, Fedify 프로젝트와 협력하고 싶으시다면 연락 주세요:

귀사의 요구사항과 목표에 맞는 맞춤형 협력 방안을 함께 모색하겠습니다.

Building ActivityPubBuilding ActivityPubGhost is federating over ActivityPub to become part of the world’s largest publishing network

Fedify is looking for new partnership opportunities!

:fedify: What is Fedify?

#Fedify is an #ActivityPub-based federated server framework that helps developers easily integrate their applications with the #fediverse, a decentralized social network. It simplifies the complex implementation of the ActivityPub protocol, significantly reducing development time. Fedify is an open-source project available under the MIT license.

💼 Projects using Fedify

Various projects are already leveraging Fedify:

  • Ghost: A professional publishing platform with millions of users, open source under MIT license, and a major sponsor and partner of Fedify.
  • Hollo: A lightweight microblogging platform for individual users (open source, AGPL-3.0)
  • Hackers' Pub: A fediverse blogging platform for software engineers (open source, AGPL-3.0)
  • Encyclia: A bridge service that makes ORCID academic records available via ActivityPub

🚀 Value provided by Fedify

  • 80% development time reduction: Utilize a proven framework instead of complex ActivityPub implementation
  • Immediate fediverse compatibility: Instant compatibility with various fediverse services including Mastodon, Misskey, Pleroma, Pixelfed, PeerTube, etc.
  • Expert technical support: Direct support from ActivityPub and Federation protocol experts
  • Custom development: Tailored feature development to meet your specific requirements

🤝 Potential collaboration models

  • Custom consulting and integration support: Professional assistance for integrating Fedify into your platform
  • Custom feature development: Development and implementation of specific features needed for your platform
  • Long-term technical partnership: Long-term collaboration for continuous development and maintenance

🌟 Benefits of collaborating with Fedify

  • Technical advantage: Save time and resources compared to in-house implementation
  • Brand image: Enhance corporate image through support of the open-source ecosystem
  • Entry to decentralized social networks: Easily participate in the fediverse ecosystem
  • Competitive edge: Strengthen product competitiveness through social features

📩 Interested?

If you're considering implementing ActivityPub or wish to collaborate with the Fedify project, please get in touch:

We're excited to explore customized collaboration opportunities that align with your requirements and goals.

Building ActivityPubBuilding ActivityPubGhost is federating over ActivityPub to become part of the world’s largest publishing network