Calibre-Web is a web app for browsing, reading and downloading ebooks from a Calibre library. It gives you a clean web interface with covers and metadata, a built-in browser reader, user accounts with shelves, an OPDS feed for e-reader apps, and “send to Kindle” by email. Hosted on a VPS, your ebook collection is available from anywhere.

Alternative: Kavita, which is stronger for comics and manga.

Requirements

  • 1 vCPU and 1 GB RAM is enough. Ebook conversion uses more CPU briefly.
  • Disk for your books. Ebooks are small (1–20 MB each), but PDFs and comics add up. See storage VPS.

Install with Docker

The LinuxServer.io image is a popular choice:

# /opt/calibre-web/compose.yaml
services:
  calibre-web:
    image: lscr.io/linuxserver/calibre-web:latest
    restart: unless-stopped
    environment:
      PUID: 1000
      PGID: 1000
      TZ: Etc/UTC
      DOCKER_MODS: linuxserver/mods:universal-calibre   # optional: ebook conversion (x86-64)
    volumes:
      - ./config:/config
      - ./books:/books
    ports:
      - "127.0.0.1:8083:8083"
cd /opt/calibre-web && docker compose up -d

Get a Calibre library onto the server

Calibre-Web needs an existing Calibre database (metadata.db) in the books folder. Choose one option:

  • Upload your desktop library: copy your Calibre Library folder (with metadata.db) to ./books using rsync. See rsync.
  • Start empty: create an empty library with the Calibre desktop app, and copy it over. Then enable uploads in Calibre-Web, and add books through the browser.

Don’t edit the same library in desktop Calibre and Calibre-Web at the same time. Treat one as the master, and sync in one direction.

First-run setup

Open the site, and at the setup screen set the database location to /books.

The default login is admin / admin123: change it immediately (Admin → users).

Recommended admin settings:

  • Enable uploads (Basic Configuration → Feature Configuration) if you’ll add books via the web.
  • Set the converter path if you added the Calibre mod (/usr/bin/ebook-convert).
  • Configure SMTP (Admin → Email server settings) for “Send to eReader”. Kindle requires that your sender address be approved in your Amazon account. See SMTP ports.

Users, shelves and reading

  • Create users with permissions (download, upload, edit, delete). Restrict by tags or languages for family members.
  • Shelves: public or private reading lists.
  • The built-in reader handles EPUB, PDF, CBZ/CBR comics and more, and it remembers your progress.

OPDS for e-reader apps

The OPDS catalogue is at https://books.example.com/opds. Add it in KOReader, Moon+ Reader, Librera, Thorium, or Panels (iOS) with your Calibre-Web username and password. You can then browse and download from the app.

KOReader can also sync reading progress through Calibre-Web’s built-in KOSync support, available in recent versions.

HTTPS with Nginx

server {
    server_name books.example.com;
    client_max_body_size 200M;           # uploads
    location / {
        proxy_pass http://127.0.0.1:8083;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Scheme $scheme;
    }
    # listen 443 ssl; certbot --nginx -d books.example.com
}

See Let’s Encrypt.

Security and legality

  • Use strong passwords, HTTPS, and Fail2ban (Calibre-Web logs failed logins). Disable anonymous browsing unless you mean it to be public. See Fail2ban.
  • Host only books you have the right to store and share. A public library of copyrighted books will get abuse complaints and can get your service suspended. See the legal policies.

Backups

Back up ./books (including metadata.db) and ./config (app.db holds users and settings). See backup strategy.

Quick reference

Item Value
Port 8083
Library path /books (must contain metadata.db)
Default login admin / admin123 (change it)
OPDS /opds
Conversion Calibre mod (ebook-convert)

Related: Audiobookshelf and Jellyfin.

  • Self-Hosting
  • Docker
  • Media Server