Breaking changes
-sno longer dials a typed-in address. A host,host:port, orws://URL passed
to-s— or set asserver =in a config file — is now a parse error rather than a dial
target. The spec has exactly two ways to connect: the server discovers this client through
its_sendspin._tcpadvertisement, or this client discovers a server on
_sendspin-server._tcpand connects to the address it advertised. Dialling a hand-entered
endpoint is neither, so it is gone.-s mdns:[<name>]— discovery — is the only form left,
and it works exactly as before. An install still pointed at an address fails loudly at
startup instead of quietly changing how it connects; point the server at this player, or
switch to-s mdns:. (#56)
New features
--audio-formattakes an ordered list of preferred formats. Pass a comma-separated
list, e.g.--audio-format flac:48000:24:2,pcm:48000:24:2, and those formats are offered
first in that order with the rest of the device-derived list still behind them — a
preference a server falls back from, not a restriction. The player refuses to start if the
advertised list cannot carry every entry, and anopusentry at anything but 48000/16 and
at most two channels is refused outright. (#57)
Fixed issues
- A recovered audio device no longer jumps the playback clock. While a sink had no live
stream,write()still reported the audio as consumed but nothing ever reported it as
played, so after recovery the playhead jumped ahead by the whole outage and sync cycled
between Lost and Regained. Fixed for the ALSA sink (#54, #55), then extended to the Pulse,
PortAudio and PipeWire sinks (#58, #59). - The systemd unit now allows
AF_NETLINK, so the MAC-derived client id is detected
under the shipped hardening. Without itgetifaddrs()fails and the player greets with an
emptyclient_id, which a server such as Music Assistant refuses. (#53)
Under the hood
- Re-pinned
sendspin-cppto v0.8.0 and adopted itsstart()/stop()lifecycle. (#62) - A
clang-formatCI gate andscripts/format.sh, with comment guidelines in
AGENTS.md. (#61, #60) - The README is restructured around what it is, how to run it, and how to contribute, and
the ARMv6 build leg moved into its own workflow. (#52, #51)
Full changelog: v0.1.6...v0.2.0
What this build is
sendspin-cli 0.2.0. The version of the sendspin-cpp library it is linked against
is pinned at build time and printed on the second line of sendspin-cli --version,
alongside this one on the first.
Installing, verifying SHA256SUMS and the macOS Gatekeeper situation are in the
wiki — Installation,
or Getting Started on a Raspberry Pi
for the two 32-bit ARM archives. Each archive also carries its own BUILD-INFO.txt,
with the install command already filled in for its platform.
The macOS binary and the .pkg around it are unsigned — ad-hoc signed, which is
the minimum an arm64 Mach-O needs to execute at all, and carries no developer identity
— so Gatekeeper refuses them until you say otherwise. Said here rather than only behind
a link because it is worth knowing before you download; what to do about it is under
the macOS installation guide.
- README — what it is, how to run
it, and how to contribute - Contributors — development,
testing, CI, and release guidance - Roadmap — what shipped and
what is owed, item by item