The short version
By default, Baton talks to one place: the music server you configured. Everything else that could send data anywhere is a feature you switch on yourself, and each one is off until you do. There is no account to create, nothing is collected for advertising or analytics, and nothing about you or your library is sold or shared.
What stays on your device
- Your settings and play history. Preferences, the play queue, liked tracks, listening history, and layout choices are stored locally on the device.
- Your server credentials. The password or API key for your music server is stored in the system Keychain on that device. It is sent only to the server it belongs to.
- Downloads. Tracks and podcast episodes you download are stored locally for offline playback.
- Chat and voice history. Conversations with the music assistant, and any feedback you give it, are stored locally. What you type is sent to the model provider you configured, and nowhere else.
Your music server
Baton is a client for a Navidrome or Subsonic-compatible server that you run or choose. Browsing, searching, streaming, artwork, lyrics, and ratings are all requests to that server, using the credentials you entered. What that server logs is governed by the server, not by Baton; if you run it yourself, that is you.
If you connect the iPhone and the Mac through your own gateway, the two exchange settings, search history, and the play queue through it. The gateway is a machine you control; nothing in that sync passes through any server of ours.
Services you can switch on
Each of the following is off until you enable or configure it. Turning one on is the moment data starts flowing to that service, and turning it off stops the flow.
Crash reports
Off by default. If you turn on Settings, Diagnostics, crash and error reports are sent to Sentry, a crash-reporting service, on servers in the United States. Reports describe what the app was doing when it failed. Before anything is sent, Baton strips server addresses, URLs, IP addresses, file paths, and authentication parameters from every report, and tells the reporting library not to attach your IP address or any user identifier. Your music, track titles, server address, and credentials are never included. Builds compiled from the public source have reporting disabled entirely.
Scrobbling
If you connect ListenBrainz or Last.fm, Baton sends each finished track's artist, title, album, and the time you played it to that service, under the account you connected. That is what scrobbling is. Disconnect the service in Settings to stop.
Discovering music outside your library
External discovery is a master switch, off by default. With it on, asking "what sounds like this" queries MusicBrainz and ListenBrainz, and, if you added keys, Last.fm and YouTube. A query necessarily tells those services which artist or track you asked about. Nothing is sent while the switch is off.
Chat, voice, and agent control
The music assistant sends your messages to the model provider you configured, which may be a machine on your own network or a hosted API with your key. If you set up chat control through a messaging bot, such as your own Telegram bot, your commands travel through that platform under its own privacy terms. Agents connecting over MCP run on your machine and talk to Baton locally.
Transcription and speech
Transcribing a track or episode sends its audio to the transcription host you configured. Spoken summaries are rendered by the speech host you configured. Both are typically services you run on your own network; either way, the host is your choice and yours to point elsewhere.
Content you point Baton at
Some things you play do not live on your server, and playing them means fetching them from whoever publishes them:
- Podcasts. Subscribing to a feed fetches it, and episodes download or stream from the publisher's host. The publisher sees the request, as it would from any podcast app.
- Internet radio. Tuning a station streams from the station's own URL, and Baton may fetch the station's logo from its homepage. The station sees the connection, as it would from any player.
In both cases your device connects directly to the third party; Baton adds no identity of yours beyond the connection itself.
The iPhone app
- Demo mode makes no network requests. The built-in demo library is bundled with the app, plays entirely offline, and sends nothing anywhere, including scrobbles.
- The camera is used only to read the pairing code shown on your Mac's screen, so you can connect without typing. Nothing is recorded or stored.
- Purchases are handled by Apple. Baton receives no payment details and keeps no record of who bought it.
What Baton never does
- No accounts, and no sign-in with anyone.
- No analytics, no usage tracking, and no advertising or ad identifiers.
- No selling, renting, or sharing of data. There is no data to sell.
- No tracking across other companies' apps or websites.
The design principle: if a feature would send data somewhere new, it ships off, it says where the data goes, and the switch is yours.
Changes and contact
If a future version changes what Baton sends or stores, this page will change with it, with the date above updated. Baton is open source, so the code itself is the authority; the crash-report scrubbing, the discovery switch, and the demo mode's offline guarantee are all inspectable in the public repository.
Questions about privacy are welcome as issues on GitHub.