How to Self-Host Komga: Comic and Manga Server 2026
TL;DR
Komga (MIT, ~3K GitHub stars, Kotlin) is a self-hosted server for comics, manga, and webtoons. It reads CBZ, CBR, CB7, ZIP, and PDF files, automatically groups them into series, fetches metadata from ComicVine and MangaDex, and provides a clean OPDS feed for any reading app. ComiXology Unlimited charges $5.99/month for a rotating library. Komga serves your own permanent collection for free.
Key Takeaways
- Komga: MIT, ~3K stars, Kotlin — comics/manga/webtoon server with OPDS and REST API
- OPDS: Connect any OPDS-compatible reading app (Moon+ Reader, Chunky, Panels, etc.)
- Series detection: Auto-groups by folder structure and filename patterns
- Read in browser: Built-in web reader with webtoon (vertical scroll) mode
- REST API: Full API — automate downloads, metadata, reading status
- vs Kavita: Komga focuses on comics/manga; Kavita also handles EPUB ebooks
Part 1: Docker Setup
# docker-compose.yml
services:
komga:
image: gotson/komga:latest
container_name: komga
restart: unless-stopped
ports:
- "8080:25600"
volumes:
- komga_config:/config
- /path/to/comics:/comics:ro # Your comics folder (read-only)
- /path/to/manga:/manga:ro # Your manga folder
environment:
TZ: America/Los_Angeles
# Optional: Set initial admin credentials:
KOMGA_LIBRARIES_SCAN_CRON: "0 0 * * *" # Daily auto-scan
volumes:
komga_config:
docker compose up -d
Visit http://your-server:8080 → create admin account on first visit.
Part 2: HTTPS with Caddy
comics.yourdomain.com {
reverse_proxy localhost:8080
}
Part 3: Library Structure
Komga reads folder structure and filenames to auto-group series:
Comics
/comics/
├── Batman/
│ ├── Batman 001 (1940).cbz
│ ├── Batman 002 (1940).cbz
│ └── Batman Annual 001 (1961).cbz
├── X-Men/
│ ├── Uncanny X-Men 001 (1963).cbz
│ └── X-Men v2 001 (1991).cbz
└── Spider-Man/
├── Amazing Spider-Man 001 (1963).cbz
└── Amazing Spider-Man 002 (1963).cbz
Manga
/manga/
├── Chainsaw Man/
│ ├── Chainsaw Man v01 (2018).cbz
│ └── Chainsaw Man v02 (2018).cbz
├── Jujutsu Kaisen/
│ ├── Jujutsu Kaisen v01.cbz
│ └── Jujutsu Kaisen v02.cbz
└── Webtoons/
└── Solo Leveling/
├── Solo Leveling ch001.cbz
└── Solo Leveling ch002.cbz
Part 4: Add Libraries
- Admin → Libraries → + Add library
- Name:
ComicsorManga - Root folder:
/comicsor/manga - Scanner settings:
- Scan for new files: Every day
- Analyze new books: Yes (extracts page count)
- Save and scan
Part 5: OPDS Feed
OPDS URL: https://comics.yourdomain.com/opds/v1.2/catalog
Compatible apps
| App | Platform | Best For |
|---|---|---|
| Chunky Comic Reader | iPad | Full-featured, great panel zoom |
| Panels | iOS/macOS | Beautiful UI, OPDS support |
| Moon+ Reader Pro | Android | Excellent CBZ/EPUB reader |
| Tachiyomi/Mihon | Android | Best manga UX with OPDS extension |
| KOReader | E-Ink | Kobo/Kindle sideloaded reader |
| YACReader | Mac/PC | Desktop reading with library |
Tachiyomi setup (Android)
- Install Mihon (Tachiyomi successor)
- Browse → Sources → Browse extensions
- Install OPDS extension
- Add source → URL:
https://comics.yourdomain.com/opds/v1.2/catalog - Username/password for Komga authentication
Part 6: Web Reader
Click any series → chapter → opens the built-in reader:
Reading modes
| Mode | Best For |
|---|---|
| Page by page (left→right) | Western comics |
| Page by page (right→left) | Japanese manga |
| Webtoon (vertical scroll) | Korean webtoons |
| Double page spread | Oversized comics |
Keyboard shortcuts
| Key | Action |
|---|---|
| → or Space | Next page |
| ← | Previous page |
| F | Fullscreen |
| S | Settings |
Part 7: REST API
BASE="https://comics.yourdomain.com/api/v1"
CREDS="admin:password"
# List libraries:
curl -u "$CREDS" "$BASE/libraries" | jq '.[].name'
# List series in a library:
curl -u "$CREDS" "$BASE/series?libraryId=LIBRARY_ID" | jq '.[].metadata.title'
# Get a series by ID:
curl -u "$CREDS" "$BASE/series/SERIES_ID" | jq '.metadata'
# Search:
curl -u "$CREDS" "$BASE/series?search=batman" | jq '.[].metadata.title'
# Mark a book as read:
curl -u "$CREDS" -X PATCH "$BASE/books/BOOK_ID/read-progress" \
-H "Content-Type: application/json" \
-d '{"completed": true}'
# Get reading progress:
curl -u "$CREDS" "$BASE/books/BOOK_ID/read-progress" | jq '.completed'
# Get thumbnail:
curl -u "$CREDS" "$BASE/series/SERIES_ID/thumbnail" --output cover.jpg
Part 8: Metadata Fetching
Komga can fetch metadata automatically:
- Admin → Settings → Metadata
- Enable: ComicInfo.xml (embedded in CBZ files)
- Providers: ComicVine (Western comics), MangaDex (manga)
Manual metadata edit
Right-click series → Edit metadata:
- Title, summary, publisher
- Genres, tags
- Publication year, status
ComicInfo.xml
Embed metadata inside CBZ files:
<!-- ComicInfo.xml inside CBZ/ZIP -->
<?xml version="1.0" encoding="utf-8"?>
<ComicInfo>
<Title>Batman #001</Title>
<Series>Batman</Series>
<Number>1</Number>
<Year>1940</Year>
<Publisher>DC Comics</Publisher>
<Genre>Superhero</Genre>
<Summary>The first appearance of Batman...</Summary>
</ComicInfo>
Maintenance
# Update:
docker compose pull
docker compose up -d
# Force library scan:
# Admin → Libraries → Scan all
# Backup (config + database only — your files stay in place):
tar -czf komga-config-$(date +%Y%m%d).tar.gz \
$(docker volume inspect komga_komga_config --format '{{.Mountpoint}}')
# Logs:
docker compose logs -f komga
See also: Kavita — also handles EPUB ebooks alongside comics
See all open source media library tools at OSSAlt.com/categories/media.