Tome

An opinionated comparison

Why Tome?

There are several good self-hosted ebook servers. This page explains what Tome does differently, how every alternative compares, and where each one is the better choice.

10 min read

The problem

Most self-hosted library servers were built to serve files. They're very good at it — scanning folders, extracting metadata, exposing an OPDS catalog, rendering pages in a browser. What they don't do is care whether you actually read any of it.

Tome was built around a different premise: a library server should know how you read. When you pick up your Kobo at night and read for an hour, Tome should record that session, sync your position to the web reader, update your streak, and surface it in stats the next morning. That's the foundation — not a feature bolted on later.

What Tome does

TomeSync — a real KOReader plugin, not just a protocol

Every other self-hosted library that supports KOReader does it the same way: they implement the KOSync protocol on the server side, and you point KOReader's built-in sync plugin at it. That gets you progress sync — where you left off — and nothing else. CWA ships a plugin, but it's a lightly modified clone of the stock KOSync plugin with different auth. Kavita, Komga, and Stump all just expose KOSync-compatible endpoints.

Tome ships TomeSync, a purpose-built .koplugin that goes well beyond progress sync:

Stats

Stats aren't an afterthought. Three tabs: Overview (totals, streak, currently reading, daily pace), Habits (hour-by-day-of-week heatmap, session timeline, reading pace, monthly comparison), Library (series completion, author affinity, completion by type, library growth). A 365-day heatmap shows your year at a glance. All of it built on actual session data from your e-reader, not estimated from page counts.

Series

Books group into series, series have statuses (ongoing, completed, hiatus), and volumes can be organized into arcs within a series. This matters for manga and light novels where you might have 30+ volumes in a single series spread across multiple story arcs.

Free metadata

Metadata fetching is free and built in. Google Books, OpenLibrary, and Hardcover (with an optional API key) — no subscription required. The Scribe tool (a Claude Code skill) can batch-ingest hundreds of books, auto-match metadata, and audit your library for weak spots.

The stack

Python/FastAPI on the backend, React 19 with Tailwind CSS 4 on the frontend, SQLite under the hood. One Docker image, three volume mounts, no external services. It runs on a Raspberry Pi.

What Tome doesn't do

Before getting into comparisons — an honest list of things other tools handle that Tome currently does not:

Some of these will land eventually. Some won't — they're outside the scope of what Tome is trying to be. If any of them are dealbreakers, keep reading — one of the tools below is a better fit.

Calibre-Web

17k+ stars Python / Flask / Bootstrap 3 GPL-3.0

Calibre-Web is the default recommendation on every self-hosting forum, and for good reason. It wraps an existing Calibre database in a web UI, supports OPDS, has built-in readers for EPUB, PDF, CBZ, and even DJVU and audiobooks, offers send-to-Kindle, Google Drive hosting, LDAP and OAuth login, and speaks 20+ languages. Its ecosystem is massive.

The trade-off is that Calibre-Web is fundamentally a database viewer. It reads Calibre's metadata.db and presents it in a browser. The UI is Bootstrap 3 (released 2013) with Jinja2 server-rendered templates. There are no reading sessions, no time tracking, no streaks, no stats beyond "how many books and authors do I have." The web EPUB reader stores your position in browser localStorage — not on the server. Switch browsers and you lose your place.

There's no native KOReader support. KOSync doesn't exist in stock Calibre-Web. It does have Kobo device sync (emulating the Kobo store API), which is a feature Tome doesn't have.

The CWA fork

Calibre-Web Automated (5.7k stars) is a more ambitious fork that adds a lot of what stock Calibre-Web lacks: KOSync support with a downloadable KOReader plugin, automatic file ingest with format conversion, metadata enforcement that writes changes back into actual ebook files, smart duplicate detection, magic shelves with dynamic rules, and a multi-tab stats center with ECharts charts and CSV export. It's a serious project.

But it's still built on the same Flask/Bootstrap 3 foundation. The roadmap lists a Svelte-based frontend rewrite as a high priority, which tells you where the current UI stands. And the core requirement remains: you need a Calibre metadata.db to start. Tome has its own database schema and doesn't depend on any external binary.

Pick Calibre-Web if you already live in the Calibre ecosystem, want send-to-Kindle, need LDAP/OAuth, or want the broadest format support (DJVU, audiobooks). Pick the CWA fork if you want that plus auto-import, format conversion, and KOSync.

Kavita

10.7k stars C# / .NET / Angular / SQLite GPL-3.0

Kavita is the most feature-rich self-hosted reading server available. It has everything: built-in readers for EPUB, comics, and PDF, OPDS with page streaming, reading lists, collections, smart filters with 30+ criteria, dashboard streams, EPUB annotations and highlights, reading profiles, age rating restrictions, OIDC single sign-on, custom themes with a community theme browser, real-time UI updates via SignalR, and i18n.

Since v0.8.9 (January 2026), Kavita also tracks reading sessions — time spent, pages read, words read (EPUB only), daily activity graphs, and reading pace. It's the only other self-hosted tool that takes session tracking seriously.

KOReader sync landed in v0.8.7 (July 2025) via the standard KOSync protocol — there's no custom plugin, just server-side endpoints that KOReader's built-in sync connects to. It supports EPUBs, CBZ/CBR, and PDF. Worth noting: Kavita's own wiki includes the warning "The automatic sync can potentially undo reading progress. We strongly advise against using it." The protocol relies on MD5 file hashes for book matching — rename or re-download a file and the link breaks. No session recording, no series browsing from the device.

The biggest caveat is metadata. Kavita's free tier only reads embedded metadata from your files (ComicInfo.xml, OPF). External metadata fetching — looking up covers, descriptions, and tags from AniList, MAL, or Hardcover — requires Kavita+, a paid subscription. Scrobbling to AniList is also behind the paywall. Tome fetches metadata from Google Books and OpenLibrary for free, no subscription needed.

Kavita is a .NET/Angular application. If you're comfortable with that stack and want the widest feature set, it's an excellent choice. It does things Tome doesn't — annotations, reading lists, OIDC, age restrictions, scrobbling — and probably always will, because those aren't on Tome's roadmap.

Pick Kavita if you want the most features in a single package, need annotations or reading lists, want OIDC/SSO, or manage a library with age-restricted content. Be aware that external metadata and scrobbling require a paid subscription.

Komga

6.3k stars Kotlin / Spring Boot / Vue 2 / SQLite MIT

Komga is purpose-built for comics and manga, and within that niche it's arguably the best tool available. Its comic reader supports left-to-right, right-to-left, vertical scroll, and webtoon modes with spread layouts. It has Collections (group related series) and Read Lists (ordered book playlists across series). It handles one-shots as a first-class concept, detects duplicate pages within archives, and offers both OPDS v1.2 and v2 with page streaming extensions.

KOReader sync is supported via the standard KOSync protocol (no custom plugin) with a significant limitation: EPUB progress syncs at chapter boundaries only, not mid-chapter. For comics and PDFs, page-level accuracy works fine. No session recording, no series downloading from the device. Kobo sync is also built in (EPUB only).

What Komga doesn't have: stats. No reading sessions, no time tracking, no heatmaps, no reading pace, no streak counter. The only insight it offers is read/unread/in-progress badges. It also has no external metadata fetching — no Google Books, no OpenLibrary, no AniList lookups. Metadata comes entirely from embedded sources (ComicInfo.xml, EPUB OPF, Mylar series.json).

The frontend is Vue 2 with Vuetify 2 — Vue 2 reached end-of-life in December 2023. The EPUB reader uses a Readium 2 fork and is functional but minimal compared to dedicated EPUB tools (two themes only: white and black). Development is steady with a single dedicated maintainer and only 18 open issues, which speaks to code quality.

Pick Komga if your library is primarily comics and manga, you want the best comic reader experience, or you value a clean MIT-licensed codebase with very few open issues. Don't pick it for ebooks or if you care about reading stats.

Other tools worth knowing about

The three above are the main alternatives for a general-purpose self-hosted ebook library. These are more specialised:

Audiobookshelf

Audiobookshelf (12.9k stars) is the dominant self-hosted audiobook server, and it handles ebooks too — EPUB, PDF, and CBZ/CBR. But ebook support is explicitly described as "basic." There's no OPDS, no KOReader sync, and the stats system is built around listening time, not reading. If your library is primarily audiobooks with some ebooks on the side, it's a great choice. For an ebook-first library, look elsewhere.

Stump

Stump (2.4k stars) is the most interesting newcomer. It's written in Rust with a React frontend, has KOReader sync, OPDS v1.2 and experimental v2, reading session tracking, and a clean architecture. The README is honest: "under active development and is an ongoing WIP. DO NOT expect a fully featured or bug-free experience." At v0.1.3 it's not production-ready, but it's one to watch.

LANraragi

LANraragi (3k stars) has been around for 12 years and is excellent at one thing: managing manga and doujinshi archives. It has a plugin system for metadata scraping, tag namespaces, Prometheus metrics export, and OPDS with page streaming. The limitation is single-user only — one admin password for the whole instance. If you're a solo manga reader with a large archive, it's battle-tested.

Ubooquity

Ubooquity is a closed-source Java application that was popular years ago. It still runs — the LinuxServer.io Docker image is maintained — but development appears stagnant, the documentation site is mostly broken, and there's no public source code. Not recommended for new setups.

Try it

Tome is free, open-source (AGPL-3.0), and deploys in under a minute.