Docker
Recommended Compose file
services:
alchemist:
image: ghcr.io/bybrooklyn/alchemist:latest
container_name: alchemist
ports:
- "3000:3000"
volumes:
- ~/.config/alchemist:/app/config
- ~/.config/alchemist:/app/data
- /path/to/media:/media
- /tmp/alchemist:/tmp # optional: fast SSD for temp files
environment:
- ALCHEMIST_CONFIG_PATH=/app/config/config.toml
- ALCHEMIST_DB_PATH=/app/data/alchemist.db
restart: unless-stopped
Volumes
| Mount | Purpose |
|---|---|
~/.config/alchemist on the host | Mounted into /app/config and /app/data so config.toml and alchemist.db persist across restarts |
/media | Your media library — mount read-write |
/tmp (optional) | Temp dir for in-progress encodes — use a fast SSD |
Environment variables
| Variable | Description |
|---|---|
ALCHEMIST_CONFIG_PATH | Path to config.toml inside the container |
ALCHEMIST_DB_PATH | Path to the SQLite database inside the container |
ALCHEMIST_CONFIG_MUTABLE | Set false to block runtime config writes |
RUST_LOG | Log verbosity: info, debug, alchemist=trace |
Alchemist does not use PUID/PGID. Handle permissions
at the host level.
Hardware acceleration
See GPU Passthrough for vendor-specific Docker configuration. If a GPU is present but Alchemist falls back to CPU, the Troubleshooting page walks through the common causes.
Updating
docker compose pull && docker compose up -d
Migrations run automatically on startup. Config and database are preserved in mounted volumes.
The in-app update panel detects Docker and shows this command instead of replacing files inside the container. Container updates remain owned by your Docker/Compose workflow.
Nightly builds
image: ghcr.io/bybrooklyn/alchemist:nightly
Published on every push to master that passes Rust checks.
See also
- GPU Passthrough — NVIDIA, Intel, AMD device setup in Docker.
- First Run — setup wizard after the container is up.
- Alchemist for Jellyfin — pointing Alchemist at a Jellyfin library.
- Troubleshooting — CPU fallback, permissions, missing encoders.