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.21.6
    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

FeatureDetails
Content extractionSaves readable text + images from any URL
Storage formatImmutable ZIP files per bookmark
DatabaseSQLite (embedded, zero config)
Full-text searchQuery across all saved content
LabelsOrganize bookmarks with custom tags
CollectionsGroup bookmarks into themed collections
HighlightsMark important passages within articles
EPUB exportConvert articles to EPUB for e-readers
OPDS feedServe saved articles to e-reader apps (KOReader, Calibre)
Browser extensionsFirefox and Chrome (save with one click)
APIREST API for integrations
Multi-userSeparate accounts with independent libraries

Initial Setup

  1. Navigate to http://your-server:8000
  2. Create the admin account (first user gets admin privileges)
  3. Install the browser extension from Readeck’s site — available for Firefox and Chrome
  4. Configure the extension with your Readeck URL and credentials
  5. 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

ResourceRequirement
RAM30-50 MB idle, 50-100 MB during content extraction
CPUMinimal — Go binary is efficient
Disk~15 MB for the application, 1-5 MB per saved article (with images)
NetworkOutbound 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.

FAQ

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.

Comments