Carthios
A Spotify Car Thing, repurposed as a Mac dashboard.
When Spotify discontinued the Car Thing in late 2024 and bricked it via firmware, mine was about to land in the trash. So I rebuilt the firmware around it. Carthios is a native macOS menu-bar app + custom CT firmware that turns the 800×480 LCD into a live desk dashboard — Spotify with album-art controls, real-time bus and train arrivals, Mac and Car Thing system metrics, a Pomodoro timer, and a Claude Code session monitor. Every screen is hand-tuned with native-feeling animations, spring-physics transitions, and platform-aware typography — it's meant to feel like a tiny iOS app on your desk.
Notarized by Apple. Auto-updates via Sparkle.
What you'll need
- A Mac running macOS 13 (Ventura) or newer
- A Spotify Car Thing (eBay, ~$15–35 used)
- A Spotify Premium account (required by Spotify's playback API)
- A USB-C cable for the initial setup. After that, Bluetooth (BETA) takes over for wireless use across the desk.
- ~10 minutes to flash the CT with the custom firmware (one-time setup)
New in v1.1.0
- Bluetooth wireless mode (BETA) — pair from the menu bar, see live connection status (Searching → Pairing → Connected) with auto-reconnect and connect-time health stats. USB still takes priority when plugged in; BT kicks in 2s after detach.
- Personalized device name — onboarding asks your name and uses it as the BT device alias (e.g. "Zian's Carthios") so it shows up recognizably in macOS Bluetooth pickers.
- Now Playing polish — progress bar stays in sync across navigation; like + queue + Spotify Connect on one aligned row; better right-side breathing room next to the dial.
- On-screen keyboard upgrade — numbers row + apostrophe / period / dash so you can rename the BT device to whatever you want without leaving the app.
- Brighter default in dim rooms — auto-brightness floor raised so the screen stays readable at rest indoor light.
Coming next
- Voice dictation — hold the back button, speak, release. The Car Thing's mic captures audio, sox cleans it on-device, and your Mac transcribes via SFSpeechRecognizer and types the result into your focused app. In active beta.
- Customizable button mappings — set what each of the five top buttons opens, what the dial press does, what the back button does. Today the mapping is hard-coded; v1.2 makes it user-controlled.
- Plugin store for community apps — drop in third-party "pages" that show up alongside the built-ins. Open SDK so anyone can build their own CT dashboards (a weather page, a calendar widget, a stock ticker, whatever).
Installing
- Download the DMG above and drag Carthios into Applications.
- Right-click the app and choose Open on first launch (Gatekeeper extra-cautious step for downloaded apps).
- The app lives in your menu bar. Click the icon → Connect Spotify to authorize playback control.
- Grant Location and Bluetooth permissions when prompted (each one corresponds to a feature — see below).
- Plug the Car Thing in via USB. The app detects it automatically and walks you through firmware setup.
Detailed setup including the firmware flash steps lives in the in-app onboarding flow. If anything is unclear, ping me on Twitter @heyzian.
What each permission is for
- Bluetooth
- Used to talk to the Car Thing over RFCOMM when the USB cable is unplugged. The CT is the only device the app pairs with — it doesn't scan for or contact anything else.
- Location
- Used locally to find the bus/train stops within walking distance for the Transit page. Never transmitted off your Mac.
- Spotify (OAuth)
- Uses the official Spotify Web API with PKCE. The token stays in your macOS Keychain. No backend server in the loop.
Privacy
- No analytics, no telemetry, no tracking. The app talks to Spotify, your local CT, and the public transit-agency endpoints. Nothing else.
- Your Spotify refresh token is stored in your macOS Keychain (encrypted at rest). It never leaves your Mac.
- Your location is used only to query nearby transit stops. The lat/lon never leaves your machine.
- Auto-update checks hit
zianmeng.com/appcast.xmlonce per launch and once every 24 h. Standard web request — no identifying payload.
About the Car Thing
Spotify discontinued the Car Thing in 2024, stopped honoring updates, and offered refunds. The hardware is fine — it's a 1.2 GHz Amlogic SoC with a 480p touchscreen, a great little dial, and original-firmware Linux underneath. Repurposing it requires running unofficial firmware:
- The CT's root filesystem is read-only. All custom firmware bits land in
tmpfsvia bind-mounts. Nothing is permanently written to flash. - Power-cycling the CT reverts it to a factory state until Carthios re-applies the bind-mounts on next boot.
- Flashing is reversible. We don't touch the bootloader, partition table, or the original Spotify firmware image.
- That said — flashing comes with the usual caveats. Use at your own risk. If your CT bricks, neither Spotify nor I can replace it.
Disclaimers
Carthios is an independent project. It is not affiliated with, endorsed by, or sponsored by Spotify Technology S.A. "Spotify" and "Car Thing" are trademarks of their respective owners.
The software is provided "AS-IS", without warranty of any kind, express or implied, including but not limited to merchantability, fitness for a particular purpose, and non-infringement. In no event will the author be liable for any claim, damages, or other liability arising from the use or distribution of the software.
Repurposing Spotify Car Thing hardware involves running unofficial firmware. You assume all risk associated with installation, operation, and any modifications you make to the device.
Carthios uses the Spotify Web API under the developer terms of service. A Spotify Premium subscription is required to use playback control features (Spotify's API restriction, not ours).
Built with
- Sparkle — auto-update framework (MIT)
- Vapor — Swift web framework (MIT)
- React + Vite — webapp on the Car Thing (MIT)
- Tailwind CSS — styling (MIT)
- Public GTFS-realtime feeds from MTA NYC and BART for the no-key transit backends
Questions, feedback, or issues — @heyzian on Twitter.