| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Self-host your reading stack with a clean web library, KOReader sync, and provider-powered book imports.
If you already use KOReader, Sake gives you a much nicer home base around it. You get a self-hosted web library, seamless progress sync, note-aware reading updates, easy book delivery to devices, and a built-in plugin update flow without losing the KOReader setup you already like.
For the fastest fully self-hosted setup, use the prebuilt Docker image and the bundled self-host compose file from the repository root:
docker compose -f docker-examples/docker-compose.prebuilt.selfhost.yaml upThen open http://localhost:5173.
This setup gives you:
OPDS and WebDAV endpoints use HTTP Basic authentication. By default, your normal account password works there. In Settings -> Account, you can optionally set a separate Basic-auth password for those routes while keeping your normal account password valid too.
This repository has three important layers:
If you are working on the app itself, run app commands from sake/.
Use this if you want the easiest all-in-one setup for local or personal self-hosting.
It uses:
From the repository root with the prebuilt image:
docker compose -f docker-examples/docker-compose.prebuilt.selfhost.yaml upOr build it locally from source:
docker compose -f docker-compose.selfhost.yaml up --buildThen open http://localhost:5173.
Data is persisted under:
Use this if you want to run only the Sake containers but keep your database and object storage elsewhere, for example:
Edit sake/.env, then start from the repository root with the prebuilt image:
docker compose -f docker-examples/docker-compose.prebuilt.yaml upOr build it locally from source:
docker compose up --buildThis Compose stack runs:
Then open http://localhost:5173.
Use this if you are developing the app locally and already have a reachable database and S3-compatible storage.
Configure sake/.env, then run from sake/:
bun install
bun run db:migrate
bun run devThen open http://localhost:5173.
If you are not using Docker Compose, run bun run db:migrate before first boot and again after future schema changes.
Published images live at ghcr.io/sudashiii/sake.
Available tags:
Example:
SAKE_IMAGE=ghcr.io/sudashiii/sake:2026.03.28.1 docker compose -f docker-examples/docker-compose.prebuilt.yaml upCopy sake/.env.example to sake/.env and fill in the values you need.
If ACTIVATED_PROVIDERS is unset, blank, or contains no valid values, search stays disabled and the search UI remains hidden. If ACTIVATED_METADATA_PROVIDERS is unset, blank, or contains no valid values, on-demand metadata lookup stays disabled and the metadata update UI remains hidden.
Metadata provider notes:
Accepted provider names:
LIBSQL_URL=libsql://your-database-name.turso.io
LIBSQL_AUTH_TOKEN=your-turso-auth-token
S3_ENDPOINT=https://<account-id>.r2.cloudflarestorage.com
S3_REGION=auto
S3_BUCKET=your-bucket-name
S3_ACCESS_KEY_ID=your-access-key-id
S3_SECRET_ACCESS_KEY=your-secret-access-key
S3_FORCE_PATH_STYLE=false
ACTIVATED_PROVIDERS=anna,openlib,gutenberg
ACTIVATED_METADATA_PROVIDERS=googlebooks,openlibrary
GOOGLE_BOOKS_API_KEY=
HARDCOVER_API_TOKEN=
METADATA_PROVIDER_TIMEOUT_MS=
VITE_ALLOWED_HOSTS=
BODY_SIZE_LIMIT=InfinityLIBSQL_URL=file:./sake-selfhosted.db
LIBSQL_AUTH_TOKEN=
S3_ENDPOINT=http://localhost:8333
S3_REGION=us-east-1
S3_BUCKET=sake
S3_ACCESS_KEY_ID=sakeadmin
S3_SECRET_ACCESS_KEY=sakeadminsecret
S3_FORCE_PATH_STYLE=true
ACTIVATED_PROVIDERS=anna,openlib,gutenberg
ACTIVATED_METADATA_PROVIDERS=googlebooks,openlibrary
GOOGLE_BOOKS_API_KEY=
HARDCOVER_API_TOKEN=
METADATA_PROVIDER_TIMEOUT_MS=
VITE_ALLOWED_HOSTS=
BODY_SIZE_LIMIT=InfinityIf the database is empty, Sake exposes the normal bootstrap flow in the UI so you can create the first account there. You do not need to predefine a user in the environment.
The TypeScript test suite runs with bun test. The KOReader reader interoperability test runs separately because it needs KOReader's Linux LuaJIT runtime:
cd sake
bun run test:reader:interopThe command downloads and verifies the pinned KOReader v2026.03 Linux release, generates the deterministic EPUB and sidecar fixtures, and runs tests/reader/koreader-xpointer-interop-spec.lua headlessly. It runs natively on Linux x86_64 or arm64; on macOS it uses Docker when available. GitHub Actions runs it in the koreader-reader-interop job.
The KOReader plugin lives in koreaderPlugins/sake.koplugin.
Basic setup flow:
The login step exchanges your password for a device API key and clears the password from the device afterward.
You can also export ebooks from the devices home folder back to the web app, including sidecar data such as progress and notes. Great if you have a pre-existing library on your device!
KOReader plugin releases are tracked in the database and the artifacts are served through S3-compatible storage. If the KOReader plugin is updated and you start the app, the new version will be uploaded to S3 so you can use the updater plugin to easily update the core plugin without needing to manually move the files to your KOReader device.
Search is provider-based and routed through POST /api/search.
To enable Z-Library support, add it to ACTIVATED_PROVIDERS:
ACTIVATED_PROVIDERS=zlib,anna,openlib,gutenberg
ZLIBRARY_BASE_URL=Z-Library mirror URLs must use HTTPS. Sake accepts up to five mirrors, with a maximum of 2,048 characters per URL.
In the app UI, open Settings -> Integrations, then use Connect Z-Library and either:
The app uses those session values for authenticated Z-Library requests.
Run these from sake/:
bun run dev
bun run build
bun run preview
bun run check
bun run test
bun run db:generate
bun run db:migrate
bun run db:statusFrom the repository root, these compose entry points are available:
This repository is licensed under AGPL-3.0-only. See LICENSE for the full text.
| Back | FazBrowse Home | New Git URL |