Self-hosted service
janeczku/calibre-web avatar
janeczku/calibre-web

Calibre-Web: a web front end for an existing Calibre library

:books: Web app for browsing, reading and downloading eBooks stored in a Calibre database

18,272 stars1,870 forksFluentGPL-3.0

At a glance

What is it?
Calibre-Web reads a Calibre metadata.db and serves the library over HTTP. It is a browser and lending layer for a library Calibre already manages, not a replacement for the desktop application.
Who is it for?
Adopt Calibre-Web if you already keep a Calibre library on a machine that can stay on, and you want browser reading, OPDS clients and per-user access without exposing the desktop application. Do not adopt it if nobody maintains the Calibre database, or if you expect the web app to replace Calibre's editing and conversion features on its own.
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 10 days ago.
What is it written in?
Mainly Fluent, according to GitHub's language statistics.

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

Editorial analysis

What Calibre-Web adds to a Calibre library

Calibre itself is a desktop program. It owns the library folder, writes metadata.db, and does the editing and conversion work. Calibre-Web takes that folder as input and exposes it over HTTP, so the books become reachable from a browser, an e-reader, or another machine on the network without anyone opening the desktop app.

The README states the project is a fork of library (mutschler/calibreserver) and is licensed under GPL v3. The audience is the person who already runs Calibre and wants a shared access layer: household members, a small club library, or a single user who reads on a Kobo and does not want to sync by cable. The feature list includes per-user permissions, shelves, metadata editing, download restriction to logged-in users, and public registration support. None of that is library management in the Calibre sense. It is presentation and access control for a library someone else maintains.

How the metadata database drives the app

The relationship is one-directional in the normal case. Calibre writes metadata.db inside the library folder; Calibre-Web reads it and serves the result. In the quick start the administrator sets Location of Calibre database to the path of the folder containing metadata.db and saves. That single setting is what connects the web app to the books.

The dependency list confirms the stack: Flask and Flask-Principal for the web layer, SQLAlchemy for database access, tornado as the server, Wand and Imagemagick for cover handling, PyPDF for PDF work, APScheduler for scheduled jobs. Optional pieces sit outside the Python package. The Calibre desktop program is recommended for on-the-fly conversion and metadata editing, and the path to Calibre's converter tool is set on the setup page. Kepubify is needed for Kobo device support and the binary goes in /opt/kepubify on Linux or C:\Program Files\kepubify on Windows.

That split is the design. The web app can edit metadata and trigger conversion only because it can call out to Calibre's own binaries. Strip those away and you still have browsing, reading, downloading and OPDS, but the editing and conversion features lose their engine.

Installing Calibre-Web via pip and logging in

The README calls the pip route the recommended installation. Create a virtual environment, activate it, install the calibreweb package, then start the app with the cps command.

bash
python3 -m venv calibre-web-env
source calibre-web-env/bin/activate
pip install calibreweb
cps

After cps starts, the app listens on port 8083. The quick start gives the URLs to open: http://localhost:8083 for the interface and http://localhost:8083/opds for the catalog. The default admin credentials are admin and admin123, which should be changed before the instance is reachable from anywhere but localhost.

Raspberry Pi OS users may hit installation problems. The README suggests upgrading pip inside the environment and installing cargo:

bash
./venv/bin/python3 -m pip install --upgrade pip
sudo apt install cargo

If you have no Calibre library yet, the README points at a sample metadata.db in the repository and warns you to move it out of the Calibre-Web folder so an update does not overwrite it. The next step is always the same: open the admin interface, set Location of Calibre database to the folder holding your metadata.db, and save.

Docker images and the Calibre layer question

Pre-built images exist under linuxserver/calibre-web on Docker Hub, with a matching GitHub repository, for x64 and aarch64. The image is lightweight by default. To get the Calibre ebook-convert binary inside the container, add one environment variable to the run or compose file:

yaml
DOCKER_MODS=linuxserver/mods:universal-calibre

The README notes this Calibre layer is x64 only. That is the decision point for Docker users. Without the mod you get a smaller image and no on-the-fly conversion through Calibre binaries. With it you get conversion, but you give up the aarch64 path and pull a larger image. The container documentation also covers path configuration for the Calibre binaries. For anyone searching for a calibre-web docker compose setup, the honest summary is that the compose file is mostly a matter of mounting the library folder and setting that one variable if you want conversion.

Where Calibre-Web is the wrong tool

Calibre-Web does not replace Calibre. If you have no metadata.db, the app has nothing to show, and the README's answer is to download a sample database rather than to build a library from scratch. Bulk metadata editing, format conversion, and the full desktop workflow remain Calibre's job. The README describes the desktop program as recommended for conversion and metadata editing, which is a polite way of saying the web app depends on it for those tasks.

There is also an operational constraint. The library folder has to be reachable from the Calibre-Web process, and the database is written by Calibre. Two writers on one SQLite file is a risk the README does not address, so the safe pattern is to let Calibre own writes and let Calibre-Web read. Cover extraction is another dependency trap: Imagemagick is required for EPUB covers, and Windows users may also need Ghostscript for PDF covers. A container without those tools will show books with missing artwork, and the cause is not obvious from the interface.

Finally, the project is a web application exposed on a network. The default credentials are published in the README. Anyone who starts it on a public interface without changing admin123 has handed over the library.

Calibre-Web compared with Calibre's own content server

Calibre ships a content server, and it is the obvious alternative. The difference is architectural. Calibre's server runs inside the desktop application, so the library and the serving process are the same program on the same machine, and the desktop app has to be running. Calibre-Web is a separate process that reads the same database file. That separation is what allows it to run headless on a NAS or in a container while Calibre stays closed on a laptop.

The trade-off runs the other way too. Because Calibre-Web is not Calibre, it cannot do everything the desktop app does without calling out to Calibre binaries, and the README treats those binaries as optional. Calibre's own server has no such gap. If your library is small, you edit it often, and you are happy to leave the desktop app open, the built-in server is fewer moving parts. Calibre-Web earns its place when the library needs to be available when the desktop application is not.

Licence, maintenance and upgrade cost

The project is GPL-3.0-or-later, stated in pyproject.toml with the LICENSE file included in the distribution. That is a copyleft licence. If you modify Calibre-Web and distribute it, the GPL's terms apply to what you distribute. Running it for your own household or organisation is a different question from redistributing a modified build, and the licence text is the authority rather than this article.

Maintenance looks current. The last push was on 2026-09-20, and the most recent release is 0.6.27 from 2026-08-08, following 0.6.26 in February 2026 and 0.6.25 in August 2025. The cadence is roughly two releases a year with commits in between, and pyproject.toml declares Development Status 5 - Production/Stable.

The upgrade cost is dominated by dependencies, not by the app. The pinned ranges in requirements.txt are narrow in places, including Flask below 3.2.0, SQLAlchemy below 2.1.0, tornado below 6.6, and lxml below 6.2.0. A host that already has conflicting versions of those libraries in the same environment will fight the install, which is why the README insists on a virtual environment. The README also mentions a self-update capability, but it does not document rollback, so a self-update on a working instance is a step to take deliberately.

Editorial conclusion

Adopt Calibre-Web if you already keep a Calibre library on a machine that can stay on, and you want browser reading, OPDS clients and per-user access without exposing the desktop application. Do not adopt it if nobody maintains the Calibre database, or if you expect the web app to replace Calibre's editing and conversion features on its own. Before committing, verify that the Python version on the host satisfies the pyproject requirement of 3.6 or newer, that Imagemagick is present for EPUB cover extraction, and that the path you type into Location of Calibre database points at the folder holding metadata.db rather than at the file itself.

Frequently asked questions

What is the difference between Calibre and Calibre-Web?

Calibre is the desktop program that owns the library and writes metadata.db. Calibre-Web is a separate web application that reads that database and serves the books over HTTP, with per-user permissions, shelves and OPDS. It does not replace Calibre's editing and conversion work.

How do I install Calibre-Web?

The README recommends pip: create a virtual environment, activate it, run pip install calibreweb, then start the app with the cps command. Pre-built Docker images are also published under linuxserver/calibre-web for x64 and aarch64.

How do I use Calibre-Web?

Start the app with cps, open http://localhost:8083, log in with the default admin credentials, then set Location of Calibre database to the folder containing metadata.db in the admin interface. From there the library is browsable, and the OPDS catalog is served at http://localhost:8083/opds.

How do I access Calibre-Web remotely?

The quick start only documents access on http://localhost:8083, and the README does not describe a remote access setup or a reverse proxy configuration. What it does expose for readers is an OPDS feed at http://localhost:8083/opds, which e-reader apps can consume.

How do I install Calibre-Web with Docker?

Pre-built images are available as linuxserver/calibre-web on Docker Hub for x64 and aarch64. Adding DOCKER_MODS=linuxserver/mods:universal-calibre includes the Calibre ebook-convert binary, which the README notes is x64 only.

How do I install Calibre-Web on Windows?

The README does not give a Windows-specific install path beyond the pip instructions and the note that Windows users may need Ghostscript for PDF cover extraction. It does state that Kepubify, needed for Kobo support, goes in C:\Program Files\kepubify on Windows.

Official sources

  1. Issues
  2. janeczku/calibre-web on GitHub
  3. License: GPL-3.0
  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/janeczku-calibre-web.svg)](https://hysenlabs.com/projects/janeczku-calibre-web)