Open-source, self-hosted ebook library

calibre-web: your
Calibre library online

Bring the books you already organize in Calibre to a browser. Find a title by author or tag, read supported formats, and give family members their own accounts and shelves. Run it on your computer, server, or NAS.

Meet calibre-web

Organize in Calibre.
Access with calibre-web.

Keep organizing on your desktop with Calibre, then find and read your books in a browser. Family members can use the same library from their own devices without sharing your computer or administrator account.

calibre-web reads the catalog and files in an existing Calibre library, including authors, tags, and covers. If you only have loose ebook files, import them into Calibre first.

What you can do →
Your libraryOrganize with CalibreCatalog, covers, and ebook files
Web accesscalibre-webBrowsing, reading, accounts, and shelves
Your devicesBrowsers · ebook readersWeb, OPDS, and optional Kobo sync
Relationship diagram, not a screenshot of the application.

Features

Find the right book.
Share the right shelf.

Find and organize

Browse by author, tag, or format; search your catalog and collect books on shelves. No need to remember where a file lives.

Read or download

Open a supported book in the browser or download its original file to your device, straight from its detail page.

Make room for everyone

Create separate accounts and shelves for family members, with per-user access and download permissions.

See everyday workflows →

Ways to read

One library, many devices

Pick up in a browser

Organize on your computer, find a book on your phone, and let each family member use their own shelf. Covers, authors, and details stay in one place.

Browse and read →

Browse from a reading app

Add your library as an OPDS catalog in a compatible reading app to browse and download available books.

Connect via OPDS →

Sync with a Kobo

Choose eligible books from your shelves and sync them to a Kobo device for reading away from your browser.

Set up Kobo →

calibre-web downloads

Choose how to run calibre-web

Install it on a computer, use a Debian package, or run a container on a server or NAS. Choose the method that fits your setup.

Windows installer

Install it directly on a Windows PC. Other devices on your local network can connect while that computer is running.

Windows download →

Debian / Ubuntu packages

Pick the amd64 or arm64 package that matches your machine. A NAS running Linux does not necessarily need a Debian package.

Linux downloads →

Python environment

Run it in a virtual environment on Windows, Linux, or macOS if you prefer to manage dependencies and background services yourself. There is no separate macOS DMG.

Python download →

Docker / NAS

Already use containers? The LinuxServer-maintained image keeps application settings and the Calibre library in separate mounts. You do not need a system installer.

Docker setup →

Download calibre-web 0.6.27

As of September 30, 2026, the latest upstream release we verified was 0.6.27, published August 8, 2026. These links go straight to upstream files. Before downloading later, check the current release.

calibre-web 0.6.27 release assets, file sizes, SHA-256 hashes, and download links
Platform / architectureFileSizeSHA-256Download
WindowsCalibre-Web-V0627.exe50,498,839 BDownload ↗
Debian / Ubuntu amd64calibre-web_0.6.27_amd64.deb73,113,812 BDownload ↗
Debian / Ubuntu arm64calibre-web_0.6.27_arm64.deb66,438,220 BDownload ↗
Python 3 anycalibreweb-0.6.27-py3-none-any.whl8,114,276 BDownload ↗
Source / offlinecalibreweb-0.6.27.tar.gz7,313,353 BDownload ↗
Show full SHA-256 checksums +

These hashes come from the upstream 0.6.27 release assets. Click a shortened hash in the table to copy it, or compare the full values here:

Calibre-Web-V0627.exe
f99fbca8aaeb63bbe2015ef47c64a2a64e7293ff60140a0589987bea7e4cdf6c
calibre-web_0.6.27_amd64.deb
4c586f53bca0584f9f76b808cbead70350d1813274b425be6ba480d4668efe93
calibre-web_0.6.27_arm64.deb
f151db89d79b05b25dcb26066b18534075106690be030d461486c25149370be4
calibreweb-0.6.27-py3-none-any.whl
c6d4173d31a4495e09c615857f30f0d03d9f7eabc7bb50558164f67083d4f72d
calibreweb-0.6.27.tar.gz
6978e6143aedddf59d6709a060d1320159c17b7c986bec1878a6bd75f252f629
✓
Check the file before installing

The result must match the full 64-character hash for the same file and version.

sha256sum calibre-web_0.6.27_amd64.deb

Run the command in the download directory. Replace the example filename if you downloaded a different file, then compare the output with that file's full hash above. If it differs, do not install the file; delete the incomplete download and try again.

Get started

From installation to your first book

Start with a Calibre library containing metadata.db, covers, and ebook files. If you have not created one yet, import your books with Calibre on a desktop first. The machine running calibre-web needs access to the entire library directory.

  1. Install and open. Follow the Docker / NAS or Windows, Linux, and macOS instructions below. After starting the app, open http://127.0.0.1:8083 on the host computer; use its local-network address from another device.
  2. Connect your library. In Location of Calibre database, enter the directory that directly contains metadata.db. For the Docker example, use /books, not the host path /srv/books or the database filename. Save; your titles should appear.
  3. Open a book. Change the administrator password, create individual reader accounts, and open a book's detail page. Check its cover, browser reading where supported, and download. If titles appear but files will not open, see missing-file troubleshooting.

Container installation

calibre-web with Docker / NAS

If you already use containers, keep the application configuration and the book library in separate mounts. Save this example as compose.yaml on your Linux host or NAS. Confirm Docker Compose is available and your library directory exists, then adjust the user IDs, time zone, and paths. After starting, you should be able to open the app and see your books.

compose.yaml
services:
  calibre-web:
    image: lscr.io/linuxserver/calibre-web:latest
    container_name: calibre-web
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
    volumes:
      - ./config:/config
      - /srv/books:/books:ro
    ports:
      - "8083:8083"
    restart: unless-stopped
01

Prepare two directories

./config holds the application database and settings. The host path /srv/books must be the Calibre library directory containing metadata.db.

02

Start and check the mounts

Save the file as compose.yaml and run docker compose up -d beside it. Inside the container, /config must be writable and /books must show your library.

03

Sign in for the first time

On the server, open http://127.0.0.1:8083; from another device, use the NAS's local IP address. Sign in with admin / admin123 and change the password immediately.

04

Enter the container path

In calibre-web, point the library setting to /books, not the host path /srv/books.

Run these commands beside compose.yaml. A successful start appears in docker compose ps. If the container exits, inspect its logs below.

Start the container
docker compose pull
docker compose up -d
docker compose ps

Record the pulled image digest so you know which build to restore. If the output is empty, check that the image was pulled and confirm its actual name.

Inspect image digest
docker image inspect lscr.io/linuxserver/calibre-web:latest --format '{{json .RepoDigests}}'

Match the host user and permissions

Run id on the Docker host to get the account's UID and GID; replace the example PUID and PGID rather than assuming every NAS uses 1000. Set TZ to your time zone. Check logs and confirm the application user can read the library and write to the config directory. If the test fails, inspect parent-directory traversal permissions and mounts; do not use chmod 777.

id
docker logs --tail=100 calibre-web
docker exec -u abc calibre-web sh -c 'test -r /books/metadata.db && test -w /config'

Read-only versus writable libraries

The :ro mount suits browsing, reading, and downloading existing files. To upload, delete, edit metadata, or save converted files, back up the library first, remove :ro, and give the application user appropriate write access. Do not substitute chmod 777 for correct ownership and permissions. Run this on the Docker host to inspect the mounts; if the library is missing, check the host path.

docker exec -it calibre-web sh -c 'ls -la /config /books'
About conversionA running container does not automatically include ebook-convert. LinuxServer's general Calibre mod targets x86-64; do not assume it works on ARM64. Check the image architecture and available conversion tools first.

System installation

Windows, Ubuntu, Debian & macOS

Windows has an installer or Python option. On macOS, use a Python virtual environment or Docker. A manual Linux installation gives you control over Python dependencies, systemd, and rollback. Confirm the app starts before connecting the library.

Windows .exeDebian .debPython venvmacOS venv

Windows installer

  1. Download and verify Calibre-Web-V0627.exe.
  2. Run the installer and start the app, then open http://127.0.0.1:8083.
  3. Under Location of Calibre database, select the library directory directly containing metadata.db and choose Save.
  4. Sign in with admin / admin123, change the password, and test a book's details, cover, and original-format download.

Test on the same computer first, then allow local-network access through the firewall if needed. The initial credentials are for first sign-in only; do not expose port 8083 directly to the internet.

Use a Python virtual environment instead
mkdir C:\Services\calibre-web
cd C:\Services\calibre-web
py -m venv venv
.\venv\Scripts\python.exe -m pip install --upgrade pip
.\venv\Scripts\python.exe -m pip install calibreweb==0.6.27
.\venv\Scripts\cps.exe

Use these commands if Python 3 and the py launcher are installed. Closing the terminal stops the foreground process. For long-term use, configure Task Scheduler with a fixed program path, working directory, and account, then check that the app and library are available after a reboot.

Background service

Keep calibre-web running with systemd

For source or venv installations on Ubuntu or Debian. Docker is managed by Compose and does not need this additional service.

Show the service account, unit file, and log commands

Create a dedicated service account

This example keeps code in /opt/calibre-web and settings in /var/lib/calibre-web. Create the account, check out 0.6.27 as that user, and install its dependencies. If you already have an installation, back it up and adapt the paths rather than overwriting it.

sudo useradd --system --user-group --home-dir /var/lib/calibre-web --shell /usr/sbin/nologin calibreweb
sudo install -d -o calibreweb -g calibreweb /opt/calibre-web /var/lib/calibre-web
sudo -u calibreweb git clone --branch 0.6.27 --depth 1 https://github.com/janeczku/calibre-web /opt/calibre-web
sudo -u calibreweb python3 -m venv /opt/calibre-web/venv
sudo -u calibreweb /opt/calibre-web/venv/bin/python3 -m pip install -r /opt/calibre-web/requirements.txt

The calibreweb user also needs read and traverse permissions on the library and every parent directory. Grant write access only when needed; do not make the whole library world-writable.

Save the unit file and start

Save this as /etc/systemd/system/calibre-web.service. The -p option fixes the location of the application database so changing the working directory does not create a different account database.

[Unit]
Description=Calibre-Web library
After=network.target

[Service]
User=calibreweb
Group=calibreweb
WorkingDirectory=/opt/calibre-web
ExecStart=/opt/calibre-web/venv/bin/python3 /opt/calibre-web/cps.py -p /var/lib/calibre-web/app.db -i 127.0.0.1
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

Listening on 127.0.0.1 works for a reverse proxy on the same machine. For direct local-network access, adjust the bind address and firewall rules deliberately.

Start, check status, and read logs
sudo systemctl daemon-reload
sudo systemctl enable --now calibre-web
sudo systemctl status calibre-web --no-pager
sudo journalctl -u calibre-web -n 100 --no-pager

The status should say active/running. Check again after reboot. If the service keeps crashing, stop it and fix the dependency, permission, or path error rather than hiding it with a shorter restart interval.

Library files

Your library, metadata.db & app.db

Point calibre-web at the folder containing your Calibre database. The application accounts and book files live in different places.

⌁/books/
/books/
├── metadata.db
├── Author Name/
│   └── Book Title (123)/
│       ├── cover.jpg
│       ├── Book Title - Author Name.epub
│       └── Book Title - Author Name.pdf
└── another-author/

Select the root folder directly containing metadata.db. Do not move Calibre-managed author, title, or numbered folders by hand; the relative file paths in its database may stop working.

CALIBRE DATABASEmetadata.db

Book titles, authors, tags, formats, and library metadata. Back it up together with the book directories.

APP DATABASEapp.db

Users, permissions, shelves, and settings. In the Docker example it lives at /config/app.db; other installations may use a different config directory or the path passed with -p.

CHECK THE MOUNTdocker exec calibre-web ls -la /books

Run this on the Docker host to confirm the database and book files are present. If the app cannot read them, see library troubleshooting.

Backup and restore

Keep your books, accounts, and shelves

Stop the app, then back up the entire Calibre library and the application config directory. The library includes metadata.db, books, and covers; the config includes app.db and other settings. For the Docker example, back up the host paths /srv/books and ./config (relative to the Compose file), not paths inside the container.

To restore, stop the service, put both backups back at their original mount points, and restart. Check that your users, shelves, covers, and a book download still work. See titles but not files?

Everyday use

A shelf for every reader

Organize books, set account permissions, and choose a way to read on each device.

ACCOUNTS & SHELVES

Give family members their own shelves

  1. In administrator user management, add an account for each person and assign browsing, download, and upload permissions as needed. Regular readers do not need administrator access.
  2. Add books to a shelf from their detail pages, or add several from advanced search. Sign in as a family member to check that the right books are visible.
  3. To sync a shelf with Kobo, grant that user download permission, then choose the shelf in Kobo settings. Check what is already on the device before changing its sync scope.
02 / DAILY USE

Browse, read, and edit

  • Filter your library by title, author, tag, format, or custom column.
  • Create shelves and decide which accounts can see them.
  • Read supported formats in a browser or download the original file.
  • Upload files or edit metadata and covers when the library mount is writable.
  • Use separate family accounts instead of sharing reading progress.

In a multi-user library, a Calibre boolean custom column represents a shared value, not each reader's private read/unread status.

03 / READERS

Use an OPDS reading app

OPDS exposes a catalog to compatible phone apps and ebook readers. Enter credentials in the client's own authentication fields where possible; do not put password-bearing URLs in public logs, screenshots, or synced bookmarks.

https://books.example.com/opds

A shelf can also have its own OPDS endpoint: /opds/shelf/{shelf_id}, without a trailing slash. Test covers and downloads with a regular account before sharing the address.

04 / EMAIL

Send a book to Kindle or email

In the administrator mail server settings, enter the SMTP host, port, encryption method, sender account, and credentials from your mail provider. Save and send a test message. Use the provider's documented port and encryption settings.

Add a recipient address to the reader's profile. For Kindle delivery, also add the SMTP sender to Amazon's approved sender list, then send a book from its detail page.

If the email does not arrive

Test message fails: check the SMTP host, port, encryption, authentication error, and application log. Test succeeds but Kindle receives nothing: check the recipient, approved sender, and attachment-size limit. Give each reader their own account and destination address.

05 / MULTIPLE LIBRARIES

Run separate instances for separate libraries

The upstream FAQ recommends a separate calibre-web instance for each Calibre library. Give each instance its own application database, port, and log, managed by separate systemd units or Compose projects.

python3 /opt/calibre-web/cps.py -p /srv/calibre-web/instance1.db -i 127.0.0.1
python3 /opt/calibre-web/cps.py -p /srv/calibre-web/instance2.db -i 127.0.0.1

Configure each instance's library path and port before routing different domains or paths through a reverse proxy. Do not let two instances write the same app.db, or let Calibre desktop and calibre-web edit the same metadata.db at the same time.

06 / OPTIONAL LOGIN

LDAP, OAuth & Magic Link

LDAP, GitHub/Google OAuth, and remote login are optional and require extra dependencies and configuration. LDAP users still need to be created or imported in calibre-web; keep a local administrator password in case the LDAP service becomes unavailable.

Before enabling external authentication, keep an active administrator session and a way to revert. Test sign-in, OPDS, and Kobo with a regular account on the local network before exposing the setup publicly.

Reader integrations

OPDS, Kobo & format conversion

Connect a reader after browsing works in a browser. Each integration has its own permissions, URL, and supported formats.

OPDS catalog

In a compatible reading app, add a network catalog using your deployment address plus /opds, for example:

https://books.example.com/opds

Enter a regular reader's credentials in the app and test a book that account can download. For a 401 or 403 response, follow the OPDS authentication steps.

Kobo sync

Enable sync in administrator settings, grant the reader Downloads Allowed, and generate a personal URL with Create/View in that user's profile. Set it as the Kobo api_endpoint; use HTTPS for access over the internet.

Sync depends on formats and shelf settings. PDF does not sync through this feature. See the full setup.

Format conversion

Conversion tools must be available where calibre-web actually runs. Having ebook-convert on the host does not put it inside a container.

  • Try a simple EPUB first
  • Then test images, fonts, and complex CSS
  • Check execution permissions, temporary storage, and architecture
Show detailed Kobo and conversion setup
KOBO / SETUP

Connect a Kobo step by step

  1. Under Basic configuration → Feature Configuration, turn on Enable Kobo sync and confirm that the syncing user has Downloads Allowed.
  2. Open that reader's profile and select Create/View to generate a sync URL. It contains a token; do not share it in screenshots, forums, or reverse-proxy logs.
  3. Connect the Kobo by USB and edit .kobo/Kobo/Kobo eReader.conf on the device. Set api_endpoint under [OneStoreServices].
  4. Use HTTPS over the internet. If a router maps an external port to a different internal one, enter the actual external port in calibre-web's External Port setting.
  5. Cover sync also needs image_host pointing to an address the device can reach. Save the configuration, safely eject the Kobo, and start a sync on the device.
  6. For a subset of books, enable shelf-based sync and select which shelves go to Kobo. When switching from the whole library to selected shelves, books outside those shelves may be archived on the next sync.
[OneStoreServices]
api_endpoint=https://books.example.com/kobo/<token>
KOBO / LIMITS

What Kobo sync does and does not do

  • Kobo sync does not support PDF.
  • Deleting a book in calibre-web or Calibre does not automatically remove it from the device. Archive it first, then sync.
  • Sync stores reading progress and statistics, but calibre-web currently displays only the Read / Unread completion state.
  • When replacing a Kobo while retaining the same token, use Force full kobo sync in the user's settings.
  • The device sends device/user identifiers that changing a password does not revoke. Use TLS for internet access.

Upstream documentation notes that Kobo integration can still have issues; very large libraries may time out. Start with a small library and one or two EPUBs.

CONVERSION / NATIVE

Source or venv installation

Enter the Calibre binary directory in the administrator's external-binaries settings, and check that the service's actual user can execute the tool. Installation on another host or outside the service environment is not enough.

command -v ebook-convert
ebook-convert --version

To convert EPUB to Kobo's Kepub format, install kepubify and enter its actual executable path in the corresponding setting.

CONVERSION / DOCKER

LinuxServer container

The general Calibre mod is linuxserver/mods:universal-calibre, but it targets x86-64; do not copy this setup unchanged to an ARM64 NAS.

DOCKER_MODS=linuxserver/mods:universal-calibre
docker exec calibre-web /usr/bin/ebook-convert --version

Set calibre-web's Calibre Converter field to the directory /usr/bin/, not the full /usr/bin/ebook-convert path found in older guides. Check /usr/bin/kepubify separately if needed.

Remote access

Connect through a reverse proxy

First confirm the library works on the server itself. Then add the location / example to an existing HTTPS Nginx server block. Replace 127.0.0.1:8083 with the actual application address; the surrounding site configuration must provide the domain and TLS certificate.

Forward the real host name and HTTPS schemeAllow book downloads and optional uploadsPreserve /opds and Kobo pathsNever expose the initial account or backend port directly
nginx / books.example.com
location / {
    proxy_pass http://127.0.0.1:8083;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_read_timeout 600s;
    client_max_body_size 200m;
    proxy_buffer_size 1024k;
    proxy_buffers 4 512k;
    proxy_busy_buffers_size 1024k;
}

After saving the Nginx configuration, run sudo nginx -t on the proxy host. If the syntax check passes, run sudo systemctl reload nginx. From another device, open the site by domain, download a small book, and visit the OPDS catalog. If the homepage works but downloads fail, see file access; for upload 413 errors, see proxy size limits; for Kobo sync, see device and server logs.

The client_max_body_size 200m setting is only an Nginx example. The upstream FAQ documents a default Tornado upload limit of 200 MB. Other gateways, permissions, and available disk space can also limit uploads.

Backups

Back up before upgrading

Save the application config (including app.db and keys), the complete book library (including metadata.db), and your Compose, systemd, and proxy configuration. Run these commands beside the Compose file after confirming that config and /srv/books are your actual paths. Inspect the archives and test a restore before upgrading.

docker compose stop
tar -C . -czf config-$(date +%F).tar.gz config
tar -C /srv -czf books-$(date +%F).tar.gz books
Rollback

A rollback is more than swapping images

Keep the code or image, Python dependencies, application database, keys, and deployment files compatible. Do not repeatedly switch versions against your only production app.db.

Find an upgrade-related fix →
Internet access

Before making it public

Use an HTTPS reverse proxy, change the initial password, and enable registration and upload only if you need them. Give family members regular accounts.

Proxy setup and fixes →

Troubleshooting

Find a fix for what you see

Check whether the problem is in the library, account, container, or reverse proxy before changing settings.

The container runs, but the library is empty +

Run these commands on the Docker host; the example container is named calibre-web. The first should list /books/metadata.db; the second should print readable:

docker exec calibre-web ls -la /books/metadata.db
docker exec -u abc calibre-web sh -c 'test -r /books/metadata.db && echo readable'

If the file is missing, point the Compose host path to the full Calibre library and inspect the /books mount with docker inspect calibre-web --format '{{json .Mounts}}'. If it exists but is unreadable, correct PUID/PGID and directory read/traverse permissions. If both tests pass, enter /books under Location of Calibre database and save. You do not need to delete /config.

Titles appear, but books will not open or download +

Titles come from metadata.db, but the actual book files must also be accessible. On the Docker host, confirm that the full library is mounted. This command should find an EPUB; use another extension if your library has no EPUBs.

docker exec -u abc calibre-web sh -c 'find /books -type f -iname "*.epub" -print -quit'

No file: mount or copy the entire library, preserving Calibre's author/title directories. File exists but a regular user cannot download: check Downloads Allowed for that account. If even the administrator fails, check file permissions. If it fails only via the proxy, compare the local and public addresses, then inspect proxy logs and file-size limits.

Setup starts over after recreating the container +

On the Docker host, inspect the actual config mount. It should point to persistent storage at /config inside the container, with app.db in the original host directory.

docker inspect calibre-web --format '{{range .Mounts}}{{println .Source .Destination}}{{end}}'
ls -la ./config

If starting Compose from another directory created a new empty host path, stop the service, locate the original config directory or backup, restore the original mount, and start again. Do not erase the old volume. Keep the book library and app.db separately.

OPDS returns 401 or 403 +

On the service host, request the local OPDS address as a regular reader. The command prompts for a password; do not put it in the URL or shell history. Use HTTPS when testing from another machine.

curl --user reader -o /dev/null -sS -w '%{http_code}\n' http://127.0.0.1:8083/opds

A local 401 means check the account password and the client's authentication fields; for 403, check browse and download permissions. If the local URL works but the proxy fails, confirm that the proxy preserves the /opds path and authentication, testing GET and HEAD separately. Then compare the URL saved in the client.

Kobo shows “Books to Sync: 0” +

In a browser, sign in as the same reader and open a downloadable EPUB. Confirm Downloads Allowed and Kobo sync are enabled. If syncing selected shelves, put that book on a selected shelf and retry. If the count remains zero, temporarily increase logging under Basic configuration → Logfile configuration, sync the device once, and inspect the container log:

docker logs --tail=100 calibre-web

No Kobo request: check the device's api_endpoint, network, and HTTPS. Rejected request: check token and permissions. Catalog appears but conversion fails: check the format and conversion tools inside the container. Restore the previous log level afterward.

Sign-in or permissions change after an upgrade +

Check which app.db, config mount, secret key, and proxy authentication headers the service actually uses. Stop writes, restore the pre-upgrade code or image and a matching config backup in an isolated directory, then address any database migration issue.

Upload returns 413, even below 200 MB +

Try the same file via the local address. If local upload succeeds but the domain fails, the proxy or gateway is the likely limit. For Nginx, inspect the active config and error log on the proxy host:

sudo nginx -T 2>/dev/null | grep -n client_max_body_size
sudo tail -n 80 /var/log/nginx/error.log

If the log says client intended to send too large body, set client_max_body_size appropriately in the correct site config, verify with sudo nginx -t, and reload. If you do not use Nginx or the local request also fails, check the actual gateway or application limit. Do not raise limits without checking permissions and disk space.

ImportError or missing module at startup +

Confirm that the process uses this installation's Python environment rather than system Python. Install missing dependencies with the same venv interpreter, then retry. Avoid mixing pip environments, source checkouts, and service units.

./venv/bin/python3 -m pip install -r requirements.txt
Forgot the administrator password +

Ask another administrator to reset it in user management if possible. Otherwise stop the running instance, identify and back up the active app.db, and run the following from the source directory using the same Python environment. Replace the path with your actual application database path (the systemd example uses /var/lib/calibre-web/app.db), not your library's metadata.db. Restart and sign in afterward.

read -r -s -p 'New password: ' new_password; echo
./venv/bin/python3 cps.py -p /var/lib/calibre-web/app.db -s "admin:$new_password"
unset new_password

This keeps the literal password out of shell history, but the -s argument may still be visible to other processes on the same host while the command runs. Use a trusted host and private terminal. Docker and installer paths and executables differ; do not copy this source-install command unchanged.

EPUB downloads, but the browser reader will not open it +

Downloading and in-browser reading use different paths. The built-in reader unpacks EPUB content and loads its HTML, CSS, and scripts in the browser. A malformed EPUB may not display, and a file containing untrusted scripts should not be opened in the built-in reader. Test a trusted local copy first; download and use a separate reader if necessary.

Where does Kobo sync fail? +

Temporarily raise the log level and enable the access log under calibre-web's Basic configuration → Logfile configuration. On the Kobo, search for devmodeon and enable developer logging in the device information page. Request /kobo/<token>/v1/library/sync in a browser, inspect the returned metadata and download links, and compare the logs to isolate an account, proxy, format, or device problem. Keep the token private.

Library problems when Calibre and calibre-web run together +

Avoid writing to the same metadata.db from both apps at once. Stop one before editing metadata, bulk importing, or maintaining the library. On a NAS, avoid multiple processes writing to the database concurrently.

Questions

Libraries, accounts & devices

For a specific error, go straight to symptom-based troubleshooting.

Do I need to install Calibre to use calibre-web? +

For browsing, searching, reading, and downloading, you need a valid Calibre library and its book files. Server-side conversion or some metadata tasks require additional Calibre tools. Reading metadata.db does not give calibre-web every Calibre desktop feature.

What are the default calibre-web credentials? +

The LinuxServer image starts with the administrator account admin and password admin123. Windows, source, or other packages may use a different initial process. Change the password immediately and give family members and reading apps separate regular accounts.

Can I mount only metadata.db? +

No. The database records metadata and file locations, but the book files, covers, and directories must also be readable. Mounting only the database may show titles while details, reading, or downloads fail.

Is the Docker image maintained by the upstream project? +

The application and container image have different maintainers. The commonly used lscr.io/linuxserver/calibre-web image is maintained by LinuxServer. Record its tag, digest, architecture, mounts, and any external mods separately from the application release.

What is the difference between latest and nightly? +

LinuxServer associates latest with releases and nightly with master. For a predictable deployment, pin a version and record its digest. Nightly is not another name for a stable release.

Can the library live on a NAS, NFS, or SMB share? +

It can, but disconnections, latency, locking, permissions, and concurrent writes matter. Test browsing, details, downloads, restart, and recovery with read-only access first. Keep the application config database on a reliable local volume when possible.

Does a matching SHA-256 hash prove the download is safe? +

It confirms that the file's bytes match the release digest shown here and can reveal an incomplete or changed download. It does not prove the software has no vulnerabilities or replace HTTPS, appropriate permissions, backups, and updates.

How do I uninstall calibre-web but keep my books? +

Separate the app code, app.db, keys, metadata.db, book files, proxy config, and backups. Removing a container or source directory is not the same as deleting a library, but removing the wrong Docker volume may erase settings. Verify a restore before deleting the service definition.

How do I run multiple calibre-web libraries? +

Run one instance per library, each with its own application database, port, log, and config directory. For a source install, -p selects a separate settings database. Do not share app.db between instances; route them through separate domains or ports.

Can I expose calibre-web directly to the internet? +

Use an HTTPS reverse proxy and keep the app listening only on localhost or a controlled private network. Change the initial password and disable anonymous access, open registration, and uploads unless you need them. Kobo also requires reliable TLS and the correct external port.

Copied