I'm not a classic desktop developer. I come from the infrastructure side — I build networks, manage servers, and spend 90 percent of my time in the terminal. When I'm sitting there debugging kernels or pushing YAML files around, I need noise in the background. Not a Spotify algorithm shoving the latest pop playlist at me, but good old internet radio.
The problem: Radio players on Linux drive me nuts.
Either they're massive media suites that immediately start indexing my local music folders (no, thanks!), or they're bloated Electron apps that spin up a full Chromium browser, swallow 400 MB of RAM, and then call themselves "lightweight" — just to play a simple audio stream. That's completely insane.
I wanted something native. Something that feels like it belongs in the operating system. A program that starts in milliseconds, plays the stream, and then gets out of the way. No podcasts. No local MP3 player. Just radio.
Native Code Instead of Electron Madness
Nowadays, when you build an app, everyone advises you to use web technologies. "Write it once in Electron, run it everywhere!" — Sure, and everywhere it looks like crap, eats RAM without end, and behaves like a foreign body.
As a committed Arch Linux user with KDE Plasma, the decision was clear for me: I'm writing this thing natively in C++ and Qt 6 / QML. If someone uses a Linux tool, they should feel that it was made for their system. It should respect the system theme, use native notifications, slide cleanly into the system tray, and respond to media keys on the keyboard — without having to summon half a demon.
This doesn't just apply to the desktop, by the way. When it came to bringing BearWave to smartphones as well, I applied the exact same standard. Instead of desperately cramming the desktop app into some mobile container, I built a clean, standalone rewrite in Flutter/Dart for Android. Again with the exact same goal: blazing fast, resource-efficient, and this time fully integrated into the mobile system (including Android Auto and Google Cast).
Strict Separation of Backend and Frontend
As an infrastructure person, I can't stand code where UI and logic are one big sticky blob. BearWave is strictly separated: The C++ backend handles audio streaming (via QtMultimedia), manages states, caches station lists (so I don't harass the Radio-Browser API on every launch), and delivers clean data. The QML frontend is really just the dumb display layer.
Honestly: QML took some getting used to at first. When you come from a world where everything runs sequentially and deterministically, this reactive UI fiddling is a real adjustment. But it pays off enormously for maintainability.
Databases? No, Thanks.
I also had zero desire to immediately hammer a SQLite database into such a ridiculously simple tool. Favorites and settings live as plain JSON files in the user's config directory. If something breaks: open text editor, done. No migrations, no overhead.
Flathub Said No — Plan B Kicked In
Next, I wanted to package BearWave cleanly as a Flatpak and distribute it via Flathub. The review ended without approval — in my view too generic and too little oriented toward the product. I can't link to the exact wording today; the application has since been deleted. My project notes still have the assessment in them, but for the blog: it wasn't a showstopper.
Instead of getting entangled in a public feud, I treated it like an infrastructure problem. Flathub doesn't work? Then I'll build the pipeline myself.
Over the weekend, I set up my own GPG-signed Flatpak repo at flatpak.bearwave.app. The build process now runs fully automated via GitHub Actions, signs the packages, and pushes them to my own server. For the true Arch faction (which I naturally count myself among), there's my tool as an AUR package (bearwave-git) — the way I install it on my own machines.
Release and Stability
BearWave is currently in a very stable phase: It starts instantly, plays music, and doesn't crash. I'll probably clean up some code here and there (the license has since changed to GPL-3.0-or-later, by the way), but I have no intention of overloading the thing with a thousand features.
If you're on Linux and also tired of bloated media players, and instead want a native, lean tool for radio under KDE — BearWave is worth a look. Source code and issues are on GitHub and GitLab.