Linux
A music player for Linux that was built for Linux
Not a port, not an Electron wrapper, and not Foobar2000 under Wine. One native binary that treats Linux as a first-class target rather than the third one.
The problem it was written for
The good Linux players each give up something. Tauon's tagging is shallow. Strawberry isn't composable. Quod Libet isn't something anyone would theme. The stack that does panels, deep tagging and a theming story all at once has been stuck on Windows for twenty years.
Running that stack through Wine works until it doesn't. A skin like CaTRoX is held together by stacked workarounds and, in places, Internet Explorer rendering inside panels. Through a translation layer it becomes obvious how much is luck, and every OS update is a chance to find out.
rox is that shape written natively: forty panel types you arrange yourself, tag editing you can trust with a real collection, and themes that travel as a single file.
Installing it
On Arch it's on the AUR as rox-player, co-maintained by the author. Any helper works, or clone and run makepkg -si yourself.
The repo is also a flake, so Nix and NixOS get it without a package step. The first command runs rox without installing anything, the second puts it in your profile.
Everywhere else, unpack the tarball and run ./rox. One binary, no installer, nothing left behind when you delete it.
yay -S rox-player
nix run github:zealsprince/rox
nix profile install github:zealsprince/roxWayland and X11
Both, natively, through gpui. Window decorations are a per-workspace setting rather than a compile-time decision, so you can run server-side decorations on one layout and a borderless one on the next without restarting into a different build.
Exclusive output through ALSA
Exclusive mode opens the card directly as hw:CARD=x,DEV=n. That is the one ALSA name with no dmix, no plug and no sound server anywhere in the path, which is what makes it the only route that will refuse a rate it can't do rather than quietly resampling to something else.
The trade is the honest one: while rox holds the card in exclusive mode, it holds it. Nothing else on the system plays through that device until you stop. rox tells you what the hardware actually agreed to rather than what you asked for, so a mismatch shows up as a number instead of as a suspicion.
Shared mode is the default and behaves like every other application on your desktop.
Desktop integration
Media keys and now-playing come through a real MPRIS service, so playerctl, the GNOME and KDE media widgets, and anything else speaking org.mpris.MediaPlayer2 all see it without configuration.
The tray icon goes on the bus through StatusNotifierItem, which is what makes quit-to-tray safe: if no SNI host is running to receive it, closing the last window quits instead of stranding a headless process you can't get back to.
The benchmarks are all Linux players
The comparison table on this site was run on Linux against Linux software: Elisa, fooyin, Quod Libet, Strawberry, Museeks and Tauon, all on one machine with the same 50,000-track library. rox gets a window up in 0.3 seconds and settles at 134 MB. The next lightest that finishes loading uses nearly three times the memory.
What it can't do on Linux
- x86_64 only. There is no aarch64 Linux build, so ARM boards and Asahi need a source build.
- No plugin API, so nothing here replaces a specific Foobar2000 component you depend on.
Exclusive output that reports back what the card actually agreed to rather than what you asked it for, and a look you can build here and hand to someone running Windows. If that's the sort of thing Linux has had you going without, this is where it lives.
Point it at your library
Free and open source under the AGPL. No account, and nothing running in the background when it's closed.
More on what it looks like, the full Foobar2000 comparison, or what the exclusive output above is actually doing, under ReplayGain and bit-perfect. Same player on Windows and macOS.