Self-hosted automation that watches your reading lists, finds the books on Anna's Archive (with Welib, LibGen, archive.org, and KindleBangla fallbacks), converts them, and emails them to your Kindle — with a Vue 3 dashboard, an integrated BookOrbit library (reader + Kobo sync + OPDS), and a scheduler you control from the browser.
- Acquisition pipeline — Goodreads / Hardcover / manual sources → ranked scraper chain (curl-cffi, FlareSolverr, CloakBrowser, Playwright) → score / auto-pick → download → convert → email to Kindle.
- Integrated reader (BookOrbit) — every book biblichor delivers also lands in BookOrbit's library: in-browser EPUB/PDF reader, Kobo auto-push, KOReader two-way sync, OPDS catalog, reading statistics.
- Dashboard-driven — queue, sources, scrapers, mirrors, scoring, schedule, settings, logs, library: all from the browser. The CLI exists for headless installs but the SPA is the primary surface.
- First-run BookOrbit setup wizard — admin account, library
creation, encrypted credential storage, scan + doctor buttons —
all inside biblichor's
/librarypage. No CLI required after the initialbootstrap.sh.
git clone https://github.com/SutanuNandigrami/biblichor.git
cd biblichor
./deploy/bootstrap.shbootstrap.sh prompts for Gmail, your @kindle.com address, and
the BookOrbit admin credentials, then brings the whole stack up
(biblichor + FlareSolverr + BookOrbit + Postgres) and validates it
with bookorbit-doctor. ~5 minutes end to end.
When it's done:
| URL | What |
|---|---|
http://localhost:8090 |
biblichor dashboard |
http://localhost:8090/library |
First-run BookOrbit setup wizard + sync surfaces |
http://localhost:3000 |
BookOrbit (reader, Kobo, KOReader, OPDS) |
http://localhost:8090/healthz |
Component-level health probe |
Full guides live in docs/wiki/ and are mirrored to
the GitHub wiki:
- Installation — compose (easy) and native (advanced) paths
- Configuration — the two
.envfiles,config.yamlreference, host UIDs, image pinning - First-run walkthrough — adding sources, BookOrbit wizard, schedule, troubleshooting first jobs
- BookOrbit integration — URL model, doctor, metadata providers, API surface biblichor depends on
- Security — archive hygiene, ClamAV, encrypted credentials, recovery key
- Backups — backup / restore, recovery key, encrypted secrets store
- Troubleshooting — common problems and fixes
- Migrate from native — the cutover from a systemd install to compose
- Architecture — pipeline diagram
- data layout
- CLI reference — every subcommand
- Bench + scrapers — how scraper ranking works and how to bench changes
Queue![]() |
Sources![]() |
Scrapers![]() |
Mirrors (with bench)![]() |
Scoring config![]() |
Book detail (search trace + candidates)![]() |
- Backend — Python 3.12, FastAPI, Pydantic v2, APScheduler, SQLite WAL, aiosmtplib, httpx, curl-cffi, BeautifulSoup, rapidfuzz
- Anti-bot — FlareSolverr, CloakBrowser stealth Chromium, Playwright
- Frontend — Vue 3 + Vite + TypeScript + Tailwind + shadcn-vue + Pinia + Vue Router + Lucide icons
- Conversion — Calibre CLI (
ebook-convert,ebook-meta) - Reader / sync — BookOrbit in its own container; biblichor drops books into a shared mount
- Anna's Archive — without which none of this exists
- zelestcarlyone/stacks —
the Wikipedia mirror auto-refresh idea (
utils/domainupdater.py) - bbrown430/endless-library and the Anna's Archive userscript for download-strategy lore
- FlareSolverr, Calibre, BookOrbit, CloakBrowser
GNU Affero General Public License v3.0 (AGPL-3.0) — see LICENSE.
AGPL is strong copyleft with a network-use clause: if you run a modified biblichor as a service that users access over a network, you must make the source available to those users. Since this repo is already public, simply linking to it satisfies that obligation. Personal self-hosted use has no additional obligations.





