The official image is amd64 only. For ARM64 (e.g. Raspberry Pi 4), a pre-built image is available:
services:
livrarr:
image: ghcr.io/edmunek/livrarr:arm64
container_name: livrarr
ports:
- 8789:8789
volumes:
- /your/config:/config
- /your/books:/books
- /your/downloads:/downloads
restart: unless-stoppedIf you prefer to build your own ARM64 image:
- Fork this repository
- Create
.github/workflows/build-arm64.ymlwith the workflow from this fork - Run the workflow via Actions → Build ARM64 Docker Image → Run workflow
- The image will be pushed to your GitHub Container Registry as
ghcr.io/YOUR_USERNAME/livrarr:arm64
Note: Build time is approximately 6 hours on GitHub Actions free tier (first run). Subsequent runs are faster due to layer caching.
Self-hosted ebook and audiobook library manager. Built for the *arr ecosystem — finds, grabs, and organizes your books the way Sonarr does for TV.
⚠️ Alpha software. Core workflows work. Rough edges exist. Feedback welcome.
- Search any Torznab or Newznab indexer (Prowlarr, NZBHydra2, Jackett, or direct) for ebooks and audiobooks
- Grab via qBittorrent or SABnzbd (forthcoming: support for other clients)
- Import to your library with automatic file organization
- Enrich metadata from Hardcover, OpenLibrary, and Audnexus
- Push to Calibre-Web Automated (CWA) or AudioBookShelf (ABS)
- Ebooks and audiobooks unified in a single instance — no separate installations
- No closed-source metadata proxy — all providers are open, pluggable, and federated
- Single container, single SQLite database — nothing else to manage
- AI-assisted metadata disambiguation when exact matches fail
1. Copy the compose file
services:
livrarr:
image: ghcr.io/kkodecs/livrarr:0.1.0-alpha4
container_name: livrarr
ports:
- 8789:8789
volumes:
- ./config:/config
- /path/to/books:/books
- /path/to/downloads:/downloads
restart: unless-stopped2. Set permissions and start
mkdir config
sudo chown 1000:1000 config
docker compose up -d3. Open the UI
Navigate to http://your-server:8789. You'll be prompted to create your admin account on first launch — no pre-seeding required.
4. Configure
Go to Settings and add:
- A root folder (where books land after import)
- A download client (qBittorrent or SABnzbd)
- At least one indexer (any Torznab/Newznab source: Prowlarr, NZBHydra2, Jackett, or direct indexer URL + API key)
All settings live in the UI. Optionally create /config/config.toml for advanced options:
[server]
port = 8789 # internal port (map externally in compose)
bind_address = "0.0.0.0"
[log]
level = "info" # trace | debug | info | warn | error| Component | Required | Notes |
|---|---|---|
| Docker | Yes | linux/amd64 only (ARM coming later) |
| qBittorrent or SABnzbd | Yes | Download client |
| Torznab or Newznab indexer | Yes | Prowlarr, NZBHydra2, Jackett, or direct feed |
| Hardcover API key | No | Better metadata — free at hardcover.app |
| LLM integration | No | Better search and metadata |
| Calibre-Web Automated | No | Downstream ebook delivery |
| AudioBookShelf | No | Downstream audiobook delivery |
Livrarr runs as UID/GID 1000 inside the container. All mounted paths must be accessible by that user:
/config— must be writable (database, covers, config file)/books— must be writable (Livrarr moves files here on import)/downloads— must be readable (completed download directory)
If you're on a different UID, chown 1000:1000 the host directories before starting.
Livrarr and your download client must see completed downloads at the same host path. Example:
- qBittorrent saves to
/mnt/data/downloadson the host - Mount that same path into both containers:
- /mnt/data/downloads:/downloads
/books and /downloads in the compose file are example container paths — you can rename them as long as you're consistent across all containers.
- Multi-user partially implemented — additional users can log in but share admin indexers/clients. Treat as single-user for alpha.
- PUID/PGID not configurable — runs as UID/GID 1000 (fix in beta)
- No mobile-optimized UI
- Cover quality varies — Goodreads matching can return incorrect covers for some titles. Manual refresh usually fixes it. Full cover trust model coming in alpha4.
Built in Rust (backend) + React (frontend). Ships as a single Docker image — no database sidecar, no separate web server. For full workflows you'll still need a download client and at least one indexer. Starts in under a second.
- Discord: Join the Livrarr Discord — help, discussion, feature requests
- GitHub Issues: Report bugs or request features
GPLv3