A private library for every book you own. EPUB, PDF, comics, audiobooks — organised, readable, and fully yours. No cloud. No subscription. No compromises.
No account required · runs on any server · Kobo & KOReader sync
Not a sync service you tolerate. A home you actually want to use.
PDF, EPUB, CBX, and audiobook readers — all in the browser. Custom fonts, theme and layout preferences saved per user.
Auto-fetch covers, descriptions, series info, and ratings from Google Books, Open Library, and Amazon. Edit everything manually.
Rule-based dynamic shelves that auto-populate: "Essays, rated 4★+" or "Unread, added this year". They update themselves.
Watch a folder. Drop files in. embookshelf detects, extracts metadata, fetches covers, and queues them for your review.
Full Kobo sync — library, progress, shelves, and thumbnails. KOReader progress sync. OPDS for anything else.
Per-user shelves, reading progress, annotations, and preferences. Admin and user roles. OIDC for your home IdP.
Most digital libraries are EPUB-centric. embookshelf treats every format as first-class, with a dedicated reader and metadata extractor for each.
The embookshelf reader uses Literata — commissioned for Google Play Books — as its default reading face. Margins, line height, font size, and theme are saved per-user.
The village had not been on any of her grandfather's maps. Ellen could not at first decide whether this was because he had missed it, or because it had not yet existed when he last passed through.
She walked down what she took to be the main street, pulling her coat around her. It was not yet evening but the light had already begun to fail in the way it did only this far north.
"You'll be the one looking for the house," a woman said from behind her.
One Docker image. Point it at your book directory. Open your browser. That's it. No external services, no account, no telemetry unless you opt in.
# Minimum working config services: embookshelf: image: ghcr.io/embookshelf/embookshelf ports: ["6060:6060"] volumes: - ./books:/books - ./data:/app/data environment: DISK_TYPE: LOCAL DATABASE_URL: sqlite:///app/data/db # docker compose up -d # Open http://localhost:6060
embookshelf speaks the protocols your devices already understand.
"Reading is the activity. Managing is the overhead. The UI should feel like the activity."embookshelf Design PRD · 2026

Open source. Self-hosted. AGPL-3.0. Your data stays on your server.
booklore/embookshelf · docker pull ghcr.io/embookshelf/embookshelf