Spooty
A personal Android client for Spotify with a fully native Jetpack Compose UI. A
hidden, hardened WebView runs the real web player for login and audio, while
the app adds the Spicetify Marketplace, visualizers, a free DJ, music videos and
quietly-muted ads by default.
Why Spooty?¶
The official mobile apps push you down a curated path. Spooty hands you the real web player — every feature the browser gives you — and lets you bend it to your liking the same way Spicetify does on desktop.
📱 Native app
- Home, Search, Library, Marketplace and Profile in Material 3
- Liquid Glass, Glassmorph and Frutiger Aero styles
- Or a phone-sized web view of the real web player
🧩 Spicetify Marketplace
- Themes, extensions and snippets with previews and READMEs
- Themes restyle the native app; extensions run on Spooty's Spicetify layer
- Each extension is labelled with how well it works
🎛️ Player look
- Visualizers that follow the real audio: bars, wave, spectrum, LED, ring, liquid…
- Animated seek bars: Nyan Cat, Sonic, Pokémon and every playbar snippet
- Cat Jam nodding along at the song's tempo
🎤 Song extras
- Credits, song radio, downloads and sharing
- Music videos: Spotify's own, or YouTube's
- Spooty DJ: a set built from your music, introduced out loud
🔇 Quiet ad handling
- Ads are muted by default, with no network interception
- Optional skip behind an explicit toggle (guarded, rate-limited)
🔐 Hardened WebView
- No file/universal access, no mixed content, no cleartext
- SSL errors always cancelled
- Every JS→native method is gated by
@JavascriptInterface
Playback & background audio¶
The WebView's own Spotify <audio> element owns the real stream. A lightweight foreground
MediaSession service mirrors the state to the OS, so you get lockscreen controls and
uninterrupted background playback — without ever re-hosting the audio natively.
Personal use
Spooty is a personal, non-distributed app built to be sideloaded. It interacts with Spotify's web player in ways the official apps don't, so don't publish it. See the overview for the full picture.