Search

Items tagged with: activitypub


Week in Fediverse 2026-07-24


Servers

- WriteFreely v0.17.0
- Ktistec v3.9.0
- Vernissage Server v1.41.0
- GoToSocial v0.22.1
- Bookwyrm v0.9.1
- PeerTube v8.2.3
- Lemmy v0.19.20
- ties v0.3
- ActivityPub for WordPress v9.1.0
- NeoDB v0.17.2
- NodeBB v4.14.2
- PieFed v1.7.7
- FitPub v1.2.1
- ActivityForge: ForgeFed implementation in Rust

Clients

- PleromaFE v2.11.1
- Aria v1.5.9
- Pixelix v5.0.0
- Summit v1.83.0
- Jerboa v0.0.88
- Holos v1.15.0
- Rocinante v1.1.8

Tools and Plugins

- Superblock v3.1 (Hubzilla addon)
- Polls for ActivityPub v1.0.10 (WordPress plugin)

Protocol

- FEP-de8d: Emoji Catalogs

Articles

- I added ActivityPub to this blog

-----

#WeekInFediverse #Fediverse #ActivityPub

Previous edition: mitra.social/objects/019f71c0-…


#HolosSocial is different from any other software, not only because your device runs the #ActivityPub server, but mostly because it took every spec from other software and can speak with them.
On #Mastodon, a #PeerTube post becomes a mere link. On Holos, the app reads the AP message and shows the video. Why? Most software ignores AP signals that do not match its own model, where Holos does not.
That is why switching from a blogging view to an image view with a simple tap is possible in the app.


Week in Fediverse 2026-07-17


Servers

- flohmarkt v0.20.0
- Vernissage Server v1.40.0
- FitPub v1.2.0
- Wafrn v2026.07.02
- TinyAP v0.1.11
- NeoDB v0.16.5.0
- PieFed v1.7.6
- Catodon v26.7.0
- Trunk & Tidbits, June 2026 (Mastodon)
- matrix-appservice-activitypub: Turns your Matrix server into a fully functioning ActivityPub server
- Discord–Fediverse Bridge: A self-hosted bridge between Discord forum channels and ActivityPub community actors
- ~petersanchez/honk: Fork of honk

Clients

- PeerTube Mobile v2.2.0
- Photon v2.4.0
- Tesseract v1.5.5
- Aria v1.5.8
- Mitra Mini v0.5.0

Tools and Plugins

- Enable Mastodon Apps v1.6.1 (WordPress plugin)
- Polls for ActivityPub v1.0.9 (WordPress plugin)
- Telegram ↔️ Mastodon Bridge Bot: A Python bot that forwards text messages, photos, and albums from a Telegram chat to your Mastodon account

For developers

- @shootpub/activitypub-types: ActivityPub types package with support for FEP-2277 Activitypub core types (duck typing)

Articles

- The Long Tail of Work Left Until ActivityPub Has E2EE

-----

#WeekInFediverse #Fediverse #ActivityPub

Previous edition: mitra.social/objects/019f4de5-…


Week in Fediverse 2026-07-10


Servers

- Betula v1.8.1
- Stegodon v1.8.6
- Ktistec v3.8.0
- Mitra v5.7.0
- Ibis v0.3.3
- Gathio v1.6.3
- NodeBB v4.14.0
- Wanderer v0.20.0
- Wafrn v2026.07.01
- Gush! v0.0.40
- PieFed v1.7.5
- Harmony v1.4.0

Clients

- Mastodon for iOS v2026.05
- tooi v0.27.0
- Voyager v2.47.4
- Aria v1.5.7
- Holos v1.14.0
- Rocinante v1.1.0
- chan-fe: Imageboard-style frontend for Mitra and Mastodon-compatible fediverse APIs

Tools and Plugins

- tag-federation.online: How Widely Do Hashtags Federate?
- Fedigraph: A dashboard for exploring the fediverse

For developers

- BotKit v0.5.0

Protocol

- FEP-4772: Representing bookmarks
- FEP-521b: Switch the default in FEP-521a to be 76171% cooler

-----

#WeekInFediverse #Fediverse #ActivityPub

Previous edition: mitra.social/objects/019f29a4-…


#Mitra v5.7.0

codeberg.org/silverpill/mitra/…
codeberg.org/silverpill/mitra-…

- Improvements related to groups: adding group description, editing and deleting groups, better navigation.
- Showing total number of voters in polls.
- The "Posts and replies" tab was removed from the profile page, replaced with filters (show reposts / show replies).



Week in Fediverse 2026-07-03


Servers

- TinyAP v0.1.10
- GoToSocial v0.22.0
- Mobilizon v5.2.4
- Bonfire v1.0.5
- PeerTube v8.2.2
- Ktistec v3.7.0
- PieFed v1.7.0
- Mastodon v4.6.3
- Hollo v0.9.6
- ActivityPub for WordPress v9.0.2
- NeoDB v0.16.3
- Wanderer v0.19.3
- Trunk & Tidbits, May 2026 (Mastodon)
- Lemmy Development Update June 2026 and 1.0.0-beta.1

Clients

- Fedilab v3.42.1
- Pachli v3.7.1
- Aria v1.5.5
- Rocinante v1.0.9
- Holos v1.12.0
- Mitra Mini v0.4.2

Tools and Plugins

- FediFetcher v7.1.21
- owncast-emojiwall v2.1.0
- Polls For ActivityPub (WordPress plugin)

For developers

- Why implementing ActivityPub is hard, and why it doesn't have to be (Fedify)

Protocol

- FEP-8c13: Context-Authority Routing with Object Integrity Proofs for Restricted Threads
- FEP-f228: Backfilling conversations (Final comments)
- FEP-7628: Move actor (Final comments)

-----

#WeekInFediverse #Fediverse #ActivityPub

Previous edition: mitra.social/objects/019f058a-…


Why implementing ActivityPub is hard, and why it doesn't have to be


A quiet failure


Picture the moment your server sends its first Follow activity to Mastodon. You read the spec, built the JSON, signed the HTTP request, and POSTed it with care. What comes back is a single line: 401 Unauthorized. No body. No explanation.

What went wrong? Maybe the clock behind your Date header drifted a few minutes. Maybe the hash in your Digest header is off. Maybe you uppercased the (request-target) pseudo-header while building the signing string, or published your public key as PEM where the other side wanted multibase. The remote server won't tell you. So you start reading someone else's server code to debug your own.

I know, because I've been there. Fedify began as a casualty of another project. I set out to build a single-user microblogging server, the one that would later become Hollo, and started implementing ActivityPub from scratch. Somewhere between the signature specs and the JSON-LD, the protocol work swallowed the product, and I put the whole thing down. What I picked back up wasn't the app. It was the framework the app should have had. Fedify shipped first; only then could Hollo exist, built on top of it. (I've told this story at more length in A year with the fediverse.)

ActivityPub development gets hard in a few very specific places. In this post I want to walk through five of them, then show what each one looks like with Fedify. If you've spent time in the fediverse, you'll probably nod along. If you haven't, you may wonder why anyone would do all of this by hand. Either way, the conclusion is the same: nobody has to anymore.

Five scenes

Scene 1: there is more than one standard


ActivityPub servers authenticate each other with HTTP signatures. Except there isn't one signature spec. Most of the fediverse runs on draft-cavage-http-signatures-12, an expired draft that never became a standard. The actual standard exists too: RFC 9421, HTTP Message Signatures. The problem is that you can't know which one a given server accepts until you try.

A real-world implementation therefore has to sign with one spec, see whether it gets rejected, re-sign with the other, and remember per server which one worked so it can skip the dance next time. The fediverse calls this double-knocking. Yes, you get to implement it yourself.

That's still not the end. HTTP signatures only prove who sent a request. For situations like inbox forwarding, where you relay an activity you received to a third party, you need signatures that live on the document itself: Linked Data Signatures and Object Integrity Proofs. Four signature mechanisms in total, and two kinds of keys to manage: RSA and Ed25519.

Scene 2: one document, many shapes


ActivityPub's wire format is JSON-LD, and in JSON-LD the same document can take many shapes. This is easier to show than to explain. Here is a Create activity one server might send:

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "type": "Create",
  "actor": "https://example.com/users/alice",
  "to": "https://www.w3.org/ns/activitystreams#Public",
  "object": {
    "type": "Note",
    "id": "https://example.com/notes/123",
    "content": "Hello, fediverse!"
  }
}

And here is a semantically identical activity from another server:
{
  "@context": ["https://www.w3.org/ns/activitystreams"],
  "type": "Create",
  "actor": {
    "type": "Person",
    "id": "https://example.com/users/alice",
    "preferredUsername": "alice"
  },
  "to": ["as:Public"],
  "object": "https://example.com/notes/123"
}

actor turned from a URI string into an inline object. to turned from a string into an array. object went the other way, from an inline object to a URI. Even the address that means “public” has three valid spellings: https://www.w3.org/ns/activitystreams#Public, as:Public, and plain Public. Your parser has to accept every combination, and which one arrives depends on the sender's implementation.

The spec-compliant answer is to normalize every document with a JSON-LD processor, expansion followed by compaction. In practice many implementations treat it all as “just JSON” and quietly break on whatever shape some server happens to emit. Either way, you end up with defensive code smeared across the whole codebase: is this a string? An array? An object? A URI I have to fetch?

Scene 3: the zombie post


A user publishes a post, spots a typo, and deletes it right away. Your server sends a Create, then a Delete. Thanks to network weather, some receiving server gets the Delete first and the Create second. It ignores the deletion of a post that doesn't exist yet, then dutifully processes the creation of a post that was already deleted. That post now lives on that server forever, while its author believes it's gone.

Then there's scale. With five thousand followers, one post means thousands of HTTP deliveries. Do that inline in the request handler and your publish button takes half a minute to respond, or the server falls over. Fine, use a queue. Deliveries fail, so retry them. On what schedule? Exponential backoff. How many times? And is a 500 Internal Server Error the same kind of failure as a 410 Gone? When do you clean up three thousand followers on a server that no longer exists? Should you keep hammering a host that has been down for days?

At some point it dawns on you that this is no longer protocol implementation. It's distributed systems engineering.

Scene 4: it's not a spec, it's an ecosystem


Even perfect spec compliance doesn't buy you interoperability. A few examples from the field:

  • Mastodon's secure mode requires HTTP signatures on GET requests too (so-called authorized fetch). Now suppose both servers run in that mode. To fetch the other side's public key you must sign your request; to verify your signature, the other side must first fetch your key. Deadlock. The community's workaround is to sign with an “instance actor” that represents the server itself. You won't find that in the spec.
  • Threads can't parse activities whose actor is embedded as an inline object. When sending to Threads, the actor has to be a URI.
  • Lemmy silently rejects Group actors that lack fields Mastodon never asks for, such as a moderators collection linked via attributedTo and a featured collection.
  • Misskey carries vocabulary extensions of its own; quote posts alone go by three different property names across implementations.

The list keeps growing. Interoperability here is not something you finish once and stop thinking about. It's maintenance, forever.

Scene 5: insecure by default


Build it from scratch, and you start out wide open. Skip signature verification on incoming activities and anyone can inject a forged Follow or Delete. Leave the document loader unrestricted and a malicious activity can point it at http://169.254.169.254/ or your internal network, turning your server into an SSRF proxy. Skip origin checks on embedded objects and any server can hand out a document claiming “here's what the Mastodon lead developer said.”

What these traps share is that nothing happens when you fall into them. Everything appears to work. Until someone exploits it.

Ghost ran into this too


If you're thinking “surely our team would manage,” consider Ghost: a leading open-source publishing platform used by thousands of journalists and creators, and a team that set out to build its own ActivityPub support.

We can definitely attest to the problems that Fedify is working hard to solve, because even in just a few weeks of early prototyping we were running into the issues described above right away.

From Alright, let's Fedify


Ghost ended up building its ActivityPub layer on Fedify.

So I put all of it in a framework


Fedify is a TypeScript library for building federated server apps on ActivityPub and the standards around it. It runs on Deno, Node.js, and Bun, and supports edge runtimes like Cloudflare Workers. The design goal hasn't changed since the beginning: keep everything in those five scenes out of application code.

Here are the same five scenes again, this time with Fedify.

Scene 1, revisited: the signature war is the framework's job


Here is everything it takes to put one actor on the fediverse:

import { createFederation, generateCryptoKeyPair, MemoryKvStore } from "@fedify/fedify";
import { Endpoints, Person } from "@fedify/vocab";

const federation = createFederation<void>({
  kv: new MemoryKvStore(),  // Swap for Redis, PostgreSQL, etc. in production
});

federation
  .setActorDispatcher("/users/{identifier}", async (ctx, identifier) => {
    if (identifier !== "alice") return null;
    const keyPairs = await ctx.getActorKeyPairs(identifier);
    return new Person({
      id: ctx.getActorUri(identifier),
      preferredUsername: identifier,
      name: "Alice",
      inbox: ctx.getInboxUri(identifier),
      endpoints: new Endpoints({ sharedInbox: ctx.getInboxUri() }),
      publicKey: keyPairs[0].cryptographicKey,
      assertionMethods: keyPairs.map((keyPair) => keyPair.multikey),
    });
  })
  .setKeyPairsDispatcher(async (ctx, identifier) => {
    // In real code you'd persist these in a database; this shows the gist
    return [await generateCryptoKeyPair()];
  });

The moment this code runs:
  • Every outgoing request gets signed. With an RSA key, Fedify emits HTTP Signatures and Linked Data Signatures; add an Ed25519 key and it attaches Object Integrity Proofs as well. All four mechanisms coexist on a single activity, and each receiver verifies with the strongest one it understands.
  • Fedify does the double-knocking for you: first contact goes out as RFC 9421, a rejection triggers a draft-cavage retry, and the winning spec is cached per server. If the rejection carries an [Accept-Signature challenge] (RFC 9421 §5), Fedify reads it and re-signs with exactly the components the server asked for.
  • Incoming signatures are verified before your code sees anything. An activity that fails verification never reaches your listeners.
  • One bonus. Because you registered an actor dispatcher, you now have a WebFinger (RFC 7033) server, for free. Type @alice@example.com into Mastodon's search box and your actor comes up. You never wrote a line of WebFinger code.


Scene 2, revisited: types instead of JSON-LD


Fedify ships about eighty classes covering the whole Activity Vocabulary plus the major vendor extensions. The classes are typed and immutable, and their accessors absorb the shape differences that JSON-LD allows.

const actor = await ctx.lookupObject("@hongminhee@hollo.social");
if (actor instanceof Person) {
  console.log(actor.name);           // Safe whether it's a string or langString
  const followers = await actor.getFollowers();  // Fetches a URI, unwraps an object
}

[lookupObject()] takes a handle and runs the whole chain for you, WebFinger discovery included. Accessors like getFollowers() behave the same way whether the value is a URI reference or an inline object, and fetched values are cached.

Vendor fragmentation gets stitched up here too. The three competing quote properties (quoteUri, _misskey_quote, quoteUrl) are unified behind one API, next to the emerging FEP-044f quote. Misskey's isCat property exists as a type, so your server can determine cat-ness with full type safety. It sounds like a joke, but a few dozen details of exactly this kind are what interoperability is actually made of.

Scene 3, revisited: the zombie post dies in one line


Delivery infrastructure first. Plug a message queue into createFederation() and delivery moves to the background, with automatic retries under exponential backoff (up to ten attempts by default). When a post goes to thousands of followers, two-stage fan-out kicks in: a single consolidated message enters the queue, and a background worker splits it into per-server delivery tasks. The publish button responds immediately.

Retries create a problem of their own: the same activity can arrive twice. Fedify keeps a 24-hour idempotence cache of processed activities, so duplicates get detected and skipped before they reach your handlers.

As for the zombie post, the fix is one option:

await ctx.sendActivity(
  { identifier: "alice" },
  "followers",           // Collects recipients from your followers collection
  deleteActivity,
  { orderingKey: post.id },  // Same key = in-order delivery per server
);

[Activities that share an orderingKey] are delivered to each receiving server in the order they were sent. A Delete can no longer overtake its Create. Activities with different keys still go out in parallel, so throughput survives.

Fedify also handles dead servers. On a 404 Not Found or 410 Gone, it stops retrying and calls a handler you register. If the delivery went to a shared inbox, you also get the list of followers behind it, so you can prune vanished accounts on the spot. Hosts that fail repeatedly trip a per-host circuit breaker that holds deliveries and probes periodically until the host recovers. It's on by default; there's nothing to configure.

Scene 4, revisited: we track the quirks so you don't


Here is how Fedify disarms the traps from scene 4:

  • Authorized fetch: chain [.authorize()] onto a dispatcher and the verified identity of the requester lands in your callback. Blocklists, private collections, whatever your app needs is plain application logic. The instance-actor deadlock has a supported pattern as well.
  • Threads and inline actors: an activity transformer, enabled by default, rewrites inline actors into URIs on the way out. You don't need to know Threads has this problem.
  • Lemmy's requirements: the custom collection API exposes a moderators collection in a few lines, and Lemmy's JSON-LD context ships preloaded.

When a new quirk surfaces in the wild, the fix lands in Fedify, not in every application separately. Each interoperability lesson gets learned once.

Scene 5, revisited: becoming unsafe takes effort


Fedify's defaults point the other way.

  • Signature verification is something you turn off (for tests), not something you remember to turn on.
  • The document loader refuses private address ranges and loopback out of the box, with DNS rebinding accounted for. To open yourself up to SSRF you have to flip an option whose very name announces it's for testing.
  • When an embedded object's origin differs from its parent document's, the accessor refuses to trust it and re-fetches from the source (based on FEP-fe34). Content spoofing is stopped at the property access level.

In a from-scratch implementation, you have to keep remembering to do things safely. In Fedify, the unsafe path is the one that takes deliberate effort. For a federated server, with its tangle of trust boundaries, that's the right way around.

Your stack stays your stack


“Fine, but what if it doesn't fit our stack?” Fedify was built to fit the stack you already have. There are thirteen web framework integrations: servers like Express, Hono, Fastify, Koa, NestJS, and Elysia, and meta-frameworks like Next.js, Nuxt, SvelteKit, Astro, SolidStart, and Fresh. Middleware handles content negotiation, so the same URL in your existing app serves HTML to browsers and JSON-LD to the fediverse.

Fedify doesn't dictate your database either. For its own storage it asks for one key–value interface, with seven adapters available (Redis, PostgreSQL, MySQL/MariaDB, SQLite, Deno KV, Cloudflare Workers KV, in-memory). Message queues come in eight flavors (PostgreSQL, Redis, AMQP/RabbitMQ, and so on), and you can implement the interface yourself if none fits. Your domain data stays in whatever database and ORM you already use.

Already running federation on another library? There are migration guides with data migration scripts for moving from activitypub-express and friends without losing your existing followers.

The core isn't the ceiling, either. Higher-level packages build on it: [@fedify/relay] gives you a complete ActivityPub relay server in a single function call, and [@fedify/backfill] reconstructs incomplete conversation threads by walking the rest of the fediverse for you.

Tools for the whole development loop


A quieter misery of federated development has always been the missing tooling. Fedify comes with tools for every stage of the loop.

[fedify init] scaffolds a project in one line, and fedify tunnel exposes your local server over HTTPS so you can test against real Mastodon. Activities your server sends can be received by fedify inbox, a disposable inbox server spun up on the spot; whatever other servers publish, you can inspect with fedify lookup. My personal favorite is fedify lookup --authorized-fetch, which generates a one-off key pair and stands up a temporary ActivityPub server just to make a signed request for an object behind secure mode. The CLI is also useful to ActivityPub developers who don't use Fedify at all.

While you write code, an ActivityPub-specific linter (@fedify/lint) catches twenty kinds of interoperability bugs, like an actor missing its inbox. Tests run without the network using mocks from [@fedify/testing]. Once the server is up, attach the debug dashboard (@fedify/debugger) with one line and watch activities and signature verification results in your browser, live. In production there's built-in OpenTelemetry instrumentation (28 span types, 37 metrics) plus a monitoring guide, and when performance matters, [fedify bench], a load-testing tool built for ActivityPub, catches regressions in CI.

As far as I know, no other ActivityPub framework ships even one of the tools in this section.

The documentation is part of the tooling. The official docs run to a thirty-chapter manual and five tutorials, and they go well past API listings. There's an operations chapter with ready-made PromQL queries and alerting rules for watching your queue backlog, and a field-guide chapter that documents de facto conventions, like which property makes your avatar show up in Mastodon, with screenshots. At two in the morning, when federation is broken and you don't know why, this is the difference between a bad night and a short one.

It's already running


Fedify is not a thought experiment. Ghost's ActivityPub service, mentioned above, is built on it. So are Encyclia, which bridges ORCID researcher records into the fediverse; SiliconBeest, running serverless on Cloudflare Workers; Typo Blue, a Korean blogging platform; Hollo, my own single-user microblogging platform; and Hackers' Pub, run by its community. Hollo, by the way, is the app from the beginning of this post: the project I once had to shelve, finished at last on the framework it forced into existence.

The tutorials give a concrete sense of scale. They walk you from a single-file server, a few dozen lines, that Mastodon can follow, through an image sharing service in roughly 750 lines that fully interoperates with Pixelfed (follows, likes, comments), up to a community platform federating both ways with the real lemmy.ml.

The fediverse needs more apps


I didn't build Fedify to mint more ActivityPub experts. Rather the opposite. I believe the fediverse will only grow beyond microblogging when developers can build federated apps without knowing ActivityPub's fine print. Signature spec transitions and JSON-LD compaction are problems that belong inside a framework, not barriers in front of someone with a new idea.

Starting takes one line:

npm init @fedify

Follow the first tutorial and by the end, Mastodon can find your server. If you get stuck, come find us in the Matrix room or GitHub Discussions. See you in the fediverse.


Why implementing ActivityPub is hard, and why it doesn't have to be


A quiet failure


Picture the moment your server sends its first Follow activity to Mastodon. You read the spec, built the JSON, signed the HTTP request, and POSTed it with care. What comes back is a single line: 401 Unauthorized. No body. No explanation.

What went wrong? Maybe the clock behind your Date header drifted a few minutes. Maybe the hash in your Digest header is off. Maybe you uppercased the (request-target) pseudo-header while building the signing string, or published your public key as PEM where the other side wanted multibase. The remote server won't tell you. So you start reading someone else's server code to debug your own.

I know, because I've been there. Fedify began as a casualty of another project. I set out to build a single-user microblogging server, the one that would later become Hollo, and started implementing ActivityPub from scratch. Somewhere between the signature specs and the JSON-LD, the protocol work swallowed the product, and I put the whole thing down. What I picked back up wasn't the app. It was the framework the app should have had. Fedify shipped first; only then could Hollo exist, built on top of it. (I've told this story at more length in A year with the fediverse.)

ActivityPub development gets hard in a few very specific places. In this post I want to walk through five of them, then show what each one looks like with Fedify. If you've spent time in the fediverse, you'll probably nod along. If you haven't, you may wonder why anyone would do all of this by hand. Either way, the conclusion is the same: nobody has to anymore.

Five scenes

Scene 1: there is more than one standard


ActivityPub servers authenticate each other with HTTP signatures. Except there isn't one signature spec. Most of the fediverse runs on draft-cavage-http-signatures-12, an expired draft that never became a standard. The actual standard exists too: RFC 9421, HTTP Message Signatures. The problem is that you can't know which one a given server accepts until you try.

A real-world implementation therefore has to sign with one spec, see whether it gets rejected, re-sign with the other, and remember per server which one worked so it can skip the dance next time. The fediverse calls this double-knocking. Yes, you get to implement it yourself.

That's still not the end. HTTP signatures only prove who sent a request. For situations like inbox forwarding, where you relay an activity you received to a third party, you need signatures that live on the document itself: Linked Data Signatures and Object Integrity Proofs. Four signature mechanisms in total, and two kinds of keys to manage: RSA and Ed25519.

Scene 2: one document, many shapes


ActivityPub's wire format is JSON-LD, and in JSON-LD the same document can take many shapes. This is easier to show than to explain. Here is a Create activity one server might send:

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "type": "Create",
  "actor": "https://example.com/users/alice",
  "to": "https://www.w3.org/ns/activitystreams#Public",
  "object": {
    "type": "Note",
    "id": "https://example.com/notes/123",
    "content": "Hello, fediverse!"
  }
}

And here is a semantically identical activity from another server:
{
  "@context": ["https://www.w3.org/ns/activitystreams"],
  "type": "Create",
  "actor": {
    "type": "Person",
    "id": "https://example.com/users/alice",
    "preferredUsername": "alice"
  },
  "to": ["as:Public"],
  "object": "https://example.com/notes/123"
}

actor turned from a URI string into an inline object. to turned from a string into an array. object went the other way, from an inline object to a URI. Even the address that means “public” has three valid spellings: https://www.w3.org/ns/activitystreams#Public, as:Public, and plain Public. Your parser has to accept every combination, and which one arrives depends on the sender's implementation.

The spec-compliant answer is to normalize every document with a JSON-LD processor, expansion followed by compaction. In practice many implementations treat it all as “just JSON” and quietly break on whatever shape some server happens to emit. Either way, you end up with defensive code smeared across the whole codebase: is this a string? An array? An object? A URI I have to fetch?

Scene 3: the zombie post


A user publishes a post, spots a typo, and deletes it right away. Your server sends a Create, then a Delete. Thanks to network weather, some receiving server gets the Delete first and the Create second. It ignores the deletion of a post that doesn't exist yet, then dutifully processes the creation of a post that was already deleted. That post now lives on that server forever, while its author believes it's gone.

Then there's scale. With five thousand followers, one post means thousands of HTTP deliveries. Do that inline in the request handler and your publish button takes half a minute to respond, or the server falls over. Fine, use a queue. Deliveries fail, so retry them. On what schedule? Exponential backoff. How many times? And is a 500 Internal Server Error the same kind of failure as a 410 Gone? When do you clean up three thousand followers on a server that no longer exists? Should you keep hammering a host that has been down for days?

At some point it dawns on you that this is no longer protocol implementation. It's distributed systems engineering.

Scene 4: it's not a spec, it's an ecosystem


Even perfect spec compliance doesn't buy you interoperability. A few examples from the field:

  • Mastodon's secure mode requires HTTP signatures on GET requests too (so-called authorized fetch). Now suppose both servers run in that mode. To fetch the other side's public key you must sign your request; to verify your signature, the other side must first fetch your key. Deadlock. The community's workaround is to sign with an “instance actor” that represents the server itself. You won't find that in the spec.
  • Threads can't parse activities whose actor is embedded as an inline object. When sending to Threads, the actor has to be a URI.
  • Lemmy silently rejects Group actors that lack fields Mastodon never asks for, such as a moderators collection linked via attributedTo and a featured collection.
  • Misskey carries vocabulary extensions of its own; quote posts alone go by three different property names across implementations.

The list keeps growing. Interoperability here is not something you finish once and stop thinking about. It's maintenance, forever.

Scene 5: insecure by default


Build it from scratch, and you start out wide open. Skip signature verification on incoming activities and anyone can inject a forged Follow or Delete. Leave the document loader unrestricted and a malicious activity can point it at http://169.254.169.254/ or your internal network, turning your server into an SSRF proxy. Skip origin checks on embedded objects and any server can hand out a document claiming “here's what the Mastodon lead developer said.”

What these traps share is that nothing happens when you fall into them. Everything appears to work. Until someone exploits it.

Ghost ran into this too


If you're thinking “surely our team would manage,” consider Ghost: a leading open-source publishing platform used by thousands of journalists and creators, and a team that set out to build its own ActivityPub support.

We can definitely attest to the problems that Fedify is working hard to solve, because even in just a few weeks of early prototyping we were running into the issues described above right away.

From Alright, let's Fedify


Ghost ended up building its ActivityPub layer on Fedify.

So I put all of it in a framework


Fedify is a TypeScript library for building federated server apps on ActivityPub and the standards around it. It runs on Deno, Node.js, and Bun, and supports edge runtimes like Cloudflare Workers. The design goal hasn't changed since the beginning: keep everything in those five scenes out of application code.

Here are the same five scenes again, this time with Fedify.

Scene 1, revisited: the signature war is the framework's job


Here is everything it takes to put one actor on the fediverse:

import { createFederation, generateCryptoKeyPair, MemoryKvStore } from "@fedify/fedify";
import { Endpoints, Person } from "@fedify/vocab";

const federation = createFederation<void>({
  kv: new MemoryKvStore(),  // Swap for Redis, PostgreSQL, etc. in production
});

federation
  .setActorDispatcher("/users/{identifier}", async (ctx, identifier) => {
    if (identifier !== "alice") return null;
    const keyPairs = await ctx.getActorKeyPairs(identifier);
    return new Person({
      id: ctx.getActorUri(identifier),
      preferredUsername: identifier,
      name: "Alice",
      inbox: ctx.getInboxUri(identifier),
      endpoints: new Endpoints({ sharedInbox: ctx.getInboxUri() }),
      publicKey: keyPairs[0].cryptographicKey,
      assertionMethods: keyPairs.map((keyPair) => keyPair.multikey),
    });
  })
  .setKeyPairsDispatcher(async (ctx, identifier) => {
    // In real code you'd persist these in a database; this shows the gist
    return [await generateCryptoKeyPair()];
  });

The moment this code runs:
  • Every outgoing request gets signed. With an RSA key, Fedify emits HTTP Signatures and Linked Data Signatures; add an Ed25519 key and it attaches Object Integrity Proofs as well. All four mechanisms coexist on a single activity, and each receiver verifies with the strongest one it understands.
  • Fedify does the double-knocking for you: first contact goes out as RFC 9421, a rejection triggers a draft-cavage retry, and the winning spec is cached per server. If the rejection carries an [Accept-Signature challenge] (RFC 9421 §5), Fedify reads it and re-signs with exactly the components the server asked for.
  • Incoming signatures are verified before your code sees anything. An activity that fails verification never reaches your listeners.
  • One bonus. Because you registered an actor dispatcher, you now have a WebFinger (RFC 7033) server, for free. Type @alice@example.com into Mastodon's search box and your actor comes up. You never wrote a line of WebFinger code.


Scene 2, revisited: types instead of JSON-LD


Fedify ships about eighty classes covering the whole Activity Vocabulary plus the major vendor extensions. The classes are typed and immutable, and their accessors absorb the shape differences that JSON-LD allows.

const actor = await ctx.lookupObject("@hongminhee@hollo.social");
if (actor instanceof Person) {
  console.log(actor.name);           // Safe whether it's a string or langString
  const followers = await actor.getFollowers();  // Fetches a URI, unwraps an object
}

[lookupObject()] takes a handle and runs the whole chain for you, WebFinger discovery included. Accessors like getFollowers() behave the same way whether the value is a URI reference or an inline object, and fetched values are cached.

Vendor fragmentation gets stitched up here too. The three competing quote properties (quoteUri, _misskey_quote, quoteUrl) are unified behind one API, next to the emerging FEP-044f quote. Misskey's isCat property exists as a type, so your server can determine cat-ness with full type safety. It sounds like a joke, but a few dozen details of exactly this kind are what interoperability is actually made of.

Scene 3, revisited: the zombie post dies in one line


Delivery infrastructure first. Plug a message queue into createFederation() and delivery moves to the background, with automatic retries under exponential backoff (up to ten attempts by default). When a post goes to thousands of followers, two-stage fan-out kicks in: a single consolidated message enters the queue, and a background worker splits it into per-server delivery tasks. The publish button responds immediately.

Retries create a problem of their own: the same activity can arrive twice. Fedify keeps a 24-hour idempotence cache of processed activities, so duplicates get detected and skipped before they reach your handlers.

As for the zombie post, the fix is one option:

await ctx.sendActivity(
  { identifier: "alice" },
  "followers",           // Collects recipients from your followers collection
  deleteActivity,
  { orderingKey: post.id },  // Same key = in-order delivery per server
);

[Activities that share an orderingKey] are delivered to each receiving server in the order they were sent. A Delete can no longer overtake its Create. Activities with different keys still go out in parallel, so throughput survives.

Fedify also handles dead servers. On a 404 Not Found or 410 Gone, it stops retrying and calls a handler you register. If the delivery went to a shared inbox, you also get the list of followers behind it, so you can prune vanished accounts on the spot. Hosts that fail repeatedly trip a per-host circuit breaker that holds deliveries and probes periodically until the host recovers. It's on by default; there's nothing to configure.

Scene 4, revisited: we track the quirks so you don't


Here is how Fedify disarms the traps from scene 4:

  • Authorized fetch: chain [.authorize()] onto a dispatcher and the verified identity of the requester lands in your callback. Blocklists, private collections, whatever your app needs is plain application logic. The instance-actor deadlock has a supported pattern as well.
  • Threads and inline actors: an activity transformer, enabled by default, rewrites inline actors into URIs on the way out. You don't need to know Threads has this problem.
  • Lemmy's requirements: the custom collection API exposes a moderators collection in a few lines, and Lemmy's JSON-LD context ships preloaded.

When a new quirk surfaces in the wild, the fix lands in Fedify, not in every application separately. Each interoperability lesson gets learned once.

Scene 5, revisited: becoming unsafe takes effort


Fedify's defaults point the other way.

  • Signature verification is something you turn off (for tests), not something you remember to turn on.
  • The document loader refuses private address ranges and loopback out of the box, with DNS rebinding accounted for. To open yourself up to SSRF you have to flip an option whose very name announces it's for testing.
  • When an embedded object's origin differs from its parent document's, the accessor refuses to trust it and re-fetches from the source (based on FEP-fe34). Content spoofing is stopped at the property access level.

In a from-scratch implementation, you have to keep remembering to do things safely. In Fedify, the unsafe path is the one that takes deliberate effort. For a federated server, with its tangle of trust boundaries, that's the right way around.

Your stack stays your stack


“Fine, but what if it doesn't fit our stack?” Fedify was built to fit the stack you already have. There are thirteen web framework integrations: servers like Express, Hono, Fastify, Koa, NestJS, and Elysia, and meta-frameworks like Next.js, Nuxt, SvelteKit, Astro, SolidStart, and Fresh. Middleware handles content negotiation, so the same URL in your existing app serves HTML to browsers and JSON-LD to the fediverse.

Fedify doesn't dictate your database either. For its own storage it asks for one key–value interface, with seven adapters available (Redis, PostgreSQL, MySQL/MariaDB, SQLite, Deno KV, Cloudflare Workers KV, in-memory). Message queues come in eight flavors (PostgreSQL, Redis, AMQP/RabbitMQ, and so on), and you can implement the interface yourself if none fits. Your domain data stays in whatever database and ORM you already use.

Already running federation on another library? There are migration guides with data migration scripts for moving from activitypub-express and friends without losing your existing followers.

The core isn't the ceiling, either. Higher-level packages build on it: [@fedify/relay] gives you a complete ActivityPub relay server in a single function call, and [@fedify/backfill] reconstructs incomplete conversation threads by walking the rest of the fediverse for you.

Tools for the whole development loop


A quieter misery of federated development has always been the missing tooling. Fedify comes with tools for every stage of the loop.

[fedify init] scaffolds a project in one line, and fedify tunnel exposes your local server over HTTPS so you can test against real Mastodon. Activities your server sends can be received by fedify inbox, a disposable inbox server spun up on the spot; whatever other servers publish, you can inspect with fedify lookup. My personal favorite is fedify lookup --authorized-fetch, which generates a one-off key pair and stands up a temporary ActivityPub server just to make a signed request for an object behind secure mode. The CLI is also useful to ActivityPub developers who don't use Fedify at all.

While you write code, an ActivityPub-specific linter (@fedify/lint) catches twenty kinds of interoperability bugs, like an actor missing its inbox. Tests run without the network using mocks from [@fedify/testing]. Once the server is up, attach the debug dashboard (@fedify/debugger) with one line and watch activities and signature verification results in your browser, live. In production there's built-in OpenTelemetry instrumentation (28 span types, 37 metrics) plus a monitoring guide, and when performance matters, [fedify bench], a load-testing tool built for ActivityPub, catches regressions in CI.

As far as I know, no other ActivityPub framework ships even one of the tools in this section.

The documentation is part of the tooling. The official docs run to a thirty-chapter manual and five tutorials, and they go well past API listings. There's an operations chapter with ready-made PromQL queries and alerting rules for watching your queue backlog, and a field-guide chapter that documents de facto conventions, like which property makes your avatar show up in Mastodon, with screenshots. At two in the morning, when federation is broken and you don't know why, this is the difference between a bad night and a short one.

It's already running


Fedify is not a thought experiment. Ghost's ActivityPub service, mentioned above, is built on it. So are Encyclia, which bridges ORCID researcher records into the fediverse; SiliconBeest, running serverless on Cloudflare Workers; Typo Blue, a Korean blogging platform; Hollo, my own single-user microblogging platform; and Hackers' Pub, run by its community. Hollo, by the way, is the app from the beginning of this post: the project I once had to shelve, finished at last on the framework it forced into existence.

The tutorials give a concrete sense of scale. They walk you from a single-file server, a few dozen lines, that Mastodon can follow, through an image sharing service in roughly 750 lines that fully interoperates with Pixelfed (follows, likes, comments), up to a community platform federating both ways with the real lemmy.ml.

The fediverse needs more apps


I didn't build Fedify to mint more ActivityPub experts. Rather the opposite. I believe the fediverse will only grow beyond microblogging when developers can build federated apps without knowing ActivityPub's fine print. Signature spec transitions and JSON-LD compaction are problems that belong inside a framework, not barriers in front of someone with a new idea.

Starting takes one line:

npm init @fedify

Follow the first tutorial and by the end, Mastodon can find your server. If you get stuck, come find us in the Matrix room or GitHub Discussions. See you in the fediverse.


Week in Fediverse 2026-06-26


Servers

- Vernissage Server v1.39.0
- Bookwyrm v0.9.0
- Mastodon v4.6.1
- GoToSocial v0.21.3
- Ktistec v3.6.0
- snac v2.93
- Mitra v5.6.0
- Misskey v2026.6.0
- NeoDB v0.16.2.1

Clients

- Fedilab v3.42.0
- Mastodon for Android v2.13.0
- Voyager 2.47.3
- Tesseract v1.5.4
- Holos v1.10.2
- Phanpy changelog
- Rocinante: A modern, open-source Android client for BookWyrm

For developers

- Fedify v2.3.0
- Masto.js v7.12.0

Articles

- FR#168 – LLMs Join The Fediverse

-----

#WeekInFediverse #Fediverse #ActivityPub

Previous edition: mitra.social/objects/019ee1be-…


Bubbles is pretty cool. It's a Hacker-News-style site that pulls posts from #RSS and runs likes and comments through #ActivityPub.

I really like it.

bubbles.town/


Week in Fediverse 2026-06-19


Servers

- Gush! v0.0.39
- Hollo v0.9.5
- FitPub v1.1.0
- Mbin v1.10.0
- PeerTube v8.2.1
- Mastodon v4.6.0
- Wafrn v2026.06.02
- Ktistec v3.5.0
- ActivityPub for WordPress v9.0.1
- NeoDB v0.16.2
- NodeBB v4.13.2

Clients

- Nicolium v1.0.0
- Mastodon Bird UI v4.0.0
- Loops for Android v1.0.2.4
- Voyager v2.47.1
- Aria v1.5.4
- Loops is now on Google Play

Tools and Plugins

- PeerTube livechat plugin v14.0.3
- Canvas: A collaborative pixel canvas built for the Fediverse

Articles

- We've been hacked

-----

#WeekInFediverse #Fediverse #ActivityPub

Previous edition: mitra.social/objects/019ebd9e-…


Week in Fediverse 2026-06-12


Servers

- Betula v1.8.0
- Bookwyrm v0.8.7
- Lemmy v0.19.19
- Mitra v5.5.0
- ActivityPub for WordPress v9.0.0
- PeerTube v8.2.1
- NeoDB v0.16.0
- flohmarkt v0.18.1
- NodeBB v4.13.0
- Mastodon 4.6 for Developers
- Discord–Fediverse Bridge: Syncs Discord forum channels with Lemmy communities over ActivityPub

Clients

- Mastodon for iOS v2026.04
- RaccoonForFriendica v1.0.0
- Nicolium v0.3.2
- Voyager v2.47.0
- Tesseract v1.5.3
- Holos v1.9.0

For developers

- Fedify v2.2.5

Protocol

- FEP-5219: Groups and permissions
- FEP-7aa9: Featuring recommendations using a dedicated collection

Articles

- Non-Commercial Social Networks

-----

#WeekInFediverse #Fediverse #ActivityPub

Previous edition: mitra.social/objects/019e9956-…


#Mitra v5.5.0

codeberg.org/silverpill/mitra/…
codeberg.org/silverpill/mitra-…

- List of followed groups, group timelines and the ability to post to a group. The list of groups can be accessed from the menu on your profile page.
- "Load conversation" item was added to the post menu (admin only). Unlike "Load replies", it loads an entire thread, not just replies to the selected post.
- Partial support for ActivityPub outbox POST (only Like activities, disabled by default).



Week in Fediverse 2026-06-05


Servers

- Mastodon v4.5.11
- Hollo v0.9.3
- Wafrn v2026.06.01
- Ktistec v3.4.1
- tootik v0.23.1
- NeoDB v0.15.2
- wanderer v0.19.2
- Lemmy Development Update May 2026
- FitPub: A self-hosted fitness tracking platform for the Fediverse
- Harmony: Discord-style servers and chat with ActivityPub
- Menuverse: A federated menu system for canteens and institutions
- LAUTI: A calendar software where one can publish events, groups and places

Clients

- Pachli v3.7.0
- Elk v1.0.0
- Fedilab v3.41.0
- tooi v0.26.0
- Pixelix v4.4.0
- Aria v1.5.3
- Tesseract v1.5.0
- Interstellar v0.11.4
- Holos v1.8.0
- P2Play v0.10.1

For developers

- APx v0.25.0

Protocol

- FEP-bebd: Follow Invites

Articles

- Prikbord: Federated calendar for events in Rotterdam
- small details in my mastodon client that i wanted more people to notice
- From simple afterthought to over-engineered software
- FR#165 – Fediverse News May 2026

-----

#WeekInFediverse #Fediverse #ActivityPub

Previous edition: mitra.social/objects/019e7560-…


Week in Fediverse 2026-05-29


Servers

- PeerTube v8.2.0
- Bookwyrm v0.8.6
- Gush! v0.0.38
- Hollo v0.9.2
- Mitra v5.4.0
- Ktistec v3.4.0
- Loops v1.0.0-beta.12
- tootik v0.23.0
- NeoDB v0.15.0
- NodeBB v4.12.0
- Catodon v26.5.0
- TinyAP v0.1.9

Clients

- Fedilab v3.40.2
- Nicolium v0.3.1
- Coho v1.2
- Interstellar v0.11.3
- Aria v1.5.2
- Loops Mobile App v1.0.2.2
- Mitra Mini v0.4.1

Tools and Plugins

- Event Bridge for ActivityPub v1.3.0 (WordPress plugin)
- hugo-ap-comments: Embed Mastodon / Fediverse replies as a comment section on your static Hugo site

Articles

- Stop Posting to Platforms — Turn Your Website into a Fediverse Node

-----

#WeekInFediverse #Fediverse #ActivityPub

Previous edition: mitra.social/objects/019e5172-…


#Mitra v5.4.0

codeberg.org/silverpill/mitra/…
codeberg.org/silverpill/mitra-…

- All users can load latest and featured posts from remote profiles. Previously this action was only available to admins.
- A category can be specified when adding an emoji to local collection. Mitra Web doesn't support emoji categories yet, but categorization should work in other clients.
- Improved reliability of the media proxy.
- Added command groups: account, ap, config, emoji, filter, invite, media. They are currently hidden from the main list of commands. Use help subcommand to view information about a group: mitra filter help.



Week in Fediverse 2026-05-22


Servers

- Gush! v0.0.37
- Stegodon v1.8.5
- Iceshrimp.NET v2026.1.1-beta
- Iceshrimp v2026.5.1
- Hollo v0.9.0
- Mastodon v4.5.10
- PeerTube v8.1.6
- Sharkey v2025.4.7
- Hubzilla v11.2.1
- Friendica v2026.05
- Ktistec v3.3.9
- Smithereen v1.0.0
- Vernissage Server v1.38.0
- ActivityPub for WordPress v8.3.0
- Misskey v2026.5.4
- tootik v0.22.2
- NeoDB v0.14.4
- Open beta testing for Lemmy 1.0.0
- Trunk & Tidbits, April 2026
- XMPP/ActivityPub Bridge: Chat between XMPP and the Fediverse
- Cookifed: A free and federated recipes management app and cooking social network

Clients

- Nicolium v0.3.0
- Fedilab v3.40.1
- Aria v1.5.1
- Blorp v1.14.0
- Impressia v3.2.0
- Holos v1.6.0

Tools and Plugins

- Analytodon: Analytics for Mastodon

For developers

- Fedify v2.2.3
- BotKit v0.4.2

Protocol

- Basic Profile for Social API Servers
- FEP-baf5: Administrator Collection

Articles

- the may 2026 fedi software vulnerability
- Never Lose a Toot Again: Full-Text Search for Your Mastodon Feed

-----

#WeekInFediverse #Fediverse #ActivityPub

Previous edition: mitra.social/objects/019e2d21-…


@utzer I think if we look at the breakdown of what my #friendica instance sees, and claims to be a part of, your seeing everything that has been live in the lets say past 24 hours that is directly connected to the fedieverse via #activitypub, and a lot of these articles only gather stats for certain #mastadon instances and not the fediverse as a whole, I only have around 157 contacts, my DB is around 13GB, a lot of these stats are per the moment they are collected and most the articles only focus on a handfull of instances at best, here is what my instance is seeing right now,
Administration - Federation statistics
This page offers you the amount of known part of the federated social network your Friendica node is part of. These numbers are not complete and only reflect the part of the network your node is aware of.

Currently this node is aware of 45,339 nodes (2,255,139 active users last month, 4,189,933 active users last six months, 24,306,976 registered users in total) from the following platforms:

Friendica (450/29355)
Akkoma (584/15655)
BirdsiteLIVE (7/21616)
BookWyrm (114/30952)
Castopod (375/1264)
Cherrypick (58/8102)
Diaspora (51/229201)
firefish (Calckey) (35/3910)
Sharkey (537/25893)
Foundkey (4/10273)
Funkwhale (74/5826)
Gancio (217/3611)
Ghost (11518/11522)
Mastodon Glitch Edition (312/119884)
GNU Social/Statusnet (16/38)
GoToSocial (2359/3801)
Hometown (114/15283)
Honk (42/45)
Hubzilla/Red Matrix (170/14472)
iceshrimp (230/4355)
Lemmy (501/595175)
Mastodon (9248/13106196)
mbin (18/9546)
Microblog (98/99)
Misskey (1200/1182958)
Mobilizon (163/93791)
Nextcloud (20/20)
Nomad projects (Mistpark, Osada, Roadhouse, Streams. Zap) (5/7)
Owncast (320/324)
Peertube (1897/888907)
Pixelfed (741/1062016)
Pleroma (624/61952)
Plume (23/4088)
Postmarks (9/10)
ActivityPub Relay (138/139)
SocialHome (7/3786)
Snac (356/2189)
Takahē (31/666)
Wildebeest (3/3)
WordPress (10629/25614)
Write.as (4/4)
WriteFreely (757/134117)
Other (1280/6580311)
Friendica 450 apub
450 total systems
2,079 active users last month
5,053 active users last six months
29,355 registered users
1,163,408 locally created posts and comments
39.6 posts per user
65.2 users per system
3.1 (1)3.5.4 (1)2019.03 (2)2019.04 (1)2019.06 (3)2019.12 (1)2020.03 (2)2021.01 (3)2021.03-dev (1)2021.04 (2)2021.07 (1)2022.02 (1)2022.03 (4)2022.06 (1)2022.10 (4)2022.12 (2)2023.01 (6)2023.03-dev (1)2023.04-1 (1)2023.05 (8)2023.06 (3)2023.09-dev (1)2023.12 (2)2024.03 (13)2024.04 (1)2024.08 (11)2024.09-dev (1)2024.12 (72)2025.02-dev (6)2025.07-rc (11)2026.01 (236)2026.04-dev (21)2026.04-rc (20)2026.08-dev (6)
Akkoma 584 apub
584 total systems
2,455 active users last month
3,995 active users last six months
15,655 registered users
3,727,660 locally created posts and comments
238.1 posts per user
26.8 users per system
3.4.0 (2)3.5.0 (7)3.7.1 (2)3.8.0 (2)3.9.3 (12)3.10.2 (4)3.10.3 (4)3.10.4 (11)3.11.0 (1)3.12.0 (1)3.13.1 (4)3.13.2 (34)3.13.3 (5)3.14.0 (1)3.14.1 (8)3.15.1 (12)3.15.2+wl1 (2)3.15.2 (91)3.16.0 (40)3.17.0 (78)3.17.0+0 (1)3.18.0 (25)3.18.1 (131)3.19.0 (106)
BirdsiteLIVE 7 apub
7 total systems
24 active users last month
66 active users last six months
21,616 registered users
3,088.0 users per system
0.20.0 (1)1.0.0 (6)
BookWyrm 114 apub
114 total systems
1,388 active users last month
5,198 active users last six months
30,952 registered users
316,777 locally created posts and comments
10.2 posts per user
271.5 users per system
0.5.5 (1)0.6.0 (1)0.6.6 (2)0.7.1 (2)0.7.3 (1)0.7.4 (6)0.7.5 (11)0.8.0 (4)0.8.1 (2)0.8.2 (11)0.8.3 (13)0.8.4 (4)0.8.5 (56)
Castopod 375 apub
375 total systems
1,148 active users last month
1,195 active users last six months
1,264 registered users
7,479 locally created posts and comments
5.9 posts per user
3.4 users per system
develop_265cbbac (1)1.0.0 (3)1.0.5 (1)1.1.2 (9)1.2.4 (1)1.3.3 (1)1.4.1 (1)1.4.6 (1)1.5.0 (2)1.5.1 (1)1.5.2 (3)1.6.0 (1)1.6.5 (1)1.8.2 (1)1.9.0 (2)1.10.1 (1)1.10.5 (1)1.11.0 (7)1.12.1 (1)1.12.3 (2)1.12.4 (2)1.12.7 (1)1.12.9 (8)1.12.10 (1)1.12.11 (2)1.13.0 (7)1.13.1 (1)1.13.2 (2)1.13.3 (10)1.13.4 (46)1.13.5 (19)1.13.7 (17)1.13.8 (23)1.14.0 (6)1.14.1 (26)1.15.0 (2)1.15.1 (2)1.15.4 (53)1.15.5 (101)2.0.0 (5)
Cherrypick 58 apub
58 total systems
68 active users last month
113 active users last six months
8,102 registered users
2,372,618 locally created posts and comments
292.8 posts per user
139.7 users per system
4.14.0 (1)4.14.2+mk9 (1)4.14.2 (1)4.15.1 (3)4.16.0 (3)4.17.0 (43)4.18.0 (6)
Diaspora 51 dspr
51 total systems
2,150 active users last month
6,175 active users last six months
229,201 registered users
4,712,818 locally created posts and comments
20.6 posts per user
4,494.1 users per system
0.7.4.0 (1)0.7.10.0 (1)0.7.15.0 (1)0.7.18.0 (1)0.7.18.1 (1)0.7.18.2 (9)0.7.99.0 (1)0.9.0.0 (14)0.9.1.0 (14)0.10.0 (5)1.0.0 (3)
firefish (Calckey) 35 apub
35 total systems
284 active users last month
533 active users last six months
3,910 registered users
787,132 locally created posts and comments
201.3 posts per user
111.7 users per system
firefish-A.K:NoDM@20241205 (1)firefish-1.0.3 (3)firefish-1.0.4 (2)firefish-1.0.5-rc (2)calckey-13.1.0 (1)calckey-13.1.4.1 (3)calckey-14.0.0-rc (1)calckey-14.0.0-rc3 (1)firefish-20240216 (1)firefish-20240301 (2)firefish-20240413 (1)firefish-20240630 (2)firefish-20240714 (1)firefish-20240809 (1)firefish-20240818 (1)firefish-20240909 (2)firefish-20241121 (1)firefish-20241205.fork (1)firefish-20241205 (8)
Sharkey 537 apub
537 total systems
621,964 active users last month
1,645 active users last six months
25,893 registered users
11,098,243 locally created posts and comments
428.6 posts per user
48.2 users per system
Quollkey v1.2.1+g4596d7dcd3 (1)Quollkey v1.2.2+g2e9ba39a6c (1)2023.11.2 (1)2023.12.1 (1)2024.8.1 (1)2024.8.2 (3)2024.10.0.1-dev (1)2024.11.1 (2)2024.11.2 (7)2025.1.0-dev (1)2025.2.2 (7)2025.2.3 (2)2025.3.0-dev (2)2025.4.2-rc (1)2025.4.2 (3)2025.4.3 (3)2025.4.4 (39)2025.4.5 (27)2025.4.5.1 (1)2025.4.6-nik (1)2025.4.6 (385)2025.5.2-dev-stelpolva (5)2025.5.2-dev (2)2025.5.2 (40)
Foundkey 4 apub
4 total systems
185 active users last month
615 active users last six months
10,273 registered users
839,376 locally created posts and comments
81.7 posts per user
2,568.3 users per system
13.0.0 (4)
Funkwhale 74 apub
74 total systems
256 active users last month
947 active users last six months
5,826 registered users
78.7 users per system
1.1 (1)1.1.4 (2)1.2.0 (1)1.2.2 (1)1.2.7 (1)1.2.8 (2)1.2.9 (4)1.2.10 (2)1.3.1 (2)1.3.3 (2)1.3.4 (1)1.4.0.dev0 (5)1.4.0 (28)1.4.1 (21)2.0.0a2 (1)
Gancio 217 apub
217 total systems
14 active users last month
14 active users last six months
3,611 registered users
270,506 locally created posts and comments
74.9 posts per user
16.6 users per system
unknown (1)0.6.12 (1)1.4.4 (1)1.5.6 (1)1.18.0 (1)1.18.1 (1)1.18.9 (1)1.19.0 (3)1.19.4 (1)1.21.0 (4)1.23.1 (1)1.25.0 (10)1.25.1 (2)1.26.1 (5)1.27.0 (14)1.28.0-VM (1)1.28.0 (9)1.28.1 (11)1.28.2 (148)1.28.2.2 (1)
Ghost 11518 apub
11,518 total systems
38 active users last month
40 active users last six months
11,522 registered users
9,945 locally created posts and comments
0.9 posts per user
1.0 user per system
0.1.0 (11499)6.19 (4)6.22 (1)6.23 (1)6.27 (1)6.28 (1)6.30 (1)6.35 (2)6.37 (3)6.38 (1)6.39 (4)
Mastodon Glitch Edition 312 apub
312 total systems
15,301 active users last month
25,843 active users last six months
119,884 registered users
31,592,670 locally created posts and comments
263.5 posts per user
384.2 users per system
2.6.5+glitch (1)3.4.1+glitch (1)3.4.10+glitch+atsu1125 (2)3.5.2+glitch_0509_e8b8ac8 (1)3.5.3+glitch (1)3.5.17+glitch+brightfur (1)4.0.2+glitch (1)4.1.2+glitch+closedsocial (3)4.1.3+glitch+cutiecity (1)4.1.3+glitch (2)4.1.4+glitch (3)4.1.5+glitch (1)4.2.24+glitch+blobfox (1)4.3.0-alpha.3+glitch (1)4.3.1+glitch (3)4.3.2+glitch.donphan.social (1)4.3.4+glitch (2)4.3.5+glitch (4)4.3.6+glitch (1)4.3.8+glitch (3)4.3.9+glitch (1)4.3.16+glitch (1)4.3.17+glitch (1)4.4.1+glitch (6)4.4.2+glitch (1)4.4.3+glitch (1)4.4.4+glitch (1)4.4.5+glitch (1)4.4.6+glitch (1)4.4.8+glitch (1)4.4.13+glitch (1)4.5.0+glitch (3)4.5.1+glitch (2)4.5.2+glitch (3)4.5.3+glitch (9)4.5.4+glitch (7)4.5.5+glitch (5)4.5.6+glitch-th (1)4.5.6+glitch.vtsocial (1)4.5.6+glitch (9)4.5.7+glitch.vtsocial (1)4.5.7+glitch (15)4.5.8+glitch (59)4.5.8+glitch+0s (1)4.5.9+glitch.cathode (1)4.5.9+glitch.dftba (1)4.5.9+glitch.garden (1)4.5.9+glitch.techlgbt (1)4.5.9+glitch (139)4.5.9+sakyey.1.2.1.glitch (1)4.6.0-alpha.7+glitch.floofy (1)4.6.0-alpha.7+qdon.glitch (1)
GNU Social/Statusnet 16 stat
16 total systems
4 active users last month
4 active users last six months
38 registered users
35,514 locally created posts and comments
934.6 posts per user
2.4 users per system
hello world (1)1.1.1-release (1)1.1.3-beta3 (4)1.2.0-beta4 (5)1.20.9 (1)2.0.0 (1)2.0.1 (2)2.0.2 (1)
GoToSocial 2359 apub
2,359 total systems
159 active users last month
336 active users last six months
3,801 registered users
1,162,156 locally created posts and comments
305.8 posts per user
1.6 user per system
unknown (4)git (9)ls (1)v0.9.0 (1)v0.15.0 (1)v0.16.0 (3)v0.17.1 (1)v0.17.3 (1)v0.18.0 (1)v0.18.1 (1)v0.19.0 (2)v0.19.1 (4)v0.19.2 (1)v0.20.0 (11)v0.20.1 (2)v0.20.2 (7)v0.20.3 (5)v0.21.0 (27)v0.21.1 (3)v0.21.2 (17)0.3.7 (2)0.5.1 (1)0.5.2 (3)0.6.0 (3)0.7.0 (1)0.7.1 (1)0.9.0 (6)0.9.1 (1)0.10.0 (3)0.11.0 (2)0.11.1 (2)0.12.2 (1)0.13.2 (1)0.13.3 (1)0.14.0 (1)0.14.1 (1)0.14.2 (2)0.15.0 (4)0.15.1 (1)0.16.0 (21)0.17.0 (8)0.17.1 (1)0.17.2 (1)0.17.3 (36)0.17.4 (9)0.18.0 (7)0.18.1 (15)0.18.2 (7)0.18.3 (18)0.19.0 (28)0.19.1 (56)0.19.2 (32)0.20.0 (34)0.20.1 (81)0.20.2 (174)0.20.3 (125)0.21.0 (98)0.21.1 (174)0.21.2 (1293)3.3.0 (2)
Hometown 114 apub
114 total systems
2,741 active users last month
3,816 active users last six months
15,283 registered users
7,609,160 locally created posts and comments
497.9 posts per user
134.1 users per system
1.0.7+3.5.5 (1)4.0.2+hometown (1)4.0.6+hometown (3)4.0.13+hometown (2)4.0.15+hometown (4)4.2.10+hometown (3)4.2.17+hometown (25)4.5.6+hometown (4)4.5.7+hometown (63)4.5.9+hometown (8)
Honk 42 apub
42 total systems
4 active users last month
4 active users last six months
45 registered users
4,819 locally created posts and comments
107.1 posts per user
1.1 user per system
unknown (39)develop/git (1)develop/hg (2)
Hubzilla/Red Matrix 170 apub
170 total systems
1,192 active users last month
2,565 active users last six months
14,472 registered users
2,200,312 locally created posts and comments
152.0 posts per user
85.1 users per system
Red 6.5 (1)3.2.1 (1)4.0 (1)4.0.3 (1)5.4.2 (1)6.4.2 (1)7.0RC (1)7.0.3 (1)7.2.2 (2)7.6 (1)8.0 (3)8.2 (1)8.6 (1)8.6.1 (2)8.8.2 (1)8.8.7 (1)9.0.1 (3)9.2 (1)9.2.1 (1)9.4.3 (2)10.0.5 (1)10.0.6 (2)10.0.8 (4)10.2.1 (15)10.2.3 (15)10.4 (1)10.4.3 (1)10.4.4 (4)10.6 (3)10.6.1 (10)10.7.1 (1)11.0 (6)11.2 (75)11.3 (5)
iceshrimp 230 apub
230 total systems
872 active users last month
1,322 active users last six months
4,355 registered users
2,648,251 locally created posts and comments
608.1 posts per user
18.9 users per system
2023.12.6 (1)2023.12.8-dev (1)2023.12.9-dev (1)2023.12.9 (2)2023.12.11 (3)2023.12.13 (2)2023.12.14.shorks1 (1)2023.12.14+sophari.11 (1)2023.12.14-dev (5)2023.12.14 (30)2025.1 (54)2025.12.7+66bb0eaae2 (2)2026.1 (67)2026.4.1+eepy.zone (1)2026.4.1-dev (11)2026.4.1 (32)2026.4.2.withdrawal1 (1)2026.4.2-dev (6)2026.4.2 (9)
Lemmy 501 apub
501 total systems
27,901 active users last month
55,547 active users last six months
595,175 registered users
24,793,564 locally created posts and comments
41.7 posts per user
1,188.0 users per system
unknown version (2)nightly-2026 (1)0.16.7 (1)0.17.0 (1)0.17.3 (1)0.17.4 (2)0.18.1 (1)0.18.2 (2)0.18.4 (2)0.18.5 (4)0.19.2 (1)0.19.3 (12)0.19.4 (3)0.19.5 (10)0.19.6 (2)0.19.7 (3)0.19.8 (11)0.19.9 (8)0.19.10 (4)0.19.11 (27)0.19.12 (27)0.19.13 (49)0.19.14 (14)0.19.15 (63)0.19.16 (25)0.19.16-10 (1)0.19.17 (59)0.19.18 (160)0.19.18-1 (1)0.19.18-7 (2)1.0.0-alpha.12-74 (1)1.0.0 (1)
Mastodon 9248 apub
9,248 total systems
1,255,295 active users last month
2,943,309 active users last six months
13,106,196 registered users
1,122,592,284 locally created posts and comments
85.7 posts per user
1,417.2 users per system
unknown (2)Owncast (2)WordPress/6.8.5, (1)WordPress/6.9.1, (1)WordPress/6.9.2, (1)WordPress/6.9.4, (27)WordPress/7.0 (2)0.0.1 (1)0.21.2 (1)1 (13)1.2.2 (1)1.3.2 (1)1.4.1 (1)1.6.0 (1)1.6.1 (1)1.7.0 (2)2.4.2 (1)2.4.3 (1)2.4.5 (1)2.5.0 (1)2.6.2 (1)2.7.0 (2)2.8.0rc1 (1)2.8.0 (2)2.8.2 (2)2.9.2 (1)2.9.3 (1)3.0.0 (1)3.0.1 (4)3.1.1 (1)3.1.3 (4)3.1.4 (8)3.2.0 (5)3.2.1 (2)3.3.0 (10)3.4.0rc2 (1)3.4.0 (1)3.4.1 (11)3.4.3 (3)3.4.4 (2)3.4.6ht (1)3.4.6 (4)3.4.7 (1)3.4.8 (1)3.4.10 (2)3.5.0 (1)3.5.1 (1)3.5.2 (2)3.5.3 (40)3.5.5 (5)3.5.7 (3)3.5.8 (1)3.5.9 (3)3.5.10 (7)3.5.17 (1)3.5.18 (3)3.5.19 (18)3.5.19patch (1)4.0.0rc1 (1)4.0.0rc2 (1)4.0.0 (20)4.0.2 (71)4.0.4 (1)4.0.5 (2)4.0.6 (1)4.0.8 (1)4.0.10 (1)4.0.11 (1)4.0.12 (1)4.0.13 (3)4.0.14 (1)4.0.15 (7)4.1.0 (10)4.1.1 (5)4.1.2 (28)4.1.3 (9)4.1.4 (38)4.1.5 (6)4.1.6 (15)4.1.7 (6)4.1.9 (6)4.1.10 (2)4.1.11 (4)4.1.13 (9)4.1.15 (9)4.1.16 (6)4.1.18 (26)4.1.19 (5)4.1.20 (3)4.1.21 (2)4.1.22 (4)4.1.23 (2)4.1.24 (3)4.1.25 (15)4.2.0 (14)4.2.1 (35)4.2.3 (8)4.2.5 (15)4.2.6 (1)4.2.7 (16)4.2.8 (26)4.2.9 (4)4.2.10 (55)4.2.12 (24)4.2.13 (12)4.2.14 (2)4.2.15 (3)4.2.16 (1)4.2.17 (59)4.2.18 (13)4.2.19 (22)4.2.20 (22)4.2.21 (17)4.2.22 (10)4.2.23 (3)4.2.24 (11)4.2.25 (2)4.2.26 (9)4.2.27 (17)4.2.28 (9)4.2.29 (41)4.3.0 (39)4.3.1 (19)4.3.2 (18)4.3.3 (26)4.3.4 (111)4.3.5 (29)4.3.6 (79)4.3.7 (69)4.3.8 (105)4.3.9 (39)4.3.10 (6)4.3.11 (9)4.3.12 (5)4.3.13 (6)4.3.14 (19)4.3.15 (6)4.3.16 (16)4.3.17 (6)4.3.18 (10)4.3.19 (12)4.3.20 (11)4.3.21 (6)4.3.22 (34)4.4.0 (59)4.4.1 (29)4.4.2 (33)4.4.3 (86)4.4.4 (23)4.4.5 (68)4.4.6 (4)4.4.7 (13)4.4.8 (58)4.4.9 (4)4.4.10 (5)4.4.11 (9)4.4.12 (9)4.4.13 (6)4.4.14 (4)4.4.15 (18)4.4.16 (37)4.5.0 (128)4.5.1 (35)4.5.2 (102)4.5.3 (192)4.5.4 (110)4.5.5 (150)4.5.6 (242)4.5.7 (326)4.5.8 (707)4.5.9 (4744)4.6.0 (368)2026.03.02 (1)2026.03.03 (1)9001 (1)
mbin 18 apub
18 total systems
895 active users last month
2,038 active users last six months
9,546 registered users
279,213 locally created posts and comments
29.2 posts per user
530.3 users per system
1.8.4 (2)1.9.1 (7)1.10.0-rc1 (2)1.10.0-rc2 (7)
Microblog 98 apub
98 total systems
3 active users last month
3 active users last six months
99 registered users
5,130 locally created posts and comments
51.8 posts per user
1.0 user per system
microblog microblog hugo 0.91.2 (1)microblog hugo 0.117.0 (1)eleventy v4.0.0 (1)unknown (30)eleventy (1)microblog (3)hugo 0.91.2 (31)hugo 0.117.0 (7)hugo 0.158.0 (7)wordpress 5.2.1 (1)wordpress 6.1 (1)wordpress 6.2.9 (1)wordpress 6.6.5 (1)wordpress 6.7.1 (1)wordpress 6.7.5 (1)wordpress 6.8.5 (1)wordpress 6.9.4 (9)
Misskey 1200 apub
1,200 total systems
2,301 active users last month
5,500 active users last six months
1,182,958 registered users
428,674,371 locally created posts and comments
362.4 posts per user
985.8 users per system
estampie (1)hata (1)Nexus (1)1.4.4 (1)1.4.5 (1)11.37.1 (3)12.10.0 (1)12.75.0 (1)12.100.0 (1)12.108.1 (1)12.110.1 (1)12.119.0 (2)12.119.2 (13)12.120.0 (1)13.9.1 (1)13.9.2 (1)13.10.3 (1)13.13.2 (10)13.14.1 (2)13.14.2 (12)2023.9.3 (1)2023.10.0 (1)2023.10.2 (2)2023.11.0 (6)2023.11.1 (4)2023.12.2 (10)2024.2.0 (8)2024.3.1 (14)2024.5.0 (7)2024.7.0 (1)2024.8.0 (6)2024.9.0 (2)2024.10.0 (2)2024.10.1 (15)2024.10.2 (2)2024.11.0 (14)2025 (1)2025.1.0 (5)2025.2.0 (16)2025.2.1 (2)2025.3.0 (3)2025.3.1 (11)2025.3.2 (1)2025.4.0 (9)2025.4.1 (13)2025.5.0 (14)2025.5.1 (1)2025.6.0 (8)2025.6.1 (2)2025.6.3 (16)2025.7.0 (17)2025.8.0 (7)2025.9.0 (21)2025.10.0 (6)2025.10.1 (6)2025.10.2 (16)2025.11.0 (13)2025.11.1 (12)2025.12.0 (9)2025.12.1 (11)2025.12.2 (95)2026.1.0 (6)2026.2.0 (2)2026.3.0 (13)2026.3.1 (265)2026.3.2 (128)2026.4.0 (18)2026.5.0 (66)2026.5.1.md (1)2026.5.1 (217)2026.5.2 (8)2026.5.3 (10)
Mobilizon 163 apub
163 total systems
18 active users last month
18 active users last six months
93,791 registered users
630,014 locally created posts and comments
6.7 posts per user
575.4 users per system
unknown (1)main (1)2.0.2 (1)2.1.0 (3)3.0.4 (2)3.1.1 (1)3.2.0 (1)4.0.0 (1)4.0.2 (2)4.1.0 (8)5.0.1 (1)5.1.0 (14)5.1.1 (1)5.1.2 (3)5.1.3 (3)5.1.4 (5)5.1.5 (21)5.2.0 (15)5.2.1 (2)5.2.2 (23)5.2.3 (54)
Nextcloud 20 apub
20 total systems
20 registered users
1.0 user per system
0.6.0 (2)0.6.1 (13)0.7.0 (4)0.8.0 (1)
Nomad projects (Mistpark, Osada, Roadhouse, Streams. Zap) 5 apub
5 total systems
1 active user last month
1 active user last six months
7 registered users
7 locally created posts and comments
1.0 post per user
1.4 user per system
streams 22.09.25 (1)zap 22.12.30 (1)osada 22.12.30 (1)streams 26.2.10 (1)streams 26.2.14.1 (1)
Owncast 320 apub
320 total systems
250 active users last month
250 active users last six months
324 registered users
25,597 locally created posts and comments
79.0 posts per user
1.0 user per system
idn-arm64 (1)v0.1.0 (2)dev (9)0.0.11 (2)0.0.12 (3)0.0.13 (5)0.1.0 (3)0.1.1 (5)0.1.2 (8)0.1.3 (16)0.2.0 (2)0.2.1 (17)0.2.2 (3)0.2.3 custom 20250920 (1)0.2.3 (68)0.2.4 (52)0.2.5 (122)20230513 (1)
Peertube 1897 apub
1,897 total systems
51,165 active users last month
176,125 active users last six months
888,907 registered users
6,216,196 locally created posts and comments
7.0 posts per user
468.6 users per system
unknown (10)1.1.0 (1)1.2.1 (1)2.0.0 (1)2.3.0 (4)2.4.0 (4)3.0.0 (2)3.0.1 (4)3.1.0 (4)3.2.0 (1)3.2.1 (6)3.3.0 (1)3.4.0 (1)3.4.1 (4)4.0.0 (2)4.1.1 (5)4.2.0 (1)4.2.1 (1)4.2.2 (17)4.3.0 (7)4.3.1 (4)5.0.0 (2)5.0.1 (11)5.1.0 (16)5.2.0 (7)5.2.1 (36)6.0.0 (2)6.0.1 (3)6.0.2 (8)6.0.3 (18)6.0.4 (13)6.1.0 (19)6.2.0 (5)6.2.1 (15)6.3.0 (4)6.3.1 (2)6.3.2 (7)6.3.3 (41)7.0.0 (11)7.0.1 (48)7.1.0 (14)7.1.1 (43)7.2.0 (22)7.2.1 (30)7.2.2 (10)7.2.3 (56)7.3.0 (312)8.0.0 (19)8.0.1 (79)8.0.2 (117)8.1.0 (3)8.1.1 (11)8.1.2 (22)8.1.3 (66)8.1.4 (64)8.1.5 (673)8.2.0-rc.1-nightly-2026 (1)8.2.0 (6)
Pixelfed 741 apub
741 total systems
89,874 active users last month
430,843 active users last six months
1,062,016 registered users
43,211,443 locally created posts and comments
40.7 posts per user
1,433.2 users per system
0.10.10 (2)0.11.0 (1)0.11.1 (1)0.11.2 (3)0.11.3 (2)0.11.4 (4)0.11.5 (1)0.11.6 (1)0.11.7 (1)0.11.8 (6)0.11.9 (4)0.11.11 (1)0.11.12 (3)0.11.13 (3)0.12.1 (4)0.12.3 (12)0.12.4+glitch.1.8.0 (1)0.12.4+glitch.1.10.0 (1)0.12.4 (23)0.12.5+glitch.1.10.1 (5)0.12.5 (46)0.12.6+glitch.1.12.1? (2)0.12.6+glitch.1.12.1 (28)0.12.6 (157)0.12.7 (429)
Pleroma 624 apub
624 total systems
4,514 active users last month
8,457 active users last six months
61,952 registered users
15,524,529 locally created posts and comments
250.6 posts per user
99.3 users per system
1.0.6 (1)2.0.6 (1)2.1.2 (2)2.1.50 (1)2.2.1 (1)2.2.2 (1)2.2.50 (1)2.3.0 (3)2.4.1 (4)2.4.2 (3)2.4.3 (1)2.4.4 (3)2.4.5 (3)2.4.53+soapbox (2)2.4.53 (11)2.5.0 (19)2.5.1 (7)2.5.2 (11)2.5.4 (3)2.5.5+debian.1.1 (1)2.5.5 (9)2.5.50 (5)2.5.51 (3)2.5.52 (7)2.5.54 (4)2.6.0 (5)2.6.1 (9)2.6.2 (9)2.6.3 (17)2.6.50 (26)2.6.51 (2)2.7.0 (15)2.7.1 (5)2.8.0 (36)2.9.0 (4)2.9.1 (139)2.9.2 (1)2.10.0+debian.1 (1)2.10.0 (144)2.10.2 (101)
Plume 23 apub
23 total systems
4,088 registered users
52,697 locally created posts and comments
12.9 posts per user
177.7 users per system
0.4.0 (1)0.7.2 (11)0.7.3-dev (10)0.7.3-ale (1)
Postmarks 9 apub
9 total systems
9 active users last month
9 active users last six months
10 registered users
1,628 locally created posts and comments
162.8 posts per user
1.1 user per system
0.0.1 (9)
ActivityPub Relay 138 apub
138 total systems
94 active users last month
94 active users last six months
139 registered users
1.0 user per system
selective-relay-0.2.3 (1)pub-relay-0.2.0-a2 (2)pub-relay-0.2.1 (1)aoderelay-v0.3.102 (2)aoderelay-v0.3.104 (1)aoderelay-v0.3.104+musubi (1)aoderelay-v0.3.104-HEAD (2)aoderelay-v0.3.104-main (1)aoderelay-v0.3.105-HEAD (1)aoderelay-v0.3.106-neighborhood (1)aoderelay-v0.3.113 (1)aoderelay-v0.3.113-HEAD (1)aoderelay-v0.3.114-HEAD (1)aoderelay-v0.3.115-HEAD (4)aoderelay-v0.3.116 (4)aoderelay-v0.3.116-HEAD (14)aoderelay-v0.3.116-main (2)aoderelay-v0.3.117-HEAD (5)aoderelay-v0.3.119 (7)aoderelay-v0.3.119-main (1)aoderelay-v0.3.119-max (1)aoderelay-v0.3.120-HEAD (4)aoderelay-v0.3.120-main (1)aoderelay-v0.3.121 (2)aoderelay-v0.3.121-HEAD (29)aoderelay-v0.3.121-main (1)aoderelay-v0.3.52-HEAD (1)aoderelay-v0.3.82-HEAD (2)aoderelay-v0.3.85-HEAD (5)aoderelay-v0.3.98-HEAD (1)activityrelay-0.0.1 (1)activityrelay-0.1 (3)activityrelay-0.2.0 (1)activityrelay-0.2.2 (5)activityrelay-0.2.3 (13)activityrelay-0.2.4 (5)activityrelay-0.3.2 (1)activityrelay-0.3.5 (9)
SocialHome 7 dspr
7 total systems
24 active users last month
91 active users last six months
3,786 registered users
51,655 locally created posts and comments
13.6 posts per user
540.9 users per system
0.18.0-dev (1)0.20.0 (2)0.22.0 (1)0.23.0 (3)
Snac 356 apub
356 total systems
105 active users last month
190 active users last six months
2,189 registered users
51,375 locally created posts and comments
23.5 posts per user
6.1 users per system
2.31-dev (2)2.36-dev (1)2.45 (3)2.52-dev (1)2.55 (1)2.62 (1)2.68 (2)2.69 (1)2.70 (1)2.72-dev (1)2.73 (2)2.75-dev (1)2.75 (20)2.76-dev (1)2.77 (2)2.78-dev (1)2.78 (1)2.79-dev (1)2.80 (2)2.80-20250709 (1)2.81-dev (2)2.81 (3)2.82 (1)2.83-dev (1)2.83 (5)2.84 (10)2.85-dev (5)2.85 (4)2.86-dev (3)2.86 (2)2.87 (3)2.88 (7)2.89 (21)2.90-dev (8)2.90 (27)2.91-dev (6)2.91 (94)2.92-dev (36)2.92 (72)
Takahē 31 apub
31 total systems
666 registered users
124,536 locally created posts and comments
187.0 posts per user
21.5 users per system
0.9.0 (4)0.10.1 (9)0.11.0 (9)0.12.0 (9)
Wildebeest 3 apub
3 total systems
3 registered users
1.0 user per system
0.0.1 (2)0.1.0 (1)
WordPress 10629 apub
10,629 total systems
12,802 active users last month
13,141 active users last six months
25,614 registered users
21,958,567 locally created posts and comments
857.3 posts per user
2.4 users per system
unknown (4)0.2 (1)4.9.3 (1)5.0.21 (1)5.1.22 (1)5.5 (1)5.7 (1)5.8 (1)5.8.13 (1)5.9 (1)6.0 (1)6.0.11 (2)6.1 (1)6.1.1 (3)6.1.9 (1)6.1.10 (9)6.2 (19)6.2.3 (1)6.2.8 (1)6.2.9 (15)6.3 (4)6.3.2 (1)6.3.7 (1)6.3.8 (7)6.4 (11)6.4.2 (2)6.4.8 (9)6.5 (17)6.5.8 (3)6.6 (31)6.7 (64)6.7.2 (2)6.7.4 (1)6.7.5 (9)6.8 (185)6.8.2 (2)6.8.3 (2)6.8.5 (3)6.9 (4446)6.9.1 (1)6.9.2 (1)6.9.4 (82)7.0 (5678)7.1 (1)
Write.as 4 apub
4 total systems
4 registered users
1.0 user per system
unknown (4)
WriteFreely 757 apub
757 total systems
1,836 active users last month
9,870 active users last six months
134,117 registered users
374,308 locally created posts and comments
2.8 posts per user
177.2 users per system
unknown (30)0.8.1 (1)0.12.0 (7)0.12.0-277 (1)0.13.0 (1)0.13.1 (14)0.13.2 (19)0.14.0 (14)0.14.0-126 (1)0.14.0-132 (1)0.14.0-141 (1)0.14.0-146 (1)0.15.0 (35)0.15.1-c7 (1)0.15.1 (72)0.15.1-1 (1)0.16.0+tedomum.1 (1)0.16.0 (542)0.16.0-2 (1)0.16.0-10 (2)0.16.0-18 (1)0.16.0-19 (1)0.16.0-27 (1)0.16.0-69 (1)0.16.0-72 (1)0.16.0-85 (2)0.16.0-108 (2)0.16.0-131 (1)0.16.1 (1)
Other 1280 apub
1,280 total systems
155,726 active users last month
484,968 active users last six months
6,580,311 registered users
103,998,535 locally created posts and comments
15.8 posts per user
5,140.9 users per system
-heureum- (1)4m3-a-p-s--streams (1)abelio (1)activities.next (2)activity-pub-relay (4)activity-relay (16)activitypub-agent-server (1)activitypub-bot (3)activitypub-firebase (2)activitypub-server (1)agate (1)agora of flancia (1)ahodon (1)aktor (1)anglesite (1)aoba (1)ap-relay (1)ap.39sho (1)apd (2)appy (2)areionskey (1)arrcay (2)astro-activitypub (1)awakari (1)badgefed (6)baudrate (1)betula (22)bird.meetup (1)bloedsuikerbaas-activitypub (1)blogger (1)bonfire (37)bonfou (1)bookshelf (1)bovine (1)bridgy-fed (7)brighteon (3)broca (1)bugle (1)bunny-of-doom (1)burogu (1)buzzrelay (3)cagando (1)capubara (2)case-streams (1)caselibre (1)castling.club (1)catodon (10)ccworld-ap-bridge (14)changinggraph (1)changkyun-kim (1)chara-social (1)chat (2)chess.game.infinito.nexus (1)chuckya (2)ciu (2)civic-hub (1)clanspub (1)clipsymphony activitypub service (7)clubsall (1)cluckey (1)codename merp (1)coma (3)comal (1)commonpub (1)communitarium-community-media (1)contentnation (1)cookifed (1)coolockvillage.ie (1)coresignal (1)custom-server (1)d250g2 (1)dailyrucks (2)daism (1)dch_blog (1)dev-macgirvin (1)diablo-canyon2 (1)die-ultrawandern-community (1)discourse (40)diskrot (1)ditto (2)divedb (1)dolphin (2)dope-network (2)drupal (14)dutch beer collective (1)e-komik gallery (1)ecko (1)egregoros (2)ehlabs (1)eindex-blog (1)elektrine (4)eleventy (1)elgg (3)emissary (10)emoji ranking v2 activitypub (1)encryptr-net (1)encyclia (1)enigma-bbs (2)enigmatick (1)epicyon (1)everycal (1)exerra's blog - prerelease fedi version (1)factsheet-six (1)famweb (1)feddyspice (1)federated-activity-publisher (1)fedibird (2)fedibook (2)fedibot (1)fedichatbot (1)fediforum (1)fedify-example-blog (1)fediloc (1)fediman (1)fedipage (6)fedirouter (1)fedisky (2)fediverse relay (1)feeder (1)feediverse (1)finalboss (1)flipboard (1)flohmarkt (24)forgejo (75)forte (20)forte-canyon (1)framepress (1)frequency (1)gaelicwizard.me (1)garden (1)gathio (11)get-ready-to-rumbly (1)gharab-tzereq (6)gitea (4)glitchcafe (1)goblin (1)goblog (5)groundpolis-milkey (1)gush (1)hackerspub (1)handle (1)harmony (2)hatsu (6)hexo (1)hickey (2)hollo (34)holos (19)holos-discover (1)hourlyphoto (1)hugo (11)hule (1)ibis (3)imoxia-www (1)imp (1)incestoma (4)incise (1)indiekit (1)infotograf (1)inkwell (1)irwin (1)itinerariummentis (1)johnson-fyi-blog (1)jss (1)juick (1)justiciaathina (1)kate.wtf & 11ty (2)kiiteitte (1)klaxon (2)kmyblue (22)known (2)kotori (2)kroeg (2)ktistec (14)labas (1)lazcorpsite (1)letter (1)lightfall (1)likestream (1)litepub (2)lookslike.pascal.codes (1)loops (28)lotide (1)madblog (3)mammuthus (11)manifest-commons (1)manyfold (6)matters-fediverse-gateway (3)mdverse (1)meisskey (9)merprelay (1)metazine (2)microblogpub (37)microdotblog (1)miniwiki (1)mischief (1)mitra (62)mitra cl (2)mixednutz (1)mixpal (1)mk-go (2)moim (1)momostr (1)monoplace.ca (1)mostr (1)motivation (1)moviebuff (1)movies-diary (2)movietitler (1)murlog (4)musicsocial (1)n/a (1)nanasi-apps.xyz relay service (1)neko (1)nekonoverse (2)neodb (15)neogroup (1)nevulounge (1)newsdiff (1)newssite-ap (3)nexkey (1)nginx (2)nix-s1-visions (1)nodebb (62)noorisk (1)notes (1)notestock (2)ohagi (2)oni (3)open streaming platform (1)openlink-virtuoso (2)orizuru (2)outpost (1)owl-blogs (1)p3k (1)pandacap (2)paon (2)pasta-activitypub (1)paul.kinlan.me (1)pawfed (1)pawkey (1)peermesh-pm-module-social (1)pelago (1)pelican (1)pelican-activitypub (2)petitchambre (1)pichuchen.tw-webserver (1)piefed (83)pinka (2)podcast-peformance (1)podfriend (1)ponos (1)pricelessmisc-blog (1)prismo (1)private (1)psh (1)publii (2)pulsar (1)qaperture (1)qoto (2)quolibet (1)rayven (1)reisetagebuch (1)revix (1)robgreeley-com (1)robida (1)ruby-news-kr (1)rullen (2)ryanw.eu (1)scenes-cloud (2)scrapblog (1)seos (1)sequel (2)sharkey 2025.4.5; like (2)sharkey 2025.4.6; like (3)sharkey 2025.5.2-dev; like (1)sharkey hata-11.0 (for sharkey 2025.4.6); like (1)shops (1)siliconbeest (1)sinokey (1)smithereen (3)social-blog (2)social-kofo (1)socialband (1)solaristreams (1)squidcity (1)starling (4)stegodon (3)stonenet (1)streams-at-els-mussols (1)streams-flamenco (1)streams-wivodaim-ch (1)sukhi-fedi (1)sutty-distributed-press (69)tacuruses (1)takesama (1)tech-port relay service (1)telepico (1)tens-city (1)the-foundation (1)thiswasnews (2)tinyap (2)tinypub (1)tiofomento-fedverse-bot (1)tism (1)tokoroten (1)tomh.nl (1)toot-worker (1)touchgrass (1)tumeeto (1)tunecamp (1)turtkey (1)tvmarks (2)twotwofour (1)typent (1)uberblogr-activitypub (1)unio-diversi-spiritus (1)unknown (1)unspoken (1)uwuzu (3)verces (1)vernissage (9)wafrn (31)wallog (1)waq (1)watney (1)webfan (2)wellesley (5)wx-watch (1)wxwclub (2)x-log (1)xbuddy (3)yellbot (1)yoiyami (4)yojo-art (8)yplev (1)yt-on-fedi (1)yunohost-streams (3)zeitgeist (1)zer0 (2)μpub (1)ぷよ橋activitypub (1)

That is an insane amount of data, and a fairly accurate one, I believe your numbers are right, but in relation to what you have read, they only report the numbers they either see, or that represent the message they are trying to convey, just my 2 cents;


Week in Fediverse 2026-05-15


Servers

- PieFed v1.6.23
- Hollo v0.8.3
- Ktistec v3.3.8
- Wafrn v2026.05.01
- snac v2.92
- Mitra v5.3.0
- Iceshrimp v2026.4.2
- Hollo v0.8.4
- Vernissage v1.37.0
- Bonfire v1.0.3
- Hometown v1.2.1
- tootik v0.22.1
- NeoDB v0.14.2
- NodeBB v4.11.3
- PieFed v1.6.23
- Wanderer v0.19.0
- Aktor: A headless, Mastodon-compatible ActivityPub server

Clients

- FediLab v3.40.0
- tooi v0.25.0
- Holos v1.5.6
- Phanpy changelog
- lemmy-tray: Read lemmy posts in system tray

Tools and Plugins

- FediFetcher v7.1.18
- slurp v1.1.1

For developers

- BotKit v0.4.1
- APx v0.24.0

Articles

- There Are a Million Fediverses. Some of Them Are Louder than Others

-----

#WeekInFediverse #Fediverse #ActivityPub

Previous edition: mitra.social/objects/019e0915-…


Week in Fediverse 2026-05-08


Servers

- Vernissage v1.35.0
- Pleroma v2.10.2
- Funkwhale v2.0.2
- Betula v1.7.0
- Hollo v0.8.2
- Akkoma v2026.05
- Ktistec v3.3.7
- NodeBB v4.11.0
- Misskey v2026.5.1
- Ties v0.2.1
- PieFed v1.6.21
- Lemmy Development Update April 2026

Clients

- Nicolium v0.2.1
- Fedilab v3.39.0
- Pachli v3.6.1
- Mastodon for Android v2.12.0
- Coho v1.0
- PixelDroid v1.0.beta42
- Blorp v1.13.0
- Mitra Mini v0.4.0
- Holos v1.5.5

Tools and Plugins

- Fediverse Redirect v1.15.1

For developers

- APx v0.23.0

Articles

- Join the fediverse! zine
- A Bridge to Somewhere: How to Link Your Mastodon, Bluesky, or Other Federated Accounts

-----

#WeekInFediverse #Fediverse #ActivityPub

Previous edition: mitra.social/objects/019de52a-…