Library / SDK
htkhiem/euphonica avatar
htkhiem/euphonica

Euphonica: a GTK4 music player that runs MPD for you

Local music player with delusions of grandeur, powered by MPD

906 stars31 forksRustGPL-3.0

At a glance

What is it?
Euphonica is a Rust and GTK4 music player that works both as a self-contained player and as a client for an existing MPD server, orchestrating its own MPD instance when it needs one. It suits Linux desktop users who want a native library player with a visualiser and dynamic playlists.
Who is it for?
Euphonica is a good fit for a Linux desktop user who wants a native GTK4 library player, wants the MPD protocol underneath without hand writing a config file, and wants a visualiser and dynamic playlists in the same application.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly Rust, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

One application, two ways of reaching a music library

The design decision that defines Euphonica is that the MPD protocol is always present, whether the user wants it or not. The player is described as both a self-contained music player and an MPD-compatible client, and it achieves that by orchestrating its own MPD instance when needed. The pitch in the feature list is that this gives you the power of MPD without the hassle, and the specific hassle being removed is spelled out two lines later: a detailed GUI for configuring MPD, with no more manual MPD config file editing. That is a real difference in kind from a player that reads a music folder directly. Everything MPD knows how to do, from queue reordering to ReplayGain to crossfade and MixRamp configuration, is available through the interface, and the feature list describes an adaptive GTK4 and libadwaita UI exposing most of those MPD features. If you already have an MPD server on your network, the same application connects to it instead, so the two modes are not separate products.

The format list is MPD's, and DSD is handled with a fallback

Audio support is inherited rather than implemented, which is the natural consequence of putting MPD underneath. The player handles FLAC, MP3, OGG, Opus, WavPack, MP4/AAC, MOD, Musepack, WAV, and any other format supported by FFmpeg. DSD in DSF or DFF form is played directly when the hardware supports it, with a DoP fallback when it does not, which is the kind of detail that only appears in a player whose author cares about the DAC chain. The same care shows up in the bit-perfect claim: playback can be bit perfect with the right output configuration and hardware chain, which the feature list spells out as ALSA, zero resampling and no volume control. That last condition is the one that trips people up, because a desktop audio stack with a PulseAudio or PipeWire volume control in the path will resample whether the player wants it or not, and no setting inside the application can undo that. There is also a volume knob with a dBFS readout, which is a small touch that tells you the author is thinking in audio-engineering terms rather than as a media browser.

The visualiser reads from a FIFO or from PipeWire, not from the audio path

The spectrum visualiser is a customisable component that reads from the MPD FIFO or from system PipeWire. The two sources matter because they determine what you can do with it. A FIFO output in MPD gives you the raw audio data as the server sees it, which is the accurate signal but requires an MPD configuration change. PipeWire is the system audio path, which needs no MPD changes but describes what the desktop is actually playing, so a visualiser reading from PipeWire will follow whatever is making sound, including another application. The dependency list confirms both paths are implemented: pipewire is a crate dependency with a version requirement of 0.9 or newer and a v0_3_44 feature, and spectrum-analyzer is pinned to an exact version, 0.5.2, which is the kind of pin that shows a library is being held still on purpose rather than left to float. The blur behind the interface is a separate point of interest: it is described as practically zero-cost static background blur powered by libblur, and the libblur crate is a direct dependency at version 0.14.4.

Dynamic playlists are the most developed MPD feature exposed

The dynamic playlist support is where the app goes furthest, and the list of capabilities suggests this is the author's main area of interest. Both query-based and sticker-based filtering rules are supported together, and multiple ordering clauses are supported, with an option for random shuffle on refresh. There is auto-refresh scheduling at hourly, daily, weekly intervals and the like, and an optional fetch limit for cases like top-10 playlists. The rules are edited through a graphical editor with live error checking, a current state can be saved as an MPD-side static playlist whenever you want, and rules can be imported and exported as JSON for sharing and backup. Underneath, the feature list notes that commands are bundled into lists for efficient MPD-side processing where possible, which is the difference between a client that issues a query per keystroke and one that lets the server do the work. A screenshot in the documentation is dedicated to the dynamic playlist editor, which suggests it is treated as a first-class surface rather than a settings dialog. The MPD password handling is also worth noting: passwords are stored in the user's login keyring, via the libsecret crate, rather than in a configuration file.

Metadata from several sources, with a rule about sharing

The application fetches album art, artist avatars and synced song lyrics from external services, with Last.fm, MusicBrainz, TheAudioDB and LRCLIB named as the current sources. The musicbrainz_rs crate is a dependency, and so is reqwest with blocking and json features, which is what does the HTTP work. Alongside that, there is myMPD-compatible stickers handling with a new album stickers standard, supporting both album and song ratings, and rusqlite plus r2d2 for the local database. The documentation is careful about what happens to fetched content. The screenshots note that auto-fetched artist bios and album wikis are user-contributed and licensed by Last.fm under CC-BY-SA, and that Euphonica supports local editing and syncing between local instances but not sharing. So the bio text you see in the album wiki view is third party content with an attribution obligation, and the application deliberately does not let you push your edits back to the source or share them outward. Album art fetching is described as performant and LRU cached, both to cut down on disk reads and on RAM usage, with the lru crate and an image crate that has webp support in the dependency list.

Installing as a Flatpak, or a native package that may bundle MPD

The preferred installation route is a Flatpak app via Flathub, and the documentation notes that the Flatpak installation bundles MPD 0.24 internally to power Standalone Mode. That is the key fact for anyone who already runs MPD, because the sandbox has its own copy and the two will not talk to each other by default. The alternative routes are described per distribution. On Arch there is an official AUR -git package tracking the latest commit, a version-pinned package for when -git is too bleeding-edge, and a client-only -git variant. The client-only variant exists for exactly the case where you have a non-standard MPD installation, such as a fork, or where you only intend to use Euphonica as a client to an existing server. The documentation notes that starting from v0.98 the main package includes mpd as a hard dependency, and that the app itself is the same with Standalone Mode still available and pointing at your own MPD executable. The install command is short:

bash
  # Use your favourite AUR helper here
  paru -S euphonica-git

Nixpkgs is also covered, with the package maintained by three named contributors. Building from source is possible with flatpak-builder, and the repository carries both a flake.nix and a meson.build, along with a Cargo.toml at version 0.99.8 on edition 2024.

A release cadence of beta versions and a self-hosting maintainer

The version numbering tells you where the project is. The most recent releases are v0.99.8-beta with builtin MPD server orchestration capabilities, v0.99.7-beta-1, and v0.99.7-beta with playlist cover images in the sidebar plus bugfixes, dated 2026-10-11, 2026-09-01 and 2026-08-31. A project sitting below 1.0 with beta tags and a release roughly every few weeks is a project that is shipping continuously and expecting breakage, and the Flatpak route is the one that gives you a package manager keeping it current. The last push was on 2026-10-19, so the branch is ahead of the newest tag. The licence is GPL-3.0, which matters more here than for many applications: if you intend to distribute a modified build, the copyleft terms apply to that distribution, though running the app for your own use is unaffected. The project also ships gettext translations, with a gettext-rs dependency and a po/ directory, and an XDG desktop entry file naming the app io.github.htkhiem.Euphonica, which is the identifier Flathub and the icon file both use.

Editorial conclusion

Euphonica is a good fit for a Linux desktop user who wants a native GTK4 library player, wants the MPD protocol underneath without hand writing a config file, and wants a visualiser and dynamic playlists in the same application. It is the wrong choice if you do not want an MPD server involved at all, since the standalone mode is MPD running under the hood, and it is the wrong choice for a library of hundreds of thousands of tracks, since the documentation states the app is tested with up to 30K songs. Before installing, decide whether you want the Flatpak, which bundles MPD 0.24 internally, or a native build, and read the client-only package note if you already run MPD and do not want a second instance. The project is GPL-3.0 licensed, the last push was on 2026-10-19, and the most recent release is v0.99.8-beta from 2026-10-11.

Frequently asked questions

Do I need to install MPD separately to use Euphonica?

No. The player is described as both a self-contained music player and an MPD-compatible client, and it orchestrates its own MPD instance when needed, with a detailed GUI for configuring MPD instead of manual config file editing. The Flatpak installation bundles MPD 0.24 internally to power Standalone Mode.

How do I install Euphonica on Arch Linux?

The documentation lists three AUR packages: euphonica-git for the latest commit, a version-pinned euphonica package if -git is too bleeding-edge, and euphonica-client-git for client-only use against an existing or non-standard MPD server. The install command shown is paru -S euphonica-git, with the note to use your favourite AUR helper.

What audio formats does Euphonica play?

FLAC, MP3, OGG, Opus, WavPack, MP4/AAC, MOD, Musepack, WAV, and any other format supported by FFmpeg. DSD in DSF and DFF form plays directly when the hardware supports it, with a DoP fallback otherwise, and bit-perfect playback is possible with the right output config and hardware chain.

What can dynamic playlists in Euphonica do?

Both query-based and sticker-based filtering rules are supported together, with multiple ordering clauses or random shuffle on refresh, auto-refresh scheduling at hourly, daily or weekly intervals, an optional fetch limit, a graphical rules editor with live error checking, and JSON import and export. A dynamic playlist's current state can be saved as an MPD-side static playlist.

Where does Euphonica store the MPD password and the fetched artwork and lyrics?

MPD passwords are stored in the user's login keyring rather than a config file. Album art, artist avatars and synced lyrics are fetched from Last.fm, MusicBrainz, TheAudioDB and LRCLIB, with the fetched artist bios and album wikis being user-contributed content licensed by Last.fm under CC-BY-SA that the app lets you edit locally but not share.

Official sources

  1. htkhiem/euphonica on GitHub
  2. Issues
  3. License: GPL-3.0
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/htkhiem-euphonica.svg)](https://hysenlabs.com/projects/htkhiem-euphonica)

Was this useful?