Repository navigation
Releases: eknoes/toothspin
Release list
v0.5.1: chore(release): 0.5.1
0.5.1 (2026-10-25)
Fixes
- server: No skips when Bluetooth audio comes in bursts
Documentation
- Diagram for both variants
- New screenshots with covers and taps
- Shorter comparison
- Rickrolling
- Site and README intro for both variants
- Covers, speaker groups and Standalone throughout
- Which Bluetooth adapters work
Image: ghcr.io/eknoes/toothspin:0.5.1 (standalone mode: ghcr.io/eknoes/toothspin-standalone:0.5.1). SBOMs (SPDX, CycloneDX) of the default image are attached; both images in the registry carry SBOM and provenance attestations.
v0.5.0: chore(release): 0.5.0
0.5.0 (2026-10-25)
Features
- Ask for an update when Music Assistant speaks another Sendspin version
- server: Speaker groups that play as one speaker
- Covers from the phones
Fixes
- source: Log the codec actually streamed
- server: Recognise older speakers again with aiosendspin 10
- server: Start again until mDNS works
- server: Play again on speakers that come back
- Connect phones' audio again after a restart
- covers: Start obexd so it keeps running
- selinux: Drop the rule for covers again
Image and dependencies
- deps-dev: Bump ruff from 0.16.10 to 0.17.1
- Aiosendspin 10.2.0, as Music Assistant 2.10.7 ships
- Aiosendspin 10.2.1, as Music Assistant 2.10.8 ships
Documentation
- Music Assistant 2.10.7 or newer
- Runs in a couple of homes by now
- List the hardware ToothSpin runs on
- ToothSpin or ToothSpin Standalone, side by side
Image: ghcr.io/eknoes/toothspin:0.5.0 (standalone mode: ghcr.io/eknoes/toothspin-standalone:0.5.0). SBOMs (SPDX, CycloneDX) of the default image are attached; both images in the registry carry SBOM and provenance attestations.
v0.4.0: chore(release): 0.4.0
0.4.0 (2026-10-20)
Features
- web: Suggest putting ToothSpin on the home screen once a phone is paired
- web: Link help and issue reports at the bottom
Fixes
- server: Play on the chosen speakers again after a long pause
- server: No silence for ToothSpin's own server
Documentation
- faq: List all questions on top; home screen and long pause for standalone
Image: ghcr.io/eknoes/toothspin:0.4.0 (standalone mode: ghcr.io/eknoes/toothspin-standalone:0.4.0). SBOMs (SPDX, CycloneDX) of the default image are attached; both images in the registry carry SBOM and provenance attestations.
v0.3.0: chore(release): 0.3.0
0.3.0 (2026-10-18)
Features
- Standalone mode with ToothSpin's own Sendspin server
- app: ToothSpin Standalone, a Home Assistant App for standalone mode
- web: Say which ToothSpin it is in the title
- server: Optional speaker buffer for standalone mode
- server: Show what the phone plays on speakers with a display
- Sum up dropouts per speaker and per phone after each session
Fixes
- setup: Standalone mode's setup hints are about its own server
- server: Keep starting the Sendspin server until the network is up
- server: Say why standalone mode can't start next to Music Assistant
- server: One log line per older speaker instead of several warnings
- web: Log successful requests only at log level debug
Image and dependencies
- A server image flavour for standalone mode
- Publish standalone mode as its own image, toothspin-standalone
Documentation
- Drop the "Demo data" notes under the screenshots
- An "Install on Home Assistant" button at the top of the website
- install: Links to each way to install at the top
- Describe standalone mode
- pages: Standalone mode in the installation guide and FAQ
- Standalone mode as a small alternative to Music Assistant
Image: ghcr.io/eknoes/toothspin:0.3.0 (standalone mode: ghcr.io/eknoes/toothspin-standalone:0.3.0). SBOMs (SPDX, CycloneDX) of the default image are attached; both images in the registry carry SBOM and provenance attestations.
v0.2.1: chore(release): 0.2.1
0.2.1 (2026-10-17)
Fixes
- app: Let Home Assistant's init stop ToothSpin cleanly
Documentation
- app: A changelog for Home Assistant's update dialog
Image: ghcr.io/eknoes/toothspin:0.2.1. SBOMs (SPDX, CycloneDX) are attached; the image in the registry also carries SBOM and provenance attestations.
v0.2.0: chore(release): 0.2.0
Features
- capture: Log when a phone's audio comes late
- bluez: Option to refuse pairing on the host's other adapters
- Run as an unprivileged user, not root
- app: Read the App's options from the Supervisor's API
- Run with Docker's --user, without any capabilities
Fixes
- web: Shorter setup texts and confirmations
- web: Don't reconnect on a second tap of a slow Disconnect
- web: Refuse POSTs other websites can send
- bluez: Only let paired phones connect by themselves
- web: Check every request field strictly
- app: Let AppArmor allow only BlueZ on the host's D-Bus
- Say how to hand over /data when it belongs to another user
- Refuse a runtime folder that isn't ToothSpin's own
Documentation
- app: Call the start volume option "Maximum start volume", explain it better
- app: Shorter, clearer option descriptions, store page and docs
- Shorter FAQ, install guide and README usage
- faq: Why only AAC and SBC, no aptX or LDAC
Image: ghcr.io/eknoes/toothspin:0.2.0. SBOMs (SPDX, CycloneDX) are attached; the image in the registry also carries SBOM and provenance attestations.
v0.1.5: chore(release): 0.1.5
Features
- app: Run under its own AppArmor profile
- app: Run without the host network
- web: Show the running version and commit at the bottom, with a link
Fixes
- bluez: Connect a freshly paired phone if its own connection broke down
- bluez: Refuse headset and hands-free connections from phones
- source: Keep the speakers through a pause on the phone
- capture: Keep the signal through a pause, so Music Assistant doesn't stop
- Reconnect the phones a restart dropped
- source: Back off and warn when the server keeps dropping the connection
- speakers: Let a speaker finish leaving a group before starting it again
- speakers: Report it when Music Assistant doesn't group a speaker
Documentation
- faq: How to put ToothSpin on a phone's home screen
- faq: Speakers after a long pause, a known limitation
- The App without host network, the web UI port in Network
- faq: Speakers that won't group, usually a stale device in Music Assistant
Image: ghcr.io/eknoes/toothspin:0.1.5. SBOMs (SPDX, CycloneDX) are attached; the image in the registry also carries SBOM and provenance attestations.
v0.1.4: chore(release): 0.1.4
Features
- web: Show "Disconnecting…" until a phone is disconnected
- ma: Check Music Assistant's version and ask for an update if too old
- app: Take Bluetooth audio from Home Assistant's audio service, with consent
Fixes
- web: Skip speaker clicks a newer one replaced, explain timeouts
- web: Clicks no longer get lost on re-render; the setup box opens on click
- ma: Answer Music Assistant 2.11's new steps when pairing
- bluetooth: Offer phones only AAC and SBC
Documentation
- Which Music Assistant versions work, and why
- Home Assistant's audio service and the codecs offered
Image: ghcr.io/eknoes/toothspin:0.1.4. SBOMs (SPDX, CycloneDX) are attached; the image in the registry also carries SBOM and provenance attestations.
v0.1.3: chore(release): 0.1.3
Features
- setup: A light Finish setup card with links into Home Assistant
- app: A sidebar icon closer to the logo (mdi:home-sound-in)
Image and dependencies
- deps: Bump dbus-fast to 5.2.0
- coreos: Use Butane spec 1.7.0
Documentation
- Screenshots of the setup card and a demo GIF
Image: ghcr.io/eknoes/toothspin:0.1.3. SBOMs (SPDX, CycloneDX) are attached; the image in the registry also carries SBOM and provenance attestations.
v0.1.2: docs(faq): why Music Assistant shows no track metadata
Fixes
- web: Italics and plain lists in setup instructions
Documentation
- pages: Installation guide and FAQ
- Link the installation guide and FAQ from the App and notifications
- faq: Why Music Assistant shows no track metadata
Image: ghcr.io/eknoes/toothspin:0.1.2. SBOMs (SPDX, CycloneDX) are attached; the image in the registry also carries SBOM and provenance attestations.