Libraries & SDKs Overview
This page provides an overview of ActivityPub libraries available for different programming languages.
By Language
JavaScript/TypeScript
| Library | Description | Status |
|---|---|---|
| Fedify | Modern TypeScript framework | Active |
| activitypub-express | Express.js middleware | Active |
| ActivityPub.js | General-purpose library | Maintenance |
Python
| Library | Description | Status |
|---|---|---|
| bovine | ActivityPub library | Active |
| little-boxes | ActivityPub toolkit | Maintenance |
| Federation | Protocol support | Active |
Go
| Library | Description | Status |
|---|---|---|
| go-fed/activity | Complete implementation | Active |
| go-ap | ActivityPub packages | Active |
| pub | WriteFreely's library | Maintenance |
Rust
| Library | Description | Status |
|---|---|---|
| activitypub-federation | Lemmy's library | Active |
| activitystreams | Types library | Active |
Ruby
| Library | Description | Status |
|---|---|---|
| Mastodon source | Reference implementation | Active |
PHP
| Library | Description | Status |
|---|---|---|
| ActivityPub for WordPress | WordPress plugin | Active |
| Pixelfed source | Reference for PHP | Active |
Choosing a Library
For Quick Prototypes
- JavaScript: activitypub-express (easiest setup)
- Python: bovine or little-boxes
- Go: go-fed/activity (most complete)
For Production
- TypeScript: Fedify (modern, maintained)
- Rust: activitypub-federation (battle-tested)
- Go: go-fed/activity or GoToSocial's code
For Learning
- Study existing implementations:
- GoToSocial (Go) - Clean, well-documented
- Mastodon (Ruby) - Reference implementation
- Lemmy (Rust) - Modern architecture
What Libraries Provide
Core Features
- JSON-LD context handling
- ActivityStreams type definitions
- Activity serialization/deserialization
Federation Features
- HTTP Signature signing/verification
- WebFinger client/server
- Inbox/Outbox handling
- Activity delivery
Optional Features
- Database integration
- Queue management
- Caching
- Rate limiting
Library Maturity Levels
Production Ready
- activitypub-federation (Rust)
- go-fed/activity (Go)
- Fedify (TypeScript)
Stable
- activitypub-express (JavaScript)
- bovine (Python)
Experimental
- Various new projects
Building Without a Library
If no library fits your needs, you can implement from scratch:
- Start simple: WebFinger + Actor endpoint
- Add inbox: Receive activities
- Add signing: HTTP Signatures
- Add delivery: Send to other servers
See our implementation guides for step-by-step instructions.
Contributing to Libraries
Most libraries welcome contributions:
- Bug fixes and tests
- Documentation improvements
- Feature additions
- Compatibility fixes
Check each library's contribution guidelines.
See Also
- JavaScript Libraries - Detailed JS options
- Python Libraries - Python options
- Go Libraries - Go options
- Choosing Your Stack - Stack selection