Your Ebook Library Deserves Better Than a Folder Called “Books”
Kavita wins the moment your library mixes ebooks with comics and manga, and Calibre-Web wins if you already have years of Calibre metadata worth keeping.
If you’ve got more than fifty ebooks gathering dust in a Downloads folder, you already know that chaos. But the moment you want to actually read them across multiple devices (phone, tablet, e-reader, browser), you hit a wall. You need organization, metadata, a reading interface that doesn’t suck.
This is where the self-hosted ebook stack comes in. There are several ways to do it, each with wildly different philosophies. Some let you convert formats on the fly. Some focus on a sleek reading experience. Some handle comics and manga like they’re first-class citizens (not an afterthought). Some require you to run a whole desktop application just to manage metadata.
Let’s talk about the three main contenders: Calibre (the heavyweight metadata tool), Calibre-Web (the classic combo: Calibre’s library exposed via a web UI), and Kavita (the modern newcomer that does ebooks, manga, comics, and PDFs all under one roof).
Which Ebook Server Belongs On Your NAS?
- Pick Calibre + Calibre-Web if you already have years of Calibre metadata and mostly read EPUB.
- Pick Kavita if your library mixes ebooks, comics, and manga and you want a modern reader.
- Run both if you want Calibre’s conversion muscle feeding Kavita’s reading experience.
Calibre: The Librarian in Your Basement
Calibre is not a server. It’s a desktop application (Windows, Mac, Linux) that does one thing obsessively well: manage ebook metadata and handle format conversion. Think of it as the reference librarian who organizes everything but doesn’t actually work the circulation desk.
Here’s what Calibre does:
- Metadata wizardry: Fetches book info from Goodreads, Amazon, Google Books. Fixes corrupted titles, authors, dates, cover images. Deduplicates entries. Merges records.
- Format conversion: EPUB → MOBI (for old Kindles), EPUB → AZW3 (for newer Kindles), EPUB → PDF, PDF → EPUB. It’s the kitchen sink of conversion.
- Library organization: Stores books on disk in a sensible folder structure:
Authors/Title/book.epub, with a SQLite database tracking everything. - Device sync: Push books directly to USB-connected e-readers (old school, but reliable).
The catch? Calibre is a desktop application. You run it on your machine. It’s heavy (Python/Qt-based, slow startup), and it’s not designed for casual reading. You open it to manage, not to read.
That’s why Calibre-Web exists.
Calibre-Web: The Friendly Bridge
Calibre-Web takes a Calibre library and wraps it in a lightweight web interface. It’s the natural evolution: you keep Calibre running on your always-on machine (or just use its library folder), and Calibre-Web serves a reading UI.
What Calibre-Web gives you:
- Read EPUB, MOBI, AZW, AZW3, PDF, TXT files in a web browser (decent in-browser reader)
- Browse by title, author, series, tags, ratings
- Mark as read / unread
- Share lists with other users on your home network
- Download books in any format (requires Calibre to do conversion, or supports formats Calibre has already generated)
- OPDS feed (Open Publication Distribution System), so you can read on an e-reader app (KOReader, Moon+ Reader, Kybook) using standard library discovery
- Minimal resource footprint compared to Calibre
The real win: You get Calibre’s metadata universe without running the desktop app every time you want to read.
The tradeoff: Calibre-Web is built on top of Calibre’s library. If you want to convert a new book, you still need Calibre somewhere in the pipeline. And the in-browser reader? It’s serviceable, but not flashy.
Kavita: The Modern Alternative
Kavita is the new kid. It’s a self-hosted ebook and comics and manga server written in .NET, with a fresh UI that doesn’t feel like a 2010 web app. It’s independent of Calibre entirely: it has its own database, its own library scanner, its own reader.
What Kavita does:
- Serve EPUB, PDF, CBR (comic archive), CBZ (comic archive), and other formats
- Browse ebooks and comics and manga in the same UI (because they’re all just media to read)
- Reads metadata embedded in your files: EPUB OPF,
ComicInfo.xmlin comics, and Calibre-tagged PDFs - Web reader with better UX than Calibre-Web (page flip animations, responsive to mobile)
- OPDS feeds (works with KOReader, Moon+ Reader, etc.)
- Collections, series tracking, reading progress
- Fast, modern interface (feels like a SaaS app, not a hobby project)
The philosophy: Don’t force users into a format hierarchy. A person might have literary novels, technical PDFs, manga, comic book runs, and long-form journalism all in one library. Serve them all the same way.
The catch: Kavita is standalone. It never opens Calibre’s metadata.db, so years of tags, ratings and custom series only come along if you embed them into the files first (there’s a section on that below). And Kavita doesn’t do format conversion. It serves what you give it.
Format Support: The Practical Bit
Here’s the rundown:
| Format | Calibre | Calibre-Web | Kavita |
|---|---|---|---|
| EPUB | ✅ Read + Convert | ✅ Read (browser) | ✅ Read (browser) |
| MOBI | ✅ Read + Convert | ✅ Read | ❌ |
| AZW3 | ✅ Read + Convert | ✅ Read | ❌ |
| ✅ Read + Convert | ✅ Read (basic) | ✅ Read | |
| CBR/CBZ | ❌ | ❌ | ✅ Read (optimized) |
| OPDS Feed | ❌ | ✅ | ✅ |
| Browser Reader | ❌ | ✅ (basic) | ✅ (modern) |
| Format Conversion | ✅ (primary job) | ⚠️ (requires Calibre) | ❌ |
Reading Experience: Where You Actually Use It
This is the practical difference.
On your phone: You use an OPDS client (KOReader, Moon+ Reader, Kybook for iOS). Both Calibre-Web and Kavita expose OPDS feeds, so you can browse your library in the same app you use to read. Calibre alone? Nope, unless you download and sideload.
In a browser: Calibre-Web has a basic in-browser reader (functional). Kavita’s browser reader is smoother, more responsive, better at handling mobile layouts. Neither matches a native e-reader app, but Kavita’s closer.
On an e-reader (Kobo, Kindle): You sync via OPDS (both Calibre-Web and Kavita support this, via an e-reader OPDS client). Calibre can push directly via USB, but that’s 2010 thinking.
For comics and manga: Calibre-Web doesn’t care about them. Kavita is built for them. CBR/CBZ navigation, double-page spread support, webtoon vertical scroll: all native.
Metadata and Discovery
Calibre is the unmatched champion here. It plugs into Goodreads, ISBN databases, Google Books, Amazon. You can bulk-fix metadata on thousands of books.
Calibre-Web inherits Calibre’s metadata: whatever Calibre fetched, Calibre-Web shows.
Kavita doesn’t go looking for metadata on its own. The free version reads what’s embedded in your files and stops there. Automatic matching against external sources (AniList and MyAnimeList, with Hardcover planned) belongs to Kavita+, the optional paid subscription, and it’s aimed squarely at manga and comics rather than your PDF pile. So if a book has nothing embedded, you’re typing the details in yourself or leaving them blank. For a personal library that’s usually fine, especially if Calibre already did the tagging. For 5,000 books where you want the whole shelf consistent, Calibre’s depth wins.
Making Calibre Metadata Show Up in Kavita
Good news if you’ve spent years tidying metadata in Calibre: you don’t have to redo any of it. You just have to move it out of Calibre’s database and into the books themselves.
Calibre keeps everything in metadata.db, and Kavita never reads that file. What Kavita reads is metadata embedded inside each book: the OPF block in an EPUB, ComicInfo.xml in a comic archive, and (since Kavita 0.8.5) the XMP block Calibre writes into PDFs. Embed it once and Kavita picks it up on the next scan, no subscription involved.
In the Calibre GUI: select the books, Edit metadata, then the Embed metadata action. From the command line, ebook-meta ships with Calibre and handles one file at a time:
ebook-meta -t "Some Technical Manual" -a "Jane Doe" \ -s "Reference Shelf" -i 2 "scan_final_v2.pdf"Where each field lands:
Calibre / ebook-meta flag | Shows up in Kavita as |
|---|---|
--series | Series name |
--index | Volume |
--title | Chapter title |
--author | Writer |
--tags | Genres |
--comments | Summary |
--publisher | Publisher |
--rating | User rating |
EPUBs map the same way through their OPF file (calibre:series, calibre:series_index, dc:creator, dc:subject, and the rest).
The honest limit: Calibre has to know the metadata before it can embed it. A folder of PDFs accumulated over two decades with names like scan_final_v2.pdf is still a manual identification job, and Calibre’s bulk metadata download is far weaker on PDFs than on EPUBs carrying an ISBN. Kavita’s scanner falls back to parsing the filename, which is exactly as good as your filenames are.
Thanks to reader Pedja for the question that prompted this section.
Disk Layout: Where Philosophy Differs
Calibre stores books in author folders:
/library/ Author Name/ Book Title/ book.epub Another Book/ book.mobiIt maintains a metadata.db SQLite database with all the metadata.
Kavita scans your library and builds its own database. You can organize files however you want:
/library/ Fiction/book1.epub Manga/series-title/vol1.cbz Comics/comic-series/issue1.cbr PDFs/technical-docs/some-doc.pdfKavita doesn’t care about the folder structure: it indexes by filename and internal metadata.
This matters if you’re migrating. Moving from Calibre to Kavita? You can reorganize files however you like. Moving from Kavita to Calibre? Calibre will rebuild its folder structure automatically (and potentially get it wrong if metadata is missing).
Real-World Scenarios: When to Pick What
You should use Calibre + Calibre-Web if:
- You have an existing Calibre library (years of metadata investment)
- You read primarily EPUB and occasionally need format conversion
- You want to bulk-update metadata (Calibre’s UI is unmatched)
- You’re on a tight resource budget (Calibre-Web is lightweight)
- You already use Calibre on the desktop and want a web companion
Docker Compose setup:
services: calibre-web: image: lscr.io/linuxserver/calibre-web:latest container_name: calibre-web environment: - PUID=1000 - PGID=1000 - TZ=Etc/UTC volumes: - ./calibre-web/config:/config - /path/to/calibre/library:/books # Point to your Calibre folder ports: - "8083:8083" restart: unless-stoppedJust mount your existing Calibre library folder as /books. Calibre-Web reads the metadata.db and serves it.
You should use Kavita if:
- You have a mixed library: ebooks and comics and manga and PDFs
- You want a modern, snappy interface (important for daily reading)
- You don’t have years of Calibre metadata investment
- You prioritize reading experience over conversion capabilities
- You want something that “just works” without desktop app dependencies
Docker Compose setup:
services: kavita: image: jvmilazz0/kavita:latest container_name: kavita environment: - PUID=1000 - PGID=1000 volumes: - ./kavita/config:/kavita/config - /path/to/books:/books ports: - "5000:5000" restart: unless-stoppedPoint the /books volume to wherever your files live. Kavita scans and indexes them automatically. No Calibre needed.
The Conversion Problem
Here’s the awkward bit: if you pick Kavita for a mixed library, you can’t convert formats without Calibre. Want to convert that PDF to EPUB? You need Calibre installed somewhere (doesn’t have to be the same machine, but it needs to exist).
The pragmatic solution? Run both. Keep a Calibre instance (could be in Docker, could be the desktop app) for conversion work. Serve everything through Kavita for reading. Best of both worlds, but adds complexity.
services: calibre: image: lscr.io/linuxserver/calibre:latest container_name: calibre environment: - PUID=1000 - PGID=1000 volumes: - ./calibre/config:/config - /path/to/books:/books ports: - "8080:8080" restart: unless-stopped
kavita: image: jvmilazz0/kavita:latest container_name: kavita environment: - PUID=1000 - PGID=1000 volumes: - ./kavita/config:/kavita/config - /path/to/books:/books ports: - "5000:5000" restart: unless-stoppedBoth pointing to the same /books volume. Use Calibre’s web UI for metadata and conversion, Kavita for reading.
Honorable Mention: Komga
Before you leave: Komga is another option specifically for comics and manga. It’s simpler than Kavita, faster at comic reading, but less useful for ebooks. If your library is 80% comics and you just want a no-frills server, Komga wins. If it’s mixed, Kavita does both better. (Komga deserves its own article.)
Pick the Stack That Matches Your Library
Here’s the honest take:
-
Calibre + Calibre-Web = the path of least resistance if you’re already invested. It works. It’s proven. It’s boring, but boring is good for infrastructure.
-
Kavita = the pick if you’re starting fresh or you’ve got a mixed library that Calibre wasn’t designed for. Modern UI, low friction, no desktop app dependencies. Worth the fresh start.
-
Both = if you want Calibre’s conversion muscle and Kavita’s reading experience. A bit over-engineered, but flexible.
The trap is overthinking it. Your 2 AM self doesn’t care whether it’s Calibre or Kavita: they just want to hit their phone and read the next chapter. Pick whichever gets out of the way fastest. That’s usually Kavita for new setups, Calibre-Web if you’ve already got the library.
Now stop reorganizing your ebooks and start reading them.