Skip to content

IPC Protocol

The daemon protocol is length-delimited JSON over a local socket. CLI, TUI, scripts, and MCP bridge through this shape.

{
"id": 1,
"payload": {
"type": "Request",
"cmd": "playback-get"
}
}
Terminal window
spotuify status --format json
spotuify devices --format json
spotuify search "quiet storm" --format json
spotuify queue --format json

Representative request variants:

RequestCLI surface
PlaybackGetspotuify status
PlaybackCommandpause, resume, toggle, next, previous, seek, volume, shuffle, repeat
DevicesListspotuify devices
DeviceTransferspotuify transfer
Searchspotuify search
QueueGetspotuify queue
QueueAddspotuify queue add
PlaylistsListspotuify playlists
PlaylistTracksspotuify playlist tracks
PlaylistAddItemsspotuify playlist add
LibrarySavespotuify like, spotuify save
LyricsGetspotuify lyrics show
SetVizEnabledspotuify viz enable/disable
Terminal window
spotuify daemon status --format json
spotuify doctor --format json
spotuify cache status --format json
spotuify reindex --format json

Representative request variants:

RequestCLI surface
GetDaemonStatusspotuify daemon status
GetDoctorReportspotuify doctor
Reindexspotuify reindex
CacheStatusspotuify cache status
Syncspotuify sync
LogsTailspotuify logs tail
Reloadspotuify reload
Reconnectspotuify reconnect
{
"Ok": {
"data": {
"kind": "Playback",
"playback": {}
}
}
}

Errors are typed:

{
"Error": {
"message": "no active device",
"kind": "provider",
"code": "provider",
"retryable": false
}
}

Error kinds:

auth
invalid_request
network
provider
rate_limited
unsupported
internal

The daemon broadcasts state changes so clients do not have to poll forever.

playback-changed
queue-changed
devices-changed
playlists-changed
library-changed
search-updated
sync-started
sync-finished
mutation-finished
rate-limited
spectrum-frame