Thoughts
A self-hosted microblogging server with full ActivityPub federation. Write short posts, follow people on Mastodon and other Fediverse servers, and receive their posts in your feed. Built in Rust with a Next.js frontend.
Tagline: Your Space, Your Friends, Your Feed.
Features
- Short-form posts ("thoughts") with replies, boosts, and likes
- Full ActivityPub federation — follow/unfollow remote actors, accept/reject followers, federated content broadcast as
Note objects, paginated outbox, NodeInfo discovery, WebFinger, shared inbox, actor profile sync
- Remote actor discovery — search by
@user@instance handle, view full remote profiles (bio, banner, profile fields, posts, followers, following tabs), follow from within the UI
- Worker-backed remote caches — remote posts and follower/following lists are fetched by the NATS worker and cached locally; profiles populate on first visit and refresh in the background
- Content negotiation at
GET /users/{username} — serves ActivityPub actor JSON or REST profile based on Accept header
- Federation moderation — per-instance domain blocking, per-user actor blocking with
Block activity delivery
- Async event fan-out via NATS JetStream — notifications and AP delivery run in a separate worker process
- JWT authentication (Bearer token) and long-lived API keys
- OpenAPI docs at
/docs (Swagger UI) and /scalar (Scalar)
- Full-text search over thoughts and users via PostgreSQL trigram indexes
- Top friends — pin up to 5 users as highlighted contacts
- Home feed, public feed, and per-user thought timelines
- Notifications
Guiding Principles
| Principle |
Description |
| Chronological Above All |
The main feed is always reverse-chronological. No algorithmic sorting. |
| User in Control |
Users decide what they see by choosing who to follow. No suggestions. |
| Radical Self-Expression |
Profiles support custom CSS for full personalization. |
| Open and Federated |
ActivityPub federation is a primary, not secondary, feature. |
| API-First Design |
The backend is the core service; the frontend is just the first client. |
Stack
| Layer |
Technology |
| Backend |
Rust (Axum) — hexagonal architecture |
| Event transport |
NATS JetStream |
| Frontend |
Next.js (SSR) |
| Database |
PostgreSQL 15+ |
| Reverse Proxy |
Nginx |
| Deployment |
Docker + Docker Compose |
Wiki Pages