Skip to content

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.

VariableDescription
DATABASE_URLPostgres 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.

VariableDefaultDescription
ODEION_DATA_DIR~/.local/share/odeionRoot directory for persistent state. Respects XDG_DATA_HOME. In the Docker image the default is /var/lib/odeion. See Storage.
ODEION_PORT8080HTTP port. The server always binds to 0.0.0.0.

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.

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.

Terminal window
# Dump the current settings to a file
odeion config export -o config.yaml
# Apply a saved file back — the server reloads live settings automatically
odeion config import -f config.yaml
# Export, open in $EDITOR, and re-import on save
odeion config edit
# Manually ask a running server to re-read settings from the database
odeion reload

From inside a running Docker container:

Terminal window
docker exec odeion odeion config export > config.yaml
docker cp config.yaml odeion:/tmp/config.yaml
docker exec odeion odeion config import -f /tmp/config.yaml

A few notes worth knowing before you use this in anger:

  • After a successful odeion config import (or edit), 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-reload if 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.