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

Requirements: Docker. That's it.
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.
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/dataSave 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.