Skip to content

KMServer

Your library. One server.

A full-featured Komga drop-in replacement in Rust: the same formats, API and database, plus additional capabilities — in one self-contained binary with no JVM and a small memory footprint.

Written in RustKomga-compatibleKomga + enhancementsCBZ · CBR · PDF · EPUBExisting librariesExisting databaseCross-platformSingle binarySmall footprint
terminalone command
docker run -d \
  --name=kmrs \
  --user 1000:1000 \
  -p 25600:25600 \
  --mount type=bind,source=/path/to/config,target=/config \
  --mount type=bind,source=/path/to/data,target=/data \
  --restart unless-stopped \
  ghcr.io/kmworks/kmrs

Try it in your browser.

A live KMServer with the bundled web UI and a public-domain library of English and Japanese comics and ebooks. Everything resets daily.

Emaildemo@kmworks.date
Passwordkmworks-demo
Open the demo

Why KMServer?

The Komga experience, rebuilt in Rust: one self-contained binary instead of a JVM runtime, and a footprint that stays small.

One binary

No JVM, no runtime: the whole server is one Rust executable for Linux, macOS, and Windows. Docker image included.

Small footprint, efficient serving

A 16 MiB SQLite page-cache budget per database, capped allocator arenas, and bounded container caches keep memory predictable and page serving efficient. Enhancements

Web UI included

The kmweb UI is embedded in the binary, so your library works in a browser out of the box.

Komga-compatible, verified

Same port, same mounts, same environment variables, same API.

API parity, verified

REST, OPDS v1.2/v2, SSE, Kobo and KOReader sync. A differential harness compares about 105 endpoints against a live Java Komga instance.

python3 tests/diff/diff.py \
  --java-jar komga.jar \
  --rust-bin ./kmrs

Drop-in replacement

Same port (25600), same /config and /data mounts, same KOMGA_* environment variables. Your existing setup carries over.

Keep your library. Keep your database.

Point KMServer at an existing Komga data directory and it upgrades database.sqlite in place with byte-for-byte Flyway migrations. The Java version can still open libraries written by KMServer, so you can switch back at any time.

Same library

Your files stay where they are.

Same database

Upgraded in place, readable by both servers.

Same API

Your clients reconnect without changes.

Up and reading in one command

Install

One docker run, or a single binary from the releases page.

Keep your library

Point /config at your existing Komga data. KMServer upgrades it in place.

Pick a reader

The bundled web UI, KMReader, KOReader, Kobo, or any OPDS client.

docker run -d \
  --name=kmrs \
  --user 1000:1000 \
  -p 25600:25600 \
  --mount type=bind,source=/path/to/config,target=/config \
  --mount type=bind,source=/path/to/data,target=/data \
  --restart unless-stopped \
  ghcr.io/kmworks/kmrs
services:
  kmrs:
    image: ghcr.io/kmworks/kmrs:latest
    container_name: kmrs
    user: "1000:1000"
    ports:
      - "25600:25600"
    volumes:
      - ./config:/config
      - ./data:/data
    restart: unless-stopped
# grab the archive for your platform from the releases page:
#   https://github.com/kmworks/kmrs/releases/latest
./kmrs   # serves on http://localhost:25600

Beyond compatibility

Capabilities the Java version does not have.

CJK cross-search

Simplified and traditional Chinese match each other, and CJK unigrams find titles mid-run. Search

简繁

Smart lists

Save any search as a live list: the filter re-evaluates for whoever is looking, with share scopes and generated mosaic covers. Smart lists

Reading stats

Per-user totals, day-by-day activity, and reading streaks, computed on the server. Reading stats

The full lists live in the docs: Enhancements, Compatibility, Known limitations, Development.

Bring your own reader

Compatible with the Komga API and its reader ecosystem.

Start serving your comics.

Type to search…

↑↓ navigate↵ selectEsc close