Help us improve
Share bugs, ideas, or general feedback.
From vibefed
Provides reference for FEDERATION.md (FEP-67ff), convention for documenting Fediverse federation behavior including protocols, FEPs, ActivityPub details, spec requirements, template, NodeInfo discovery, DOAP, and examples from 40+ projects like Mastodon.
npx claudepluginhub reiver/vibefed --plugin vibefedHow this skill is triggered — by the user, by Claude, or both
Slash command
/vibefed:kb-fediverse-federation-mdThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
FEDERATION.md is a convention for documenting how a project implements
Guides technical evaluation of code review feedback: read fully, restate for understanding, verify against codebase, respond with reasoning or pushback before implementing.
Share bugs, ideas, or general feedback.
FEDERATION.md is a convention for documenting how a project implements federation protocols. Formalized as FEP-67ff (authored by silverpill, status FINAL, finalized 2024-09-22), it provides a standardized location and format for interoperability documentation — analogous to README.md for project description or CONTRIBUTING.md for contributor guidelines.
The convention originated in January 2020 when Darius Kazemi (creator of gath.io) proposed a standard documentation file after struggling to understand how other servers handled federation. It grew organically to 12+ implementations before silverpill formalized it as a FEP in April 2023. Over 40 projects have now adopted it, including Mastodon, Pixelfed, Lemmy, WordPress ActivityPub, GoToSocial, and PeerTube.
Only two hard requirements:
Soft requirements (SHOULD):
The file "can have arbitrary structure and content" — the spec deliberately avoids mandating a rigid format, allowing each project to document what matters most for its federation behavior.
The specification provides a reference template with these sections:
List the protocols the project implements:
## Supported federation protocols and standards
- [ActivityPub](https://www.w3.org/TR/activitypub/) (Server-to-Server)
- [WebFinger](https://webfinger.net/)
- [HTTP Signatures](https://datatracker.ietf.org/doc/html/draft-cavage-http-signatures)
- [NodeInfo](https://nodeinfo.diaspora.software/)
List adopted Fediverse Enhancement Proposals:
## Supported FEPs
- [FEP-67ff: FEDERATION.md](https://codeberg.org/fediverse/fep/src/branch/main/fep/67ff/fep-67ff.md)
- [FEP-f1d5: NodeInfo in Fediverse Software](https://codeberg.org/fediverse/fep/src/branch/main/fep/f1d5/fep-f1d5.md)
Detailed sections covering:
ActivityPub is a protocol specification that leaves many implementation details up to individual servers. Different implementations make different choices about:
Before FEDERATION.md, the only way to understand another implementation's behavior was to read their source code, reverse-engineer through testing, or ask on forums. This was particularly painful because the Fediverse has dozens of implementations in different programming languages.
FEDERATION.md provides a single, predictable file location where developers can find all federation-relevant documentation. By placing it at the repository root as a Markdown file, it follows established open-source conventions (like README.md, CONTRIBUTING.md, LICENSE) and is immediately accessible via any code hosting platform.
Mastodon's file documents:
Documents support for:
Both files follow a similar structure — protocols section, FEPs section, then detailed ActivityPub documentation — but neither uses a rigid template. They adapted the convention to their needs.
FEDERATION.md files can potentially be discovered automatically via
NodeInfo 2.1's software.repository field, which points to the project's
source code repository. A crawler could follow this link and look for
FEDERATION.md at the repository root.
{
"software": {
"name": "mastodon",
"version": "4.3.0",
"repository": "https://github.com/mastodon/mastodon"
}
}
From this, a tool can construct:
https://github.com/mastodon/mastodon/blob/main/FEDERATION.md
This approach requires the software.repository field (added in NodeInfo
2.1) and depends on the repository being publicly accessible. Many
instances run forks or customized versions where the repository URL may
not point to the right FEDERATION.md.
FEP-c893 (by AvidSeeker, status DRAFT, received July 2024) proposes a
doap.jsonld file as a machine-readable companion to FEDERATION.md.
A JSON-LD file using the DOAP (Description of a Project) vocabulary:
{
"@context": {
"doap": "http://usefulinc.com/ns/doap#",
"foaf": "http://xmlns.com/foaf/0.1/"
},
"@type": "doap:Project",
"doap:name": "Example Server",
"doap:homepage": "https://example.com",
"doap:description": {
"@language": "en",
"@value": "A federated social media server"
},
"doap:implements": [
"https://www.w3.org/TR/activitypub/",
"https://webfinger.net/"
],
"doap:supportedFEPs": [
"https://codeberg.org/fediverse/fep/src/branch/main/fep/67ff/fep-67ff.md"
],
"doap:maintainer": {
"@type": "foaf:Person",
"foaf:name": "Alice Developer"
}
}
| Field | Purpose |
|---|---|
doap:name | Project name |
doap:homepage | Project website |
doap:description | Multilingual description |
doap:repository | Repository URLs |
doap:release | Version and date information |
doap:implements | Federation protocols supported |
doap:supportedFEPs | Adopted FEPs |
doap:maintainer | Project maintainers |
FEP-c893 is the machine-readable counterpart to FEP-67ff's human-readable FEDERATION.md. Together they provide both developer documentation and automated capability discovery. This pairing was inspired by XMPP's XEP-0453, which uses the same DOAP vocabulary for capability reporting.
Create the file at the root of your project repository
List supported protocols:
List supported FEPs with links to the FEP specifications
Document ActivityPub behavior — this is the most valuable section:
Document addressing and delivery:
Note known limitations:
In January 2020, Darius Kazemi (creator of gath.io, a federated event organizing service, and Fellow at the Berkman Klein Center for Internet & Society) proposed FEDERATION.md on SocialHub. He had been implementing federation for gath.io and felt implementers needed better documentation on server behavior.
His original FEDERATION.md had three sections:
| Date | Event |
|---|---|
| January 5, 2020 | Darius Kazemi proposes FEDERATION.md on SocialHub |
| January 9, 2020 | WriteFreely becomes first adopter |
| February 4, 2020 | Zot (Hubzilla family) adopts |
| February 8, 2020 | Discussed at W3C Social CG meeting |
| March–October 2020 | tavern, Smithereen, Lemmy adopt |
| April 2023 | silverpill proposes FEP-67ff (~12 implementations) |
| September 5, 2023 | FEP-67ff received as DRAFT |
| September 22, 2024 | FEP-67ff achieves FINAL status |
| Present | 40+ implementations |
The convention grew organically for over 3 years before being formalized as a FEP. This "convention first, spec second" approach means FEP-67ff codified existing practice rather than inventing new requirements — a pattern that contributed to its successful adoption and FINAL status.
Over 40 projects have adopted FEDERATION.md, including:
| Project | Category |
|---|---|
| Mastodon | Microblogging |
| Pleroma / Akkoma | Microblogging |
| GoToSocial | Microblogging |
| Pixelfed | Photo sharing |
| PeerTube | Video sharing |
| Lemmy | Link aggregation |
| BookWyrm | Book reviews |
| WriteFreely | Long-form writing |
| Friendica | Social networking |
| Hubzilla | Social networking |
| Funkwhale | Music sharing |
| WordPress ActivityPub | Blogging plugin |
| Mitra | Microblogging |
| Smithereen | Social networking |
| Bonfire | Social networking |
FEDERATION.md addresses documentation but not machine-readable discovery. Several other FEPs tackle the machine-readable side:
| FEP | Approach | Machine-readable? | Status |
|---|---|---|---|
| FEP-67ff | FEDERATION.md documentation | No (human only) | FINAL |
| FEP-c893 | DOAP JSON-LD companion file | Yes | DRAFT |
| FEP-6481 | IRI list in NodeInfo metadata | Yes | WITHDRAWN |
| FEP-9fde | Reverse-FQDN operations in NodeInfo | Yes | DRAFT |
| FEP-eb22 | Type lists in NodeInfo | Yes | DRAFT |
| FEP-844e | Capability URIs on AP actors | Yes | DRAFT |
FEP-67ff is the only capability-related FEP to reach FINAL status. Its success is partly because it focused on the simplest possible requirement (a Markdown file) rather than trying to solve machine-readable discovery.
software.repository field helps
but is not universally implemented.