A Music Streamer That Doesn't Own Your Library
You've probably got your music scattered across a few services, a folder of local files, and maybe a playlist or two you've been rebuilding by hand since 2014. What if the player itself didn't care where the music came from, and let you plug in your own sources instead? That's the idea behind Spotube, a cross-platform open-source music streaming platform built around plugins.
What It Does
Spotube is a desktop and mobile music streaming app where the metadata, playlists, and audio sources all come from plugins. Instead of hardcoding a single streaming service, it hands those responsibilities to community-built (or self-built) plugins, so the app becomes a shell you fill with whatever music services you want.
Under the hood, it's a Kotlin Multiplatform and Compose Multiplatform app. The desktop build uses the Nucleus Gradle plugin and ships as a GraalVM native image—an ahead-of-time compiled binary that runs without a JVM installed. There's also a Rust library in the composeApp module, built through Gobley. Playback control happens locally rather than on a server, and the project states plainly that it collects no telemetry, diagnostics, or user data.
Why It's Cool
-
The plugin model is the whole point. Rather than arguing about which streaming service is best, Spotube sidesteps the question. Any platform or custom music service can be supported through a plugin, and the community is already building them for popular platforms.
-
Downloads come with tagged metadata. The README lists freely downloadable tracks with tagged metadata as a feature. That's a small detail that matters a lot if you've ever tried to make a downloaded track library look tidy in another player.
-
Time-synced lyrics regardless of plugin support. This is a clever bit of separation—lyrics work even when the underlying plugin doesn't provide them, so the experience stays consistent across sources.
-
It's genuinely light. Small binary size and low data usage are called out directly. Native compilation helps here: no JVM to carry around, just a binary.
-
Local playback control. Routing playback locally instead of through a server is both a privacy and a latency win, and it fits the decentralized framing the project uses.
The honest caveat is that the plugin ecosystem is the product. The app is only as useful as the plugins available for it—or the ones you're willing to write. That's a real tradeoff, not a footnote.
How to Try It
The easiest path is downloading a build from the official website at spotube.cc. If you want the latest code, nightly builds are available at spotube.cc/downloads/nightly.
Building from source is more involved, so here's the short version from the README:
- Install JDK 21 to run Gradle (the Gradle daemon JDK and GraalVM toolchain get provisioned automatically).
- Install Rust via
rustupandcargo—thecomposeAppRust library builds through Gobley. - For Android builds, install the Android SDK.
- One dependency isn't on Maven Central yet. Clone kdroidFilter/ComposeNativeWebview at the commit pinned in
spotube-release-binary.yml(COMPOSE_WEBVIEW_COMMIT) and run./gradlew publishToMavenLocalinside it. - On Linux, install the runtime libraries yourself if you're building from source—including VLC. The
.deband.rpmpackages pull these in as dependencies, and only the.AppImageis fully self-contained (it bundles VLC, GTK 3, and WebKitGTK).
For Debian/Ubuntu, the README gives this line:
sudo apt-get install libvlc5 vlc-plugin-base libwebkit2gtk-4.1-0 libgtk-3-0 libasound2 libgl1 libxtst6 libxi6 libxrender1
Fedora users will want the dnf equivalent (the README's table was truncated in what I could see, so check the repo for the full command). The full instructions live at github.com/team-spotube/spotube.
Final Thoughts
Spotube is best suited to people who are comfortable assembling their own setup and don't mind the plugin model's rough edges—developers, tinkerers, and anyone who's tired of their listening history living on someone else's server. If you want a polished, zero-configuration streaming app, this isn't that, and the README doesn't pretend otherwise. But if the idea of a player where you own the sources appeals to you, it's a solid starting point—and the project's framing as "a small step towards the decentralized music streaming era" is refreshingly modest about what it is.
Follow @githubprojects for more developer tools and open source projects.