Analytics cookies only (Google Analytics, PostHog). No ad networks, no cross-site tracking. See our privacy policy.
Self-host Readeck
updated Oct 2026deployed by usprices checked · Jul 2026Install verified on Ubuntu 26.04 · Oct 2026 · how we test
We earn commissions when you shop through the links below. Full disclosure →
A read-it-later and bookmark archiver: paste a link and it stores the readable text and images on your server, with labels, highlights, saved-search collections, full-text search, EPUB export, an OPDS catalog, browser extensions and mobile apps. AGPL-3.0-only, written in Go; it runs as a single container with SQLite in one data volume (PostgreSQL optional).
Runs on a VPS from $4/mo (Kamatera 1GB, 1 GB RAM) · prices checked Sep 2026
Our recommendation
Pick Readeck when you want the article, not just the link: it fetches a page the moment you save it and stores the readable text and images on your server, so the piece survives paywalls, redesigns and dead domains, and nothing is requested from the original site when you read it later. Labels, favourites, archives, highlights, saved-search collections, full-text search, EPUB export (a whole collection as one book) and an OPDS catalog for e-readers come with it, plus browser extensions and mobile apps. It is AGPL-3.0-only Go, shipped as a single binary and a single container with SQLite in one volume, PostgreSQL optional. Our snippet is the SQLite compose file from the docs' Compose Files page with the image pinned to a release tag instead of `latest`. Upstream publishes no RAM minimum, so our 256 MB floor is an estimate. The catalog's other read-it-later app, Wallabag, is PHP with a larger footprint and a longer history; Readeck is the lighter, newer take on the same job.
What you need
Any VPS with at least 256 MB of RAM
A domain you control — most self-hosted setups need HTTPS in front of them
Readeck's configuration and deployment docs flag these before you put it on a public address:
non-negotiableThere is no default account and no password in the snippet: the first visit runs an onboarding flow that creates the initial user (for unattended setups the deployment page points at the readeck user command instead). On first start Readeck writes config.toml into the data volume (_data/config.toml inside a named volume) with a generated secret_key; the configuration docs say never to change an already-set secret_key, so treat that file as part of your backup.
non-negotiableEverything (database, extracted articles, images, config) sits in the /readeck volume, readeck_data in our compose; back up that one volume, and the docs warn never to point SQLite at a network filesystem such as NFS or CIFS. Upgrading is a tag bump plus docker compose up -d. The docs say SQLite is solid for most installs and PostgreSQL is only worth it for several instances behind a load balancer, which the Compose Files page covers with a second example.
non-negotiableUpstream's compose runs codeberg.org/readeck/readeck:latest; the Codeberg package registry also publishes exact release tags, a minor-series tag and a snapshot build, and we pin the exact release. The compose file's healthcheck calls the binary's own readeck healthcheck subcommand, and security_opt: no-new-privileges comes straight from upstream, so keep both when you edit the file.
non-negotiablePort 8000 is plain HTTP and the deployment page expects a TLS reverse proxy (Nginx, Caddy and Apache fragments are given), with allowed_hosts set to your hostname and trusted_proxies narrowed to the proxy's address. Do not add your own Content-Security-Policy header at the proxy: Readeck already sends a strict one and yours will break it. If you set READECK_SERVER_BASE_URL, it becomes the only valid URL of the instance and proxy headers are ignored; behind Cloudflare, Rocket Loader must be off.