github Sendspin/sendspin-cpp-cli v0.2.0
sendspin-cli 0.2.0

one hour ago

Breaking changes

  • -s no longer dials a typed-in address. A host, host:port, or ws:// URL passed
    to -s — or set as server = 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._tcp advertisement, or this client discovers a server on
    _sendspin-server._tcp and 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-format takes 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 an opus entry 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 it getifaddrs() fails and the player greets with an
    empty client_id, which a server such as Music Assistant refuses. (#53)

Under the hood

  • Re-pinned sendspin-cpp to v0.8.0 and adopted its start()/stop() lifecycle. (#62)
  • A clang-format CI gate and scripts/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
wikiInstallation,
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

Don't miss a new sendspin-cpp-cli release

NewReleases is sending notifications on new releases.