Skip to content

Installation

Docker

docker run -p 8000:8000 -v ./data:/config -v /path/to/your/library:/media \
  -e LEGENDARR_RADARR_URL=http://radarr:7878 \
  -e LEGENDARR_RADARR_API_KEY=your-radarr-api-key \
  -e LEGENDARR_SONARR_URL=http://sonarr:8989 \
  -e LEGENDARR_SONARR_API_KEY=your-sonarr-api-key \
  -e PUID=1000 -e PGID=1000 \
  andersonviudes/legendarr:latest

The dashboard is then available at http://localhost:8000.

legendarr drops from root to a PUID/PGID-controlled user before writing anything, the same convention Radarr/Sonarr/linuxserver.io images use — set them to match the user that owns your media library (id -u/id -g on the host) so files legendarr writes stay owned by you instead of container root. Both default to 1000, the first non-system user on most Linux hosts.

Mount your media library into the container so legendarr can see the actual files — /media above is just a convention, any mount path works. If Radarr/Sonarr report the same files under a different path than legendarr sees them (typical when they run in separate containers), set a path mapping on each connection in Settings → Servers.

Prefer Compose? docker-compose.example.yml in the repo root is the same setup in Compose form — copy it to docker-compose.yml, adjust the paths/env vars, then docker compose up -d.

Build the image locally

Only needed to test an unreleased change — the published image above already covers regular use.

git clone https://github.com/andersonviudes/legendarr.git
cd legendarr
make docker-build
docker run -p 8000:8000 -v ./data:/config -v /path/to/your/library:/media legendarr:local

From source

Prerequisites: uv and Python 3.12+.

git clone https://github.com/andersonviudes/legendarr.git
cd legendarr
make install   # uv sync --all-packages
make run       # starts the web app (and the backend scheduler) at http://localhost:8000