Your Ebooks, Your Server, Your Rules
Calibre-Web is an open-source web application that sits on top of an existing Calibre library database and turns it into a browser-accessible ebook collection. You get a clean reading interface, user accounts, OPDS catalog support for e-reader apps, and the ability to send books directly to a Kindle – all running on hardware you control. No subscription, no cloud dependency, no vendor deciding what formats they will or will not support next quarter.
The setup process is more approachable than most self-hosting projects. If you have Docker installed and a Calibre library already on disk, you can have Calibre-Web running in under twenty minutes. If you are starting completely fresh, add another ten minutes to initialize an empty library. Either way, this guide walks through the full process: Docker deployment, library configuration, user management, and getting your e-reader connected.

What You Need Before Starting
The minimum requirements are modest. A Raspberry Pi 4, a basic VPS, or any always-on Linux machine with at least 1GB of RAM will handle Calibre-Web without complaints. You will need Docker and Docker Compose installed, a working internet connection during setup, and either an existing Calibre library folder or a directory where you want to store ebooks. The library folder must contain a metadata.db file – that is the Calibre database that Calibre-Web reads from. If you have never used Calibre before, download the desktop application, open it, and let it create a default library. That generates the database file you need, even if the library is empty.
Make note of the full path to your library folder before continuing. You will pass it to Docker as a volume mount, and getting this wrong is the single most common setup error. On Linux, something like /home/youruser/calibre-library is typical. Confirm the metadata.db file exists inside that directory before moving on.
Deploying Calibre-Web with Docker Compose
Create a new directory for your Calibre-Web project and inside it create a file named docker-compose.yml. The recommended image is maintained by LinuxServer.io, which handles permissions cleanly and updates regularly. Paste the following into your compose file, adjusting the volume paths and environment variables to match your system.
Set PUID and PGID to the user ID and group ID of the account that owns your library folder. Run id youruser in the terminal to find those values. The TZ variable takes a standard timezone string like America/New_York or Europe/London. Map port 8083 on the host to port 8083 in the container – that is the default Calibre-Web port. Mount your library folder to /books inside the container, and create a separate config volume at /config so your settings persist across container restarts.
A working compose file looks like this:
- image: lscr.io/linuxserver/calibre-web:latest
- container_name: calibre-web
- environment: PUID=1000, PGID=1000, TZ=America/New_York
- volumes: ./config:/config and /home/youruser/calibre-library:/books
- ports: 8083:8083
- restart: unless-stopped
Run docker compose up -d from inside your project directory. Docker will pull the image, start the container, and within about thirty seconds Calibre-Web will be accessible at http://your-server-ip:8083. Open that address in a browser. The first thing you will see is the initial setup screen asking for the location of your Calibre database. Enter /books – the path as the container sees it, not the path on your host machine. That distinction trips up a lot of first-time users.

First Login and Basic Configuration
After pointing Calibre-Web at the database, it redirects to the login page. The default credentials are username admin and password admin123. Change both immediately after logging in. Navigate to Admin Panel in the top menu, then Edit User on the admin account. Set a strong password and update the email address – Calibre-Web uses this for the Kindle send-to feature.
From the Admin Panel you can also enable features that are off by default. The two most useful are Allow book uploads, which lets you add ebooks through the web interface instead of only through the Calibre desktop app, and Enable anonymous browsing, which you probably want disabled if this server is accessible outside your home network. Spend five minutes in the Admin Panel before doing anything else – many configuration options that seem buried are actually right there on that screen.
Connecting an E-Reader and Setting Up OPDS
Calibre-Web includes an OPDS catalog feed, which is the protocol most e-reader apps use to browse and download books from a remote library. The OPDS URL follows this format: http://your-server-ip:8083/opds. Apps like KOReader, Moon+ Reader, and Kybook 3 all support OPDS catalogs. Open the app on your device, find the catalog or library section, add a new OPDS source, and paste in that URL. You will be prompted for your Calibre-Web username and password.
For Kindle users, Calibre-Web can send books directly to a Kindle email address using Amazon’s Send to Kindle service. In the Admin Panel, enter your SMTP server credentials and the sender email address you have whitelisted in your Amazon account settings. Then on any book’s detail page, a Send to Kindle button appears. It converts the file format if needed and delivers it over email the same way the official Calibre desktop app does.
If you plan to access your library outside your home network without opening ports directly, pairing Calibre-Web with a self-hosted VPN or tunnel is the cleaner approach. A self-hosted Tailscale control server running Headscale lets you reach Calibre-Web on your home machine from any device on your tailnet, without exposing port 8083 to the public internet. Your library stays private and the connection stays encrypted without needing a reverse proxy or SSL certificate configuration on day one.

Managing Books and Users Over Time
Adding books works best through the Calibre desktop application when you want to do it in bulk, because Calibre handles metadata fetching, cover downloads, and format conversion all at once before writing to the shared database. For single uploads, the web interface works fine – just make sure upload permissions are enabled in the Admin Panel. After adding books through the desktop app, Calibre-Web picks up the changes automatically on the next page load because it reads directly from the live database file.
If you want to give other people in your household access, create separate user accounts rather than sharing the admin credentials. Each user account can have its own reading progress, shelf collections, and restrictions on which features they can access. You can restrict a user to read-only browsing, block downloads, or limit them to a specific subset of the library using shelves. User management in Calibre-Web is granular enough for a small family setup without requiring any additional software.
One thing worth planning for early: backups. The entire state of your Calibre-Web instance lives in two places – the metadata.db file in your library folder and the config directory mounted at /config. Back up both regularly. The database holds all your book metadata, reading lists, and user data. If that file gets corrupted and you have no backup, restoring a Calibre library from raw ebook files alone is a manual, time-consuming process that no one wants to deal with after the fact.





