Verified against Links and GitHub API repository status checked 2026-10-15; Mastodon v4.7.3 context_helper.rb; Matrix directory API; Stack Exchange API on 2026-10-15.
Developer Resources
A collection of libraries, tools, and resources for building ActivityPub and Fediverse applications.
Libraries
Library listings, with maintenance status taken from package registries and forges, live on the ecosystem pages:
- Libraries overview — what to pick, by language
- Fedify (TypeScript), JavaScript, Python, Go, Rust, Ruby, PHP, other languages
Tools
Testing & Debugging
| Tool | Description |
|---|---|
| FediDB | Fediverse network statistics |
Development Utilities
| Tool | Description |
|---|---|
| JSON-LD Playground | Test JSON-LD processing |
| WebFinger Tester | Test WebFinger discovery |
Reference Implementations
Full Servers
Widely deployed servers whose source is worth reading (see Server Software for the full list):
- Microblogging: Mastodon (Ruby), Pleroma (Elixir), Misskey (TypeScript), GoToSocial (Go)
- Link aggregation: Lemmy (Rust)
- Photos: Pixelfed (PHP)
- Video: PeerTube (TypeScript)
- Blogging: WriteFreely (Go); Plume (Rust, little activity since April 2025)
Minimal Examples
| Project | Language | Purpose |
|---|---|---|
| express-activitypub | Node.js | Small single-user server by Darius Kazemi — readable, but not a security reference |
| microblog.pub | Python | Single-user server (no GitHub activity since 2023) |
Specifications
Core Standards
| Specification | URL |
|---|---|
| ActivityPub | w3.org/TR/activitypub |
| ActivityStreams 2.0 Core | w3.org/TR/activitystreams-core |
| ActivityStreams 2.0 Vocabulary | w3.org/TR/activitystreams-vocabulary |
| JSON-LD | w3.org/TR/json-ld |
| WebFinger | RFC 7033 |
De Facto Standards
| Specification | Documentation |
|---|---|
| HTTP Signatures | draft-cavage-12, RFC 9421, SWICG report, Mastodon's profile |
| NodeInfo | nodeinfo.diaspora.software |
| Mastodon Extensions | docs.joinmastodon.org |
Learning Resources
Tutorials
| Resource | Description |
|---|---|
| ActivityPub Rocks | Official resource site |
| How to Implement ActivityPub | Mastodon blog tutorial |
Diagrams & Visual References
| Resource | Description |
|---|---|
| boyter/activitypub | Sequence diagrams for common flows: Follow, Create, Delete, Announce, Move, WebFinger — a "clean room" implementation reference (MIT) |
Books
| Resource | Description |
|---|---|
| ActivityPub: Programming for the Social Web | Evan Prodromou (O'Reilly, 2024) — building ActivityPub clients and servers, by a co-author of the spec |
| Move Slowly and Build Bridges | Robert W. Gehl (Oxford University Press, 2025) — history and culture of Mastodon and the Fediverse |
Community Resources
Forums & Discussion
| Resource | Description |
|---|---|
| SocialHub | Developer community forum |
| Lemmy Communities | Fediverse discussions |
| #fediverse:matrix.org | Matrix chat room |
News & Updates
| Resource | Description |
|---|---|
| We Distribute | Fediverse news |
| Fediverse Report | Weekly updates |
Curated Lists
| Resource | URL |
|---|---|
| Delightful AP Development | codeberg.org/fediverse/delightful-activitypub-development |
| Awesome ActivityPub | github.com/BasixKOR/awesome-activitypub |
| Fediverse.Party Tools | fediverse.party/en/tools |
API Documentation
Platform APIs
| Platform | Documentation |
|---|---|
| Mastodon | docs.joinmastodon.org/api |
| Lemmy | join-lemmy.org/docs |
| Pixelfed | docs.pixelfed.org |
| PeerTube | docs.joinpeertube.org/api-rest-reference |
Library Documentation
| Library | Documentation |
|---|---|
| Fedify | fedify.dev |
| go-fed/activity (unmaintained since 2022) | pkg.go.dev/github.com/go-fed/activity |
| activitypub-federation-rust | docs.rs/activitypub_federation |
Quick Reference
Essential URLs
- Specifications: w3.org/TR/activitypub, w3.org/TR/activitystreams-core, w3.org/TR/activitystreams-vocabulary
- Community: socialhub.activitypub.rocks, activitypub.rocks, codeberg.org/fediverse/fep
- Tools: json-ld.org/playground, webfinger.net/lookup, fedidb.org
Common Namespaces
Mastodon's context, including the schema: terms it uses for profile fields (context_helper.rb):
{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://w3id.org/security/v1",
{
"toot": "http://joinmastodon.org/ns#",
"schema": "http://schema.org#",
"PropertyValue": "schema:PropertyValue",
"value": "schema:value"
}
]
}
Getting Help
Where to Ask Questions
- SocialHub Forum - Best for implementation questions
- Matrix Rooms - Real-time help
- GitHub Issues - Library-specific questions
- Stack Overflow - the
activitypubtag exists but sees little traffic; SocialHub is usually faster
Debugging Tips
// Log incoming activities while debugging (never log secrets in production)
app.post('/inbox', express.raw({ type: '*/*', limit: '1mb' }), (req, res) => {
console.log('Received activity:', req.body.toString());
// Verify, then process...
res.sendStatus(202);
});
To check signatures, don't hand-roll a verifier: see Verifying incoming requests for tested code, or use your framework's built-in verification.
Next Steps
- Getting Started - Begin development
- ActivityPub Protocol - Learn the protocol
- Implementation Guides - Step-by-step guides