Skip to Content
InstallationDocker Compose

Install with Docker Compose

LatestArr runs as one container: the backend and the web UI together, with a SQLite database in a Docker volume. There’s no separate database or cache to run.

Before you start

  • Docker with Docker Compose.
  • At least one supported source that the container can reach.
  • An SMTP server or provider to send from. Read Deliverability before sending to real people, or your digests may land in spam.

Quick start

Get the Compose files

Grab docker-compose.yml and .env.example from the repository , or clone it.

Create your .env

cp .env.example .env

Set ENCRYPTION_KEY. It encrypts source credentials, SMTP credentials, and your alert webhook URL at rest. Generate one with:

openssl rand -base64 32
⚠️

Back this key up somewhere other than the .env file. If you lose it, every encrypted credential in the database becomes unreadable and you’ll have to re-enter them all.

Everything else is optional. See Environment variables.

Start it

docker compose pull docker compose up -d

Open it

Go to http://localhost:3000, create the admin account, and follow the first-run checklist.

What Compose sets up

Imageghcr.io/jshields-ca/latestarr:${LATESTARR_VERSION:-latest}
Containerlatestarr, restart: unless-stopped
Port${PORT:-3000} on the host → 3000 in the container
Volumelatestarr-data mounted at /app/data (the SQLite database)
RuntimeNode 24 on Alpine New in 0.11

The container answers GET /health with {"status":"ok"} without authentication, which is handy for your own uptime checks. The image doesn’t define a Docker HEALTHCHECK itself.

Image tags

TagWhat it is
latestThe most recent release. The default.
vX.Y.ZA specific release, e.g. v0.11.2. Set LATESTARR_VERSION=v0.11.2 to pin.
devThe upcoming release, rebuilt whenever the dev branch is updated. For testers.

To try the upcoming release, set LATESTARR_VERSION=dev in .env, then pull and restart:

docker compose pull docker compose up -d
🚫

Don’t point an instance you depend on at dev. Back up first, and expect to find bugs. That’s what it’s for.

Without Compose

docker run -d \ --name latestarr \ -p 3000:3000 \ -e ENCRYPTION_KEY="your-generated-key" \ -v latestarr-data:/app/data \ --restart unless-stopped \ ghcr.io/jshields-ca/latestarr:latest

Pass any other environment variables the same way. Don’t generate the key inline with $(openssl …): you’d get a new key every time you recreate the container, and lose access to everything encrypted with the old one.

Building from source

docker compose up -d --build builds from docker/Dockerfile instead of pulling. For a development setup, see Contributing.

Last updated on