Skip to content
readchekPublic

About

Cross-platform reader for manga, manhwa, comics, and books, with self-hosted server support.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

Chek

Chek

Just one more chapter.
A reader for your books and comics, wherever you keep them.

Get it on the App Store · Website · Docs · Report a problem

Watch the Chek film   Watch the Chek film, vertical cut

▶ Thirty seconds of Chek: widescreen · vertical

Chek 2.0 is out

Chek is free on the App Store for iPhone and iPad. It's the successor to Chibi Manga, rebuilt from the ground up. Manga and manhwa are at its heart, alongside e-books and every other kind of comic.

  • Your own files. EPUB, PDF, CBZ, CBT, MOBI, AZW3, FictionBook, Markdown and plain text. No account needed, and everything works offline.
  • Your own server. Read from Chek server, or from Komga and Kavita through it. Your place follows you between devices.
  • Quiet by design. No ads, no tracking, no analytics.

This repository

This is Chek server, an open-source, self-hosted library server written in Rust. It's optional: the app reads your own files without it.

  • Scans folders of books and comics, and reads their metadata: EPUB, ComicInfo, PDF, MOBI, AZW3, FB2, plain text and Markdown.
  • Serves files, comic pages and covers, including RAR and 7-Zip comics.
  • Syncs each reader's place, bookmarks and highlights between devices.
  • Reads Komga and Kavita libraries as its own.
  • Runs source extensions built as WebAssembly components.
  • Speaks OPDS 2, so apps like Thorium and KOReader can browse it too.

The Chek docs cover installing and running the server, its API, and writing source extensions. Server design covers what's settled and what comes next, and the API contract lives in openapi.yaml.

Other repositories

Repository What it is
app The Chek apps for iPhone, iPad and the web
chek-reader The Swift reading engine behind the app
chek.page The website

Run the server

The install guide walks through a full setup. The short version:

With Docker

CI publishes an image for amd64 and arm64:

docker run -d --name chek -p 8080:8080 \
  -v chek-data:/data -v /path/to/comics:/library:ro \
  ghcr.io/readchek/chek:latest
Tag What you get
latest The newest release
edge The newest commit on main
Any tag with -browser, such as latest-browser The same, with Chromium for browser-backed extensions

For a full setup with browser-backed extensions and an optional outbound proxy, use the server Compose deployment. To run a demo instance with the reader test corpus, see deploying a demo instance.

From source

Install libvips for cover thumbnails and libarchive for RAR and 7-Zip comics, then run the server:

apt install libvips-dev libarchive-dev   # Debian or Ubuntu
brew install vips libarchive             # macOS

cargo run --bin chek

First steps

Open http://<server>:8080/admin in a browser. The admin panel asks for the setup token from the log, creates your admin account, and helps you add a library and the people who read it. Then read at http://<server>:8080/, which is the Chek web app. Both are bundled in the Docker image; from a source build, set CHEK_WEB_DIR to a build of the web app's bun run build:server. If the server has an https address, app.chek.page reaches it too.

To set up without a browser, use the API:

  1. Find the setup token. On first start the server has no accounts and logs a one-time token. With Docker, read it from docker logs chek.

  2. Create the admin. You get a session token back.

    curl -X POST localhost:8080/api/v1/setup \
      -H 'content-type: application/json' \
      -d '{"setupToken": "<from the log>", "name": "admin", "password": "<password>"}'
  3. Add a library. Send the token as Authorization: Bearer <token> on every other request.

    curl -X POST localhost:8080/api/v1/libraries -H "Authorization: Bearer $TOKEN" \
      -H 'content-type: application/json' \
      -d '{"name": "Comics", "path": "/path/to/comics"}'
    curl localhost:8080/api/v1/libraries/1/publications -H "Authorization: Bearer $TOKEN"
  4. Add readers. POST /api/v1/users creates an account and chooses which libraries it may open.

Then connect from the app, or point an OPDS 2 reader at http://<server>:8080/opds/v2/catalog and sign in with a Chek name and password.

Configuration

Everything is set with environment variables. All of them are optional.

Basics

Variable Default What it does
CHEK_BIND 127.0.0.1:8080 Address to listen on
CHEK_DATA_DIR ./data Where the database and covers live
CHEK_SCAN_WORKERS cores − 1 How many files to scan at once
CHEK_SETUP_TOKEN logged at start Your own setup token, 32 characters or more, so you don't need the log
CHEK_WEB_DIR none; the image sets it The web app's build, served at / with the admin panel at /admin. CHEK_ADMIN_DIR still works as its old name
CHEK_MAX_UPLOAD_BYTES 2 GiB Largest file an admin can upload with PUT /api/v1/libraries/{id}/files/{path}; the folder must be mounted read-write

Reaching it from outside

The server speaks plain HTTP. Put it behind a reverse proxy with HTTPS before opening it beyond your home network.

Variable Default What it does
CHEK_TRUSTED_PROXIES none Your proxy's addresses or ranges, comma-separated, such as 10.0.0.0/8, so sign-in limits apply per client
CHEK_CLIENT_IP_HEADER none Set to CF-Connecting-IP behind Cloudflare
CHEK_WEB_ORIGINS https://app.chek.page Origins of the web app allowed to call the API

Sign-in

Variable What it does
CHEK_PUBLIC_URL, CHEK_OIDC_PROVIDERS, CHEK_OIDC_<ID>_* Sign in through OpenID Connect providers such as Authentik, Authelia or Google; see Sign-in providers
CHEK_DEMO_USERS Shared demo accounts with a public password, which can't be changed and keep no reading places

Sources and extensions

Variable Default What it does
CHEK_SOURCE_SYNC_MINUTES 60 How often Komga and Kavita libraries sync
CHEK_EXTENSION_IMAGE_CACHE_MB 2048 Disk cache for covers and pages from extensions; 0 turns it off
CHEK_BROWSER_SOLVER_URL none A FlareSolverr-compatible service, for sites behind Cloudflare
CHEK_BROWSER_EXECUTABLE none Absolute path to Chromium, for interactive pages
CHEK_OUTBOUND_PROXY_URL none An HTTP CONNECT proxy for extension traffic; see Extension host

Logs

Variable What it does
RUST_LOG Log level
OTEL_EXPORTER_OTLP_ENDPOINT Sends logs and traces to an OpenTelemetry collector over OTLP/HTTP; the standard OTEL_* variables apply

Releases

A release is a tag on main named by its version, such as 0.3.0, and CI publishes its image. Run the Release workflow in the Actions tab with the version, or tag it yourself:

git tag 0.3.0 && git push origin 0.3.0

To build the image locally, run docker build -t chek ..

License

Chek server is licensed under the GNU Affero General Public License v3.0. If you run a changed copy as a service for other people, you share your changes with them under the same license.

The extension SDK in extensions and the contract in crates/chek-sources/wit are MIT, so source extensions can use any license.

About

Cross-platform reader for manga, manhwa, comics, and books, with self-hosted server support.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages