Config
Config is TOML. Secrets belong in the OS credential store when possible. On Unix, spotuify writes its config file with mode 0600.
spotuify config pathSPOTUIFY_CONFIG=/tmp/spotuify.toml spotuify config pathManaged keys
Section titled “Managed keys”These keys are accepted by spotuify config get and spotuify config set.
| Key | Type | Default | Notes |
|---|---|---|---|
client_id | string | first-party | only set this to use your own Spotify app instead of the built-in first-party login |
client_secret | string | none | only for your own Spotify app (dev-app flow); config get redacts it unless --reveal-secret is passed |
redirect_uri | string | http://127.0.0.1:8888/callback | only used with your own Spotify app; must match its settings |
player.backend | enum | embedded | only embedded (in-process librespot); Spotifyd/Connect-only backends were removed |
player.bitrate | number | 320 | 96, 160, or 320 |
player.device_name | string | none | preferred embedded/connect device name |
player.audio_output_device | string | system default | local audio output the embedded player renders to; match a name from spotuify audio-outputs |
player.normalization | bool | false | player normalization |
player.audio_cache_mib | number | 0 | embedded playback cache size |
player.pulse_props | bool | true | Linux Pulse/PipeWire app props |
player.event_hook | string | none | shell hook command |
cache.cover_cache_mb | number | 200 | cover-art cache cap |
cache.cover_cache_ttl_days | number | 30 | cover-art TTL |
spotuify config get player.bitratespotuify config set player.bitrate 320spotuify config get client_secretspotuify config get client_secret --reveal-secretFile-only sections
Section titled “File-only sections”Some config is loaded from TOML but not yet wired through config set.
[analytics]store_raw_queries = trueretention_progress_days = 90retention_events_days = 365retention_operations_days = 90daily_rollup_hour = 3hook_command = "/Users/me/bin/spotuify-listen-hook"hook_timeout_ms = 5000allow_file_credentials = false
[viz]enabled = truesource = "auto"target_fps = 30smoothing = 0.5noise_gate = 0.005color_scheme = "spotify-green"The visualizer ships on by default. Set enabled = false to opt out.
It animates from the embedded librespot sink tap; when no audio is
playing the spectrum draws a flat baseline. Toggle it off if you want
the player to use that vertical space for queue items instead.
Environment variables
Section titled “Environment variables”By default no auth env vars are needed; spotuify login opens a browser
and uses Spotify’s first-party flow. The variables below only apply when
you opt into your own Spotify app, where SPOTUIFY_CLIENT_ID is the
switch that activates the dev-app flow.
SPOTUIFY_CLIENT_ID=... spotuify loginSPOTUIFY_CLIENT_SECRET=... spotuify loginSPOTUIFY_REDIRECT_URI=http://127.0.0.1:8888/callback spotuify loginFor local development and tests:
# Skip the proactive scope-drift keychain read at daemon startup# (still reads the token on the first real API call). Cuts macOS# Keychain prompts in half for fresh builds.SPOTUIFY_SKIP_KEYCHAIN_ON_START=1 spotuify daemon start
# Run the whole stack against fake Spotify data; never touches the# keychain. Honored by the CLI, daemon, and TUI uniformly.SPOTUIFY_FAKE_SPOTIFY=1 spotuifyOne-shot overrides
Section titled “One-shot overrides”spotuify -o player.bitrate=160 play "ambient"spotuify -o player.normalization=true play "ambient"Overrides apply only to that command.