Configuration
Odeion has two layers of configuration:
- A small set of environment variables read at startup, covering where data is stored, how the server listens, and how it connects to Postgres.
- Everything else as runtime settings in the database, edited from Admin > Settings in the web UI, or exported and imported as YAML from the CLI.
There is no configuration file read from disk by the server.
Environment variables
Section titled “Environment variables”Required
Section titled “Required”| Variable | Description |
|---|---|
DATABASE_URL | Postgres connection string, or the literal local for the embedded Postgres. Example: postgres://user:pass@host:5432/odeion?sslmode=disable. |
When set to local, Odeion downloads and runs its own Postgres instance
inside the data directory. Convenient for simple setups. For production
deployments, an external Postgres 15+ server is recommended.
Optional
Section titled “Optional”| Variable | Default | Description |
|---|---|---|
ODEION_DATA_DIR | ~/.local/share/odeion | Root directory for persistent state. Respects XDG_DATA_HOME. In the Docker image the default is /var/lib/odeion. See Storage. |
ODEION_PORT | 8080 | HTTP port. The server always binds to 0.0.0.0. |
Runtime settings
Section titled “Runtime settings”Everything outside of the startup variables above lives in the database and can be changed while the server is running from Admin > Settings: metadata provider keys, transcoding limits, subtitle preferences, Sonarr/Radarr integration, processing worker counts, feature toggles, and so on.
Exporting and importing settings
Section titled “Exporting and importing settings”odeion config dumps the runtime settings to a YAML file and applies a
YAML file back. Useful for version control, cloning settings between
environments, and bulk edits in an editor.
# Dump the current settings to a fileodeion config export -o config.yaml
# Apply a saved file back — the server reloads live settings automaticallyodeion config import -f config.yaml
# Export, open in $EDITOR, and re-import on saveodeion config edit
# Manually ask a running server to re-read settings from the databaseodeion reloadFrom inside a running Docker container:
docker exec odeion odeion config export > config.yamldocker cp config.yaml odeion:/tmp/config.yamldocker exec odeion odeion config import -f /tmp/config.yamlA few notes worth knowing before you use this in anger:
- After a successful
odeion config import(oredit), the CLI signals the running server so reloadable settings take effect live — no restart needed. A small number of boot-time keys (HTTP port, embedded-postgres configuration) still require a server restart; pass--no-reloadif you’d rather apply everything on the next restart. - Secrets like integration API keys are present in the exported YAML in cleartext. Treat the file accordingly.
- A handful of server-managed keys (JWT secret, setup wizard state, license key) are excluded from both export and import so you can safely copy a file between installs without breaking sessions or the first-run wizard.
Run odeion config --help for the full set of flags on each subcommand.