WebSocket RPC
Real-time bidirectional communication with Soundie via WebSocket.
WebSocket Endpoint
ws://127.0.0.1:45289JSON-RPC 2.0 protocol. Connect once, get real-time events and send commands.
Connection
Events
Events are pushed by Soundie whenever state changes. They use JSON-RPC notification format (no id field).
player:track_changedFires when the current track changes.
{ track: TrackObject, source: string }player:playback_statePlay/pause state changed.
{ is_playing: boolean }player:position_updateEmitted every 500ms while playing.
{ position_ms: number, duration_ms: number }player:volume_changedVolume was changed.
{ volume: number }player:shuffle_changedShuffle toggled.
{ enabled: boolean }player:repeat_changedRepeat mode changed.
{ mode: "off" | "track" | "queue" }queue:updatedTrack added, removed, or reordered.
{ queue: TrackObject[], index: number }queue:clearedQueue was cleared.
{}library:playlist_createdNew playlist was created.
{ id: string, name: string }library:playlist_deletedPlaylist was deleted.
{ id: string }system:theme_changedActive theme changed.
{ theme_id: string, name: string }Commands
Send JSON-RPC 2.0 requests with an id to receive a response.
player.playResume playback.
player.pausePause playback.
player.toggleToggle play/pause.
player.nextNext track.
player.previousPrevious track or restart.
player.seekSeek to position.
{ position_ms: number }player.set_volumeSet volume.
{ volume: number }player.set_shuffleSet shuffle.
{ enabled: boolean }player.set_repeatSet repeat mode.
{ mode: "off" | "track" | "queue" }queue.addAdd URL to queue.
{ url: string, play_immediately?: boolean }queue.clearClear queue.
queue.play_indexPlay track at index.
{ index: number }system.get_stateGet full player state.