Help us shape the future of Go! Take the 2026 Go Developer Survey

sendspin-go-cli

command module
v0.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 18, 2026 License: Apache-2.0 Imports: 16 Imported by: 0

README

sendspin-player (sendspin-go-cli)

The Sendspin Protocol player CLI — connects to a Sendspin server and plays synchronized multi-room audio. This is a thin binary around the sendspin-go SDK, which implements the Sendspin Protocol. Works as a player for Music Assistant via its Sendspin provider.

Looking for the server? See sendspin-go-server. Building your own integration (visualizer, DSP, custom output)? Import the SDK directly.

Install

Download a release tarball from the releases page, or build from source:

./install-deps.sh     # native deps (libopus + ALSA on Linux)
make                  # builds ./sendspin-player

go install github.com/Sendspin/sendspin-go-cli@latest also works (the installed binary is named sendspin-go-cli).

Raspberry Pi quickstart

scripts/quickstart-pi.sh fetches the latest arm64 release tarball, installs the systemd unit, and starts the daemon in one step.

Usage

./sendspin-player --name "Living Room"                  # mDNS auto-discovery
./sendspin-player --server ws://192.168.1.100:8927 --name "Kitchen"
./sendspin-player --list-audio-devices
./sendspin-player --audio-device "USB Audio Device" --name "Office"

Key flags: --server, --name, --audio-device, --buffer, --static-delay-ms (fixed hardware latency compensation), --codec, --max-sample-rate / --max-bit-depth (format caps), --no-tui, --config, --daemon. Run ./sendspin-player --help for the full list.

Configuration

Config precedence: CLI flags > SENDSPIN_PLAYER_* env vars > YAML file > built-in defaults. Default config search path: $SENDSPIN_PLAYER_CONFIG, ~/.config/sendspin/player.yaml, /etc/sendspin/player.yaml. An annotated example lives at dist/config/player.example.yaml.

Run as a daemon

sudo make install-player-daemon
sudo systemctl enable --now sendspin-player
journalctl -u sendspin-player -f

Development

The wire protocol, codecs, clock sync, and playback scheduling all live in the SDK — protocol changes belong there, along with its conformance suite. This repo owns the CLI flags, the TUI (internal/ui), version stamping, and packaging.

Builds use GOFLAGS=-tags=nolibopusfile (see the Makefile) so the binary does not link libopusfile at runtime. Pre-commit hooks (.pre-commit-config.yaml) run gofmt, goimports, go-mod-tidy, golangci-lint, and go test -race.

This project follows the Open Home Foundation AI Policy.

Documentation

Overview

ABOUTME: Entry point for Sendspin Protocol player ABOUTME: Parses CLI flags and starts the player application

Directories

Path Synopsis
internal
ui
ABOUTME: Modal picker for audio output devices — shown over the main view ABOUTME: Save-and-restart model: selection writes audio_device to player.yaml
ABOUTME: Modal picker for audio output devices — shown over the main view ABOUTME: Save-and-restart model: selection writes audio_device to player.yaml
version
ABOUTME: Version information for the player ABOUTME: Used in device_info sent during handshake; patched at link time via -X
ABOUTME: Version information for the player ABOUTME: Used in device_info sent during handshake; patched at link time via -X

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL