Crate has two configuration layers. The first is a set of environment variables read at startup that control infrastructure concerns — which port to listen on, where to store databases, and how to reach slskd. The second is a live Settings UI accessible from the browser that lets you change provider preferences, quality tiers, naming templates, integrations, and more without restarting the container. Most day-to-day tuning happens in the UI; the env vars only need to be set once when you deploy.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/TheOutdoorProgrammer/crate/llms.txt
Use this file to discover all available pages before exploring further.
Environment Variables
Set these in yourdocker-compose.yml environment block, in a .env file, or in the shell before running Crate. Variables without a default are required.
The HTTP port Crate listens on. Change this if port 6969 conflicts with another service on your host. Remember to update the
ports mapping in your Compose file to match.Path to the main SQLite database that stores artists, albums, tracks, and the download queue. In the Docker image this defaults to
/app/data/crate.db via the Dockerfile ENV instruction — mount a volume at /app/data to persist it across container restarts.Path to the provider cache database. Crate caches metadata responses from MusicBrainz and Deezer here to avoid redundant API calls. In the Docker image defaults to
/app/data/cache.db.Path to the activity log database, which records every download event (search, download, complete, fail). Stored separately from the main database so it can be rotated independently. In the Docker image defaults to
/app/data/activity.db.Base URL of the slskd API. When running both services in the same Compose stack, use the Docker service name as the hostname — for example
http://slskd:5030 — so container networking resolves correctly.Required. The API key Crate uses to authenticate with slskd. This value must exactly match
SLSKD_API_KEY set on the slskd container. Any non-empty string is valid; treat it like a password.The local filesystem path where slskd writes completed downloads, as seen from inside the Crate container. This must resolve to the same host directory that slskd uses for its download output. In the Docker image defaults to
/app/downloads.The path where Crate moves and organizes finished files. In the Docker image defaults to
/app/library. This directory should be mounted as a volume so files survive container rebuilds, and ideally shared with Navidrome or your media server.How often Crate’s background scheduler runs. Each cycle re-queues all
wanted tracks, checks watched artists for new releases, and runs the quality-upgrade scanner. Accepts Go duration syntax: 30m, 2h, 24h, etc.A comma-separated list of provider definitions in the format
name:binary:port. Each entry tells Crate the name to display in the UI, the path to the provider binary, and the local gRPC port it should listen on. The two bundled providers (provider-musicbrainz and provider-deezer) are included in the Docker image and configured by default.The
User-Agent header sent with all MusicBrainz API requests. MusicBrainz requires a descriptive user-agent that identifies your application and provides a contact URL. Override this if you are running a fork or need to identify your specific deployment.Provider string format
Each provider entry follows the patternname:binary:port:
| Field | Description |
|---|---|
name | Display name used in the UI and stored against library entities |
binary | Path to the gRPC provider binary, relative to the Crate working directory |
port | Local port the provider binary will bind to for gRPC communication |
Minimal .env example
.env
Settings UI
Everything in the table above is infrastructure configuration. Once Crate is running, open Settings in the sidebar (or bottom nav on mobile) to configure the following without restarting:- Providers & Search
- Quality Tiers
- Library & Naming
- Integrations
- Cache & Retention
- Blocked Sources
- Primary provider — choose which provider (MusicBrainz, Deezer, or custom) is used by default for new searches and metadata lookups
- slskd connection — update the slskd URL and API key live without touching env vars
- Negative keywords — comma-separated list of words that disqualify a search result from auto-download (e.g.
acapella,instrumental). Manual search still shows these results so you can override.
Authentication
Crate does not include built-in authentication. Anyone who can reach the configured port can read and modify your library. If you expose Crate beyond your local network, place a reverse proxy with authentication in front of it. Recommended options include Cloudflare Zero Trust (free tier available), Authelia, or nginx with
auth_basic. The Lidarr API shim at /api/v1/ accepts any value in the X-Api-Key header or apikey query parameter — it does not validate the key against any secret.