How to Self-Host Kavita: Digital Library for Manga, Comics, and Books 2026
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
| Feature | Kavita | Komga | Calibre-Web |
|---|---|---|---|
| License | GPL 3.0 | MIT | GPL 3.0 |
| Focus | Manga + Comics + Books | Manga + Comics | Books (EPUB) |
| OPDS | Yes | Yes | Yes |
| Formats | CBZ/CBR/EPUB/PDF | CBZ/CBR/PDF | EPUB/PDF/MOBI |
| Series grouping | Auto | Auto | Manual/Calibre |
| Reading in browser | Yes | Yes | Yes |
| Progress sync | Yes | Yes | No |
| User management | Yes | Yes | Yes |
| Metadata fetch | AniList/MangaDex | AniList/MangaDex | Google 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
- Admin → Libraries → Add Library
- Name:
Manga,Comics, orBooks - Type: Manga / Comic / Book (affects how Kavita scans)
- Folder:
/manga(the mounted path) - 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
| App | Platform | Notes |
|---|---|---|
| Paperback | iOS | Best manga app for iPhone/iPad — free |
| Chunky Comic Reader | iPad | Excellent CBZ reader for iPad |
| Panels | iOS/macOS | Clean comic reader with OPDS |
| Moon+ Reader | Android | EPUB/PDF with OPDS support |
| KOReader | E-Ink | Best for e-readers (Kobo, Kindle) |
| Tachiyomi (Mihon) | Android | Manga reader with OPDS extension |
Paperback (iOS) setup
- Install Paperback from App Store
- Settings → Trackers → + Add source
- Choose "Kavita (OPDS)"
- URL:
https://library.yourdomain.com - API Key: your Kavita API key
- Your manga library appears in Paperback
Part 6: Reading in Browser
Kavita has a built-in web reader:
- Browse library → Click series → Click volume/chapter
- 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
- Admin → Tasks → Refresh Metadata
- 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
- + → Create Reading List — ordered list of chapters across series
- + → 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.