Skip to main content

Developer Resources

A comprehensive collection of libraries, tools, and resources for building ActivityPub and Fediverse applications.

Libraries by Language

JavaScript / TypeScript

LibraryDescriptionLicense
FedifyFull ActivityPub server frameworkMIT
ActivityPub ExpressExpress.js middleware for ActivityPubMIT
express-activitypubSimple reference implementationMIT
activitystreams-2ActivityStreams 2.0 libraryApache-2.0
http-signatureHTTP Signatures implementationMIT
one-page-pubMinimal ActivityPub serverApache-2.0
// Example: Using Fedify
import { createFederation } from '@fedify/fedify';

const federation = createFederation({
kv: new DenoKvStore(await Deno.openKv()),
});

federation.setActorDispatcher('/users/{handle}', async (ctx, handle) => {
// Return actor object
});

Python

LibraryDescriptionLicense
federationMulti-protocol social web libraryBSD-3
little-boxesMinimal ActivityPub frameworkISC
bovineFediverse application libraryMIT
pyfedType-safe ActivityPub libraryMIT
TakahēMulti-domain AP serverBSD-3
# Example: Using federation library
from federation.entities import base
from federation.outbound import handle_create

entity = base.Post(
raw_content="Hello from Python!",
id="https://example.com/posts/1"
)

Rust

LibraryDescriptionLicense
activitypub-federationHigh-level AP framework (from Lemmy)AGPL-3.0
activitystreamsTraits and types for AS/APGPL-3.0
megalodon-rsMastodon/Pleroma API clientApache-2.0
// Example: Using activitypub-federation
use activitypub_federation::config::FederationConfig;

let config = FederationConfig::builder()
.domain("example.com")
.app_data(data)
.build()?;

Go

LibraryDescriptionLicense
go-fed/activityFull AS/AP implementationBSD-3
astreamsActivityStreams 2.0 libraryAGPL-3.0
HannibalActivityPub libraryApache-2.0
go-activitypubAP service implementationISC
// Example: Using go-fed/activity
import "github.com/go-fed/activity/streams"

note := streams.NewActivityStreamsNote()
note.GetActivityStreamsContent().Set(/* ... */)

PHP

LibraryDescriptionLicense
ActivityPub-PHPActivityPub implementationMIT
FediTextText processing for FediverseMIT

Ruby

LibraryDescriptionLicense
activitypubReference (Mastodon codebase)AGPL-3.0

Elixir

LibraryDescriptionLicense
activity_pubActivityPub libraryAGPL-3.0
PleromaFull implementation referenceAGPL-3.0

Tools

Testing & Debugging

ToolDescription
activitypub-testsuiteW3C conformance tests
FediDBFediverse network statistics
Fediverse ObserverInstance monitoring

Development Utilities

ToolDescription
HTTP Signature TesterVerify signature implementation
JSON-LD PlaygroundTest JSON-LD processing
WebFinger TesterTest WebFinger discovery

Instance Management

ToolDescription
FediblockModeration blocklists
The FederationNetwork statistics

Reference Implementations

Full Servers

┌────────────────────────────────────────────────────────────┐
│ REFERENCE IMPLEMENTATIONS │
├────────────────────────────────────────────────────────────┤
│ │
│ Microblogging │
│ ├── Mastodon (Ruby) - mastodon/mastodon │
│ ├── Pleroma (Elixir) - pleroma/pleroma │
│ └── Misskey (TS) - misskey-dev/misskey │
│ │
│ Link Aggregation │
│ └── Lemmy (Rust) - LemmyNet/lemmy │
│ │
│ Photo Sharing │
│ └── Pixelfed (PHP) - pixelfed/pixelfed │
│ │
│ Video │
│ └── PeerTube (TS) - Chocobozzz/PeerTube │
│ │
│ Blogging │
│ ├── WriteFreely (Go) - writefreely/writefreely │
│ └── Plume (Rust) - Plume-org/Plume │
│ │
└────────────────────────────────────────────────────────────┘

Minimal Examples

ProjectLanguagePurpose
one-page-pubNode.jsSingle-file AP server
express-activitypubNode.jsReference implementation
microblog.pubPythonSingle-user server

Specifications

Core Standards

SpecificationURL
ActivityPubw3.org/TR/activitypub
ActivityStreams 2.0 Corew3.org/TR/activitystreams-core
ActivityStreams 2.0 Vocabularyw3.org/TR/activitystreams-vocabulary
JSON-LDw3.org/TR/json-ld
WebFingerRFC 7033

De Facto Standards

SpecificationDocumentation
HTTP Signaturesdocs.joinmastodon.org/spec/security
NodeInfonodeinfo.diaspora.software
Mastodon Extensionsdocs.joinmastodon.org

Learning Resources

Tutorials

ResourceDescription
ActivityPub RocksOfficial resource site
How to Implement ActivityPubMastodon blog tutorial
Building an ActivityPub ServerSocialHub discussion

Video Content

ResourceDescription
FediForum RecordingsPast session recordings
PeerTube InstancesVarious developer tutorials

Books

ResourceDescription
Move Slowly and Build BridgesRobert W. Gehl's book on Mastodon

Community Resources

Forums & Discussion

ResourceDescription
SocialHubDeveloper community forum
Lemmy CommunitiesFediverse discussions
Matrix/DiscordReal-time chat

News & Updates

ResourceDescription
We DistributeFediverse news
Fediverse ReportWeekly updates
This Week in MatrixRelated protocol news

Curated Lists

ResourceURL
Delightful AP Developmentcodeberg.org/fediverse/delightful-activitypub-development
Awesome ActivityPubgithub.com/BasixKOR/awesome-activitypub
Fediverse.Party Toolsfediverse.party/en/tools

API Documentation

Platform APIs

PlatformDocumentation
Mastodondocs.joinmastodon.org/api
Lemmyjoin-lemmy.org/docs
Pixelfeddocs.pixelfed.org
PeerTubedocs.joinpeertube.org/api-rest-reference

Library Documentation

LibraryDocumentation
Fedifyfedify.dev/docs
go-fed/activitygo-fed.org
activitypub-federation-rustdocs.rs/activitypub_federation

Quick Reference

Essential URLs

┌────────────────────────────────────────────────────────────┐
│ 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

{
"@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

  1. SocialHub Forum - Best for implementation questions
  2. Matrix Rooms - Real-time help
  3. GitHub Issues - Library-specific questions
  4. Stack Overflow - Tag with activitypub

Debugging Tips

// Log incoming activities
app.post('/inbox', (req, res) => {
console.log('Received activity:', JSON.stringify(req.body, null, 2));
// Process activity...
});

// Verify HTTP signatures
const isValid = await verifySignature(req);
console.log('Signature valid:', isValid);

Next Steps