Self-Hosting Readeck with Docker Compose
What Is Readeck?
Readeck saves the readable content of web pages — articles, blog posts, documentation — and stores everything locally as immutable ZIP files. No external requests after the initial save. Text, images, and metadata all live on your server. It’s a self-hosted alternative to Pocket, Instapaper, and Omnivore (which shut down in 2024).
What sets Readeck apart from Wallabag and Hoarder: it’s a single Go binary with SQLite, uses ~50 MB of RAM, and exports to EPUB with OPDS support — so you can read saved articles on an e-reader.
Prerequisites
- A Linux server (Ubuntu 22.04+ recommended)
- Docker and Docker Compose installed (guide)
- 512 MB of free RAM (Readeck uses ~30-50 MB)
- Disk space for saved articles (varies — ~1-5 MB per article with images)
- A domain name (optional, for remote access)
Docker Compose Configuration
Create a directory for Readeck:
mkdir -p /opt/readeck && cd /opt/readeck
Create a docker-compose.yml file:
services:
readeck:
image: codeberg.org/readeck/readeck:0.22.2
restart: unless-stopped
ports:
- "8000:8000"
volumes:
- readeck-data:/readeck
environment:
# Server configuration
- READECK_SERVER_HOST=0.0.0.0
- READECK_SERVER_PORT=8000
# Logging
- READECK_LOG_LEVEL=info
healthcheck:
test: ["CMD", "readeck", "healthcheck"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
volumes:
readeck-data:
Start the stack:
docker compose up -d
Readeck starts in under 5 seconds. Open http://your-server:8000 and create your first admin account.
Key Features
| Feature | Details |
|---|---|
| Content extraction | Saves readable text + images from any URL |
| Storage format | Immutable ZIP files per bookmark |
| Database | SQLite (embedded, zero config) |
| Full-text search | Query across all saved content |
| Labels | Organize bookmarks with custom tags |
| Collections | Group bookmarks into themed collections |
| Highlights | Mark important passages within articles |
| EPUB export | Convert articles to EPUB for e-readers |
| OPDS feed | Serve saved articles to e-reader apps (KOReader, Calibre) |
| Browser extensions | Firefox and Chrome (save with one click) |
| API | REST API for integrations |
| Multi-user | Separate accounts with independent libraries |
Initial Setup
- Navigate to
http://your-server:8000 - Create the admin account (first user gets admin privileges)
- Install the browser extension from Readeck’s site — available for Firefox and Chrome
- Configure the extension with your Readeck URL and credentials
- Save your first article — the extension adds a single-click save button to your browser toolbar
Configuration
Readeck uses environment variables or a config.toml file. The Docker volume stores both the database and saved content.
Environment Variables
environment:
# Server
- READECK_SERVER_HOST=0.0.0.0
- READECK_SERVER_PORT=8000
- READECK_SERVER_PREFIX=/ # URL path prefix (for reverse proxy sub-path)
# Database
- READECK_DATABASE_SOURCE=/readeck/db.sqlite3
# Logging
- READECK_LOG_LEVEL=info # debug, info, warn, error
# Content extraction
- READECK_SCRAPER_TIMEOUT=30 # Timeout for fetching pages (seconds)
Using a Config File
Mount a config.toml for more control:
[server]
host = "0.0.0.0"
port = 8000
[database]
source = "/readeck/db.sqlite3"
[log]
level = "info"
Mount it in your Docker Compose:
volumes:
- ./config.toml:/readeck/config.toml:ro
- readeck-data:/readeck
OPDS for E-Readers
Readeck’s OPDS feed lets e-reader apps browse and download your saved articles as EPUB files. This is a killer feature for offline reading.
OPDS endpoint: http://your-server:8000/opds
Compatible apps:
- KOReader (Kindle, Kobo, PocketBook) — add the OPDS URL in the OPDS browser
- Calibre — add OPDS catalog in Calibre preferences
- Moon+ Reader (Android) — supports OPDS catalogs
- Librera (Android) — OPDS support built in
Your workflow: save articles throughout the day with the browser extension, then sync them to your e-reader for offline reading. No export steps — the OPDS feed updates automatically.
Reverse Proxy
Nginx Proxy Manager or Caddy configuration for HTTPS access:
Caddy:
readeck.yourdomain.com {
reverse_proxy readeck:8000
}
Nginx Proxy Manager: Create a new proxy host pointing to readeck:8000 on port 8000, enable SSL with Let’s Encrypt, and enable WebSocket support.
See the full Reverse Proxy Setup guide.
Backup
Readeck stores everything in the /readeck volume:
db.sqlite3— the database (bookmarks, users, labels)bookmarks/— saved article ZIP files
Back up the entire volume:
docker compose stop readeck
tar czf readeck-backup-$(date +%Y%m%d).tar.gz /var/lib/docker/volumes/readeck_readeck-data
docker compose start readeck
For automated backups, use Borgmatic or Kopia with the volume path.
Troubleshooting
Articles Save But Show No Content
Symptom: Bookmark appears in the list but the readable view is blank.
Fix: Some sites block server-side content fetching. Check docker compose logs readeck for HTTP errors. Some sites require a User-Agent header to serve content. You can also try saving the article via the browser extension, which fetches content from your browser (client-side) rather than the server.
Cannot Log In After Docker Restart
Symptom: Credentials rejected after container restart.
Fix: Verify the data volume is mounted correctly. If the volume was lost, the database was recreated empty. Check docker volume ls and ensure readeck-data exists with your data.
Browser Extension Won’t Connect
Symptom: Extension shows “connection refused” or “unauthorized.”
Fix: Ensure the Readeck URL in the extension settings includes the port (http://your-server:8000). If behind a reverse proxy, use the HTTPS URL. Generate an API token in Readeck’s settings page and use that instead of username/password.
OPDS Feed Returns 401
Symptom: E-reader app can’t authenticate to the OPDS feed.
Fix: OPDS uses HTTP Basic Authentication. Enter your Readeck username and password in the e-reader app’s OPDS settings. Some apps don’t prompt for credentials — configure them manually.
Search Returns No Results
Symptom: Full-text search doesn’t find articles you know exist.
Fix: Readeck indexes content on save. Articles saved before a version upgrade may need re-indexing. Check the Readeck documentation for the re-index command.
Resource Requirements
| Resource | Requirement |
|---|---|
| RAM | 30-50 MB idle, 50-100 MB during content extraction |
| CPU | Minimal — Go binary is efficient |
| Disk | ~15 MB for the application, 1-5 MB per saved article (with images) |
| Network | Outbound HTTP/HTTPS for fetching articles |
Readeck is one of the lightest self-hosted applications available. It runs comfortably on a Raspberry Pi alongside other services.
Verdict
Readeck is the best choice for self-hosters who want a read-later app with e-reader integration. The OPDS support and EPUB export are features that Wallabag, Linkwarden, and Hoarder either don’t have or implement less cleanly. The single-binary Go architecture means it uses almost no resources and starts instantly.
The trade-off: Readeck is younger and has a smaller community than Wallabag. There’s no mobile app (browser extension + PWA works, but native apps don’t exist yet). If you need team features, annotation sharing, or a polished mobile experience, Wallabag is more mature.
For personal use — saving articles during the day, reading them on a Kindle at night — Readeck is exactly right.
Frequently Asked Questions
Can I import bookmarks from Pocket or Wallabag?
Yes. Readeck supports importing from Pocket (export HTML file) and Wallabag (JSON export). Check the import section in Readeck’s admin settings.
Does Readeck have a mobile app?
No native app. The web UI works on mobile browsers, and the site can be added as a PWA (Progressive Web App) on iOS and Android. Share-to-Readeck works via the browser extension on Android.
How does Readeck compare to Omnivore?
Omnivore shut down in late 2024. Readeck fills the same niche — clean reading experience, offline support, highlights. Readeck adds OPDS/EPUB export. It doesn’t have Omnivore’s AI features or newsletter integration.
What is OPDS and why does it matter?
OPDS (Open Publication Distribution System) is a catalog format that e-readers understand. Readeck exposes your saved articles as an OPDS feed, so you can browse and download them directly from your Kindle, Kobo, or any OPDS-compatible e-reader app. This is Readeck’s killer feature — no manual file transfers needed.
How much storage does Readeck use?
Each saved article is stored as an immutable ZIP file containing the full HTML, images, and metadata. Expect 1-5 MB per article. A library of 1,000 articles uses roughly 1-5 GB. Since articles are self-contained ZIP files, they don’t depend on the original website staying online.
Does Readeck support multi-user setups?
Yes. Readeck supports multiple user accounts, each with their own saved articles and collections. User management is handled through the admin interface. Each user’s library is isolated from others.
Related
- Readeck vs Wallabag: Read-Later Apps Compared
- How to Self-Host Wallabag with Docker Compose
- How to Self-Host Linkwarden with Docker Compose
- How to Self-Host Hoarder with Docker Compose
- Linkding vs Wallabag
- Best Self-Hosted Bookmarks & Read Later Apps
- Replace Pocket with Self-Hosted Alternatives
- Docker Compose Basics
- Reverse Proxy Setup
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