No description
Find a file
neon 2cbd76bc7f fix(stats): preserve historical KOReader completion dates
Use the source finish day when importing completed KOReader books so
completion timelines reflect reading history instead of the sync date.
Preserve newer manual edits and retain fallback behavior for unusable dates.

Closes #1783
2026-10-14 18:14:25 +00:00
.github ci: fix stale issue progress and increase processing budget 2026-10-13 01:27:45 +00:00
.husky feat: consolidate mobile UX and filtering updates 2026-04-12 09:45:00 -06:00
client fix(auth): enforce library roles for metadata editing 2026-10-14 03:57:51 +00:00
docker/postgres fix(books): support accent-insensitive search 2026-07-11 17:47:29 +00:00
docs feat(server): publish a stable installation identity for client connections 2026-10-13 19:37:52 -06:00
koreader-plugin fix(koreader): open the dashboard offline without waiting for wi-fi 2026-10-11 05:58:02 +00:00
packages fix(auth): enforce library roles for metadata editing 2026-10-14 03:57:51 +00:00
patches chore(deps): update minor and patch dependencies 2026-09-30 00:57:24 +00:00
scripts feat(server): publish a stable installation identity for client connections 2026-10-13 19:37:52 -06:00
server fix(stats): preserve historical KOReader completion dates 2026-10-14 18:14:25 +00:00
.dockerignore chore: optimize docker image and scanner performance 2026-04-08 20:31:38 -06:00
.editorconfig feat(metadata): add cover extraction for epub, mobi, cbz, and pdf 2025-12-22 14:37:28 -06:00
.env.example fix(docker): support mounted files for every app secret 2026-09-20 18:35:15 +00:00
.gitattributes fix(docker): rebuild kepubify with Go 1.26.3, fix read-only fs chmod 2026-05-11 18:42:18 +00:00
.gitignore feat(server): add swagger setup for public api documentation 2026-06-29 01:52:30 +00:00
.npmrc feat(cover): add thumbnail generation and serve via thumbnail endpoint 2026-01-01 21:43:48 -06:00
.prettierignore build(deps): upgrade chokidar, pinia, and jsdom majors and drop unused deps 2026-08-16 03:52:20 +00:00
ADDITIONAL_TERMS.md feat: add BookOrbit attribution requirements 2026-09-10 18:03:11 +00:00
AGENTS.md docs: add agent guidance files 2026-07-08 01:34:42 +00:00
CLAUDE.md docs: add agent guidance files 2026-07-08 01:34:42 +00:00
codecov.yml fix(books): update date when metadata is auto fetched 2026-06-01 05:07:59 +00:00
commitlint.config.cjs ci(client): add Crowdin translation workflow 2026-07-14 18:31:49 +00:00
crowdin.yml feat(client): add nine interface languages and a searchable language picker 2026-08-11 07:43:38 +00:00
docker-compose.dev.yml feat: add read-aloud and media playback support 2026-09-19 02:27:05 +00:00
docker-compose.yml fix(client): localize the read-aloud interface 2026-09-21 06:36:24 +00:00
Dockerfile security(deps): update dependencies and rebuild kepubify with go 1.27.2 2026-10-11 05:19:04 +00:00
LICENSE chore: add OSS readiness files and contributor docs 2026-03-20 00:34:07 -06:00
NOTICE feat: add BookOrbit attribution requirements 2026-09-10 18:03:11 +00:00
package.json security(deps): update dependencies and rebuild kepubify with go 1.27.2 2026-10-11 05:19:04 +00:00
pnpm-lock.yaml perf(metadata): preserve unchanged epub entries during write-back 2026-10-14 17:46:02 +00:00
pnpm-workspace.yaml security(deps): update dependencies and rebuild kepubify with go 1.27.2 2026-10-11 05:19:04 +00:00
README.md chore: add community and help issue forms 2026-10-11 05:58:02 +00:00
release.config.js ci(release): treat breaking changes as a major release 2026-09-21 07:18:29 +00:00
tsconfig.base.json feat(metadata): add cover extraction for epub, mobi, cbz, and pdf 2025-12-22 14:37:28 -06:00


BookOrbit

A self-hosted library and reading platform for ebooks, PDFs, audiobooks, and comics.

Latest release Stars GHCR Pulls CI Release Coverage

Website Demo App Store Android coming soon Crowdin Contributing

BookOrbit dashboard showing reading stats, widgets, and book shelves

Overview • Live Demo • iOS & Apple Watch • Features • Quick Start • Managed Hosting • KOReader • Docs


What is BookOrbit?

BookOrbit organizes your books and lets you enjoy them anywhere: on iPhone, Apple Watch, the web, Kobo, or KOReader. Your reading progress, highlights, and status stay synchronized, so you can start a chapter in one place and continue in another.

Around that core sit 14 metadata providers, reading statistics and achievements, OPDS and Send-to-Kindle delivery, multi-user accounts with OIDC/SSO, and automatic sync out to Hardcover, Readwise, and StoryGraph. All of it runs on infrastructure you control.

Visit Website

Live Demo

Try the live instance before you install. No account required.

Launch Live Demo

Note: The demo includes a sample library of public domain books. Some administrative features are limited in the public demo. Self-hosting BookOrbit provides the full experience.

BookOrbit for iPhone and Apple Watch

Take your library anywhere with the official native BookOrbit app. Read ebooks, PDFs, and comics; stream or download audiobooks; use text to speech; and keep reading offline. The app connects directly to your self-hosted BookOrbit server, while Apple Watch brings downloaded audiobooks and synchronized playback progress to your wrist.

BookOrbit on iPhone showing the home screen, Read Along, and audiobook playback alongside the Apple Watch library

Download BookOrbit on the App Store BookOrbit for Android: coming soon

Requires BookOrbit v3.0.0 or later and iOS 26 or later. Apple Watch features require watchOS 26 or later.

Explore all 14 screenshots

iPhone

Ten BookOrbit iPhone screens showing the home experience, Read Along, audiobook playback, book requests, appearance customization, text to speech, reading activity, achievements, shelves, and offline downloads

Apple Watch

Four BookOrbit Apple Watch screens showing the offline library, the app menu, audiobook playback, and playback settings

Features

Reading Experience & Sync

  • Built-in Web Readers: Ebooks (EPUB, KEPUB, MOBI, AZW3, AZW, FB2), PDFs, comics (CBZ, CBR, CB7), and audiobooks (M4B, MP3, M4A, OPUS, OGG, FLAC), with no extra plugins required.
  • Native iPhone & Apple Watch Apps: Read, listen, download, upload, and synchronize with your BookOrbit server from a native, offline-capable iPhone app. Send audiobooks to Apple Watch for independent offline playback and later progress reconciliation.
  • Three-Way Sync (Kobo + KOReader + BookOrbit): Progress and annotations flow bidirectionally between Kobo devices, KOReader, and the BookOrbit web reader. Pick up on any surface where you left off on another, including highlights and deletions.
  • KOReader Plugin: An on-device catalog browser with search, download, and status and rating management, alongside full progress and annotation sync.
  • Annotations & Highlights: Highlights from the web reader, KOReader, and Kobo merge into one searchable hub. Filter by color, style, and source; export as Markdown, CSV, or JSON.
  • Hardcover, Readwise & StoryGraph Sync: Push status, progress, reading dates, and ratings to Hardcover on configurable triggers; status and progress to The StoryGraph; and new highlights and notes to Readwise as you create them, from both the web reader and synced devices. Hardcover read history can be pulled back to backfill blank BookOrbit entries.
  • Statistics, Goals & Achievements: Daily reading time, heatmaps, streaks, and library health, plus yearly goals, monthly challenges, and 50+ achievements across five categories. Reading DNA profiles your reading style from your actual session history.

Library Management

  • Multiple Libraries: Isolate content with per-library folders, custom scan rules, and format priorities.
  • 14 Metadata Providers: Google Books, Open Library, Amazon, Goodreads, Kobo, Hardcover, Audible, Audnexus, Libro.fm, and iTunes, plus ComicVine for comics, RanobeDB for light novels, and Aladin and Lubimyczytać for Korean and Polish catalogs. Cover art is sourced separately from iTunes, DuckDuckGo, and AudiobookCovers.
  • Smart Scopes & Collections: Organize your collection with curated lists and dynamic, rule-based saved filters.

Platform & Delivery

  • Multi-User & SSO: Granular per-user permissions and isolated reading data, with native support for Authentik, Keycloak, and Authelia via OIDC.
  • Multilingual Interface: Community translations are managed on Crowdin. See the localization guide for current language support and contributor instructions.
  • Content Delivery: OPDS support for compatible apps, Send-to-Kindle via email, and browser drag-and-drop uploads.
  • Automated Ingestion: Configure a Book Dock drop folder for hands-free importing.

Quick Start (Docker)

mkdir bookorbit && cd bookorbit
mkdir -p books data/app data/postgres
curl -fsSLo .env https://raw.githubusercontent.com/bookorbit/bookorbit/main/.env.example
curl -fsSLo docker-compose.yml https://raw.githubusercontent.com/bookorbit/bookorbit/main/docker-compose.yml

Edit .env and set these required values:

APP_URL=http://your-server-ip:3000   # the URL you'll open in your browser
BOOKS_HOST_PATH=./books              # folder on your server where your book files live

POSTGRES_PASSWORD=         # database password           - openssl rand -hex 24
JWT_SECRET=                # signs login tokens          - openssl rand -hex 32
SETUP_BOOTSTRAP_TOKEN=     # one-time setup wizard token - openssl rand -hex 16

If your local book folder is owned by a user other than UID 1000, also set PUID and PGID to match that owner. Getting these wrong is the most common cause of permission errors on first scan.

Then start:

docker compose up -d

Open http://your-server-ip:3000 and complete setup using your SETUP_BOOTSTRAP_TOKEN.

For the full installation guide including reverse proxy setup, host file permissions, secrets from mounted files, external databases, OIDC hardening, and environment variable reference, see bookorbit.app/installation.

Managed Hosting

Prefer a hosted instance without managing Docker or servers? Zenith offers BookOrbit hosting with a web file browser for uploads, access controls, and resource usage insights.

Deploy with Zenith

How I Actually Use BookOrbit

One read-along EPUB3 per book: listened to on iPhone, carried offline to Apple Watch for runs, read on a Kobo through KOReader, and picked up again on the laptop. One file, one reading position, no reconciling an audiobook against an ebook.

Read the full walkthrough at bookorbit.app/my-workflow.

KOReader Plugin

The BookOrbit plugin for KOReader adds progress sync, two-way annotation sync, and a native catalog browser: navigate, search, and download books from your library without leaving the device.

BookOrbit KOReader Plugin showing dashboard, catalog search, and book details

  1. In BookOrbit, go to Settings > KOReader, create credentials if prompted, and click Download Plugin.
  2. Unzip bookorbit.koplugin.zip.
  3. Copy bookorbit.koplugin to koreader/plugins/ on the device.
  4. Restart KOReader and open a book.
  5. Use Tools > BookOrbit Sync to connect.

The download is pre-configured with your server URL and credentials, so there is no manual entry on the device. For full setup and sync options, see bookorbit.app/koreader-plugin.

Documentation and Contributing

Full documentation is at bookorbit.app, covering libraries, metadata, readers, Kobo sync, OPDS, users and permissions, OIDC setup, and more.

For setting up book requests, see the book requests guide: indexers, download clients, path mappings, automation, and the encryption key they all need. For local development, see docs/DEVELOPMENT.md. To contribute, see docs/CONTRIBUTING.md for the full workflow: branch naming, test expectations, PR checklist, and commit format.

Unsupported Storage Configurations

Warning

NAS and network storage configurations are not supported. BookOrbit requires a local filesystem with dependable semantics for every writable path, including book libraries, import folders, application data, and PostgreSQL data. Do not place these paths on SMB/CIFS, NFS, FUSE or cloud mounts, distributed filesystems, or similar storage, even when the storage is mounted as an ordinary directory.

BookOrbit scans, moves, renames, and writes files while coordinating with its database and background jobs. Network and nonstandard filesystems can behave differently around atomic renames, locking, file notifications, permissions, caching, consistency, and durability. A configuration may appear to work and later cause intermittent failures, incomplete moves, stale library state, data loss, or corruption.

Such configurations may work in a particular environment, but using them is entirely at your own risk. No support is provided for them. Please do not open GitHub issues for problems encountered with these configurations unless the problem can be reproduced using supported local storage.

Repository Activity

BookOrbit repository activity: commits, issues, and pull requests over the last 30 days

Translations

Help translate BookOrbit into your language on Crowdin.

When adding user-facing text in code, add the Vue I18n key only to client/src/locales/en.json. Do not edit non-English catalogs in a feature pull request; untranslated keys fall back to English until Crowdin provides a translation. See docs/LOCALIZATION.md for the complete workflow.

Translation progress

Star History

BookOrbit GitHub star history

Support

Questions are welcome, even if you are unsure whether something is a bug. Share workflows, your setup, or companion apps in community conversations. See the community guide for choosing a category and how topics are handled.

License and Attribution

Copyright (C) 2025-2026 neon and BookOrbit contributors.

BookOrbit is licensed under the GNU Affero General Public License v3.0 only.

BookOrbit material whose copyright holders have authorized them is also subject to the BookOrbit Additional Terms under sections 7(b), 7(c), 7(d), and 7(e) of the GNU AGPL v3. See the Attribution and Legal Notice for the required attribution.