Kavita: A Self-Hosted Reading Server for Books, Comics, and Manga
If you have a collection of ebooks, comics, or manga scattered across folders on a hard drive, you've probably wished for a way to browse them like a proper library. Something with cover art, reading progress, and a decent reader that works in the browser.
Kavita is a self-hosted reading server that handles books (EPUB, PDF), comics (CBZ, CBR, CB7), and manga in a single application. It has a polished web reader, OPDS support for e-reader apps, metadata scraping, and multi-user accounts. Think of it as Jellyfin but for reading material.
Why Not Just Use Calibre-Web?
If your library is primarily ebooks, Calibre-Web is excellent. But Kavita fills a different niche:
- No Calibre dependency — Kavita reads directly from your filesystem. No
metadata.dbrequired, no Calibre Desktop setup. - First-class comic and manga support — Kavita understands comic archives (CBZ/CBR), manga reading order, and series/volume structures natively.
- Modern reading experience — The built-in reader handles EPUB, PDF, and image-based formats with a responsive, full-featured UI.
- Active development — Kavita has a rapid release cycle with consistent improvements.
Kavita vs. Komga vs. Calibre-Web
| Feature | Kavita | Komga | Calibre-Web |
|---|---|---|---|
| Ebook support (EPUB, PDF) | Excellent | Limited | Excellent |
| Comic/manga support | Excellent | Excellent | Basic |
| Built-in web reader | Yes (all formats) | Yes (comics) | Yes (EPUB, PDF) |
| OPDS feed | Yes | Yes | Yes |
| Metadata scraping | Yes (multiple sources) | Yes (ComicVine) | Yes (Google Books, Amazon) |
| Send-to-Kindle | No | No | Yes |
| Kobo sync | No | No | Yes |
| External dependency | None | None | Calibre database |
| Reading progress | Per-page, cross-device | Per-page | Per-book |
| Series management | Excellent | Excellent | Basic (via Calibre) |
| Collections and reading lists | Yes | Yes (reading lists) | Shelves |
| Multi-user | Yes | Yes | Yes |
| Smart filters | Yes | Limited | Limited |
| Mobile apps | OPDS + PWA | OPDS + third-party | OPDS |
| Resource usage | ~150 MB RAM | ~200 MB RAM (JVM) | ~80 MB RAM |
When to pick each one
- Kavita if you read a mix of ebooks, comics, and manga, and want one server that handles all of them well without external dependencies.
- Komga if your library is primarily comics and manga, you want deep ComicVine metadata integration, and you don't care about EPUB reader quality.
- Calibre-Web if your library is primarily ebooks, you already use Calibre Desktop, and you want Send-to-Kindle and Kobo sync features.
The honest comparison: Komga's comic reader is slightly more refined than Kavita's, and its ComicVine metadata scraping is more reliable. But Kavita's EPUB reader is significantly better than Komga's, and Kavita handles mixed libraries (books + comics) far more gracefully. If you only read one format, pick the specialist. If you read everything, Kavita is the best all-rounder.
Installation
services:
kavita:
image: jvmilazz0/kavita:latest
container_name: kavita
ports:
- "5000:5000"
volumes:
- ./data:/kavita/config
- /path/to/books:/books
- /path/to/comics:/comics
- /path/to/manga:/manga
restart: unless-stopped
docker compose up -d
Visit http://your-server:5000, create your admin account, and add library paths.
Adding libraries
In Kavita's admin settings, create separate libraries for each content type:
- Books library pointing to
/books(type: Book) - Comics library pointing to
/comics(type: Comic) - Manga library pointing to
/manga(type: Manga)
Keeping them separate matters because Kavita applies different parsing rules, metadata sources, and reading defaults based on library type. A manga library defaults to right-to-left reading; a comics library defaults to left-to-right.
Library Organization
Kavita is flexible with file organization, but following a consistent structure gives you the best automatic metadata matching.
For books
/books/
├── Brandon Sanderson/
│ ├── Mistborn/
│ │ ├── Mistborn - The Final Empire.epub
│ │ ├── Mistborn - The Well of Ascension.epub
│ │ └── Mistborn - The Hero of Ages.epub
│ └── The Stormlight Archive/
│ ├── The Way of Kings.epub
│ └── Words of Radiance.epub
├── Andy Weir/
│ └── Project Hail Mary.epub
└── ...
Author / Series / Files is the recommended structure. Kavita parses folder names to identify authors and series automatically.
For comics
/comics/
├── Saga/
│ ├── Saga Vol. 01.cbz
│ ├── Saga Vol. 02.cbz
│ └── ...
├── Sandman/
│ ├── Sandman #001.cbz
│ ├── Sandman #002.cbz
│ └── ...
└── One-shots/
└── Maus.cbz
For manga
/manga/
├── One Piece/
│ ├── One Piece Vol. 01.cbz
│ ├── One Piece Vol. 02.cbz
│ └── ...
├── Berserk/
│ ├── Berserk Vol. 01.cbz
│ └── ...
└── ...
Kavita understands volume numbering, issue numbering, and various naming conventions. It's reasonably good at parsing Series Name Vol. XX, Series #XXX, and similar patterns. Unusual naming schemes may require manual cleanup.
Supported formats
- Books: EPUB, PDF
- Comics/Manga: CBZ, CBR, CB7, ZIP, RAR, 7Z, TAR, PNG/JPG folders
- Raw images: Folders of PNG or JPG files (treated as chapters)
Note on CBR files: CBR is RAR-compressed, and extracting them is slower than CBZ (ZIP). If you're building a library from scratch, prefer CBZ. Kavita handles both, but CBZ files load faster.
The Reading Experience
Kavita's built-in reader is one of its strongest features.
EPUB reader
- Paginated or continuous scroll layouts
- Customizable fonts, font size, and margins
- Dark, light, and sepia themes
- Table of contents navigation
- Progress bar with chapter indicators
- Bookmarking
The EPUB reader is genuinely good for extended reading sessions. It's not quite at the level of a dedicated e-reader, but for a browser-based reader, it's among the best available in self-hosted software.
Comic/manga reader
- Single-page or double-page spread modes
- Webtoon mode (continuous vertical scroll) for Korean/Chinese comics
- Right-to-left reading for manga
- Keyboard navigation and swipe gestures
- Full-screen mode
- Page fit options (width, height, original)
Reading progress
Kavita tracks your reading position at the page level. Close the browser, open it on another device, and you're exactly where you left off. Progress syncs across all clients — web browser, OPDS apps, and the PWA.
OPDS Support
Kavita exposes an OPDS feed for e-reader apps to browse and download from your library:
http://your-server:5000/api/opds/{api-key}
Each user gets a unique API key from their settings page. Point your OPDS-compatible app to this URL.
Compatible apps:
- Panels (iOS) — Excellent comics/manga reader with OPDS
- Chunky Reader (iOS) — Comic reader with OPDS
- Librera (Android) — EPUB/PDF reader with OPDS
- Moon+ Reader (Android) — Full-featured reader with OPDS
- TachiyomiSY / Mihon (Android) — Manga reader with Kavita extension
Kavita's Tachiyomi/Mihon extension
For manga readers on Android, Kavita has a dedicated extension for Tachiyomi forks (now Mihon). This gives you a native manga reading experience with your self-hosted library as the source — the same workflow as reading from MangaDex or other online sources, but from your own server.
Metadata Management
Kavita can scrape metadata from external sources to fill in cover art, summaries, and series information:
- Comic Vine — Comics metadata (requires free API key)
- AniList — Manga and anime metadata
- Google Books — Book metadata
- Hardcover — Book metadata and recommendations
- MAL (MyAnimeList) — Manga metadata
Enable metadata providers in Admin > Settings > Metadata and trigger scans per-library or per-series.
Kavita+ (optional)
Kavita offers an optional paid service called Kavita+ that adds external metadata matching via their servers, recommendations, and MAL/AniList scrobbling (syncing your reading progress to those platforms). It costs about $30/year.
Kavita works perfectly fine without Kavita+. The free version can still scrape metadata from Comic Vine and other sources. Kavita+ just makes the matching more automated and adds the scrobbling features. If you track your reading on AniList or MAL, it might be worth it. Otherwise, skip it.
User Management and Sharing
Create accounts for family members or friends:
- Admin — Full control over libraries, settings, and users
- Users — Can read from assigned libraries, manage their own progress and bookmarks
- Library access — Assign specific libraries per user (kids get the books library but not the mature manga library)
- Age rating restrictions — Set per-user age rating limits
Each user gets independent:
- Reading progress across all formats
- Bookmarks and highlights
- Reading lists and collections
- OPDS API key
- Theme and reader preferences
Collections and Reading Lists
Collections
Group series across libraries into themed collections:
- "Best Sci-Fi" spanning your books and comics libraries
- "Currently Reading" as a quick-access collection
- "Recommend to Dad" for sharing picks
Reading lists
Ordered lists for reading things in a specific sequence. Useful for crossover events in comics (read Issue A of Series X, then Issue B of Series Y) or curated reading orders.
Smart filters
Create dynamic filters based on metadata: all series tagged "sci-fi" with a rating above 4, all unread manga, all books added in the last month. These update automatically as your library changes.
Performance and Hardware
| Library Size | RAM | CPU | Notes |
|---|---|---|---|
| < 500 items | 150 MB | 1 core | Minimal hardware |
| 500 - 5,000 items | 300 MB | 2 cores | Typical homelab library |
| 5,000+ items | 500 MB+ | 2+ cores | Large collections, initial scan is slow |
Initial library scans are the most resource-intensive operation. Scanning 5,000 comics can take 10-30 minutes depending on disk speed and whether cover extraction is needed. After the initial scan, subsequent scans only process new or changed files.
Storage note: Kavita generates cover thumbnails and caches extracted pages. For large comic libraries, this cache can grow to several GB. You can configure cache limits in the admin settings.
Backup
Kavita stores its data in the config directory:
/kavita/config/
├── kavita.db # Main database (users, progress, metadata)
├── kavita.db-wal # Write-ahead log
├── covers/ # Generated cover thumbnails
├── bookmarks/ # User bookmarks
├── temp/ # Temporary extraction files
└── logs/ # Application logs
Back up kavita.db regularly — it contains all your reading progress, user accounts, and metadata. The covers directory can be regenerated from a library scan if lost.
# Simple backup
cp /path/to/kavita/config/kavita.db /path/to/backups/kavita-$(date +%F).db
The Honest Trade-offs
Kavita is great if:
- You read a mix of ebooks, comics, and manga
- You want a standalone server with no external dependencies
- You want a modern, polished web reader for all formats
- You need OPDS support for mobile reading apps
- You want multi-user with per-library access control
Kavita is not ideal if:
- You only read ebooks and want Kindle/Kobo integration (Calibre-Web)
- You only read comics and want the most refined comic-specific experience (Komga)
- You need heavy metadata editing capabilities (Calibre Desktop)
- You want to convert between ebook formats (Kavita doesn't do conversion)
- You have a very large library (10,000+ items) and limited server resources
Known limitations:
- No format conversion. If you have a MOBI file, Kavita can't convert it to EPUB. Convert before adding to your library.
- PDF rendering in the browser can be slow for large, image-heavy PDFs. This is a browser limitation more than a Kavita limitation.
- Metadata scraping occasionally matches the wrong series, especially for books with common names. Manual correction is sometimes needed.
- The mobile web experience (PWA) is functional but not as smooth as a native app. Using OPDS with a dedicated reader app is usually better on mobile.
Bottom line: Kavita is the best self-hosted option for people who read across formats. If your library has EPUB novels next to CBZ comics next to manga volumes, no other single application handles all three as well. The reader is good, the organization is logical, and the active development means it keeps getting better.
Resources
- Kavita GitHub
- Kavita documentation
- Kavita Discord — Active community for support
- File naming guide — How to organize files for best parsing results
- OPDS setup guide
- Kavita+ info