YT Music client for my phone and car — that can also pull lossless from the services that aren't YouTube — with Waze bridge support so you can control playback right from the dashboard. Unofficial. Sideloaded. Built for my daily drive. APKs are up. Issues are open. Use it or don't — I'm good either way, not for a crowd.
Instead of hopping between a pile of forks, I combined the best from the whole open-source stack: ArchiveTune as the base, then pulled in the good stuff from Metrolist, Vivi Music, Echo Music, and the shared libs behind ViMusic, OuterTune, and BetterLyrics — plus the SpotiFLAC engine behind the lossless sources. One app. Most of the features. No fork roulette.
Package: app.hush.music · debug: app.hush.music.debug
| Releases | Fresh APKs |
| Obtainium | Auto-updates, no cap |
| Issues | Broken install on this fork |
| Privacy | What the app keeps & sends |
| Changelog | What shipped each version |
| SpotiFLAC sources | The lossless side in one screen |
I built this for myself. My car has Waze, and Waze only shows music controls for the official apps — Spotify, YouTube Music, Deezer. None of the unofficial YT Music clients I liked (Metrolist, ArchiveTune, ViMusic) could show song info or let me skip tracks from the Waze screen. So I found a way around it.
Hush ships with tiny bridge APKs that impersonate those official apps just enough for Waze to pick them up. When you connect Hush to Waze through one of these bridges, Waze thinks it's talking to Spotify or Deezer — but it's actually controlling Hush. Song name, artist, album art, play/pause, skip, queue — all of it shows up on the Waze dashboard while you drive.
It started as a quick hack for my Android phone and my car. Then I kept adding things I wanted: better lyrics, faster downloads, backup retention, mood chips that actually work when you're logged in, a Gen‑Z style explore page. The one I wanted most turned out to be the biggest: playing from somewhere other than YouTube, so a lossless copy of a song stops being something I have to go find elsewhere. Everything I missed from the other forks — I pulled it in and made it work together.
One app. My daily driver. If it works for you too, cool.
Hush ships with bridge shim APKs that make Waze think it's talking to Spotify, YouTube Music, or Deezer. When connected, Waze shows the current song, artist, album art, and lets you play/pause/skip right from the navigation screen.
| Bridge | Package |
|---|---|
| Spotify | com.spotify.music |
| YouTube Music | com.google.android.apps.youtube.music |
| Deezer | deezer.android.app |
This is how I get music controls in my car — Waze only talks to official apps, so Hush pretends to be one. Select which bridge to use in Settings → Waze Integration.
The bridges install themselves from the copy bundled inside Hush (Settings → Waze Integration), and can be repaired the same way — no separate download, and an update survives the install instead of needing an uninstall first.
Hush can play from Tidal, Qobuz, Amazon Music, Deezer, SoundCloud, Apple Music, Spotify Web and Pandora — losslessly where the source has it — instead of only YouTube. The engine is SpotiFLAC's Go runtime (built from upstream's go_backend with gomobile) with its download extensions, and the source list comes from the two upstream registries, so a source Hush has never heard of still shows up when they add one:
- spotiflacapp/spotiflac-extension registry
- zarzet/spotiflac-extension registry
Each source holds its own signed session, and the gateway renews one from its install id with no Cloudflare step — Hush does that in the background, hourly and again whenever you press play, so verification is a one-time thing per source. It only ever asks again if a session lapses (a device left off for more than six hours, say).
When a challenge is genuinely needed you get a notice with two options: solve it in the app, or — on a head unit whose WebView is older than Cloudflare supports — Verify in browser, where the grant comes back to Hush by itself. Nothing to copy, and it lands in the same place whichever way you solved it.
In Settings → Audio Sources you choose which sources are enabled, order them, and decide whether to fall back to YouTube when none of them can serve the track. Downloads and cached songs both follow Settings → Storage: downloads land in your downloads folder with the container the source actually served, cached songs in the song-cache folder, and with both of those wired to a folder you picked, an app reinstall keeps playing your files.
Real talk on what got ported from where. This table only moves when I add something new. Patch notes for each version → Changelog.
| Source | What landed in Hush |
|---|---|
| ArchiveTune | Core app, YT login & sync, playback engine, queue & downloads, crossfade, tempo/pitch, Chromecast, Music Together, Last.fm / ListenBrainz, local files, backup & restore, multi-provider lyrics, podcasts, Android Auto, dynamic theme & canvas art, onboarding, stream-source picker, custom extractor, hi-res / lossless |
| Metrolist | Wake-up music alarms, loudness presets, playlist export (CSV / M3U), sync dedup, Android Auto settings |
| Vivi Music | Playlist view-count prefetch, auto-backup before update, backup retention, JioSaavn streaming (320 kbps primary, YT fallback) |
| Echo Music | 5MB chunked downloads, isOfflinePlayback flag, Data Saver key, DoH diagnostics, Settings search, IPv4 / IPv6 / Auto network mode |
| SpotiFLAC | Lossless source engine — upstream's Go runtime (gomobile go_backend), per-source signed sessions, source registry + extension packages, quality cascade, host-side decryption for the providers that hand back keys instead of audio, and the playback cache/download pipeline behind it. Source extensions come from spotiflacapp and zarzet's registries. |
| Hush | Waze Bridge (Spotify + YT Music + Deezer) with bundled install/repair, Gen‑Z explore theme, Saavn beta warning, mood chip fix (logged‑in fallback), source priority + fallback to YouTube, one-time verification with background session renewal, browser verification for car head units, parallel source fetch, app language selector, DOH/proxy, IP rotation UI, lyrics racing, library rewrite, auto-pause debounce, sleep timer pause fix |
| ViMusic | InnerTube foundations, bottom-sheet UI patterns, KuGou lyrics client |
| OuterTune | Player carousel snap / parallax, network connectivity observer |
| BetterLyrics | Word-synced TTML lyrics module, QRC parser |
Tiny fixes and UI polish are mixed in from everywhere. Full license wall → About → Licenses in the app.
Worth saying plainly: the lossless side of Hush is other people's work wrapped in mine — the Go runtime, the source extensions and the gateway are not mine, and bugs in a source belong upstream. Hush's own layer is the app around it: verification and session handling, source ordering and fallback, the download and cache paths, and the car side.
CI drops universal APKs — one file, every CPU arch, no guessing.
| APK | When |
|---|---|
hush-foss-mobile-universal-release.apk |
Default. Clean build, no Google libs. GitHub or Obtainium for updates. |
hush-gms-mobile-universal-release.apk |
You need Chromecast or tap-to-update inside the app. |
hush-gms-tv-universal-release.apk |
Android TV couch mode. |
Same Hush. Different sauce in the APK.
| FOSS | GMS | |
|---|---|---|
| Play music, sync library, lyrics, settings | ✓ | ✓ |
| SpotiFLAC lossless sources (Tidal, Qobuz, Amazon, …) | ✓ | ✓ |
| Chromecast | — | ✓ |
| In-app updater | ✓ | ✓ |
| Google Play Services | Nah | Only for Cast |
Package conflict / invalid APK — the usual sideload ritual:
- Backup → Settings → Backup and restore
- Yeet the old Hush or ArchiveTune install
- Install from Releases
- Restore your backup
adb install -r your.apk > random WhatsApp file forward. First YT Music sync might need VPN if YTM's blocked where you live.
bash scripts/build-release.sh list # see everything
bash scripts/build-release.sh foss mobile arm64 # phone FOSS
bash scripts/build-release.sh gms mobile universal # what CI ships
bash scripts/build-release.sh gms tv universal # TVYou'll want app/keystore/release.keystore + secrets in local.properties (local.properties.example has the template). Raw ./gradlew assemble*Release gives you unsigned — scripts/build-release.sh signs it proper.
Unofficial third-party client. Not Google. Not YouTube. GPL-3.0. Upstream copyrights live in source where they belong.





