Skip to main content

How to Self-Host Komga: Comic and Manga Server 2026

·OSSAlt Team
komgacomicsmangaself-hostingdockeropds2026

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

  1. Admin → Libraries → + Add library
  2. Name: Comics or Manga
  3. Root folder: /comics or /manga
  4. Scanner settings:
    • Scan for new files: Every day
    • Analyze new books: Yes (extracts page count)
  5. Save and scan

Part 5: OPDS Feed

OPDS URL: https://comics.yourdomain.com/opds/v1.2/catalog

Compatible apps

AppPlatformBest For
Chunky Comic ReaderiPadFull-featured, great panel zoom
PanelsiOS/macOSBeautiful UI, OPDS support
Moon+ Reader ProAndroidExcellent CBZ/EPUB reader
Tachiyomi/MihonAndroidBest manga UX with OPDS extension
KOReaderE-InkKobo/Kindle sideloaded reader
YACReaderMac/PCDesktop reading with library

Tachiyomi setup (Android)

  1. Install Mihon (Tachiyomi successor)
  2. Browse → Sources → Browse extensions
  3. Install OPDS extension
  4. Add source → URL: https://comics.yourdomain.com/opds/v1.2/catalog
  5. Username/password for Komga authentication

Part 6: Web Reader

Click any series → chapter → opens the built-in reader:

Reading modes

ModeBest For
Page by page (left→right)Western comics
Page by page (right→left)Japanese manga
Webtoon (vertical scroll)Korean webtoons
Double page spreadOversized comics

Keyboard shortcuts

KeyAction
→ or SpaceNext page
Previous page
FFullscreen
SSettings

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:

  1. Admin → Settings → Metadata
  2. Enable: ComicInfo.xml (embedded in CBZ files)
  3. 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.

Comments