Smithereen stands out in the fediverse landscape by deliberately rejecting the usual conventions that define most ActivityPub servers. No hashtags, no public feeds, no global search, and no custom emojis. This isn’t an oversight; it’s a conscious design choice to enforce a social experience grounded in real-life connections rather than content discovery or viral trends.
What smithereen does and how it is built
Smithereen is a self-hostable social network server compatible with ActivityPub, written entirely in Java. It requires JDK 21 or newer, MySQL (but explicitly not MariaDB due to incompatibilities), and uses imgproxy with libvips for image processing and resizing. The deployment model is a traditional monolithic JAR file bundled with native imgproxy and libvips binaries.
The architecture follows a monolithic server design rather than microservices, simplifying deployment and operation. For media storage, Smithereen supports optional S3-compatible object storage, which is common in self-hosted apps to offload media from local disk and improve scalability.
Under the hood, it implements ActivityPub federation but rejects popular fediverse features such as:
- Hashtags for content discovery
- Public/global timelines or feeds
- Global search functionality
- Custom emojis
- Logo accounts (accounts that serve as official brand identities)
This creates a fundamentally different social graph experience focusing exclusively on direct and indirect real-life connections rather than the viral or topical content discovery model dominating most federated networks.
What distinguishes smithereen: a contrarian approach to fediverse design
The defining technical and philosophical strength of Smithereen is its contrarian stance against common fediverse norms. This is not just a UX difference but impacts the code, the database queries, and the network traffic patterns.
By removing features like hashtags and public feeds, Smithereen avoids broad content indexing and large-scale discovery queries, which can be resource-intensive and lead to moderation challenges. This reduces the attack surface for spam and content pollution.
The tradeoff is clear: users cannot discover new accounts or content beyond their established social graph, which may limit growth or serendipitous content discovery but improves trust and authenticity.
From a code perspective, the absence of these features simplifies some components but requires careful design to handle federated inboxes and outboxes focused on direct interactions. The project’s codebase is surprisingly clean for a social network server, with clear separation between federation logic, user management, and media handling.
The choice of MySQL over MariaDB is notable; Smithereen specifically warns against MariaDB due to compatibility issues, highlighting the importance of strict database behavior for its transactional integrity and migrations.
The use of imgproxy and libvips for image processing is a solid choice for performance and security, allowing efficient resizing and optimization without relying on heavier image libraries.
One limitation is the monolithic architecture, which might pose scaling challenges for very large deployments, but it fits well with the self-hosted philosophy and simplicity.
Quick start with smithereen
The project provides an installation script that guides through the setup process, which is the recommended way to get started. Here are the exact steps from the README to run Smithereen directly on your server:
# 1. Install JRE or JDK 21 or newer from your distribution's package manager.
# 2. Install MySQL (not MariaDB).
# 3. Download a prebuilt bundle for your CPU architecture from the latest release.
# 4. Unpack it somewhere on your server.
# 5. Run the install script:
./install.sh
The script will prompt you to configure Smithereen and create the first admin account. If you plan to use S3-compatible storage for media files, the script includes configuration questions for that.
After installation, configure your web server (nginx or Caddy) to proxy requests to Smithereen and imgproxy, and serve user-uploaded files. The repo provides example configurations.
To update from an older version, the README instructs to:
service smithereen stop
service smithereen_imgproxy stop
# Copy new binaries and libraries, avoiding merging lib directories
# Start services again
service smithereen start
service smithereen_imgproxy start
The first startup after an update will perform database migrations, which may take some time depending on your data.
Verdict: who should consider smithereen?
Smithereen is a niche but well-executed project aimed at those who want a fediverse server focused on authentic, real-world social connections rather than content discovery or viral growth. If you’re tired of the noise and spam that hashtags, public feeds, and global search bring, Smithereen offers a cleaner, more human-centric alternative.
The tradeoff is limited discoverability and network effects — it’s not designed to replace large federated platforms for broad audience reach but rather to create smaller, trusted social graphs.
The Java monolithic design and reliance on recent JDK versions and MySQL may deter some, but the codebase is solid and the installation process straightforward.
If your goal is to experiment with or deploy a fediverse server that rejects common fediverse conventions for philosophical and practical reasons, Smithereen is worth a close look. Just be ready to accept the limitations in favor of a different social networking experience.
Related Articles
- Roundcube Webmail: A PHP IMAP Client Built on a Custom Framework — Roundcube is a browser-based PHP IMAP client using a custom framework and an IMAP library from IlohaMail, offering exten
- SiYuan: A modular, privacy-first self-hosted knowledge management system with a TypeScript and Go hybrid stack — SiYuan is a self-hosted personal knowledge system blending TypeScript frontend and Go backend, offering block-level refe
- Jan: a local-first desktop app for large language models with Tauri and Rust — Jan is an open-source desktop app that runs large language models locally using Tauri, Node.js, and Rust. It offers priv
- Immich: a high-performance self-hosted photo and video management platform — Immich offers a self-hosted, high-performance solution for photo and video management with facial recognition, metadata
- Supabase: composable open-source backend-as-a-service built around Postgres — Supabase combines specialized open-source tools around Postgres to offer a Firebase-like backend platform. Its modular a
→ GitHub Repo: grishka/Smithereen ⭐ 516 · Java