* feat(i18n): add vue-i18n foundation with language switcher and Dutch locale Introduce multi-language support for the client using vue-i18n and @intlify/unplugin-vue-i18n. Locale is detected from a stored preference or the browser language and persisted client-first, with optional server sync riding the existing theme-sync mechanism (new locale category on the generic user_preferences store, no migration needed). Adds a language selector in Appearance > Behavior settings and seeds en/nl message catalogs. Extraction of existing hardcoded strings follows in subsequent commits. * feat(i18n): add full en/nl message catalogs and test/build wiring Populate the English and Dutch message catalogs (~4300 keys) covering the whole UI, register a vitest setup that installs vue-i18n globally so component tests resolve real messages, and allow inline HTML in messages (strictMessage/escapeHtml off) for notes rendered via v-html / <i18n-t>. * feat(i18n): localize settings and book UI strings Replace hardcoded strings with t() calls across the settings and book feature areas (including book detail, table, metadata edit, reading log, highlights). Label collections captured at setup are wrapped in computed() so they react to locale changes. * feat(i18n): localize remaining feature UI strings Replace hardcoded strings with t() across reader, email, library, tools, migration, dashboard, auth, hardcover, author, series, book-dock, book-metadata-fetch, annotations, admin, statistics, collection, smart-scope, audit, whats-new, achievements, notifications, custom-icons, scanner and metadata-score. Reactive label maps use computed(). * feat(i18n): localize shared components and view wrappers Replace hardcoded strings with t() across shared components (app header, sidebar, view header, pickers, selection bar) and top-level views. * feat(i18n): localize settings tab bars and browser page titles Make settings tab labels reactive via t() in the consuming components and slim the *-tabs.ts helpers to ids/order/permission only. Route the browser page titles in the router through the app i18n instance so document.title follows the active locale. Adds settings.<area>.tabs.* and titles.* keys. * feat(i18n): localize KOReader hash-linking and reader sidebar pin Localize the strings from the KOReader manual hash-linking feature and the reader sidebar pin/close controls that were merged from main during the rebase, adding the corresponding en/nl keys. * feat(i18n): localize upstream features merged during rebase onto main Add en/nl catalog keys for the new upstream functionality pulled in by the rebase (Kobo activity log, KOReader dismiss/remove-device and hash-link modal, default library access, upload-size settings) and update a few existing keys whose wording changed upstream (dynamic upload-size hints, write-and-rename phrasing). * feat(i18n): switch language picker to a dropdown Replace the segmented language buttons with a native select, which scales better as more locales are added. * feat(i18n): add German and Slovenian translations Register de and sl in the supported locales and ship full de.json and sl.json catalogs (4616 keys each, structural parity with en.json). * fix(client): harden locale switching and translation coverage Keep locale catalogs structurally aligned, localize rebased UI changes, and use locale-aware formatting. Move language selection into the header, persist authenticated preferences, and prevent stale locale loads from winning. --------- Co-authored-by: neon <18559658+neonsolstice@users.noreply.github.com>
BookOrbit
A self-hosted library management and reading platform for ebooks, PDFs, audiobooks, and comics.
What is BookOrbit?
BookOrbit is a self-hosted digital library and reading platform. Organize and read your books, sync progress and annotations seamlessly across Kobo, KOReader, and the web reader, enrich your collection with metadata from multiple providers, and push reading data to Hardcover automatically. Supports multiple users with OIDC/SSO, detailed reading statistics, OPDS, customizable dashboard widgets, Send-to-Kindle delivery, and Smart Scopes - all running on infrastructure you control.
Live Demo
Want to try BookOrbit before installing? Explore the live instance instantly: no account required!
Experience the interface, built-in readers, and dashboard first-hand.
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.
Features
Reading Experience & Sync
- Built-in Web Readers: Native support for eBooks (EPUB, MOBI, AZW3), PDFs, Comics (CBZ, CBR), and Audiobooks (M4B, MP3) with no extra plugins required.
- 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 deletes.
- KOReader Plugin: Native on-device catalog browser with search, download, and status/rating management, alongside full progress and annotation sync.
- Annotations & Highlights: Highlights from the web reader, KOReader, and Kobo merge into a unified searchable hub - filterable by color, style, and source, exportable as Markdown, CSV, or JSON.
- Hardcover Sync: Automatically pushes status, progress, reading dates, and ratings to Hardcover on configurable triggers. Pull read history back from Hardcover to backfill blank BookOrbit entries.
- Readwise Sync: Automatically pushes new highlights and notes to Readwise as you create them, from both the web reader and synced devices, with book covers matched by ISBN.
- Achievements & Reading Goals: Yearly goals, daily streaks, monthly challenges, and 50+ achievements across five categories. Reading DNA profiles your reading style from your actual session history.
- Reading Statistics: Track your daily reading time, view heatmaps, maintain streaks, and monitor library health.
Library Management
- Multiple Libraries: Isolate content with per-library folders, custom scan rules, and format priorities.
- Rich Metadata Providers: Fetch robust metadata from Google Books, Amazon, Goodreads, Open Library, Audible, ComicVine, and more.
- Smart Scopes & Collections: Organize your collection using 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.
- 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
Optionally set LIBRARY_BROWSE_ROOT=/books to start the library folder picker at /books instead of /.
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, file permissions on NAS, external databases, and environment variable reference, see bookorbit.app/installation.
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.
- In BookOrbit, go to Settings > Integrations > KOReader and click Download Plugin.
- Unzip
bookorbit.koplugin.zip. - Copy
bookorbit.koplugintokoreader/plugins/on the device. - Restart KOReader and open a book.
- Use Tools > BookOrbit Sync to connect.
The download is pre-configured with your server URL and credentials; 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 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.
Support
- Questions and discussion: GitHub Discussions
- Bug reports: GitHub Issues
- Feature requests: GitHub Issues
License
BookOrbit is licensed under the GNU Affero General Public License v3.0.
