Self-hosted, read-only digital book library manager. Catalogues, indexes, and distributes personal e-book collections through a web UI and an OPDS feed.
![]() |
![]() |
| Book detail — metadata, identifiers, annotation, downloads | Full-text search across the catalogue |
![]() |
|
| Alphabetical browse by author (also series, tags, publishers) | |
Demo library shown above uses public-domain titles from Project Gutenberg.
docker run -p 8080:8080 \
-v /path/to/library:/library:ro \
-v folio-data:/data \
ghcr.io/toshik1978/folio:latestOpen http://localhost:8080. Mount your book sources read-only at /library; Folio indexes them into its own SQLite database at /data.
Build from source instead
docker build -t folio .
docker run -p 8080:8080 -v /path/to/library:/library:ro -v folio-data:/data folio| Aspect | Value |
|---|---|
| Module | github.com/Toshik1978/folio |
| Go version | 1.26 |
| Binary | folio-idx |
| Default port | 8080 (env PORT) |
| Database | SQLite 3 + FTS5 |
| Frontend | Vue 3 · TypeScript · Tailwind CSS v4 · DaisyUI · PrimeIcons |
| Deployment | Single Docker container (multi-stage build) |
| Document | Contents |
|---|---|
| ARCHITECTURE.md | System overview, core constraints, deployment model, project structure. |
| BACKEND.md | Go server: routing, SPA embedding, middleware, health check. |
| EBOOK-PARSING.md | Per-format metadata & cover extraction (epub/fb2/mobi/pdf), annotation pipeline. |
| FRONTEND.md | Vue 3 SPA: Vite, TypeScript, Tailwind v4 + DaisyUI, theming, dev proxy. |
| DATABASE.md | SQLite schema, FTS5 search, ingestion sources, sync engine. |
| API.md | REST API, OPDS catalog, file streaming strategy. |
| SYNC-EVENTS.md | Real-time sync status via Server-Sent Events (SSE), event broker, progress reporting. |
| NETWORKING.md | Security model: OPDS Basic Auth, bring-your-own authenticator for the UI/API, CSRF guard. |
| BUILD-AND-DEPLOY.md | Taskfile targets, Docker multi-stage build, local dev workflow. |
| RELEASE_NOTES.md | Curated, human-readable highlights of each release. |
| CHANGELOG.md | Dated history of notable changes, with the rationale behind each. |
Contributing with an AI agent? Start with AGENTS.md — setup commands, task rules, and a task-to-doc map. Claude Code loads it automatically via CLAUDE.md, which simply imports
AGENTS.md.
These invariants apply project-wide. Every design decision must respect them.
- Read-Only — The application never modifies, writes to, or reorganizes source book files or external databases.
- No Embedded Reader — The UI catalogues, filters, and serves downloads. It does not render e-book content.
- Resource Efficient — Designed for low-spec hosts (NAS, Raspberry Pi, minimal VPS). Minimal memory, single binary, no external services.




