Skip to content

Architecture

spotuify is a daemon-backed runtime. The daemon is the system. The CLI, TUI, scripts, and agents are clients.

TUI / CLI / Scripts / Agents
|
| length-delimited JSON
| Unix socket on Unix; named pipe on Windows
v
Daemon
|
+-- SQLite cache
+-- Tantivy search index
+-- Spotify Web API
+-- Spotify Connect player

Run the surfaces:

Terminal window
spotuify
spotuify status --format json
spotuify daemon status

Event-driven clients seed themselves from cached daemon state first. The TUI asks for ClientSeed, which returns playback, queue, devices, recent items, and visualizer status from the daemon/store layer without touching Spotify’s Web API. Live provider refreshes stay in daemon-owned warm/sync loops so opening the TUI does not spend rate-limit budget before the user acts.

Terminal window
spotuify status --format json
spotuify queue --format json
spotuify devices --format json
BucketExamples
core-musicplayback, devices, queue, playlists, library, search
spotuify-platformcache/index state, playlist plans, saved recipes
admin-maintenancestatus, events, logs, doctor, reset, repair, reindex
client-specificpane state, selected row, modal state

Client-specific state stays out of daemon IPC.

SQLite is the cache. Tantivy is derived and rebuildable.

Terminal window
spotuify cache status --format json
spotuify reindex --format json

Analytics are local SQLite too. Observed playback becomes listen_facts; historical Last.fm import stores raw rows first, then promotes high-confidence matches into the same analytics tables with import provenance.

Terminal window
spotuify analytics top --kind tracks --since all --format json
spotuify analytics import lastfm --user your-lastfm-user --from 2024-01-01 --format json

The docs and architecture deliberately copy mxr patterns before inventing new ones: Starlight docs, generated CLI reference, length-delimited JSON IPC, local store/search, output formats, and daemon/client separation.

Terminal window
spotuify search "quiet storm" --format jsonl
spotuify playlist add "Coding" spotify:track:... --dry-run
CrateJob
spotuify-coredomain types
spotuify-protocolRequest, Response, Event, IPC client
spotuify-storeSQLite tables and queries
spotuify-searchTantivy indexing and local search
spotuify-spotifySpotify Web API mapping
spotuify-playerplayback backend orchestration
spotuify-daemonserver, state, sync, handlers
spotuify-cliclap commands and output
spotuify-tuiratatui client
spotuify-mcpMCP tools and resources