Search

Items tagged with: activitypub


The media in this post is not displayed to visitors. To view it, please go to the original post.

Das Projekt Mangrove bringt Rezensionen direkt in unsere Timelines.
Die Idee: Orte oder Personen, die bewertet werden, erhalten ein eigenes ActivityPub-Konto.

Man kann den Bewertungen für ein bestimmtes Café oder einer Person, deren Geschmack man schätzt, einfach folgen. Neue Rezensionen ploppen dann ganz natürlich in der Timeline auf – inklusive Sternen, Text und Bildern.

open-reviews.net/technology/fe…

#ActivityPub #Bewertungen #mangrovereviews


Open Reviews Association - 2026-09-11 20:41:46 GMT

Mangrove reviews now speak ActivityPub. Follow any subject or reviewer from Mastodon or any other Fediverse app, and new reviews land in your timeline as posts.Look for the Follow button next to a subject or a reviewer on mangrove.reviews . Paste the handle into your app's search, or open the follow page on your own server.

Try it: @r-485971ceb2082160

Integrate it into your app: open-reviews.net/technology/fe…

#ActivityPub #Mastodon
"follow" button


Week in Fediverse 2026-09-11


Servers

- Hubzilla v11.4.1
- Bookwyrm v0.9.3
- Cookifed v0.1.0
- Ktistec v3.12.1
- Misskey v2026.9.0
- gathio v1.6.7
- NeoDB v0.18.2
- Appy v0.7.0
- PieFed v1.7.15
- Wafrn v2026.09.01

Clients

- Voyager v2.49.0
- Miria v4.0.1
- Aria v1.5.13

Tools and Plugins

- Enable Mastodon Apps v1.6.4 (WordPress plugin)

Articles

- Static ActivityPub Publishing

-----

#WeekInFediverse #Fediverse #ActivityPub

Previous edition: mitra.social/objects/01a06eb0-…


Nach mehreren Tagen Messung möchte ich unsere Untersuchung zum ungewöhnlich
anwachsenden PHP-FPM-Pool abschließen.

Der wichtigste Befund ist inzwischen recht eindeutig:
Von 196.466 ausgewerteten Slowlog-Ereignissen enthielten 195.069 einen
curl_exec()-Aufruf, also rund 99,3 Prozent.

Zusätzlich konnten wir einen betroffenen PHP-FPM-Prozess während eines realen
Ereignisses mit ss und strace beobachten. Dabei wartete der Prozess über viele Sekunden wiederholt in poll() auf Daten eines externen HTTPS-Sockets. Über ss ließsich derselbe File-Descriptor derselben PID eindeutig einer externen Verbindung zuordnen. Gleichzeitig bestanden mehrere weitere PHP-FPM-Verbindungen zu denselben wenigen Gegenstellen.

MariaDB und Redis antworteten im selben Zeitraum dagegen sehr schnell. Der Engpass
lag also nicht primär im lokalen System, sondern im Warten auf externe HTTP-
Kommunikation.

Nach der schrittweisen Anpassung der Wartezeiten und der FPM-Reserve hat sich das
Verhalten deutlich beruhigt. Auch der Load Average ist wieder auf ein normales Niveau
zurückgegangen. Die Zahl der Slowlog-Ereignisse fiel ab dem 4. September massiv ab.

Der Slowlog ist deshalb inzwischen wieder deaktiviert.

Mein persönliches Fazit aus der Untersuchung geht inzwischen über die konkrete
Friendica-Instanz hinaus:

Eine föderierte Instanz muss nicht nur selbst stabil laufen. Sie muss auch so mit
langsamen, fehlerhaften oder zeitweise unerreichbaren Gegenstellen umgehen können,
dass deren Zustand die eigene Funktionsfähigkeit möglichst wenig beeinflusst.

Ich habe die Ergebnisse deshalb noch einmal ausführlicher in einem Fachartikel
zusammengefasst:

Föderation braucht Fehlertoleranz an den Instanzgrenzen

Hier der vollständige Artikel

Dabei verzichte ich bewusst auf konkrete Grenzwerte oder eine allgemeine „Best-Practice-
Konfiguration“. Die Werte hängen zu stark von Instanzgröße, Nutzung, Federation-
Volumen und Systemumgebung ab. Entscheidend ist aus meiner Sicht nicht das Kopieren
einzelner Parameter, sondern das Verständnis der Zusammenhänge und die Messung auf
der eigenen Instanz.

#Friendica #Fediverse #Sysadmin #ActivityPub #Federation


Week in Fediverse 2026-09-04


Servers

- Ktistec v3.12.0
- Mastodon v4.7.1
- Vernissage v1.43.0
- snac v2.95
- ActivityPub for WordPress v9.3.0
- Owncast v0.3.0
- gathio v1.6.6
- NodeBB v4.15.2
- tootik v0.25.2
- NeoDB v0.18.0
- Bonfire v1.0.7

Clients

- PleromaFE v2.11.4
- Fedilab v3.43.3
- Tuba v0.11.1
- Pixelix v5.2.0
- Summit v1.85.0
- Shoot Web App v1.3.0

Tools and Plugins

- FediFetcher v8.2.0
- Poduptime v6.3.2
- Enable Mastodon Apps v1.6.3 (WordPress plugin)

For developers

- APx v0.27.0
- Library progress report - September 2026 (GoActivityPub)

Articles

- A reasonably practical guide to validating RFC 9421 HTTP Signatures for ActivityPub in PHP

-----

#WeekInFediverse #Fediverse #ActivityPub

Previous edition: mitra.social/objects/01a04a26-…


I've just published version 2.95 of #snac, the simple, minimalistic #ActivityPub instance server written in C. This is an important release, as it fixes an issue that can lead to denial of service attacks, so please update as soon as possible. It also includes the following changes:

Fixed a bug in the notification page that made snac hang forever while trying to read abnormally big files.

Improved support for text-only web browsers: it's now possible to configure a set of web browser user-agent strings that will receive simpler HTML in the private timeline web UI. Basically, it consists in avoiding details / summary HTML tags as much as possible.

Added some fixes to media proxy code.

Fixed EmojiReact code to allow any emoticon defined in emojis.json, not only those with colon-wrapped identifiers.

Fixed a bug in notification filtering (paging was sometimes incorrect).

Added a notification filter for Webmentions.

Mastodon API: Don't return reactions count as string (contributed by mkljczk), implemented GET /v1/media (contributed by clairemont).

Fixed bug in documentation examples (contributed by Sprite_tm).

Updated Ukrainian and Russian translations (contributed by wincentbalin and koru).

comam.es/what-is-snac

If you find #snac useful, please consider buying grunfink a coffee or contributing via LiberaPay.

#snacAnnounces #FrugalFediverse



9.3.0 — Modern Signatures and a Summer of Security Reports


The media in this post is not displayed to visitors. To view it, please go to the original post.

It has been almost three months since 9.0.0, and eight releases: 9.0.1, 9.0.2, 9.1.0, 9.2.0, 9.2.1, 9.2.2, 9.3.0, and now 9.3.1. Together they added seven new things, closed ten security issues, and fixed close to fifty bugs, which is a very different balance than usual.

This post covers the new things first, and then explains where the rest of the summer went.

Modern Signatures, On by Default


Every message your site sends to the Fediverse carries a signature, the digital equivalent of a wax seal on an envelope. In July 2025 we wrote about the move from the old draft format to RFC 9421, the official standard. Back then, sending with the new format was a setting for early adopters, and we promised to turn it on for everyone once the rest of the Fediverse was ready.

With 9.3.0 it is on by default. Your site now signs outgoing requests with RFC 9421, and falls back to the old format when the server on the other side does not understand it yet. For almost everyone this changes nothing you can see. Your posts keep arriving, your follows keep working.

A small number of servers advertise support for the new format but handle it differently in practice. If your posts suddenly stop arriving on one particular server after this update, you can switch back. Open the ActivityPub settings, click Screen Options in the top right, enable Advanced Settings, and turn off the modern signature format in the Advanced tab. Please let us know in the support forum which server it was, so we can look into it.

Your Podcast Travels With Its Audio


If you publish podcast episodes with Jetpack, your episodes now federate as episodes. The audio file and the cover art travel with the post, so your followers get a playable player in their Fediverse app instead of a link they have to click through.
A screenshot of a WordPress hosted Podcast Episode on Mastodon.
Version 9.1.0 did the same for Podlove Podcast Publisher, where the episode summary now goes out with the post rather than being dropped.

A Quieter Inbox


Likes, reposts, and quotes are lovely until there are two hundred of them and your email inbox has two hundred entries. Until now, switching those off meant switching off notifications for real comments and replies too.
Screenshot of the E-Mail Notification settings in WP-Admin.
9.3.0 separates them. There is a new notification setting that turns off emails about likes, reposts, and quotes, while comments and replies from the Fediverse keep reaching you. Reactions still show up on your post, you just stop hearing about each one individually.

Smaller Things You Might Notice


  • Fediverse and ActivityPub logos in the editor. On WordPress 7.1 and newer, both logos are part of the block editor’s icon library, so you can use them in a Social Icons block or anywhere else an icon fits.
  • The follow, reply, and reaction dialogs speak up. Screen readers now announce errors in those dialogs instead of leaving people guessing why nothing happened.
  • Scheduled posts show the right preview. Since 9.1.0, a scheduled post shows the Fediverse Preview, so you can see what your followers will get before it goes out.
  • Avatars that actually update. The scheduled refresh of remote profiles was not refreshing anything. Commenters kept the avatar and bio they had when they first showed up. Fixed in 9.1.0.
  • Two new FAQ guides, added in 9.0.1, for the two questions we get most often: follow requests stuck on “pending”, and comments from the Fediverse not appearing on your posts.


For People Building on the Plugin


9.1.0 added an actor autocomplete endpoint, so a Fediverse app connected to your site can offer typeahead search when you are mentioning someone. There is also a new filter for sites that need to federate inside a private or internal network, which mostly matters for intranets and staging setups.

In 9.3.0, apps connected through the ActivityPub API now use the standard permission names from the specification, and fetching remote content through your site counts as reading rather than posting. Apps also see the real error when a post is missing, instead of a generic failure that told them nothing.

Where the Summer Went


Seven new things in three months is not much. Here is the reason.

Since June we have had a steady stream of security reports. Ten of them became entries in the changelogs of 9.1.0 and 9.3.0, and a few more landed quietly as fixes. Every report has to be read, reproduced, judged, fixed, tested, and shipped, and the fix has to be written so it does not break the sites that already work. For a team our size that is most of a week each time, sometimes more.

This is not a complaint, and a real thank you to everyone who sent a report and then waited while we worked through the queue. Nearly all of the reports were real, and every one of them made the plugin safer for the people running it. This is responsible disclosure working the way it should. It just means the roadmap moves slower than it looks on paper, and features that were planned for July are still open.

We are not alone in this. WordPress core is seeing the same wave, and for the same reason: AI models have become good enough at reading code that finding a plausible vulnerability is now cheap. The security team wrote about it in The Core Security Initiative, and the project started Protect The Shire to review the code in the plugin and theme directories at a scale that was not possible before. The same tools that raise the number of reports also help everyone work through them. On balance, we think this is good for the ecosystem, even on the weeks where it does not feel like it.

In general terms, the security work in these releases covers four areas:

  • Content from other servers is cleaned before it is stored, and again before it is displayed, so what another server sends cannot influence how your site behaves.
  • Data that belongs to you stays yours. Your followers, the profiles your site has cached, and your reader posts are not readable by logged-out visitors, and the setting that hides your follower list is respected everywhere.
  • Activities are checked more strictly against the account they claim to come from, so a server cannot act on behalf of someone else.
  • Apps you connect can only do what you allowed them to do, and nothing wider.

We are keeping this vague on purpose. The details are in the reports, and we would rather not hand a recipe to anyone whose site has not updated yet. If you run the plugin, please update.

What the Fixes Cover


The fifty or so fixes across these releases are not one story, but they fall into a few groups:

  • Finding each other. Profiles and posts were not always found when an address contained unusual characters, or was written with different capitalisation, or when the other server answered in an unexpected shape. Several fixes make lookups work in all of those cases.
  • Reactions arriving once. Likes and boosts could be recorded as duplicate comments, or come back after you marked them as spam. A deletion on Mastodon did not always remove the matching comment on your site. Both are fixed.
  • Caching. ActivityPub responses were sometimes stored by page caches meant for regular web pages. Since 9.2.0, those responses are served only to clients that ask for ActivityPub data and nothing else, which keeps them out of caches like LiteSpeed and Surge. Support for the WP REST Cache plugin was removed as part of this.
  • Publishing edge cases. Posts scheduled for a future date were removed from the Fediverse when edited. Hidden page elements, like the text inside a closed dialog, ended up in the content sent to your followers. Backslashes vanished from imported titles. Small things, annoying every time.
  • Living with other plugins. Fixes for sites running Polylang, Jetpack, Surge, and the Mastodon importer, which was creating duplicate posts when an archive was imported twice.
  • Admin screens and the editor. Styles that failed to load on the Fediverse screens and in the Followers and Following blocks, an editor warning about unsaved changes that appeared right after saving, and a handful of errors that filled up log files without breaking anything visible.

The full, item-by-item changelog for every release is in the plugin’s changelog if you want to read it in detail.

Get It


Download from WordPress.org or grab it on GitHub. If your site updates automatically, you already have it.

Thanks to everyone who filed a bug report with steps we could follow. Those are the ones that get fixed fastest.

Now that signatures are modern by default: does anything still deliver differently for you? And what would you like to see us build once the queue is shorter?


I've just published version 2.95 of #snac, the simple, minimalistic #ActivityPub instance server written in C. This is an important release, as it fixes an issue that can lead to denial of service attacks, so please update as soon as possible. It also includes the following changes:

Fixed a bug in the notification page that made snac hang forever while trying to read abnormally big files.

Improved support for text-only web browsers: it's now possible to configure a set of web browser user-agent strings that will receive simpler HTML in the private timeline web UI. Basically, it consists in avoiding details / summary HTML tags as much as possible.

Added some fixes to media proxy code.

Fixed EmojiReact code to allow any emoticon defined in emojis.json, not only those with colon-wrapped identifiers.

Fixed a bug in notification filtering (paging was sometimes incorrect).

Added a notification filter for Webmentions.

Mastodon API: Don't return reactions count as string (contributed by mkljczk), implemented GET /v1/media (contributed by clairemont).

Fixed bug in documentation examples (contributed by Sprite_tm).

Updated Ukrainian and Russian translations (contributed by wincentbalin and koru).

comam.es/what-is-snac

If you find #snac useful, please consider buying grunfink a coffee or contributing via LiberaPay.

#snacAnnounces #FrugalFediverse


🆕 blog! “Book Review: ActivityPub by Evan Prodromou”
★★★★⯪

As part of my grant from NLnet to improve my Fediverse bot project, I'm spending time making sure I understand all the fundamentals of ActivityPub. The problem with Internet standards is they're scattered all over the place. Abandoned forums, half-maintained wikis, mailing lists with obscure rules, and…

👀 Read more: shkspr.mobi/blog/2026/09/book-…

#ActivityPub #BookReview


Week in Fediverse 2026-08-28


Servers

- Hollo v0.9.13
- gush! v0.0.41
- tootik v0.25.0
- Mitra v5.10.0
- Pixelfed v0.12.9
- Hollo v0.9.15
- Funkwhale v2.0.10
- PieFed v1.7.13
- tootik v0.25.1
- NeoDB v0.17.8

Clients

- Pachli v3.8.1
- Fedilab v3.43.2
- RaccoonForFriendica v1.1.0

For developers

- Fedify v2.3.6

Protocol

- FEP-49eb: Batched Inbox Delivery

Articles

- A crawler wanted to know who talks to whom on our server
- The Problems and Successes of Fediverse Comments on my blog
- The Fediverse is Throwing a Music Festival

-----

#WeekInFediverse #Fediverse #ActivityPub

Previous edition: mitra.social/objects/01a0269e-…


Say goodbye to Linked Data Signatures


blog.joinmastodon.org/2026/08/…

We now support verifying FEP-8b32 Object Integrity Proofs using either eddsa-jcs-2022 or mldsa44-jcs-2024.


The latest version of Mastodon can verify FEP-8b32 integrity proofs, which replace outdated Linked Data Signatures.

Docs: docs.joinmastodon.org/spec/sec…

#activitypub #fedidev #fep_8b32


Week in Fediverse 2026-08-21


Servers

- Funkwhale v2.0.8
- PieFed v1.7.11
- TinyAP v0.1.13
- Wafrn v2026.08.04
- Mastodon v4.7.0
- gathio v1.6.5
- NeoDB v0.17.7
- NodeBB v4.15.1
- Flox v2.7.0
- 5.0: Laying the foundation (Mastodon)

Clients

- PleromaFE v2.11.3
- chan-fe v0.3.0
- Tuba v0.11.0
- Mangane v1.24.3
- Mastodon for iOS v2026.07
- Miria v4.0.0+125
- Summit v1.84.0
- Voyager v2.48.5
- Pixelix v5.1.1

Tools and Plugins

- Pluraldawn: Decodes indicator emoji information from account avatars to provide a PluralKit-esque experience inside of various fediverse webapps

Protocol

- ActivityPub Miscellaneous Terms

Articles

- Implementing Pagination for ActivityPub Collections
- Owncast Newsletter August 2026

-----

#WeekInFediverse #Fediverse #ActivityPub

Previous edition: mitra.social/objects/01a001c8-…


Week in Fediverse 2026-08-14


Servers

- Akkoma v2026.08
- WriteFreely v0.17.2
- Wafrn v2026.08.03
- Mitra v5.9.0
- Ktistec v3.11.0
- Hollo v0.9.11
- Mastodon v4.6.6
- Forte v26.8.11
- gathio v1.6.4
- ActivityPub for WordPress v9.2.2
- NeoDB v0.17.6
- NodeBB v4.15.0
- Trunk & Tidbits, July 2026 (Mastodon)

Clients

- Aria v1.5.11
- Snowdrop: Multiplatform client for Mastodon API compatable Fediverse software

Tools and Plugins

- FediFetcher v9.1.1

For developers

- Fedipub v0.9.0
- Library progress report - August 2026 (GoActivityPub)

Protocol

- FEP-e4de: Closing Registration on Unattended Servers
- FEP-633c: Guardians

Articles

- Deploying your own Vernissage instance

-----

#WeekInFediverse #Fediverse #ActivityPub

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


I really think we can bring proximity back to social networks, and #ActivityPub is the best place for it.

#FediHood connects you with people in your own city. Posts carry a local topic: help, events, buy and sell, meet people, news.

Moderators earn their role through good actions in their own area, and lose it through bad ones. The power stays with the users, not with big tech that puts money before moderation.

fedihood.social


Hello World


Coucou! This is just a first post announcing Nuages to the world.

Nuages is an ActivityPub app, connecting to your favourite servers that support the Client to Server API.

Follow us to get our latest updates, we’ll be officially launching the app in the coming weeks 😉

#ActivityPub #c2s #ActivityPubAPI #Fediverse


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-…