Fediverse Resources

Building on the Fediverse is hard. Here is a list of ActivityPub and other developer resources that have been helpful in developing Emissary. This is not a canonical or official list by any means, but hopefully this list of bookmarks is valuable to others who are building their own Fediverse apps.

Life comes at you fast. Stuff may have changed since this page was updated March 2024.

Official Specifications

  • ActivityPub is the protocol for sending messages between Actors’ inboxes and outboxes. This spec does not work on its own, but requires apps to implement many other specs and protocols in order to function on the Fediverse.
  • ActivityStreams 2.0 specifies the JSON format for messages sent via ActivityPub, along with documents available for download via users’ profiles and outboxes.
  • Activity Vocabulary specifies the vocabulary terms that appear in an ActivityStream document. This is a very useful map to understanding how ActivityPub is used, but remember that these terms are loosely defined, and may be used differently by different applications.
  • WebFinger is a straightforward discovery protocol that is required to integrate with most Fediverse applications. Emissary supports this with the digit library
  • HTTP Signatures (draft Cavage) are required by most Fediverse apps in order to authenticate messages. This draft is an older version of the specification that is currently in use by most Fediverse Apps. Emissary supports this with the hannibal library
  • HTTP Signatures (current) is the newest version of the HTTP signatures specification that has been finalized after many years in draft form. As of spring 2024, I don’t know how well supported this is.
  • OAuth is commonly used to generate API tokens that allow users and apps to sign in to Fediverse servers.
  • NodeInfo and Host-Meta are meta-data formats that publish statistics about a server’s software and community. They’re not exactly required to send messages to other servers, but is a good idea to include.

Tutorials

  • ActivityPub Primer The W3C Wiki includes a series of articles detailing how many ActivityPub messages should be sent and received. It’s a good starting place for understanding ActivityPub development.
  • Understanding ActivityPub is an extensive tutorial for understanding how ActivityPub works in the real world.
  • Signing HTTP Messages walks you through creating, verifying, and testing HTTP signatures.

Fediverse Community

  • FediForum is a semi-annual online un-conference dedicated to all things Fediverse. Usually March and September. You should attend.
  • IFTAS is dedicated to “Federated Trust and Safety” by providing tools and resources to site moderators to keep all that junk off the Fediverse.
  • FediDB Networks statistics across the whole Fediverse – or as much of it as we know about.

Developer Community

  • FediDevs is the central developer group for Fediverse developers. If you’re building ActivityPub apps, get involved here.
  • ActivityPub Rocks is an older hub for ActivityPub development. It has some good introductory information about building ActivityPub apps, but it has not been updated in quite some time, so it should not be trusted for details on current specs or implementations.
  • SocialHub is an active community forum that host many Fediverse developer discussions
  • Fediverse Enhancement Proposals (FEPs) is a Git repository of proposed enhancements to Fediverse specifications. Applications will often list the FEPs that they support. Example: Emissary’s FEP support list
  • Fediverse Ideas is a Git repository to discuss ideas that are not ready for a formal FEP.
  • W3C SWICG is the standards body doing current development on ActivityPub and its implementations.

Developer Resources

  • Delightful Fediverse Development is a curated list of developer tools across a wide variety of languages and environments. If you’re looking for libraries to help you get started, check out this list first.
  • Delightful Fediverse Apps is a curated list of applications on the Fediverse. It is pretty comprehensive, though it contains many apps that have long been abandoned.
  • ActivityPub.academy is a modified Mastodon instance that lets you create a test account, then watch the ActivityPub messages sent/received as you interact with other Fediverse apps.
  • HTTP Signatures Demo demonstrates both signing and verifying HTTP signatures.

Testing Tools

Unfortunately, there are no perfect tools for testing ActivityPub applications at the moment. But, there are several projects in the works, so hopefuly this will change in the near future. Here’s what I’m aware of currently.

  • Fun Fediverse Development is doing a lot of great work, including an online actor verification tool, a set of docker images of popular servers to test against, and support tables to test how your application will process data from different servers.
  • ActivityPub Academy, mentioned above, allows you to trace actual ActivityPub messages with a live Mastodon server.
  • Feditest is an ongoing effort to build a reliable testing framework that spans all Fediverse apps. Watch this space!
  • PubKit is a testing suite from the maker of PixelFed that looks amazing, but has been “Coming Soon” for several months. If it ships, it will be a game changer.

Go Resources

Here are the libraries that I have considered and used to build ActivityPub support in Emissary.

  • Go-Fed is the original ActivityPub framework for Go, and is used by several apps. I evaluated this a couple of times, but it was too complicated for me. It relies on code generation to enumerate all of the possible actions that can be taken on a document, which leads to some absolutely enormous objects.
  • Go-AP is a newer ActivityPub framework that seems much more approachable than go-fed. I also evaluated this one, but ultimately built my own so that I could understand what was happening under the hood.
  • Hannibal was built for Emissary. It includes implementations for activitystreams documents, vocabulary, inbox, outbox, and http signatures. Hannibal is fast-and-loose with the standards (especially ActivityStreams @context) but it is easy to use and smoothes over the rough edges of Fediverse development.
  • Digit implements WebFinger objects in Go. You’ll still need to make HTTP handlers to server WebFinger requests, but this makes the process pretty simple.
  • Toot implements the Mastodon server API, allowing Emissary to work with clients that are intended for Mastodon. (in progress)
  • Sherlock is the oddball in this space. This library looks up metadata for any web page (or user profile) and then returns a faked ActivityStream representation of the resource. It makes every page on the Internet look like it supports ActivityStreams, even if it does not.