Noteworthy
- Fixed a race that could silently drop a preset or recent when several
were stored back-to-back (#614). Storing a preset or recent used to
read the full list, change one entry, and write the whole list back as
three separate, unguarded steps. Two overlapping stores (for example, a
script or app writing several presets in quick succession) could each
read the same starting list and then clobber each other's write,
silently losing whichever one saved second. All read-modify-write paths
for presets, recents, and configured sources now go through a single
atomic update instead. - Data Sync no longer silently overwrites presets or recents with an
incomplete live snapshot (#614). Clicking Sync used to copy whatever
the speaker's own local API reported at that instant straight into
AfterTouch's datastore, with no check against what was already stored:
if the speaker's own cache was momentarily stale or incomplete (right
after a burst of writes, or shortly after a reboot), Sync would happily
persist that bad snapshot over good data. Sync now compares a fresh
live fetch against what's stored first; if applying it would remove
anything, it asks for confirmation instead of silently applying it, and
the Admin UI shows exactly what would be removed. The original
plain-reboot report, where AfterTouch's own stored data stayed correct
the whole time, is a separate issue and is still open.
Smaller changes
- Bumped the Go toolchain to 1.27.0 across the main module, both example
modules, and the Docker build image. - Dependency updates:
github.com/go-chi/chi/v55.3.1 → 5.3.2,
github.com/miekg/dns1.1.72 → 1.1.73. - Fixed a stale
golangci-lintinstall hint pointing at the v1 module
path (silently installs the latest v1.x instead of v2.x, which this
project's config requires) and refreshed an internal route-naming test
snapshot after the Go 1.27 bump. No behavior change.
What's Changed
- deps(deps): bump github.com/miekg/dns from 1.1.72 to 1.1.73 by @dependabot[bot] in #638
- deps(deps): bump github.com/go-chi/chi/v5 from 5.3.1 to 5.3.2 by @dependabot[bot] in #639
- ci(deps): bump docker/setup-buildx-action from 4.2.0 to 4.3.0 in the setup-actions group by @dependabot[bot] in #640
- docker(deps): bump golang from 1.26.6-alpine to 1.27.0-alpine by @dependabot[bot] in #637
- fix(datastore): close preset/recent/source lost-update race (#614) by @gesellix in #641
- fix(setup): require confirmation before Sync would shrink stored data (#614) by @gesellix in #642
- Bump Golang to 1.27.0 by @gesellix in #643
Full Changelog: v0.128.0...v0.129.0
Quick downloads
Most people only need one of these two:
soundtouch-service — the local server that replaces the Bose cloud. Point your speaker at it and you keep full control; the built-in web UI on port 8000 handles setup.
| Platform | Download | Checksum |
|---|---|---|
| Raspberry Pi (64-bit) / ARM64 Linux | soundtouch-service-v0.129.0-linux-arm64 | sha256 |
| Raspberry Pi (32-bit) / ARMv7 | soundtouch-service-v0.129.0-linux-armv7 | sha256 |
| Linux (64-bit PC) | soundtouch-service-v0.129.0-linux-amd64 | sha256 |
| macOS (Apple Silicon) | soundtouch-service-v0.129.0-darwin-arm64 | sha256 |
| macOS (Intel) | soundtouch-service-v0.129.0-darwin-amd64 | sha256 |
| Windows (64-bit) | soundtouch-service-v0.129.0-windows-amd64.exe | sha256 |
| FreeBSD (64-bit) | soundtouch-service-v0.129.0-freebsd-amd64 | sha256 |
soundtouch-cli — command-line control of any device: playback, presets, sources, multiroom zones, discovery, and migration. Good for scripting and home automation.
| Platform | Download | Checksum |
|---|---|---|
| Raspberry Pi (64-bit) / ARM64 Linux | soundtouch-cli-v0.129.0-linux-arm64 | sha256 |
| Raspberry Pi (32-bit) / ARMv7 | soundtouch-cli-v0.129.0-linux-armv7 | sha256 |
| Linux (64-bit PC) | soundtouch-cli-v0.129.0-linux-amd64 | sha256 |
| macOS (Apple Silicon) | soundtouch-cli-v0.129.0-darwin-arm64 | sha256 |
| macOS (Intel) | soundtouch-cli-v0.129.0-darwin-amd64 | sha256 |
| Windows (64-bit) | soundtouch-cli-v0.129.0-windows-amd64.exe | sha256 |
| FreeBSD (64-bit) | soundtouch-cli-v0.129.0-freebsd-amd64 | sha256 |
Everything else (soundtouch-player, soundtouch-backup, other platforms, Docker, install scripts): Downloads page.