A native desktop music player for your own Navidrome or OpenSubsonic server.
Add the NaviBeat repository once, then apt install navibeat on Debian and Ubuntu, dnf install navibeat on Fedora, or pacman -Syu navibeat on Arch. Every update after it arrives with the upgrade you already run. · Or just run the AppImage.
Part of the NaviBeat ecosystem. This build is for Linux only. For the Apple ecosystem, see the App Store links below.
Install · Download · Features · Website · Report a bug
NaviBeat for Linux is 1.0. Every release is put on real hardware before it goes out, an x86_64 bench and an arm64 Raspberry Pi, and each artifact is launched and driven there rather than only built. If something breaks, misbehaves, or looks wrong, please open an issue so it can be fixed: your reports are what shaped this release and they are what shapes the next one.
The Apple builds (iPhone, iPad, Mac, Apple TV, Apple Watch) are shipping releases on the App Store. The Linux build is the newest member of the family, and it now carries the same features and the same release ritual: signed apt, dnf and pacman repositories, four AppImages with delta updates, and a clean-room decode test on both architectures for every build.
NaviBeat is a client, not a server. It connects to a music server you already run and plays your own library from it. It does not host, stream, or provide any music of its own.
It works with:
- Navidrome (v0.50 or later)
- Any OpenSubsonic compatible server
- Airsonic-Advanced, Gonic, and classic Subsonic servers
The Linux app is a real native desktop application written in Kotlin with Compose Multiplatform. No Electron, no web view in a window, no browser tab pretending to be an app. It draws its own window, remembers where you put it, and integrates with your desktop's media keys.
Everything the Linux build can do today.
- Home with a Featured Album hero ("pick up where you left off"), Quick Play (Shuffle Mix, Random Album, Favorites, Random Artist), and Most Played
- Made for You: Time Machine and Year in Review, built from your own listening history on this machine
- Smart shelves: On This Day, Because You Listened, Replay, Discover Mix, plus Your Mixes and Your Last.fm once you connect an account
- Artists, Albums, Songs, Genres, Playlists, Favorites
- Recently Added, Recently Played, Recently Released
- Internet Radio stations configured on your server
- Directories: browse your library by its folder structure
- Full-text Search across artists, albums, songs and playlists
- Now Playing with album art, a quality badge (FLAC, MP3 bitrate, and more) you can switch off, star ratings, and full transport controls. Click the time on the right to swap it between time remaining and total length
- Time-synced lyrics, with an optional word-by-word karaoke mode when your server has the timing, and an optional online lookup for songs your server has none for
- Mini Player in a compact window that stays on top of your other work
- Continue where you left off: resume a track partway through, or start it over
- AutoMix endless playback
- 10-band equalizer (32 Hz to 16 kHz, plus or minus 12 dB per band), ReplayGain, and crossfade
- Stream quality picker: send the original file untouched, or ask the server to transcode to a lighter tier
- Get Info on any track: credited artists, original release date, format, sample rate, bit depth, channels, size, path, MusicBrainz and ISRC, ReplayGain and the Comment tag, every value selectable
- Download tracks, albums and playlists for offline listening
- Prefer Downloaded Music: play the local copy when you have one, even while online
- Offline Mode: show and play only what you have downloaded
- Concurrent-download control and an LRU cache size limit
- Send music to a connected Rockbox iPod or player, right from the app
- Choose the format and bitrate, or Original (no transcode) to copy the file your server already has, untouched
- Your server does any transcoding; album art is re-encoded so old hardware renders it
- Playlists are written correctly, and plays made on the device sync back
- Set it up from Settings > NaviSyncRock, or just plug the player in and it appears in the sidebar
- This is a paid add-on on the Mac. On Linux it is free.
- Listening Stats with a Recent Plays timeline
- Server Health: see how completely your server returns artist images, lyrics and album art
- Connect Last.fm and ListenBrainz for artist enrichment and personalized shelves
- Custom HTTP headers for Cloudflare Access and Authelia
- mTLS client certificates for a server behind mutual TLS
- Works over Tailscale and behind your own reverse proxy, with no third-party relay in between
- Multi-library support
- Dark, light, or system theme
- Frosted Glass: a translucent window, tinted for readability, that asks the compositor to blur behind it (KDE and picom oblige; GNOME shows the tint)
- Remembers its window size and position
- Media-key and desktop integration over MPRIS
- A terminal client (
--tui) for a headless server or a Raspberry Pi over SSH, with cover art, a full Now Playing screen, time-synced lyrics, a listening heatmap, and an Up Next you can walk and play from without leaving the record you are looking at - Zero analytics, zero trackers
NaviBeat does not need a display at all. Add --tui and it opens a full terminal client, and on
a machine with no display it starts that way by itself. A Raspberry Pi, a home server, a NAS, a box
you only ever reach over SSH: your library plays there, with the same queue and the same downloads
as the window.
./NaviBeat-linux-x86_64.AppImage --tuiYour library, what is coming, and the words, at once. Every section sits in its own frame, and the one your keys are going to is drawn in NaviBeat's own red to orange gradient, so you can see where you are without reading anything.
Tabmoves between the panes: the library, Up Next, and the lyrics. In the queueenterjumps to that track andxtakes it out; in the lyrics,enterseeks to that line.- Real cover art, drawn in terminal cells. One cell carries two pixels in full colour, so an album page shows the record. There is a small sleeve beside the transport too.
- Ten screens on the number row. Home, Albums, Artists, Songs, Playlists, Genres, Radios, Favorites, Downloads and the Queue, with album, artist, playlist and genre screens behind them.
- Search your server with
/, filter what is on screen withF, turn the side panes on or off for any screen withw. - A log with the time on it. Two lines above the transport say what you just queued, favourited or downloaded, and they stay, so an action taken while you were looking elsewhere leaves a trace. Activity on Home has the whole session.
- playerctl and your media keys see it, exactly as they see the window.
- Pairing on first run, so a headless machine never needs a desktop to get started.
Under 90 columns the panes stand down and the list takes the whole width, because a title that fits whole is worth more than a column that does not.
Now Playing, at the size a record deserves. A whole screen for what is on: the cover takes as
much of the frame as it can hold, with the title, the artist, the album, the year and the format
beside it, then what is coming next and the words, moving with the song. It is the first thing on
Home, so 1 then enter gets you there from anywhere.
H and L widen and narrow the side column on the list screens, two cells at a time. A library of
short album titles wants a wider queue and a library of box sets wants the opposite, so that is
yours to set.
Listening is a heatmap of your own play log, seven days by twenty four hours, with your busiest
hour and your top artists, albums and songs underneath. [ and ] move between week, month, year
and all time. It is kept on your machine and nowhere else, and it fills as you listen.
Guess the Year plays a track from your own library with its name hidden and asks you for the year. Ten points exact, eight within two, and the track keeps playing after you answer. Both of these sit on Home.
Keys are the ones a terminal listener already has in their fingers, and ? shows the whole map:
Your terminal stays yours. NaviBeat's colour runs across the progress bar where the terminal has
24-bit colour, steps down to the 256 colour cube, then to plain red and yellow on the sixteen colour
consoles, and finally to ASCII on a serial line. Everything else takes your own palette, so NaviBeat
inside your Gruvbox looks like part of your terminal. --colors=truecolor|256|16|mono overrides the
detection and NO_COLOR is honoured.
Grab the latest AppImage for your machine from the latest release:
| Your machine | Download |
|---|---|
| PC or laptop, Intel or AMD, 64-bit | NaviBeat-linux-x86_64.AppImage |
| ARM 64-bit: Raspberry Pi (64-bit OS), Asahi Linux on Apple Silicon, ARM servers | NaviBeat-linux-aarch64.AppImage |
The AppImage is a single self-contained file. It carries its own Java runtime and its own VLC, so there is nothing to install.
Every release also lives at dl.navibeat.app, on a path that always points at the newest build:
mkdir -p ~/Applications && cd ~/Applications
curl -L -o NaviBeat.AppImage https://dl.navibeat.app/linux/latest/NaviBeat-linux-x86_64.AppImage
chmod +x NaviBeat.AppImage
./NaviBeat.AppImageSwap x86_64 for aarch64 on a Raspberry Pi or Asahi Linux, and add -slim if you already have
VLC. Re-running that same command later replaces your copy with the current release, so there is no
version number to look up. https://dl.navibeat.app/linux/latest.json says which version is live,
and every build also keeps a permanent path of its own, like
https://dl.navibeat.app/linux/1.0.12/NaviBeat-linux-x86_64.AppImage, for pinning to one version.
Already run VLC and want a smaller download? The slim builds use the one you have:
x86_64-slim ·
aarch64-slim
Curious how many people are running it? The counter badge above is live from the GitHub API, and navibeat.app/linux-stats breaks it down by day, by week and by architecture. GitHub only reports a running total, so the per-day numbers are snapshots taken four times a day.
The short version: on Debian, Ubuntu, Fedora and Arch, run the block below once to add the NaviBeat repository, and after that NaviBeat installs and updates like anything else on your system. Everywhere else, download the AppImage and run it.
NaviBeat is not in Debian's or Fedora's own repositories and cannot be: those carry open source software with a distribution maintainer behind each package. So the first step tells your system where to find NaviBeat, the same way Chrome, Spotify, Docker and VS Code do it. You do this once.
Copy each block whole, not one line at a time. The lines in a block belong together, and in
the Fedora and Arch blocks everything from <<'REPO' or <<'CONF' down to the closing word is a
single command that writes the file. Paste only its first line and the shell waits for the rest
instead of running anything. The copy button in the top right of each block takes all of it.
Debian, Ubuntu, Linux Mint, Raspberry Pi OS:
sudo install -d /etc/apt/keyrings
curl -fsSL https://dl.navibeat.app/navibeat-repo.gpg | sudo tee /etc/apt/keyrings/navibeat.gpg >/dev/null
echo "deb [signed-by=/etc/apt/keyrings/navibeat.gpg] https://dl.navibeat.app/deb stable main" \
| sudo tee /etc/apt/sources.list.d/navibeat.list
sudo apt update && sudo apt install navibeatFedora, RHEL, Rocky, AlmaLinux:
sudo tee /etc/yum.repos.d/navibeat.repo >/dev/null <<'REPO'
[navibeat]
name=NaviBeat
baseurl=https://dl.navibeat.app/rpm
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://dl.navibeat.app/navibeat-repo.asc
REPO
sudo dnf install navibeatArch Linux, and Arch Linux ARM:
curl -fsSL https://dl.navibeat.app/navibeat-repo.asc -o /tmp/navibeat-repo.asc
sudo pacman-key --add /tmp/navibeat-repo.asc
sudo pacman-key --lsign-key 0940E93F0EA97642
sudo tee -a /etc/pacman.conf >/dev/null <<'CONF'
[navibeat]
SigLevel = Required
Server = https://dl.navibeat.app/arch/$arch
CONF
sudo pacman -Syu navibeatFrom then on it is automatic. NaviBeat lands in your application menu, and every new version
arrives with the sudo apt upgrade, sudo dnf upgrade or sudo pacman -Syu you already run. You
never come back to this page for an update. All three repositories are signed and carry both
architectures. The Debian and Fedora packages bring their own Java runtime and their own VLC, so they
pull in nothing else, and on Fedora that matters more than it sounds: VLC lives in RPM Fusion, and
NaviBeat does not ask you to add it. The Arch package brings its own Java and uses the libvlc
already in Arch's repositories, which is how a package on Arch is expected to behave.
The AppImage runs on anything, including distributions with no NaviBeat repository. It is a single self-contained file: no installer, no dependencies, nothing added to your system.
- Download the AppImage for your machine from the latest release
(x86_64 for most PCs, aarch64 for a Raspberry Pi or Asahi Linux), or straight from our host:
curl -L -o NaviBeat.AppImage https://dl.navibeat.app/linux/latest/NaviBeat-linux-x86_64.AppImage
- Make it executable:
chmod +x NaviBeat.AppImage
- Run it:
./NaviBeat.AppImage
An AppImage does not really "install", it is a single file you run directly. The natural home for it is a ~/Applications folder in your home directory:
mkdir -p ~/Applications
mv NaviBeat-linux-x86_64.AppImage ~/Applications/
chmod +x ~/Applications/NaviBeat-linux-x86_64.AppImageTo get NaviBeat into your application menu with its icon, use an AppImage manager. Either of these works:
- AppImageLauncher, available in most distributions. It watches
~/Applications, adds a menu entry, and handles updates. - AppManager, a GTK app that installs and manages AppImages in a macOS-style way.
Without either, you can run the AppImage directly, or add a .desktop file to ~/.local/share/applications by hand.
- Linux x86_64 or ARM64 (aarch64), 64-bit, with glibc 2.36 or newer: Debian 12, Ubuntu 22.04, Fedora 37, Raspberry Pi OS Bookworm and anything more recent.
- Nothing to install. Java and VLC both travel inside the download. If you picked a
-slimbuild, that one uses the VLC you already have (sudo dnf install vlc,sudo apt install vlc,sudo pacman -S vlc). - A terminal, or a desktop. With no display,
--tuigives you the whole app in a terminal. - FUSE to launch the AppImage by double-clicking. Most desktops have it; if not:
- Debian / Ubuntu:
sudo apt install libfuse2 - or run without FUSE:
./NaviBeat-linux-x86_64.AppImage --appimage-extract-and-run
- Debian / Ubuntu:
- A Navidrome or OpenSubsonic server to connect to. NaviBeat is a client and does not come with any music.
On first launch you pair the app with your server: enter its address, username and password.
An AppImage does not update itself, and chasing a new download every few weeks is the one genuinely tedious thing about the format. From 0.9.68 every NaviBeat AppImage carries update information, so a manager can update it in place: it keeps your file where it is, keeps your menu entry, and downloads only the parts that actually changed rather than another 200 MB.
Gear Lever is a small app that manages AppImages. Add NaviBeat to it once, and after that it offers the update itself when one exists.
- Install Gear Lever from your distribution or Flathub.
- Open it and drag the NaviBeat AppImage in, or use Open and pick the file.
- It appears in your application menu with its icon. When a new version is out, Gear Lever shows an Update button.
AppImageUpdate does the same thing with one command, and is the tool the update information is written for:
AppImageUpdate ~/Applications/NaviBeat-linux-x86_64.AppImageIt reads the update information inside your copy, compares it against the current release, and downloads only the changed blocks. If you are already on the newest build it says so and stops.
AppImageLauncher also uses it, so if you already keep your AppImages with that, updates work through the same mechanism.
The AppImage carries a line that says where to look, and a small .zsync file ships beside every
release. That file is a map of the release, block by block. An update tool fetches the map, compares
it against the copy on your disk, and asks the server only for the blocks that differ. On a typical
release that is a fraction of the whole file, because the bundled Java runtime and VLC do not change
between most versions.
Nothing phones home on its own: NaviBeat itself never checks for updates and never talks to us. The check happens only when you or your AppImage manager asks for it.
Then there is nothing to do at all. sudo apt upgrade, sudo dnf upgrade and sudo pacman -Syu
pick NaviBeat up with everything else on your machine.
Every release stays on this page. Downloading the new AppImage over the old one is always a valid update, and your settings, pairing and downloads live in your home directory, not in the file.
This repository is for the Linux build only. NaviBeat is a whole family of native apps, and the Apple builds live on the App Store as a single Universal Purchase (buy once, use on every Apple device):
| Platform | Where to get it |
|---|---|
| Mac | App Store · navibeat.app/macos |
| iPhone | App Store · navibeat.app/iphone |
| iPad | App Store · navibeat.app/ipad |
| Apple TV | App Store · navibeat.app/appletv |
| Apple Watch | App Store · navibeat.app/applewatch |
| Linux | You are here. navibeat.app/linux |
The Linux build is free. The Apple builds are a one-time $5.99 Universal Purchase.
Website: navibeat.app
Your reports are how this build gets better, and they always have been.
- Found a bug? Open a bug report.
- Have an idea, or a question? Start a Discussion or open a feature request.
When you report a bug, the more you can tell me about your distribution, desktop environment and server, the faster it gets fixed. The issue templates ask for exactly what helps.
NaviBeat for Linux is free, with no ads, no tracking and no subscription. If it earns a place in your setup, a coffee genuinely helps and means a lot.
NaviBeat talks to your server and to nobody else. There are no analytics and no trackers in the app. Full policy at navibeat.app/privacy.
NaviBeat for Linux is free to use, but it is not open source. It is proprietary software, and this repository holds only the release binaries and documentation, never the source. You may download and use it at no cost; you may not copy, redistribute, modify, reverse engineer, or reuse it. See LICENSE for the full terms.
Every update ships here as a new release with the binary attached and a What's New note. Watch this repository, or check Releases, to stay current.
NaviBeat is my hobby project, and I genuinely love it. I build the app I want to use myself first, and then I share it with the world.
Keeping this many native builds moving on my own is hard: macOS, Apple TV, iPhone with its Watch app, and now Linux. So I lean on agentic coding heavily. I actively use Claude Code to help me navigate the code, chase bugs, and work through change requests. That is what lets one person keep all of these apps in sync.
By day I am a Business Analyst, working mostly on direct-to-consumer products at a large FMCG company. I know a few programming languages reasonably well, but my real strength is the logic and the requirements: how a thing should behave, and how to express that across different syntaxes. So I do not just vibe-code. Every change becomes a proper, DevOps-style backlog task: I groom it, then push it through development, UAT, public beta, and finally production. There is real Q&A on my side.
Still, people are only people, and I can miss things. That is why I rely so much on beta testers filing bugs and change requests, and it is why your reports genuinely matter. If anything in the app ever feels like too much AI, or just feels off, please reach out. I am always happy to fix it and run another round of CRs to make NaviBeat better.
The code itself stays private and proprietary. The agents only make the building faster.
Made with care in Belgrade by Nenad Jokic. · NaviBeat is not affiliated with the Navidrome or Subsonic projects.







