Tome
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.

Reading time

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-stopped

docker compose, end to end

  1. Save the compose snippet above as docker-compose.yml in an empty directory.
  2. Create the volume folders next to it: mkdir -p data books bindery.
  3. Run docker compose up -d. Tome pulls the image and starts.
  4. 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