Self-hosted service
crocodilestick/Calibre-Web-Automated avatar
crocodilestick/Calibre-Web-Automated

Calibre-Web-Automated: An Ingest Pipeline Bolted Onto a Reading Interface

Calibre-Web but Automated and with tons of New Features! Fully automate and simplify your eBook set up!

6,613 stars576 forksJavaScriptGPL-3.0

At a glance

What is it?
CWA wraps Calibre-Web with file watchers, format conversion and a Calibre binary, so dropped files land in the library without a manual import step. The trade is a heavier container and a fork you now have to keep current.
Who is it for?
Adopt CWA if you run Calibre-Web today and the manual import step is the thing that keeps your library stale, or if you want KOSync and OAuth without patching Calibre-Web yourself. Do not adopt it if you already have a working Calibre plus Calibre-Web split that you maintain deliberately, or if you run on a low-power host where the extra container weight matters.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 36 days ago.
What is it written in?
Mainly JavaScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 14, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • crocodilestick/Calibre-Web-Automated6,613 ★ · +353
Star history
Repository2026-09-112026-11-14
crocodilestick/Calibre-Web-Automated6.3k6.6k

353 Stars in the last 64 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

The gap CWA fills: Calibre-Web without the manual import

Calibre-Web gives you a browser interface over a Calibre library. What it does not give you is Calibre's ingest machinery. In stock Calibre-Web, a file sitting in a watch folder stays there until someone triggers an import, and format conversion is a separate concern. The README frames the problem as one of running two services in parallel: Calibre for its feature set, Calibre-Web for its interface, each covering what the other lacks, which the author calls a clunky and imperfect solution. CWA's stated goal is to collapse that pair into one container by keeping the Calibre-Web UI and adding the automation layer on top. The target user is specific: someone self-hosting on modest hardware who wants a drop folder that behaves like a drop folder. If you already enjoy running two services and scripting the handoff, this project is solving a problem you have already solved.

What actually runs inside the container

The mechanism visible in the README is a set of watchers. CWA watches an ingest location and a metadata location, and when files appear it processes them into the Calibre library. On local disks those watchers use filesystem events; when NETWORK_SHARE_MODE is set they switch to a polling-based watcher, which the README describes as a reliability trade rather than a speed one. The container carries a Calibre binary alongside the Calibre-Web application, so conversion does not depend on a second service. Two SQLite databases are in play: metadata.db, which belongs to the Calibre library, and app.db, which holds Calibre-Web settings. The README states that CWA enables Write-Ahead Logging on both for concurrency on local storage. In short: watchers feeding a Calibre-backed library, with a web UI reading the result. The v4.0.6 release notes do advertise automatic duplicate handling and resolution.

Installation: compose file, volumes, and the env vars that matter

The README recommends Docker Compose and lists a Quick Install path plus a section for users migrating from stock Calibre-Web. Setting NETWORK_SHARE_MODE=true does three things according to the README: it disables WAL on metadata.db and app.db, it skips recursive chown operations that tend to fail on NFS and SMB, and it moves the ingest and metadata watchers to polling. The default is false, which means WAL enabled and recursive ownership changes performed. That default is correct for a local disk and wrong for a share, and the failure mode is not subtle: the README names intermittent database is locked errors and corruption risk on filesystems that do not implement WAL or file locking properly. So the first decision you make at install time is whether your library path is local or remote, and that decision determines the value of one variable. The README also documents default admin login credentials under Post-Install Tasks, which means a fresh container is reachable with known credentials until you change them. Treat that as a step in the install, not an afterthought.

Network shares: the mode that makes NFS work and makes it slower

The README's warning block on NFS and SMB is the most concrete engineering content in the document, and it deserves to be read as a limitation rather than a feature. SQLite's WAL mode depends on shared-memory and locking behaviour that some network filesystems do not implement faithfully. CWA's answer is to turn WAL off entirely when NETWORK_SHARE_MODE=true. That removes the corruption risk the README describes, and it also removes the concurrency benefit WAL was there to provide. On top of that, polling watchers mean the container notices new files on a schedule rather than immediately, and every poll is a directory traversal over a network mount. The README says network shares are fully supported with the mode enabled and are still slower than local disks. Both halves of that sentence are true and they point in opposite directions. If your library lives on a NAS and you cannot move it, you are choosing correctness over responsiveness. If you can keep the library on local storage and back it up elsewhere, do that instead.

Where CWA is the wrong tool

Three cases stand out. First, a library you curate by hand. Automatic ingest is a liability if every book is supposed to pass through a metadata review before it enters the library, because the whole point of the watcher is to skip that step. Second, a host where the Calibre binary is unwelcome. CWA is heavier than stock Calibre-Web by construction, and the README's own motivation section is about running on a small, lower-power server, so the project is aware of the tension even as it adds weight. Third, anyone who needs a stable, slow-moving dependency. The release history shows v4.0.6 on 4 February 2026, then v4.0.7 and v4.0.8 a day apart on 27 and 28 September 2026, each with a long title covering several changes. That cadence is normal for an actively developed fork and it is also the reason you should not point a production library at a moving tag. The README's community section thanks members for participating in testing, which is a fair description of what running the latest release entails. Pin a version and read the notes before you move.

The alternative: stock Calibre-Web plus your own glue

The real comparison is not against Calibre itself but against the arrangement CWA was built to replace: stock Calibre-Web with a separate process doing the import. In that setup you keep upstream Calibre-Web, which tracks its own release cycle and has a larger install base to draw on for troubleshooting, and you write or install a watcher that calls calibredb to add files. The difference in approach is where the automation lives. CWA puts it inside the same container as the web application, which is why a single compose file gets you a working pipeline and why you inherit CWA's release cadence for the whole stack. The split approach keeps the UI upgradeable independently of the automation, at the cost of maintaining the glue yourself and accepting that the two halves can drift. CWA also adds features that stock Calibre-Web does not have, including KOSync for KOReader progress syncing and OAuth 2.0 with OIDC, both documented in the README's usage section. If those two features are what you actually want, the fork is the shorter path. If you only want automatic import, a small script against upstream Calibre-Web is less to own.

Licensing and the cost of tracking a fork

CWA is GPL-3.0. That matters in two directions. If you modify and distribute the container, the copyleft terms apply to what you distribute, and the README's For Developers section describes building a custom Docker image, which is exactly the path that produces a modified artifact. Running it privately on your own server does not trigger distribution obligations, but this is a description of the licence, not legal advice, and anyone redistributing a modified image should read the licence text themselves. The maintenance cost is the more practical concern. You are depending on a fork of Calibre-Web, so upstream changes have to be merged by the CWA maintainer before you see them. When Calibre-Web ships a security fix, your exposure window is however long that merge takes. The mitigation available to you is version pinning plus a habit of reading release notes before upgrading, because the release titles are long and cover several unrelated changes at once, which makes it hard to tell from the title alone whether a given release touches ingest, authentication or the database layer. Check the notes, then upgrade.

Editorial conclusion

Adopt CWA if you run Calibre-Web today and the manual import step is the thing that keeps your library stale, or if you want KOSync and OAuth without patching Calibre-Web yourself. Do not adopt it if you already have a working Calibre plus Calibre-Web split that you maintain deliberately, or if you run on a low-power host where the extra container weight matters. Before you migrate, verify three things: that your existing app.db survives the upgrade path described in the migration section, that your storage is local unless you are prepared to set NETWORK_SHARE_MODE=true, and that the default admin credentials are changed on first login. The project's own README thanks community members for taking part in testing, so treat a fresh release as something to schedule rather than something to apply the hour it appears.

Frequently asked questions

What is Calibre-Web Automated?

It is a self-hosted ebook library service that pairs the lightweight web interface of Calibre-Web with the feature set of Calibre, then adds container-driven automations. Runs as the image crocodilestick/calibre-web-automated and listens on port 8083 by default.

How do I install Calibre-Web Automated?

The project recommends Docker-Compose. Copy the shipped docker-compose.yml, set your timezone, a Hardcover token, and a config directory volume, then start it. PUID and PGID default to 1000 and the port is 8083 unless CWA_PORT_OVERRIDE changes it.

How do I add books to Calibre-Web Automated?

Drop files into the ingest folder and the ingest watcher picks them up, normally through inotifywait on Linux. Books already sitting in ingest are imported at startup as of version 4.0.8, and the tree also ships an empty_library directory as a placeholder.

How does Calibre-Web Automated differ from Calibre-Web?

Calibre-Web is resource light with a modern web interface but lacks a few core Calibre features, which is why people run both services in parallel. Calibre-Web Automated aims to remove that split by pairing the web interface with Calibre's feature set and adding automations.

Why does Calibre-Web Automated need a NETWORK_SHARE_MODE switch?

Some network filesystems do not fully support WAL or reliable file locking, which can cause intermittent database is locked errors or corruption risks. Setting NETWORK_SHARE_MODE=true skips WAL on metadata.db and app.db, skips the recursive chown, and moves watchers to polling.

Does Calibre-Web Automated keep up with Calibre itself?

The Docker build pins a Calibre release as a build argument, currently 9.1.0, with kepubify v4.0.4 alongside it. That pin is set at image build time, so the version you get is the one baked into the container you pulled.

Official sources

  1. crocodilestick/Calibre-Web-Automated on GitHub
  2. License: GPL-3.0
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/crocodilestick-calibre-web-automated.svg)](https://hysenlabs.com/projects/crocodilestick-calibre-web-automated)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/crocodilestick-calibre-web-automated.svg)](https://hysenlabs.com/projects/crocodilestick-calibre-web-automated)

Was this useful?