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

  • Guide for New ActivityPub Implementors is a good high-level tour of the ActivityPub ecosystem.
  • 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.
  • Remote Follows are one of the cool, older Fediverse features that have been left behind by the documentation. This is a really good tutorial on how to implement them.

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 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.
  • 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

FEPs to Watch

Speaking of Fediverse Enhancement Proposals (FEPs), here is an (incomplete) list of some that I think you should check out.

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.
  • Browser Pub is a fantastic debugging tool that loads and analyzes ActivityPub/ActivityStream objects.
  • Feditest is an ongoing effort to build a reliable testing framework that spans all Fediverse apps. Watch this space!
  • PEM Parser validates public keys are correctly encoded
  • JSON-LD Playground is a robust online validator that verifies JSON-LD documents.
  • JSON lint is a simple online JSON validator to check that your JSON is formatted correctly.

Go Resources

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

  • 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 was built for Emissary, but 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.

  • 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.