Skip to main content

How to Self-Host Kavita: Digital Library for Manga, Comics, and Books 2026

·OSSAlt Team
kavitamangacomicsepubself-hostingdockerdigital-library2026

TL;DR

Kavita (GPL 3.0, ~6K GitHub stars, C#) is a self-hosted digital library server for manga, comics, and books. It reads CBZ/CBR (comics), EPUB (ebooks), and PDF files, tracks your reading progress across devices, and organizes series automatically from folder structure. Kindle Unlimited is $9.99/month for a rotating selection. Kavita serves your own collection — everything you've purchased, downloaded, or converted — for free. Pair it with a tablet or the Paperback iOS app for a near-native reading experience.

Key Takeaways

  • Kavita: GPL 3.0, ~6K stars, C# — manga/comics/books server with reading progress sync
  • Formats: CBZ, CBR, CB7, PDF (comics/manga), EPUB, PDF (books) — all major formats
  • Series detection: Automatically groups volumes by series from folder/filename patterns
  • OPDS: Expose your library as an OPDS catalog for any compatible reading app
  • Reading progress: Tracks page/chapter progress per book, syncs across devices
  • vs Jellyfin: Jellyfin is for video/audio; Kavita is the equivalent for books/comics

Kavita vs Komga vs Calibre-Web

FeatureKavitaKomgaCalibre-Web
LicenseGPL 3.0MITGPL 3.0
FocusManga + Comics + BooksManga + ComicsBooks (EPUB)
OPDSYesYesYes
FormatsCBZ/CBR/EPUB/PDFCBZ/CBR/PDFEPUB/PDF/MOBI
Series groupingAutoAutoManual/Calibre
Reading in browserYesYesYes
Progress syncYesYesNo
User managementYesYesYes
Metadata fetchAniList/MangaDexAniList/MangaDexGoogle Books

Part 1: Docker Setup

# docker-compose.yml
services:
  kavita:
    image: jvmilazz0/kavita:latest
    container_name: kavita
    restart: unless-stopped
    ports:
      - "5000:5000"
    volumes:
      - /path/to/your/manga:/manga        # Your manga library
      - /path/to/your/comics:/comics      # Your comics library
      - /path/to/your/books:/books        # Your ebooks library
      - kavita_config:/kavita/config
    environment:
      TZ: America/Los_Angeles

volumes:
  kavita_config:
docker compose up -d

Visit http://your-server:5000 → complete initial setup wizard.


Part 2: HTTPS with Caddy

library.yourdomain.com {
    reverse_proxy localhost:5000
}

Part 3: Library Organization

Kavita reads your folder structure to identify series. Use this structure:

Manga library

/manga/
├── Attack on Titan/
│   ├── Attack on Titan v01.cbz
│   ├── Attack on Titan v02.cbz
│   └── Attack on Titan v03.cbz
├── One Piece/
│   ├── One Piece v001.cbz
│   └── One Piece v002.cbz
└── Demon Slayer/
    ├── Chapter 001.cbz
    └── Chapter 002.cbz

Comics library

/comics/
├── Batman/
│   ├── Batman #001 (1940).cbz
│   └── Batman #002 (1940).cbz
└── Spider-Man/
    ├── Amazing Spider-Man v01 #001.cbz
    └── Amazing Spider-Man v01 #002.cbz

Books library

/books/
├── Dune/
│   ├── Dune (1965) - Frank Herbert.epub
│   └── Dune Messiah (1969) - Frank Herbert.epub
└── Technical/
    ├── Clean Code - Robert C Martin.epub
    └── The Pragmatic Programmer.epub

Part 4: First Setup

Add libraries

  1. Admin → Libraries → Add Library
  2. Name: Manga, Comics, or Books
  3. Type: Manga / Comic / Book (affects how Kavita scans)
  4. Folder: /manga (the mounted path)
  5. Save → Scan Library

Scan and metadata

After scanning, Kavita:

  • Groups files into series by folder name
  • Detects volume/chapter numbers from filenames
  • Fetches metadata from AniList (manga) or Marvel/ComicVine (comics)

Part 5: OPDS Feed

OPDS (Open Publication Distribution System) lets any compatible reading app connect to Kavita:

OPDS URL: https://library.yourdomain.com/api/opds/YOUR_API_KEY

Find your API key: Profile → User API Key

Compatible OPDS reading apps

AppPlatformNotes
PaperbackiOSBest manga app for iPhone/iPad — free
Chunky Comic ReaderiPadExcellent CBZ reader for iPad
PanelsiOS/macOSClean comic reader with OPDS
Moon+ ReaderAndroidEPUB/PDF with OPDS support
KOReaderE-InkBest for e-readers (Kobo, Kindle)
Tachiyomi (Mihon)AndroidManga reader with OPDS extension

Paperback (iOS) setup

  1. Install Paperback from App Store
  2. Settings → Trackers → + Add source
  3. Choose "Kavita (OPDS)"
  4. URL: https://library.yourdomain.com
  5. API Key: your Kavita API key
  6. Your manga library appears in Paperback

Part 6: Reading in Browser

Kavita has a built-in web reader:

  1. Browse library → Click series → Click volume/chapter
  2. Web reader opens with:
    • Left/right navigation (click sides or arrow keys)
    • Reading direction: Left→Right or Right→Left (manga mode)
    • Page fit: Width, Height, Original, Full
    • Double-page spread mode
    • Bookmarks

Mobile web reader

The web reader is responsive and works on phones:

  • Tap left → previous page
  • Tap right → next page
  • Tap center → show controls

Part 7: Metadata and Covers

Fetch metadata automatically

  1. Admin → Tasks → Refresh Metadata
  2. Kavita connects to:
    • AniList — for manga series info, descriptions, genres
    • MangaDex — for manga covers and descriptions
    • ComicVine — for Western comics

Manual metadata override

Right-click series → Edit Metadata:

  • Custom cover image (paste URL or upload)
  • Summary, genres, tags
  • Publication status, year

Cover images

Kavita uses embedded covers in CBZ files. Add custom cover:

# CBZ = ZIP file — add cover.jpg as the first file:
unzip series_v01.cbz -d /tmp/cbz
cp custom-cover.jpg /tmp/cbz/!cover.jpg  # ! sorts first alphabetically
cd /tmp/cbz && zip -r ../series_v01.cbz .

Part 8: User Management and Sharing

# Create users in Admin → Users:
# - Admin: full access
# - User: read library, track progress
# - Guest: read-only, no progress tracking

# Share specific libraries:
# Admin → Libraries → select library → Manage Access
# → Grant access to specific users only

Reading lists and collections

  1. + → Create Reading List — ordered list of chapters across series
  2. + → Create Collection — group related series (e.g., "Isekai favorites")

Maintenance

# Update:
docker compose pull
docker compose up -d

# Backup (config only — your files are on your filesystem):
tar -czf kavita-config-$(date +%Y%m%d).tar.gz \
  $(docker volume inspect kavita_kavita_config --format '{{.Mountpoint}}')

# Trigger library scan:
# Admin → Libraries → Scan All Libraries

# Logs:
docker compose logs -f kavita

# Check disk usage by library:
# Admin → Dashboard → Storage stats

See all open source media library tools at OSSAlt.com/categories/media.

Comments