Why Kavita Belongs on Your Home Server
Most ebook management tools ask you to make a choice: either use a hosted service that controls your library, or settle for clunky local software that was never designed for remote access. Kavita sidesteps that entirely. It is an open-source, self-hosted reading server built specifically for comics, manga, and ebooks, offering a clean web interface and a native app experience without requiring you to hand your library over to a third party.
Kavita supports EPUB, PDF, CBZ, CBR, and a range of other formats out of the box, making it genuinely useful whether your collection skews toward prose fiction, graphic novels, or scanned manga volumes. It generates metadata automatically, tracks reading progress per user, and supports multiple accounts – so a household can share one server without sharing one reading history.
Setup takes under an hour with Docker.

What You Need Before You Start
The requirements here are minimal. You need a Linux machine or a NAS device that can run Docker – a Raspberry Pi 4 with at least 2GB of RAM works, though a more capable machine will handle larger libraries and simultaneous users more smoothly. You also need Docker and Docker Compose installed, a folder on your system where your books are already stored, and basic comfort working in a terminal. If your ebook collection is scattered across multiple drives, consolidate it into a single parent directory before proceeding – Kavita reads libraries by pointing at folders, so a clean structure saves configuration headaches later.
Port 5000 is Kavita’s default, so check that it is not already occupied on your host. If you are planning to expose Kavita outside your home network, you will want a reverse proxy like NGINX or Caddy and ideally a domain with SSL. That part is optional for local-only use, but it makes a real difference if you want to read on your phone while traveling. For users already running self-hosted infrastructure – a reverse proxy, Docker networks, that kind of setup – Kavita slots in without friction.
Create a working directory for the project. Inside it, you will place your docker-compose.yml file and a config folder that Kavita will populate on first run.
Deploying Kavita with Docker Compose
Create your docker-compose.yml with the following content:
- Set the image to jvmilazz0/kavita:latest – this is the actively maintained image on Docker Hub.
- Map port 5000:5000 unless you need a different host port.
- Mount your ebook directory into the container at /books – for example, /home/youruser/media/books:/books:ro. The :ro flag mounts it read-only, which is a sensible precaution since Kavita does not need write access to your source files.
- Mount a config volume at /kavita/config – this is where Kavita stores its database and settings. Map it to a persistent host path like ./config:/kavita/config.
- Set the TZ environment variable to your local timezone string, for example America/New_York.
- Add restart: unless-stopped so the container comes back up automatically after a reboot.
Once the file is saved, run docker compose up -d from your project directory. Docker will pull the image and start the container. Give it thirty seconds, then open a browser and navigate to http://your-server-ip:5000. You will land on a first-time setup screen asking you to create an admin account. Use a strong password – this account has full control over the server, including the ability to add or remove other users.

Configuring Your Library and User Settings
After logging in as admin, go to Server Settings and then Libraries. Click Add Library, give it a name, select the library type – Book, Comic, or Manga – and then point it at the /books path you mounted inside the container. If you organized your books into subfolders by type, you can create separate libraries for each subfolder. Kavita will scan the directory, pull cover art and metadata from embedded file data, and begin building your collection view. Large libraries with thousands of files can take several minutes to scan completely.
Kavita includes a built-in OPDS server, which means you can connect third-party reading apps directly to your instance without any additional setup. Apps like KOReader, Panels, and Moon+ Reader support OPDS, so if you prefer reading in a specific app over Kavita’s browser interface, point your app at http://your-server-ip:5000/api/opds/your-api-key. You find your personal API key under your account profile inside Kavita. This is one of the more underused features – it effectively turns Kavita into a library backend that feeds whichever reading client you prefer.
For multi-user households, navigate to User Management and create accounts for each reader. You can restrict which libraries each user can access, which is useful if you want to keep adult content or unfinished series separated. Each user gets individual reading progress tracking, so finishing a manga volume on one account does not mark it read for everyone else on the server.
Keeping Kavita Updated and Running Reliably
Kavita releases updates regularly, and the Docker image makes staying current straightforward. Run docker compose pull followed by docker compose up -d to pull the latest image and restart the container with zero downtime on your configuration. Your library data and user accounts live in the config volume, so they persist across updates without any migration steps. Back up that config folder periodically – it contains the SQLite database that holds all reading progress, user accounts, and library metadata. Losing it means rescanning your library from scratch and losing reading history.
If you run into performance issues with large collections, check whether your config volume is on a fast drive. Kavita’s database performs significantly better on an SSD than on a spinning hard drive or a slow NAS filesystem. If scanning stalls or the interface feels sluggish on a Raspberry Pi, moving just the config folder to a USB SSD while keeping your actual book files on a larger slow drive is a practical middle ground.

Kavita also ships with a built-in email notification system and reading statistics per user – features that most people discover well after initial setup but end up relying on. The statistics view tracks pages read over time, average reading speed, and series completion rates, all stored locally with no data leaving your server. Whether that matters to you depends on how seriously you take your reading habits, but the fact that it exists without a subscription or a cloud account is the entire point of running Kavita in the first place.
Frequently Asked Questions
What file formats does Kavita support?
Kavita supports EPUB, PDF, CBZ, CBR, CB7, and several other comic and ebook formats natively without requiring plugins or conversion.
Can multiple users share one Kavita server?
Yes. Kavita supports multiple user accounts with individual reading progress tracking and per-library access restrictions controlled by the admin.





