KOReader Sync Server

A self-hostable sync server for KOReader. Keeps reading progress in sync across all your devices.

  • Less than 1,000 lines of TypeScript in a single file
  • SQLite database — no external services needed
  • Runs on Docker — nothing else to install

View source on GitHub

KOReader Sync Server

Connecting KOReader

  1. Open a document on your KOReader device and go to Settings → Progress Sync → Custom sync server
  2. Enter this server's URL
  3. Select "Register / Login" to create an account
  4. Test with "Push progress from this device now"
  5. Enable automatic progress syncing if desired

Self-Hosting

Requirements: Docker. That's it.

Quick Start

docker run -d -p 3000:3000 -v koreader-data:/app/data ghcr.io/nperez0111/koreader-sync:latest

The server is now running at http://localhost:3000. The SQLite database is persisted in the koreader-data volume.

Docker Compose

For a more permanent setup:

services:
  kosync:
    image: ghcr.io/nperez0111/koreader-sync:latest
    container_name: kosync
    ports:
      - 3000:3000
    healthcheck:
      test: ["CMD", "bun", "-e", "fetch('http://localhost:3000/health').then(r => { if (!r.ok) process.exit(1) })"]
      interval: 5m
      timeout: 3s
    restart: unless-stopped
    volumes:
      - data:/app/data

volumes:
  data:

Save as docker-compose.yml and run docker compose up -d.

Note: Registration is open by default. Set DISABLE_USER_REGISTRATION=true to block new accounts after you've registered.