BookWyrm vs Calibre-Web: Which Should You Self-Host?
Quick Verdict
If you want a social platform where users review, rate, and discuss books across the Fediverse, BookWyrm is the only real option. If you need a personal or family ebook library with download and reading capabilities, Calibre-Web is simpler, lighter, and purpose-built for the job. These tools solve fundamentally different problems despite both involving books.
Updated March 2026: Verified with latest Docker images and configurations.
Overview
BookWyrm is a federated social reading platform — think Goodreads but self-hosted and connected to the Fediverse via ActivityPub. Users create profiles, track reading progress, write reviews, and follow readers on other BookWyrm instances or Mastodon. It launched in 2020 and has grown into the leading self-hosted Goodreads alternative.
Calibre-Web provides a browser-based interface to your existing Calibre ebook library. It handles browsing, searching, downloading, and reading ebooks through a clean web UI. Built on top of the Calibre database format, it turns your local ebook collection into a personal cloud library accessible from any device.
Feature Comparison
| Feature | BookWyrm | Calibre-Web |
|---|---|---|
| Primary purpose | Social reading network | Ebook library browser |
| ActivityPub federation | Yes — follows, reviews, shelves | No |
| Multi-user support | Full social platform (unlimited users) | Basic user management (admin + readers) |
| Book reviews & ratings | Core feature with rich text | No |
| Reading progress tracking | Yes (shelves: to-read, reading, read) | No |
| Ebook downloads | No (metadata/social only) | Yes (EPUB, PDF, MOBI, etc.) |
| In-browser reader | No | Yes (EPUB reader built-in) |
| Ebook format conversion | No | Yes (via Calibre tools Docker mod) |
| OPDS feed | Yes | Yes |
| Book metadata sources | OpenLibrary, Inventaire, ISBN | Calibre database, Google Books, Amazon |
| Mobile app | Mastodon-compatible clients | Responsive web UI |
| Docker services required | 7-9 containers | 1 container |
| License | AGPL-3.0 | GPL-3.0 |
Installation Complexity
Calibre-Web deploys in under two minutes. Single container, no database to configure, no secrets to generate:
services:
calibre-web:
image: lscr.io/linuxserver/calibre-web:0.6.26
container_name: calibre-web
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
volumes:
- ./config:/config
- /path/to/calibre/library:/books
ports:
- "8083:8083"
restart: unless-stopped
Point it at an existing Calibre library directory and log in with admin / admin123.
BookWyrm requires a multi-container stack — PostgreSQL, two Redis instances, Celery workers, a beat scheduler, and Nginx. The official docker-compose.yml includes 7-9 services depending on configuration. You need to generate secrets, configure a domain name, and set up SMTP for email notifications:
services:
web:
image: ghcr.io/bookwyrm-social/bookwyrm:v0.8.5
command: gunicorn bookwyrm.wsgi:application --bind 0.0.0.0:8000
env_file: .env
volumes:
- static_volume:/app/static
- media_volume:/app/images
depends_on:
- db
- redis_activity
- redis_broker
restart: unless-stopped
db:
image: postgres:17
env_file: .env
volumes:
- pgdata:/var/lib/postgresql/data
restart: unless-stopped
redis_activity:
image: redis:7.2.1
command: redis-server --requirepass ${REDIS_ACTIVITY_PASSWORD} --appendonly yes
volumes:
- redis_activity_data:/data
restart: unless-stopped
redis_broker:
image: redis:7.2.1
command: redis-server --requirepass ${REDIS_BROKER_PASSWORD} --appendonly yes
volumes:
- redis_broker_data:/data
restart: unless-stopped
celery_worker:
image: ghcr.io/bookwyrm-social/bookwyrm:v0.8.5
command: celery -A celerywyrm worker -l info -Q high_priority,medium_priority,low_priority,streams,images,suggested_users,email,connectors,lists,inbox,imports,broadcast,misc
env_file: .env
volumes:
- static_volume:/app/static
- media_volume:/app/images
depends_on:
- db
- redis_broker
restart: unless-stopped
celery_beat:
image: ghcr.io/bookwyrm-social/bookwyrm:v0.8.5
command: celery -A celerywyrm beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler
env_file: .env
depends_on:
- celery_worker
restart: unless-stopped
volumes:
pgdata:
static_volume:
media_volume:
redis_activity_data:
redis_broker_data:
Setup requires generating a SECRET_KEY, configuring DOMAIN, setting PostgreSQL and Redis passwords, and running initial database migrations. Expect 15-30 minutes for a first deployment versus 2 minutes for Calibre-Web.
Performance and Resource Usage
| Resource | BookWyrm | Calibre-Web |
|---|---|---|
| RAM (idle) | 1.5-2 GB | 100-200 MB |
| RAM (active) | 2-4 GB | 200-500 MB |
| CPU cores | 2-4 recommended | 1 sufficient |
| Disk (application) | 2 GB + media uploads | 50 MB + library size |
| Containers | 7-9 | 1 |
| External database | PostgreSQL 17 | None (SQLite internal) |
BookWyrm’s resource footprint reflects its role as a full social platform — PostgreSQL, two Redis instances, Celery workers, and the Django application all consume memory. Calibre-Web is a lightweight Python app backed by SQLite that barely registers on system monitoring.
Community and Support
BookWyrm has an active development community centered on GitHub with 2,600+ stars. The lead developer (Mouse Reeve) maintains regular releases. Documentation lives at docs.joinbookwyrm.com. The project has a dedicated Matrix chat and an active Fediverse community of instance operators.
Calibre-Web has 13,000+ GitHub stars and benefits from the massive Calibre ecosystem. The LinuxServer.io community maintains the Docker image, which is among their most popular. Development is steady but slower — the project is mature and feature-stable. Community support happens through GitHub issues and the LinuxServer.io Discord/forums.
Use Cases
Choose BookWyrm If…
- You want a Goodreads replacement with social features (reviews, shelves, followers)
- Federation matters — you want readers on other instances to discover your reviews
- You’re running a book club or reading community
- Multiple users need full social profiles, not just library access
- You have 2+ GB RAM available and are comfortable managing a multi-container stack
Choose Calibre-Web If…
- You have an existing Calibre ebook library and want web access to it
- You need to download, read, and convert ebooks from a browser
- You want a personal or family library server, not a social platform
- Your server has limited resources (a Raspberry Pi runs Calibre-Web fine)
- You want the simplest possible setup — one container, no database management
Final Verdict
If you already manage ebooks in Calibre and want remote access to your library, Calibre-Web is the right tool — it does exactly that with minimal overhead. If you want to track your reading, write reviews, and participate in a federated reading community, BookWyrm fills the Goodreads-shaped hole that no ebook manager can.
Many self-hosters run both: Calibre-Web as their private ebook server and BookWyrm as their public reading profile. The two tools complement rather than compete.
FAQ
Can BookWyrm serve ebook files like Calibre-Web?
No. BookWyrm is a social reading tracker focused on metadata, reviews, and reading lists. It doesn’t store or serve ebook files. For ebook hosting and downloads, you need Calibre-Web or a similar library server.
Does Calibre-Web support ActivityPub or federation?
No. Calibre-Web is a standalone library application with no federation capabilities. If you want federated book reviews, BookWyrm is the only self-hosted option.
Can I import my Goodreads data into BookWyrm?
Yes. BookWyrm includes a Goodreads CSV import feature that brings over your reading history, ratings, reviews, and shelves. The import process handles most data cleanly, though some formatting may need manual cleanup.
Do I need an existing Calibre library for Calibre-Web?
Yes. Calibre-Web reads from a Calibre database (metadata.db). You need to create a library using the Calibre desktop application first, then point Calibre-Web at that directory.
Can I run both on the same server?
Yes. BookWyrm typically runs on port 80/443 behind its built-in Nginx, while Calibre-Web uses port 8083. Put both behind a reverse proxy with different subdomains and they coexist without issues.
Related
Get self-hosting tips in your inbox
Get the Docker Compose configs, hardware picks, and setup shortcuts we don't put in articles. Weekly. No spam.
Comments