Fedify: an ActivityPub server framework's avatar

Fedify: an ActivityPub server framework

@fedify@hollo.social · 8 following · 629 followers

:fedify: Fedify is a TypeScript library for building federated server apps powered by ActivityPub and other standards, so-called fediverse. It aims to eliminate the complexity and redundant boilerplate code when building a federated server app, so that you can focus on your business logic and user experience.

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@fedify@hollo.social

🎉 Excited to announce that is now on Open Collective! Support the project's development starting at:

  • Backer (from $5/mo)
  • Supporter (from $25/mo)
  • Sponsor (from $100/mo)
  • Corporate Sponsor (from $500/mo)
  • Custom donations welcome

Your support will help us maintain and improve Fedify. Check it out here:

https://opencollective.com/fedify

:fedify:

Fedify's Open Collective page showing the project logo, description as “A TypeScript library for building federated server apps powered by ActivityPub and other standards”, and five contribution tiers starting from $5/month Backer to $500/month Corporate Sponsor, with custom contribution options available.
ALT text detailsFedify's Open Collective page showing the project logo, description as “A TypeScript library for building federated server apps powered by ActivityPub and other standards”, and five contribution tiers starting from $5/month Backer to $500/month Corporate Sponsor, with custom contribution options available.
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@fedify@hollo.social

Fedify is an server framework in & . It aims to eliminate the complexity and redundant boilerplate code when building a federated server app, so that you can focus on your business logic and user experience.

The key features it provides currently are:

If you're curious, take a look at the website! There's comprehensive docs, a demo, a tutorial, example code, and more:

https://fedify.dev/

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@fedify@hollo.social

Hello, ! It's the official fedi account of the Fedify, an server framework!

Chris Trottier's avatar
Chris Trottier

@atomicpoet@atomicpoet.org

Two new features are coming to #Fedify! Both have to do with controls over domain names:

  1. Different domains for WebFinger handles and server URIs.
  2. Canonical origin support to explicitly set your server’s authoritative domain

https://hollo.social/@fedify/01953693-1afd-7430-988a-23d649099e1c

@fediversenews

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@fedify@hollo.social · Reply to Fedify: an ActivityPub server framework's post

Fedifyの関連プロジェクトをご紹介したいと思います。ActivityPubアプリケーション開発をより簡単にするツール群です:

Fedify :fedify:

Fedify@fedify)はActivityPubやその他のフェディバース標準を活用する連合型サーバーアプリケーションを構築するためのTypeScriptライブラリです。Activity Vocabularyの型安全なオブジェクト、WebFingerクライアント・サーバー、HTTP Signaturesなどを提供し、ボイラープレートコードを削減してアプリケーションロジックに集中できるようにします。

Hollo :hollo:

Hollo@hollo)はFedifyで動作するお一人様用マイクロブログサーバーです。個人向けに設計されていますが、ActivityPubを通じて完全に連合化されており、フェディバース全体のユーザーと交流することができます。HolloはMastodon互換APIを実装しているため、独自のウェブインターフェースがなくても、ほとんどのMastodonクライアントと互換性があります。

Holloはまた、正式リリース前の最新Fedify機能をテストする実験場としても活用されています。

BotKit :botkit:

BotKit@botkit)は私たちの最も新しいメンバーで、ActivityPubボットを作成するために特別に設計されたフレームワークです。従来のMastodonボットとは異なり、BotKitはプラットフォーム固有の制限(文字数制限など)に縛られない独立したActivityPubサーバーを作成します。

BotKitのAPIは意図的にシンプルに設計されており、単一のTypeScriptファイルで完全なボットを作成できます!


これら三つのプロジェクトはすべて@fedify-dev GitHubオーガニゼーションでオープンソースとして公開されています。それぞれ異なる目的を持っていますが、ActivityPub開発をより身近にし、フェディバースのエコシステムを拡大するという共通の目標を共有しています。

これらのプロジェクトを試してみたり、開発に貢献したりすることに興味がある場合は、以下をご覧ください:

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@fedify@hollo.social · Reply to Fedify: an ActivityPub server framework's post

자매 프로젝트들을 소개해 드리고자 합니다. 애플리케이션 개발을 더 쉽게 만들어주는 관련 도구들입니다:

Fedify :fedify:

Fedify(@fedify)는 ActivityPub와 다른 () 표준을 기반으로 연합 서버 애플리케이션을 구축하기 위한 라이브러리입니다. Activity Vocabulary를 위한 타입 안전한 객체, WebFinger 클라이언트·서버, HTTP Signatures 등를 제공하여 반복적인 코드를 줄이고 애플리케이션 로직에 집중할 수 있게 해줍니다.

Hollo :hollo:

Hollo(@hollo)는 Fedify로 구동되는 1인 사용자용 마이크로블로깅 서버입니다. 1인 사용자를 위해 설계되었지만, ActivityPub를 통해 완전히 연합되어 연합우주 전체의 사용자들과 상호작용할 수 있습니다. Hollo는 Mastodon 호환 API를 구현하여 자체 웹 인터페이스 없이도 대부분의 Mastodon 클라이언트와 호환됩니다.

Hollo는 또한 정식 출시 전에 최신 Fedify 기능을 테스트하는 실험장으로도 활용되고 있습니다.

BotKit :botkit:

BotKit(@botkit)은 저희의 가장 새로운 구성원으로, ActivityPub 봇을 만들기 위해 특별히 설계된 프레임워크입니다. 전통적인 Mastodon 봇과 달리, BotKit은 플랫폼별 제한(글자 수 제한 등)에 구애받지 않는 독립적인 ActivityPub 서버를 만듭니다.

BotKit의 API는 의도적으로 단순하게 설계되어 단일 TypeScript 파일로 완전한 봇을 만들 수 있습니다!


세 프로젝트 모두 @fedify-dev GitHub 조직에서 오픈 소스로 공개되어 있습니다. 각기 다른 목적을 가지고 있지만, ActivityPub 개발을 더 접근하기 쉽게 만들고 연합우주 생태계를 확장한다는 공통된 목표를 공유합니다.

이러한 프로젝트를 사용해보거나 개발에 기여하는 데 관심이 있으시다면, 다음을 확인해보세요:

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@fedify@hollo.social

We'd like to introduce the project family—a set of related tools that make building applications more accessible:

Fedify :fedify:

Fedify (@fedify) is a library for building federated server applications powered by ActivityPub and other standards. It provides type-safe objects for Activity Vocabulary, WebFinger client/server, HTTP Signatures, and more—eliminating boilerplate code so you can focus on your application logic.

Hollo :hollo:

Hollo (@hollo) is a single-user microblogging server powered by Fedify. While designed for individual users, it's fully federated through ActivityPub, allowing interaction with users across the fediverse. implements Mastodon-compatible APIs, making it compatible with most Mastodon clients without needing its own web interface.

Hollo also serves as our testing ground for bleeding-edge Fedify features before they're officially released.

BotKit :botkit:

BotKit (@botkit) is our newest family member—a framework specifically designed for creating ActivityPub bots. Unlike traditional Mastodon bots, creates standalone ActivityPub servers that aren't constrained by platform-specific limitations (like character counts).

BotKit's API is intentionally simple—you can create a complete bot in a single TypeScript file!


All three projects are open source and hosted under the @fedify-dev GitHub organization. While they serve different purposes, they share common goals: making ActivityPub development more accessible and expanding the fediverse ecosystem.

If you're interested in trying any of these projects or contributing to their development, check out:

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@fedify@hollo.social

We're excited to announce two major features coming in 1.5.0, focused on giving you more control over domain names in your federated apps:

Separate WebFinger Host from Server Origin

Want different domains for your WebFinger handles and server URIs? Fedify 1.5.0 will let you use domains like @alice@example.com as fediverse handles while serving content from https://ap.example.com. This gives you more flexibility in how you structure your federated services.

Canonical Origin Support

Need to ensure consistent URLs across your infrastructure? The new canonical origin support lets you explicitly set your server's authoritative domain. This is particularly useful when running behind reverse proxies or load balancers—no more unexpected URLs generated from internal hostnames.


These features represent our ongoing commitment to making Fedify more flexible and production-ready.

Can't wait to try these features? You can experiment with them today using our unstable release v1.5.0-dev.680+562e3dc0 (JSR & npm). Keep in mind that this is an unstable release intended for testing—use it in production at your own risk.

Otherwise, stay tuned for the stable Fedify 1.5.0 release!

Separating WebFinger host from the server origin

This API is available since Fedify 1.5.0.

Sometimes you may want to use different domain names for WebFinger handles (i.e., fediverse handles) and the server origin. For example, you may want to use https://ap.example.com/actors/alice as an actor URI but want to use @alice@example.com as its fediverse handle.

In such cases, you can set the handleHost different from the webOrigin in the origin option. The handleHost is used to construct the WebFinger handles, and the webOrigin is used to construct the URLs in the Context object:

const federation = createFederation({
  origin: {
    handleHost: "example.com",
    webOrigin: "https://ap.example.com",
  },
});

NOTE

Even if you set the handleHost different from the webOrigin, the other fediverse handle with the same domain name as the webOrigin will still be recognized.

In the above example, two fediverse handles are recognized as the same:

• @alice@example.com
• @alice@ap.example.com
ALT text detailsSeparating WebFinger host from the server origin This API is available since Fedify 1.5.0. Sometimes you may want to use different domain names for WebFinger handles (i.e., fediverse handles) and the server origin. For example, you may want to use https://ap.example.com/actors/alice as an actor URI but want to use @alice@example.com as its fediverse handle. In such cases, you can set the handleHost different from the webOrigin in the origin option. The handleHost is used to construct the WebFinger handles, and the webOrigin is used to construct the URLs in the Context object: const federation = createFederation({ origin: { handleHost: "example.com", webOrigin: "https://ap.example.com", }, }); NOTE Even if you set the handleHost different from the webOrigin, the other fediverse handle with the same domain name as the webOrigin will still be recognized. In the above example, two fediverse handles are recognized as the same: • @alice@example.com • @alice@ap.example.com
Explicitly setting the canonical origin

This API is available since Fedify 1.5.0.

Or you can explicitly set the canonical origin of the server by passing the origin option to the createFederation() function. The origin option is either a string or a FederationOrigin object, which consists of two fields: handleHost and webOrigin.

For example, if you want to set the canonical origin to https://example.com, you can pass the string:

const federation = createFederation({
  origin: "https://example.com",
});

NOTE

The origin option has to include the leading https:// or http:// scheme.

Such a configuration leads the constructed URLs using Context to use the canonical origin instead of the origin from the incoming HTTP requests, which avoids constructing unexpected URLs when a request bypasses a reverse proxy or a load balancer.

CAUTION

For example, suppose that your federated server (upstream) is accessible at the http://1.2.3.4:8000 and your load balancer (downstream) is accessible at the https://example.com and forwards the requests to the upstream server. In this case, you should set the canonical origin to https://example.com to construct the correct URLs. Otherwise, when some malicious actor directly sends a request to the upstream server, the constructed URLs will start with http://1.2.3.4:8000 instead of https://example.com, which can lead to security issues.
ALT text detailsExplicitly setting the canonical origin This API is available since Fedify 1.5.0. Or you can explicitly set the canonical origin of the server by passing the origin option to the createFederation() function. The origin option is either a string or a FederationOrigin object, which consists of two fields: handleHost and webOrigin. For example, if you want to set the canonical origin to https://example.com, you can pass the string: const federation = createFederation({ origin: "https://example.com", }); NOTE The origin option has to include the leading https:// or http:// scheme. Such a configuration leads the constructed URLs using Context to use the canonical origin instead of the origin from the incoming HTTP requests, which avoids constructing unexpected URLs when a request bypasses a reverse proxy or a load balancer. CAUTION For example, suppose that your federated server (upstream) is accessible at the http://1.2.3.4:8000 and your load balancer (downstream) is accessible at the https://example.com and forwards the requests to the upstream server. In this case, you should set the canonical origin to https://example.com to construct the correct URLs. Otherwise, when some malicious actor directly sends a request to the upstream server, the constructed URLs will start with http://1.2.3.4:8000 instead of https://example.com, which can lead to security issues.
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@fedify@hollo.social

The web interface of the fedify inbox command has been slightly updated. This change will be included in the next minor release, Fedify 1.5.0.

The Fedify logo with the cute dinosaur is now displayed at the top of  the page. You can easily copy the fediverse handle of the ephemeral actor.
ALT text detailsThe Fedify logo with the cute dinosaur is now displayed at the top of the page. You can easily copy the fediverse handle of the ephemeral actor.
ꙮ cúmplice do céu's avatar
ꙮ cúmplice do céu

@cochise@social.subversida.de · Reply to Drado, The Hobbit (ver.: 4.0)'s post

@drado_ribeiro @zhanglao acho que a maior vantagem de JS seria usar o Fedify.

洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@hongminhee@hollo.social

Today's my work on : Support PEM-PKCS#1 besides PEM-SPKI for RSA public keys.

Although the vast majority of ActivityPub software encodes RSA public keys in PEM-SPKI format, some software encodes RSA public keys in PEM-PKCS format (see: https://github.com/fedify-dev/hollo/pull/109#issuecomment-2662591619). Fedify currently only accepts PEM-SPKI format, so it needs to accept PEM-PKCS format as well for better interoperability.

https://github.com/fedify-dev/fedify/issues/209

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@fedify@hollo.social · Reply to Fedify: an ActivityPub server framework's post

📢 Fedifyで独自のフェディバースサーバーを構築しましょう!

FedifyはActivityPubプロトコルの実装を簡単にするTypeScriptフレームワークです。連合プロトコルの複雑な実装に困っていませんか?Fedifyがお手伝いします!

✨ 主な機能

🔧 CLIツール

🚀 ランタイムサポート

📚 学習が簡単

MITライセンスで自由に利用可能なオープンソースプロジェクトです!

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@fedify@hollo.social · Reply to Fedify: an ActivityPub server framework's post

📢 여러분만의 서버를 Fedify로 만들어보세요!

Fedify 프로토콜 구현을 도와주는 프레임워크입니다. 복잡한 연합 프로토콜을 쉽게 구현하고 싶으신가요? Fedify가 도와드립니다!

✨ 주요 기능

🔧 CLI 도구

🚀 런타임 지원

📚 배우기 쉽습니다

오픈소스 라이선스로 누구나 자유롭게 사용할 수 있습니다!

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@fedify@hollo.social

Build your own server with !

Fedify is a framework that simplifies implementation. Want to build a federated server without the complexity? Fedify has got you covered!

✨ Key features

🔧 CLI toolchain

🚀 Runtime support

📚 Easy to learn

Available under the license—free and open source!

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@fedify@hollo.social · Reply to Fedify: an ActivityPub server framework's post

📢 Fedifyで独自のフェディバースサーバーを構築しましょう!

FedifyはActivityPubプロトコルの実装を簡単にするTypeScriptフレームワークです。連合プロトコルの複雑な実装に困っていませんか?Fedifyがお手伝いします!

✨ 主な機能

🔧 CLIツール

🚀 ランタイムサポート

📚 学習が簡単

MITライセンスで自由に利用可能なオープンソースプロジェクトです!

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@fedify@hollo.social · Reply to Fedify: an ActivityPub server framework's post

📢 여러분만의 서버를 Fedify로 만들어보세요!

Fedify 프로토콜 구현을 도와주는 프레임워크입니다. 복잡한 연합 프로토콜을 쉽게 구현하고 싶으신가요? Fedify가 도와드립니다!

✨ 주요 기능

🔧 CLI 도구

🚀 런타임 지원

📚 배우기 쉽습니다

오픈소스 라이선스로 누구나 자유롭게 사용할 수 있습니다!

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@fedify@hollo.social

Build your own server with !

Fedify is a framework that simplifies implementation. Want to build a federated server without the complexity? Fedify has got you covered!

✨ Key features

🔧 CLI toolchain

🚀 Runtime support

📚 Easy to learn

Available under the license—free and open source!

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@fedify@hollo.social

Excited to share that Fedify CLI is now available on Scoop for users! You can easily install it with scoop install fedify. One more way to get started with development!

https://github.com/ScoopInstaller/Main/pull/6371

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@fedify@hollo.social

Love building federated apps with ? Consider supporting its development! We have tiers starting from just $5/month, and every contribution helps keep the project sustainable. :fedify:

https://opencollective.com/fedify

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@fedify@hollo.social

Following Mastodon's plan to adopt HTTP Message Signatures (RFC 9421), we will implement the same standard in . We'll use “double-knocking” to maintain compatibility with servers using older signature versions (draft-cavage-http-signatures-12).

silverpill's avatar
silverpill

@silverpill@mitra.social · Reply to Fedify: an ActivityPub server framework's post

@fedify

>The primary technique we recommend is double-knocking. First, try generating or verifying an HTTP Signature with one version, ideally (but not necessarily) the latest. If the remote server rejects that signature, eg with an HTTP 401 response, or the incoming signature doesn't verify, try with another version. Repeat until a signature passes or you've tried all supported versions.

Do they recommend making two requests instead of one? This is ridiculous. Today no one supports RFC9421, and everyone supports Draft 12, so there is no reason to try RFC9421 version first. Once RFC9421 is widely supported, we can simply switch to RFC9421.

One can also add a boolean flag to actor document. If supportsRFC9421 is true, inbox deliveries can be signed with RFC9421.

Julian Fietkau's avatar
Julian Fietkau

@julian@fietkau.social · Reply to @reiver ⊼ (Charles) :batman:'s post

@reiver @andypiper @rwg @andresmh Re: which networks, I haven't personally done any academic research about social platforms. Pondering questions, yes, written anything down, no.

But my FOSS work has been centered on ActivityPub lately: fietkau.software/tag/fediverse

I have a project cooking that I think you'll like, for which I'm hoping to run a semi-public alpha test within the next few months. Join the @fedify Matrix room at -users:matrix.org to witness my implementation struggles. 👍

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@fedify@hollo.social

Following Mastodon's plan to adopt HTTP Message Signatures (RFC 9421), we will implement the same standard in . We'll use “double-knocking” to maintain compatibility with servers using older signature versions (draft-cavage-http-signatures-12).

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@fedify@hollo.social

A milestone worth celebrating— just hit 100+ releases! From day one, we've been committed to building a robust framework, and each release has brought us closer to that goal. Here's to many more releases as we continue growing the together! :fedify:

Screenshot shows release stats for Fedify: latest version 1.4.1 was released 6 minutes ago, with a green tag showing “Latest.” Total release count shows “+ 100 releases.” A green icon resembling a tag appears next to the Fedify name.
ALT text detailsScreenshot shows release stats for Fedify: latest version 1.4.1 was released 6 minutes ago, with a green tag showing “Latest.” Total release count shows “+ 100 releases.” A green icon resembling a tag appears next to the Fedify name.
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@fedify@hollo.social

We're considering adding custom background task support to 1.5.0.

Want to use Fedify's worker system for your own background tasks? We're exploring ways to let you register and process custom tasks alongside jobs.

Check out the proposal: https://github.com/fedify-dev/fedify/issues/206.

Key considerations:

  • Should this be part of Fedify's scope?
  • Quick API extension vs complete worker architecture redesign
  • Integration with existing task queue systems

We'd love to hear your thoughts! Do you need this feature? How would you use it? Share your feedback in the issue thread.

malte's avatar
malte

@malte@radikal.social

I decided to become a monthly backer of @fedify. I'm not a programmer, but I understand they're doing some of the important behind-the-scenes work in the fediverse that helps all the other more visible projects like federate with other platforms. opencollective.com/fedify

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@fedify@hollo.social

We're considering adding custom background task support to 1.5.0.

Want to use Fedify's worker system for your own background tasks? We're exploring ways to let you register and process custom tasks alongside jobs.

Check out the proposal: https://github.com/fedify-dev/fedify/issues/206.

Key considerations:

  • Should this be part of Fedify's scope?
  • Quick API extension vs complete worker architecture redesign
  • Integration with existing task queue systems

We'd love to hear your thoughts! Do you need this feature? How would you use it? Share your feedback in the issue thread.

モナコ広告 :fedibird1: @技術・雑談's avatar
モナコ広告 :fedibird1: @技術・雑談

@monaco_koukoku@fedibird.com

資料を置きました!

開発用ActivityPubサーバーの構築方法(第7回FediLUG勉強会) | hira / モナコ広告
docswell.com/s/monaco_koukoku/

モナコ広告 :fedibird1: @技術・雑談's avatar
モナコ広告 :fedibird1: @技術・雑談

@monaco_koukoku@fedibird.com


6/1の技術書典18@池袋。OSC名古屋の翌日(!)
Thinking Penguin Magazineと、Fedifyの解説本も頒布予定とのこと

もちもちずきん :teto_zuho: 🍆's avatar
もちもちずきん :teto_zuho: 🍆

@Yohei_Zuho@mstdn.y-zu.org

ActivityPubサーバーを作っています
Fedifyを使っている

もちもちずきん :teto_zuho: 🍆's avatar
もちもちずきん :teto_zuho: 🍆

@Yohei_Zuho@mstdn.y-zu.org

Fedify
TSで使用できるフレームワーク
APに基づくリモートサーバーとの通信をやってくれる

Esurio's avatar
Esurio

@esurio1673@c.koliosky.com

Fedify: https://fedify.dev
BotKit:
https://botkit.fedify.dev (Denoオンリー)

Esurio's avatar
Esurio

@esurio1673@c.koliosky.com

Tips: Fedify CLIにはトンネリングの機能がある

← Newer
Older →