Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Diegovsky/riff

Open more actions menu

Repository files navigation

Riff

A libadwaita/GTK4-based Spotify client

showcase

Download on Flathub

Enjoy listening to your favorite Spotify content with Riff: a libadwaita/GTK4-based Spotify client designed for GNOME!

Originally a fork of Spot, Riff continues development to bring the coolest Spotify client onto your desktop and mobile. Written in Rust and based on librespot.

If you have any feature suggestions or want to contribute to the project, feel free to leave an issue / pull request or join the discussion on our Discord server!

Note: AI contributions in any part are not welcome.

Installing

Note

Riff requires a premium account to work!

Riff is currently only available on Flathub. Install with the command below:

flatpak install flathub dev.diegovsky.Riff

Usage notes

Credentials

It is recommended to install a libsecret compliant keyring application, such as GNOME Keyring (aka seahorse). This will allow saving your password securely between launches.

In GNOME, things should work out of the box. It might be a bit trickier to get it working in other DEs: see this ArchWiki entry for detailed explanations on how to automatically start the daemon with your session.

Bear special attention to the fact that to enable automatic login, you might have to use the same password for your user account and for the keyring, and that the keyring might need to be set as default.

See this comment for more details!

Features

Only works with premium accounts!

  • playback control (play/pause, prev/next, seeking, shuffle, repeat (none, all, song))
  • selection mode: easily browse and select mutliple tracks to queue them
  • browse your saved albums and playlists
  • search albums and artists
  • view an artist's releases
  • view users' playlists
  • view album info
  • credentials management with Secret Service
  • MPRIS integration
  • playlist management (creation and edition)
  • liked tracks

Contributing

Contributions are welcome! If you wish, add yourself to the AUTHORS files when submitting your contribution.

For any large feature/change, please open an issue first to discuss implementation and design decisions.

Translating

Translations are managed using gettext and are available in the po/ subdirectory.

Please use POEditor to submit translations.

If you feel like it, you are welcome to open a PR to be added to the TRANSLATORS file!

Project structure

An overview of the directories and their responsibilities:

Directory Responsibility
src/ Rust source code and bundled UI assets.
src/api/ Spotify Web API layer.
src/app/ Core application logic and state.
src/app/state/ The centralized application state.
src/app/models/ Presentation models that bind state to the UI.
src/app/components/ Wrappers around GTK widgets.
src/auth/ Authentication: OAuth2 login flow and secure token storage.
src/audio_engine/ DSP pipeline between librespot and the audio backend (EQ, mono, pitch, mixing).
src/connect/ Spotify Connect support.
src/player/ Local playback and librespot session management.
src/dbus/ MPRIS / D-Bus integration.
data/ Application data installed on the system.
po/ Translations.
scripts/ Developer and tooling scripts.
flatpak/ Flatpak packaging.
doc/ Developer documentation.
subprojects/ Meson subproject wrap files.
.github/ GitHub configuration.

See doc/Design.md for a deeper explanation of the data flow and architecture.

Building

Dependencies

You can install the required development dependencies by running:

./scripts/setup-dev.sh

With GNOME Builder and flatpak

Pre-requisite: install the org.freedesktop.Sdk.Extension.rust-stable SDK extension with flatpak. Builder might do this for you automatically, but it will install an older version; make sure the version installed matches the version of the Freedesktop SDK GNOME uses.

Open the project in GNOME Builder and make the flatpak/dev.diegovsky.Riff.snapshots.json configuration active. Then build :)

Manually

You build and install with meson:

meson setup target -Dbuildtype=debug -Doffline=false --prefix="$HOME/.local"
ninja install -C target
# to run test/linter/etc
meson test -C target  --verbose

This will install a .desktop file among other things, and the riff executable will be put in .local/bin (you might want to add it to your path).

To build an optimized release build, use -Dbuildtype=release instead.

Regenerating potfiles

When adding new msgids, don't forget to regenerate/update the potfiles.

ninja riff-pot -C target
ninja riff-update-po -C target

Pulling updated strings from POEditor

We are now using POEditor and the wonderful poeditor-sync tool.

poeditor pull

Regenerating sources for flatpak

Using flatpak-cargo-generator.py:

ninja cargo-sources.json -C target

Debugging

Set the RUST_LOG env variable to the appropriate level.

Debug builds (flatpak) are available from the master branch on Github (see the riff-snaphots action).

Riff caches images and HTTP responses in ~/.cache/riff.

Ruff uses isahc, which uses libcurl, therefore you can set the https_proxy env variable to help with debugging. In debug mode, Riff skips SSL certificate verification.

About

Native Spotify client for the GNOME desktop.

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.