← All articles
MEDIA Kavita: A Self-Hosted Reading Server for Books, Comi... 2026-02-09 · kavita · reading · comics

Kavita: A Self-Hosted Reading Server for Books, Comics, and Manga

Media 2026-02-09 kavita reading comics manga ebooks media-server

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:

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

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:

  1. Books library pointing to /books (type: Book)
  2. Comics library pointing to /comics (type: Comic)
  3. 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

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

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

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:

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:

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:

Each user gets independent:

Collections and Reading Lists

Collections

Group series across libraries into themed collections:

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:

Kavita is not ideal if:

Known limitations:

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