Social Web

Fedify: Building ActivityPub servers without the pain

H.2215 (Ferrer)
Hong Minhee
<p>Implementing ActivityPub looks simple at first—it's just JSON over HTTP, right? Then you hit JSON-LD context resolution. Then HTTP Signature verification fails on Mastodon but works on Misskey. Then you realize the spec spans hundreds of pages across W3C documents and <a href="https://w3id.org/fep/">FEPs</a> (Fediverse Enhancement Proposals), and every implementation interprets them differently.</p> <p>I went through this pain building <a href="https://docs.hollo.social/">Hollo</a>, a single-user microblogging server. Halfway through, I realized I was building a framework instead of an app. So I extracted that framework and called it Fedify.</p> <p><a href="https://fedify.dev/">Fedify</a> is an opinionated ActivityPub framework for TypeScript. It handles the protocol plumbing so you can focus on your application logic.</p> <p>In this talk, I'll cover:</p> <ul> <li> <p><em>Type-safe vocabulary:</em> The Activity Vocabulary spec is loosely defined, but Fedify maps it to strict TypeScript types. Your IDE knows that <code>Note.content</code> is a <code>LanguageString</code>, and calling <code>await create.getActor()</code> returns an <code>Actor</code> object. No more guessing at property shapes.</p> </li> <li> <p><em>Comprehensive signature support:</em> Fedify implements four authentication mechanisms—HTTP Signatures (draft-cavage), HTTP Message Signatures (RFC 9421), Linked Data Signatures, and Object Integrity Proofs (FEP-8b32). For HTTP Signatures, it uses <a href="https://swicg.github.io/activitypub-http-signature/#how-to-upgrade-supported-versions">double-knocking</a>: trying RFC 9421 first, falling back to draft-cavage if rejected, and remembering the preference. This kind of interoperability work is exactly what you shouldn't have to do yourself.</p> </li> <li> <p><em>Framework-agnostic design:</em> Fedify works as middleware for Hono, Express, Fastify, Next.js, or any framework that speaks <code>Request</code>/<code>Response</code>. Bring your own database, ORM, and auth—Fedify only needs a key–value store for caching.</p> </li> <li> <p><em>CLI toolchain:</em> The <code>fedify inbox</code> command spins up an ephemeral server to receive and inspect activities. <code>fedify lookup</code> fetches any ActivityPub object by URL or fediverse handle—including from servers that require <a href="https://swicg.github.io/activitypub-http-signature/#authorized-fetch">authorized fetch</a>. No need to create throwaway accounts on production instances.</p> </li> </ul> <p>I'll also share production stories: <a href="https://activitypub.ghost.org/day-4/">Ghost chose Fedify</a> for federating their publishing platform rather than implementing the protocol themselves. Hollo demonstrates single-user microblogging with full Mastodon API compatibility. <a href="https://hackers.pub/">Hackers' Pub</a> shows how a developer community can integrate with the fediverse.</p> <p>Whether you're building a new federated service or adding ActivityPub to an existing app, this talk will show you how Fedify turns months of protocol wrangling into days of actual development.</p>

Additional information

Live Stream https://live.fosdem.org/watch/h2215
Type devroom
Language English

More sessions

1/31/26
Social Web
Matthias Pfefferle
H.2215 (Ferrer)
<p>WordPress joined the fediverse more than 15 years ago and is still the underdog, but the potential is huge, after all, nearly 40% of the internet is powered by WordPress.</p> <p>WordPress doesn’t come from the same place as social platforms. Unlike platforms built purely for social interaction, WordPress is driven by a very different set of needs, priorities and expectations. I want to give a few insights into how running your own ActivityPub instance can feel as easy as installing a plugin ...
1/31/26
Social Web
Hannah Aubry
H.2215 (Ferrer)
<p>The social web is bigger than software. It’s a movement to build a liberated internet for the people, and it will take all of us working together to deliver on that promise. </p> <p>Mastodon is a decentralised social networking platform powered by free software which allows users and institutions to create and join independent communities. It's also the nonprofit foundation that supports them, and looking after the humans of the social web is core to the Mastodon foundation’s mission. If ...
1/31/26
Social Web
Benjamin Bellamy
H.2215 (Ferrer)
<p>The web is facing a critical moment. In an era of geopolitical fragmentation and relentless platform <em><a href="https://en.wikipedia.org/wiki/Enshittification">enshittification</a></em>, we cannot afford to remain dependent on Big Tech gatekeepers for our digital voices. The Social Web offers an alternative—but only if we actively claim it.</p> <p>We'll show you how to establish genuine digital sovereignty by federating different content types across the Fediverse. Through live demos of ...
1/31/26
Social Web
Björn Staschen
H.2215 (Ferrer)
<p>The German-European initiative Save Social proposes a 25 minutes session focused on broadening the involvement of society in the development and stewardship of the open social web. Despite immense progress in establishing open alternatives like Mastodon or Friendica, today's open social web has struggled to connect with and empower the wider public, often because structural support has concentrated on technical advancements rather than inclusive engagement and content diversity. A handful of ...
1/31/26
Social Web
Evan Prodromou
H.2215 (Ferrer)
<p>Many ActivityPub servers have a feature to follow a hashtag locally -- subscribing to receive all the content with a particular hashtag that your server knows about, as it arrives. Could we provide a similar feature across the Fediverse? tags.pub is a project to implement that feature -- collecting tagged content and redistributing it by hashtag. In this talk, Evan will discuss the motivations behind tags.pub, its implementation, and outline future steps for global hashtag services.</p>
1/31/26
Social Web
Paul Fuxjäger
H.2215 (Ferrer)
<p>We will demo two small prototypes that are aimed at showcasing that a combination of domain-based identities and self-sovereign identities may be useful to help increase long-term stability of relations within the fediverse - in case DNS-based redirect/move methods fail.</p> <p>The core idea is to work towards something we like to refer to as ‘cross-network coherence’ of open social web identity: representations that are comprised of elements from both DNS and DID:PLC which are ...
1/31/26
Social Web
Django Doucet
H.2215 (Ferrer)
<p>Since Mastodon, a prominent adopter of ActivityPub, developed its own client API, it has been embraced by various projects, even reaching beyond microblogging platforms. Despite its potential, the ActivityPub Client-to-Server API has received minimal attention, leading many platform developers to overlook it in favour of building bespoke or third-party solutions. </p> <p>My talk will explore the unfulfilled promise of a general-purpose client built on ActivityPub's Client API. By developing a ...