A self-hosted custom sync server for kobo devices.
Rust 92%
Nix 4%
Python 3%
JavaScript <1%
CSS <1%
HTML <1%
Shell <1%

README.md

kobo-shelf #

A self-hosted Kobo eReader sync server and web library manager, written in Rust (axum) with a Leptos web UI.

kobo-shelf implements the Kobo Store API, so a Kobo device syncs books, covers, reading progress, and shelves directly from your own server with no Kobo account. Books come from a Calibre library (read-only ingest of metadata.db) and/or direct EPUB uploads via the web portal or the bundled Calibre plugin. Calibre is optional.

Quick start #

cargo build --release

# Against a Calibre library (directory containing metadata.db)
KOBO_SHELF_ADMIN_ACCOUNT=admin KOBO_SHELF_ADMIN_PASSWORD=change-me \
  ./target/release/kobo-shelf -l /path/to/calibre-library

# Or uploads-only, no library
./target/release/kobo-shelf

Then open http://127.0.0.1:8080, log in, and add books or pair a device.

Documentation #

  • docs/manual.md — full guide: configuration reference, web UI, adding books, pairing a factory-reset Kobo, architecture, API reference
  • docs/README.md — knowledge base: device internals, auth research, sync algorithm, wipe traps
  • calibre-plugin/README.md — Calibre upload plugin
  • AGENTS.md — build, test, and code-style conventions

License #

MIT