KOReader Sync Server

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

  • Compact TypeScript service in a single entry 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

cp .env.example .env
# Replace PASSWORD_SALT in .env with a long random value.
install -d -o 1000 -g 1000 data
docker compose up -d --build

The server is now running at http://localhost:3001. The SQLite database is persisted in ./data.

Docker Compose

For a more permanent setup:

services:
  koreader-sync:
    build: .
    container_name: koreader-sync
    ports:
      - "3001:${PORT:-3000}"
    environment:
      PORT: ${PORT:-3000}
      HOST: ${HOST:-0.0.0.0}
      PASSWORD_SALT: ${PASSWORD_SALT:?Set PASSWORD_SALT in .env}
      DISABLE_USER_REGISTRATION: ${DISABLE_USER_REGISTRATION:-false}
    restart: unless-stopped
    volumes:
      - ./data:/app/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.