Your Own eBook Library, No Subscription Required
Kavita is an open-source, self-hosted server built specifically for reading manga, comics, and eBooks through a clean web interface. Unlike cloud-based reading apps that lock your library behind monthly fees or restrict file formats, Kavita runs on your own hardware and gives you direct control over every title in your collection. It supports a wide range of formats including EPUB, CBZ, CBR, PDF, and various manga archive types – making it one of the more versatile self-hosted reading solutions available right now.
Setting up Kavita requires a Linux server or any machine that can run Docker. The installation is straightforward, but getting your library properly organized before you start will save you a significant amount of frustration later. Kavita reads your folder structure to build its library, so a messy directory full of inconsistently named files will produce inconsistent results in the interface.
This guide walks through a full Kavita setup using Docker on a Debian or Ubuntu-based system.

Before You Install: Organize Your Files
Kavita uses a specific folder hierarchy to identify series, volumes, and chapters. For manga and comics, the recommended structure is one top-level folder per series, with files named using the volume or chapter number. For example, a folder called Berserk containing files named Berserk v01.cbz, Berserk v02.cbz will parse correctly into a single series with ordered volumes. Deviating from this convention – mixing naming styles, leaving files in the root folder, or using inconsistent capitalizations – can cause Kavita to misidentify series or merge separate titles together.
For eBooks in EPUB format, Kavita reads the metadata embedded inside each file. If your EPUB files have correct author, title, and series metadata, the library will look clean without any manual intervention. If they don’t, tools like Calibre can batch-edit EPUB metadata before you point Kavita at your collection. Getting this right before initial setup is worth the time investment – running a full re-scan after reorganizing a large library takes time and can temporarily break reading progress.
Once your files are organized, decide where on your host system they will live. A dedicated path like /mnt/media/books or /home/username/kavita-library works well. Avoid paths with spaces or special characters, as these can cause mounting issues inside Docker containers.
Installing Kavita with Docker
Docker is the cleanest way to run Kavita because it bundles all dependencies and keeps the application isolated from the rest of your system. If Docker is not already installed, run the following to add it on a Debian or Ubuntu machine:
sudo apt update && sudo apt install docker.io docker-compose -y
With Docker installed, create a directory for your Kavita configuration files:
mkdir -p ~/kavita/config
Then create a docker-compose.yml file in that directory with the following content:
- image: jvmilazz0/kavita:latest
- container_name: kavita
- ports: “5000:5000”
- volumes: map your library folder to /manga and your config folder to /kavita/config
- restart: unless-stopped
A working docker-compose.yml looks like this:
version: “3”
services:
kavita:
image: jvmilazz0/kavita:latest
container_name: kavita
ports:
– “5000:5000”
volumes:
– /home/username/kavita-library:/manga
– /home/username/kavita/config:/kavita/config
restart: unless-stopped
Replace /home/username/kavita-library with the actual path to your book files. You can add multiple volume entries if your collection is split across different directories – each additional folder can be mounted to a unique path inside the container like /manga2 or /epub. Start the container by running docker-compose up -d from the directory where your compose file lives. Kavita will be accessible at http://your-server-ip:5000 within a few seconds.

First-Time Configuration and Library Setup
On the first visit to the Kavita web interface, you will be prompted to create an admin account. Use a strong password here – if you plan to expose Kavita outside your local network, this account is your primary access control. After logging in, navigate to the admin dashboard by clicking your username in the top-right corner, then selecting Server Settings.
From the admin panel, go to Libraries and click Add Library. Give the library a name, select the appropriate type (Manga, Comic, or Book), and enter the folder path as it appears inside the container – not the path on your host. If you mounted your library to /manga in the compose file, enter /manga here. Kavita will begin scanning immediately after you save. Depending on the size of your collection, the initial scan can take several minutes. You can monitor progress from the dashboard. Once scanning completes, your series will appear organized by folder name, with covers pulled automatically from embedded metadata or the first page of each archive.
Kavita also supports OPDS, an open catalog standard that lets external reading apps like Panels, Chunky, or KOReader connect to your server and download files directly. To enable it, go to Server Settings, find the OPDS section, and toggle it on. You will be given a URL in the format http://your-server-ip:5000/api/opds/[token] that compatible apps can use as a catalog source. This is particularly useful for reading on a tablet without needing a browser.
Keeping Kavita Accessible and Up to Date
If you want to access Kavita outside your home network, the simplest approach is to run it behind a reverse proxy like Nginx or Caddy, with HTTPS enabled. Exposing port 5000 directly to the internet without TLS is a poor security choice. A reverse proxy lets you assign a domain or subdomain, handle SSL termination, and optionally add an additional authentication layer. For a secure remote access alternative without opening ports at all, pairing Kavita with a VPN like WireGuard on a Raspberry Pi keeps the server private while still making it reachable from anywhere.
Updating Kavita through Docker is simple. Pull the latest image with docker pull jvmilazz0/kavita:latest, then restart the container with docker-compose down && docker-compose up -d. Your configuration and reading progress are stored in the config volume, so they persist across updates. Kavita releases updates frequently, and the changelog often includes new format support, metadata improvements, and interface fixes – staying current is worthwhile.

One thing to watch: if you ever restructure your library folders after Kavita has already indexed them, the server may create duplicate entries or lose reading progress for affected series. The safest approach is to stop the container, make your folder changes, delete the Kavita database file from the config directory, and let it do a clean scan from scratch – accepting that reading progress will reset rather than dealing with a corrupted library state.





