Quick install (latest):
irm https://raw.githubusercontent.com/umeraamir09/SpoTUI/main/install.ps1 | iexSpoTUI is a keyboard-first terminal remote for Spotify Connect. It controls playback on existing Spotify clients and does not stream audio.
- Spotify playback control from the terminal
- Device transfer and queue management
- Search tracks and add to queue
- Browse liked songs and playlists
- Optional synced lyrics panel
- Theme presets and custom theme files
- Keyboard and mouse support
- Bun >= 1.2.0
- Spotify account (Premium required for Spotify Connect playback control)
- Spotify app registered in the Spotify Developer Dashboard
- Create an app in Spotify Developer Dashboard.
- Add this Redirect URI exactly:
http://127.0.0.1/callback
- Start SpoTUI and provide your Client ID, or set:
export SPOTIFY_CLIENT_ID="your_client_id"The app stores non-secret config in the platform config directory and keeps refresh tokens in the OS credential store.
bun install
bun run start- macOS/Linux:
curl -fsSL https://raw.githubusercontent.com/umeraamir09/SpoTUI/main/install.sh | bash- Windows PowerShell:
irm https://raw.githubusercontent.com/umeraamir09/SpoTUI/main/install.ps1 | iexRun:
spotuiCommon runtime flags:
spotui -- --no-animations
spotui -- --no-art
spotui -- --ascii
spotui -- --256-color
spotui -- --monochrome
spotui -- --theme warm-phosphor
spotui -- --theme midnight-blue
spotui -- --theme forest-terminal
spotui -- --theme rosewave
spotui -- --theme-file ./my-theme.jsonSPOTIFY_CLIENT_ID: provides Client ID without entering it in the UISPOTUI_INSTALL: overrides installer destination path--theme <name>: select a built-in theme preset--theme-file <path>: load a custom JSON theme file
Custom theme JSON example:
{
"name": "ocean-radio",
"extends": "midnight-blue",
"colors": {
"accent": "#55DDEE",
"textPrimary": "#F4FBFF",
"surfaceRaised": "#102030"
}
}Space: play/pausen/p: next/previoush/lor Left/Right: seek 5s+/-: volumem: mutes: shuffler: repeat moded: device picker/: searchu: queueb: libraryq: quit (when no input field is focused)
When opened, SpoTUI checks local .lrc files in its config lyrics directory first, then falls back to LRCLIB. Lyrics failures do not impact playback.
bun run typecheck
bun run lint
bun run test:unit
bun run test:integration
bun run test:visual
bun run validatesrc/app- app bootstrap and terminal lifecyclesrc/auth- OAuth PKCE flow and token lifecyclesrc/config- platform config paths and TOML configsrc/spotify- Spotify Web API client and schemassrc/playback- playback state and command handlingsrc/discovery- search, queue, liked songs, playlistssrc/artwork- artwork processing and rendering pipelinesrc/input- command routing and keymap integrationsrc/lyrics- local and LRCLIB lyrics providerssrc/ui- themed terminal UI componentstests/unit- unit teststests/integration- integration teststests/visual- visual regression tests
MIT (see LICENSE).
