Getting started
Installation
One Docker image, three volume mounts, no external services. The image bundles the Python backend, the React frontend, and SQLite. Works on amd64 and arm64 — Raspberry Pi 4+, M-series Macs, modern NASes, anything Docker runs on.
Pick a path
services:
tome:
image: ghcr.io/bndct-devops/tome:latest
container_name: tome
ports:
- "8080:8080"
volumes:
- ./data:/data
- ./books:/books
- ./bindery:/bindery
environment:
# Optional. Auto-generated if unset — see /docs/configuration
# - TOME_SECRET_KEY=
# Optional. Better metadata. Get a free token at hardcover.app
# - TOME_HARDCOVER_TOKEN=
restart: unless-stoppeddocker compose, end to end
- Save the compose snippet above as
docker-compose.ymlin an empty directory. - Create the volume folders next to it:
mkdir -p data books bindery. - Run
docker compose up -d. Tome pulls the image and starts. - Open
http://localhost:8080— the first-run setup wizard greets you.
Volume mounts
/data— SQLite DB, cover cache, baked downloads, secret key. Back this up./books— your ebook library. Read-write so Tome can organise files into series / author folders./bindery— incoming drop folder. New files arrive here and either auto-import or queue for review.
Reverse proxy
Tome speaks plain HTTP. For anything beyond localhost, put it behind a reverse proxy with TLS.
tome.example.com {
reverse_proxy localhost:8080
}Updating
Pull the latest image and recreate the container:
docker compose pull && docker compose up -d
Schema migrations run automatically on startup. Your data persists in /data.
Next
- First-run setup — create your admin account and scan your library.
- Configuration — every environment variable and what it does.
- KOReader plugin — set up TomeSync on your e-reader.