Skip to content

Repository files navigation

Rufin

Rust 1.95+ License: GPL-3.0-or-later GTK 4 libadwaita Flathub installs AUR version Nixpkgs version

Rufin Rufin is a powerful, fast and easy to use GTK4/libadwaita music client written in Rust, available on multiple platforms. It can play music from your Jellyfin, Navidrome/OpenSubsonic flavor servers and local folders; can download tracks from these servers and let you play from downloaded songs while still keeping you in the same remote session. It also has broad set of features and optimizations around these features for the ideal user experience.

Rufin

Features

🎵 Playback

  • True gapless playback and configurable equal-power crossfade mode
  • Built-in EBU R128 loudness normalization, including true-peak measurement and ReplayGain tag support
  • 10-band equalizer with presets, perceptual/linear volume scale preference and fade on play/pause
  • Auto DJ that keeps the queue filled; server recommendations when available with a smart local fallback
  • Random play with filters for track count, year range, genre and played/unplayed status
  • Optional waveform seekbar; waveforms are generated for the current track and cached
  • Fullscreen player with visualizer
  • CUE sheet support with separate playable tracks
  • Broad codec support 1
  • Audio output device selection

📚 Library

  • First-class Jellyfin, Navidrome/OpenSubsonic and local music library support
  • Combine multiple local folders in a single listening session
  • Download tracks manually or through automatic rules, then keep using the same remote library while offline
  • Path matching between music servers and local folders, allowing local playback while keeping server activity and history
  • Metadata editing for supported servers and local formats, with bulk editing and Identify available with auto-fill
  • Automatic metadata, artwork and lyrics caching
  • Browsing large libraries feels normal, routes are not paginated

🌍️ Discovery

  • Server-provided artist, track, album, playlist and genre radios, including recommendations from server plugins
  • App owned smart playlists with custom sorting and limits; can use metadata, play/skip history or pre-defined dynamic lists
  • Dedicated Search, Folders and History pages
  • Moods browsing and mood/BPM-based smart playlists for Navidrome, Subsonic and local libraries
  • Synchronized lyrics with built-in search and adjustable offset
  • Furigana and Romaji lyrics overlays, translation preference and word-by-word karaoke support

🔌 Integrations

  • Last.fm, Libre.fm and ListenBrainz scrobbling, with offline storage and automatic retries
  • Discord Rich Presence
  • Private mode for temporarily pausing external activity
  • Secure storage for server credentials and API secrets by default

🖥️ Interface

  • Fast GTK 4/libadwaita interface with light/dark themes and accent customization
  • Fully usable across different window sizes, including a separate compact layout
  • Adjustable sidebars with separate presets for different window sizes
  • Configurable layouts, context menus and GTK menus
  • Keyboard shortcuts for playback, navigation and library browsing
  • Automatic updates for Windows and macOS builds
  • Easy built-in log viewing and exporting (privacy-conscious)
  • Type to search for routes
  • Exit to tray and Start minimized window options
  • System tray integration

Screenshots

Tracks page Albums page Artist details Album details Fullscreen player Customize display Download settings Playback settings Layout settings

Installation

Flatpak

Get it on Flathub

Fedora

Rufin is available for Fedora 44.

sudo dnf copr enable screwyy/rufin
sudo dnf install rufin

AUR

  • rufin-bin installs the release binary. rufin-git builds the current source.
yay -S rufin-bin
yay -S rufin-git

Nix

Rufin is available in nixpkgs repository. To run Rufin without installing:

nix run nixpkgs#rufin

To add it to your profile:

nix profile install nixpkgs#rufin

You can also run main or an older release directly.

nix run github:screwys/Rufin/main
nix run github:screwys/Rufin/vX.Y.Z

You might want to use github repo for profile as well, since it takes more than a week for an update to get merged into nixpkgs repository.

Windows

Download the .exe from GitHub Releases.

Rufin is also available via Scoop:

scoop bucket add screwys https://github.com/screwys/scoop-bucket
scoop install screwys/rufin

Both have opt-in Automatic updates in General preferences to have Rufin install an available Windows update when the app starts. Alternatively, you can click Update button in Version History on the latest release.

macOS

Homebrew Cask is the primary macOS installation:

brew tap screwys/tap
brew install --cask rufin

You can turn on Automatic updates in General preferences to have Rufin install an available update when the app starts or manually click Update button in Version History on the latest release.

You can also download .dmg files directly from GitHub Releases, but then you have to update manually.

Building locally

Start by cloning the repository. You can build Rufin natively or use our Linux development container if you want to keep dependencies outside of your system and have Docker or Podman available.

git clone https://github.com/screwys/Rufin.git
cd Rufin

Development container

just container setup
just build

This makes just commands go through the container development. If you want to build natively instead after running this one, use just container disable.

Native build

Rufin requires Rust 1.95 or newer, GTK 4.20 or newer, libadwaita 1.9 or newer, and GStreamer 1.26 or newer.

Arch Linux:

sudo pacman -S --needed \
  base-devel rust cargo just pkgconf gettext gtk4 libadwaita \
  gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad \
  gst-plugins-ugly gst-libav

Fedora:

sudo dnf install \
  gcc rust cargo just pkgconf-pkg-config gettext gtk4-devel \
  libadwaita-devel gstreamer1-devel gstreamer1-plugins-base-devel \
  gstreamer1-plugins-base gstreamer1-plugins-good \
  gstreamer1-plugins-bad-free gstreamer1-plugins-bad-free-extras \
  gstreamer1-plugins-ugly-free gstreamer1-plugin-libav

For additional codecs, install the matching GStreamer plugins.

Windows: Windows builds run natively in the MSYS2 UCRT64 environment. From its Windows UCRT64 terminal, use MSYS2's pacman.exe to install the build and packaging dependencies:

ucrt=mingw-w64-ucrt-x86_64
pacman -S --needed base-devel git \
  "$ucrt"-{adwaita-icon-theme,cmake,gdk-pixbuf2,gettext-runtime,gettext-tools} \
  "$ucrt"-{gst-libav,gst-plugins-bad,gst-plugins-base,gst-plugins-good} \
  "$ucrt"-{gst-plugins-ugly,gstreamer,gtk4,hicolor-icon-theme,libadwaita} \
  "$ucrt"-{just,ninja,nsis,perl,pkgconf,rust,shared-mime-info,toolchain,wavpack}

macOS:

brew install \
  rust just pkgconf gettext gtk4 libadwaita gstreamer \
  dylibbundler librsvg game-music-emu libopenmpt libsoup meson ninja wavpack

Building: After you installed dependencies for your operating system, you can build and run:

just build
just debug

On macOS, just build dmg creates .local/artifacts/Rufin.dmg for installation and platform behavior testing. On Windows, just build windows creates the versioned setup executable in the same artifact directory.

Testing, Nix, and container controls are documented in CONTRIBUTING.md.

Troubleshooting

Warning

If you are using native Discord with Flatpak Rufin, you should add the xdg-run/discord-ipc-0 filesystem override via Flatseal, or from the terminal:

flatpak override --user --filesystem=xdg-run/discord-ipc-0 io.github.screwys.Rufin

This override is only for this combination, else it works out of the box.

Open Troubleshooting from the main menu, enable Debug logging, reproduce the problem, then click Save. Crash logs also appear here on the next launch. Logs have secrets and absolute folder paths redacted, but you may still want to review the logs before sharing them.

Or you can just run Rufin from the terminal:

flatpak run --env=RUST_LOG=debug io.github.screwys.Rufin 2>&1 # for flatpak
RUST_LOG=debug rufin # for native packages
just debug  # for local build

To test if Rufin can play a specific media (reading metadata and actual GStreamer audio decoding):

flatpak run --filesystem=host:ro io.github.screwys.Rufin --verify-media (realpath "media_path.format")
rufin --verify-media "media_path.format"
cargo run -p rufin -- --verify-media "media_path.format"

If should exit silently if the media can be played.

Uninstallation

You can remove Rufin with your package manager, use the uninstaller included with the Windows .exe (which can also delete the cache), or delete Rufin.app from Applications if you installed the macOS .dmg.

To delete Rufin's cache as well, delete its cache folder based on your operating system:

  • Linux and FreeBSD: ~/.cache/rufin
  • Flatpak: ~/.var/app/io.github.screwys.Rufin/cache/rufin
  • macOS: ~/Library/Caches/io.github.screwys.Rufin
  • Windows: %LOCALAPPDATA%\screwys\Rufin\cache

Contributing

To contribute code, please see CONTRIBUTING.md.

Translations

You can also contribute by translating the app on Weblate

Translation status

Credits

Built with GTK 4, libadwaita, gtk-rs and GStreamer

Rufin is greatly influenced by Feishin, and a lot of design decisions are directly borrowed; as much we can achieve natively.

Player backend design and Smart Playlists are inspired from Strawberry (fork of Clementine).

Translation credits

  • Estonian translation by Priit Jõerüüt
  • Russian and Latvian translation by aguhadug
  • German translation by sevachka

License

LICENSE

Footnotes

  1. AAC and ALAC (including M4A/MP4), AIFF and WAV, APE, FLAC, TTA and WavPack, MP1/MP2/MP3 and Musepack, Ogg Vorbis/Opus/Speex, MKA and audio-only WebM, WMA/ASF, DSD, tracker modules such as MOD/XM/IT/S3M/MPTM, and emulated game music such as NSF/VGM. All supported packages have the required plugins. You may need additional GStreamer plugins if you are building Rufin natively; after installing them, restart Rufin and Resync the local library to retry rejected files.

About

Native GTK4/libadwaita music client for Jellyfin, Navidrome/OpenSubsonic and local libraries written in Rust

Topics

Resources

Contributing

Security policy

Stars

73 stars

Watchers

3 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages