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

  • Fast, powerful and modern user interface in GTK/libadwaita
  • First-class Jellyfin, Navidrome/OpenSubsonic integration; you can download tracks, or set up rules to automatically download tracks, use your remote server offline with downloaded tracks and edit metadata
  • First-class local music library integration; you can combine multiple folders for a single listening session, fully enjoy built-in music server benefits like activity/history with your local library and edit metadata for supported formats
  • Supports server-owned recommendation API for artists/tracks/albums/playlists/genres radios, so your plugins work
  • Optimized for quick startup and navigation, smooth full library browsing
  • Automatic metadata, artwork and lyrics caching
  • Synchronized lyrics, built-in lyrics finder, adjustable offset, Furigana/Romaji overlay, and karaoke support
  • Local library support with multiple folders and CUE support with separate playable tracks
  • Moods tab, with ability to create smart playlists based on moods/BPM metadata for Navidrome, Subsonic and local libraries
  • Built-in Last.fm, Libre.fm, and ListenBrainz integration that can store offline scrobbles and retry when network is available
  • Discord Rich Presence support
  • Gapless playback, crossfade, ReplayGain, equalizer presets and fullscreen player with visualizer
  • Ability to change audio devices with a simple button
  • Fully usable in all window sizes, adjustable sidebar sizes that also support saving 2 different presets based on window sizes
  • A different layout for smaller window sizes up to 450 x 400
  • Rich keyboard shortcut catalog, with navigation covered as well
  • Rich customization while preserving GTK menus
  • Smart playlists that support nested rules
  • System tray integration
  • Secure storage for all server credentials and API secrets
  • Simple private mode for pausing external activity
  • Path matching with your music server and local folders, you can play from your local files while keeping server reporting
  • Automatic updates for Windows and MacOS builds

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 43 and 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.8 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

For full codec coverage, enable RPM Fusion and install gstreamer1-plugins-ugly and gstreamer1-plugin-libav.

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

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:

For flatpak:

flatpak run --env=RUST_LOG=debug io.github.screwys.Rufin 2>&1

For native packages:

RUST_LOG=debug rufin

For development build:

just debug

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.

Translation credits

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

License

LICENSE

About

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

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages