dergs/Tonearm
5
44
Fork
You've already forked Tonearm
10
Unofficial native GTK4 / Adwaita music streaming client for TIDAL https://dergs.dev/projects/tonearm
  • Go 99.2%
  • Nix 0.5%
  • SCSS 0.3%
NilaTheDragon b2b44aec61
All checks were successful
Flatpak / Build Flatpak (push) Successful in 5m11s
Migrate track-related calls to OpenAPI ( #277 )
Now that the OpenAPI has fixed their issue, and seemingly they are picking up development pace again, we can start moving more traffic to the OpenAPI again.
This affects album track listing (Which I tested works) as well as fetching track radios. With this legacy v1 is almost completely unused, mostly favourites-related code.
So yeah we can get rid of a lot of code in this PR + one less non-abstracted API call :D
Reviewed-on: #277
Reviewed-by: Dråfølin Nattfløyen <drafolin@noreply.codeberg.org>
2026年06月30日 11:42:21 +02:00
.forgejo Get rid of .codeberg folder and move images to .forgejo 2026年02月17日 18:01:16 +01:00
.zed Add TONEARM_DEBUG env var to tasks.json 2026年01月18日 17:31:51 +01:00
build Update Flatpak GNOME runtime-version to 50 ( #276 ) 2026年06月09日 11:54:17 +02:00
cmd/tonearm Migrate to Puregotk hosted on Codeberg ( #224 ) 2026年03月03日 11:10:53 +01:00
internal Migrate track-related calls to OpenAPI ( #277 ) 2026年06月30日 11:42:21 +02:00
pkg Migrate track-related calls to OpenAPI ( #277 ) 2026年06月30日 11:42:21 +02:00
.editorconfig add LastFM scrobbling ( #163 ) 2026年02月15日 00:55:51 +01:00
.envrc second commit 2025年12月22日 22:33:12 +01:00
.gitignore Make Tonearm compile in Gnome Builder ( #153 ) 2026年02月14日 16:04:43 +01:00
CONTRIBUTING.md Adopt GNOME coc 2026年01月24日 19:16:39 +01:00
dev.dergs.Tonearm.doap Uppercase "Tonearm" in app id 2026年01月15日 13:31:31 +01:00
flake.lock Fix nix flake 2026年02月15日 01:35:24 +01:00
flake.nix Prep for 1.4.2 release ( #275 ) 2026年06月07日 23:53:21 +02:00
go.mod Add support for macOS ( #252 ) 2026年04月25日 02:20:47 +02:00
go.sum Add support for macOS ( #252 ) 2026年04月25日 02:20:47 +02:00
LICENSE License GPL3 2025年12月23日 03:06:33 +01:00
README.md Migrate to Puregotk hosted on Codeberg ( #224 ) 2026年03月03日 11:10:53 +01:00

Logo

Tonearm

Forks Stargazers Issues License

Tonearm is an unofficial native GTK4 / Adwaita music streaming client for TIDAL
How to Install »

Features · Report Bug or Request Feature · Join the Matrix Room

Screenshot of the home page of Tonearm

Disclaimer

Tonearm is not affiliated with or endorsed by TIDAL. Tonearm is provided as-is without any warranty or guarantees. We explicitly do not offer and are not planning to offer any kind of offline playback functionality, Tonearm is not a downloader. A paid TIDAL account is required for full-length playback.

Features

  • Background Playback
    • Can be brought back to the front by MPRIS or by simply starting the app again
  • Configurable through dconf
  • Gapless Playback
  • MPRIS playback information and player controls
  • Position-aware Lyrics Viewer
    • Fallback to plain lyrics viewer if the song does not have timestamped lyrics
  • Scrobbling to ListenBrainz-compatible servers
  • Sign-in to your account via QR code / device linking code
    • Also works without signing in, with limited playback duration (Same as TIDAL web)
  • Supports playback of tracks in Max (AKA Master) quality
    • Currently, Tonearm will always play at the highest available quality
  • Works with "Open in TIDAL" links (E.g. tidal://my-collection)

About the Project

We set out to create a native, modern looking streaming client for TIDAL built with GTK4 and Libadwaita. We oriented a lot on existing GNOME apps (both official and third-party) to ensure the client really fits into the GNOME desktop and its applications, something web apps and electron apps often struggle with. We also try to keep the general spirit of TIDAL's UI so users can understand the app relatively quickly.

Tonearm came to existence as a learning project on how to implement GTK apps using GoLang, a rather unconventional choice. It was also an attempt at re-creating the look and feel of writing GUI applications in SwiftUI. This resulted in the development of the UI library schwifty which may be extracted into its own repository at some point.

The current design for Tonearm originally came to be when I tried myself on a re-design of High Tide. This is why the sidebar features a very similar player layout. The rest of the application has largely been designed after common GNOME app practices and the TIDAL web interface.

Installation

Currently the only tested installation method is the Nix flake provided in the repository. If you want to package this software for another distro or marketplace, please do open an issue so we can coordinate.

NixOS (Flake)

This assumes that your system configuration is already done using a system flake. First add this repository as an input to your flake.

inputs = {
 nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
 ... your other inputs ...
 tonearm = {
 url = "git+https://codeberg.org/dergs/Tonearm.git";
 inputs.nixpkgs.follows = "nixpkgs";
 };
}

then add this anywhere in your system configuration as you see fit

{ inputs, ... }:
{
 # System Packages
 environment.systemPackages = [
 inputs.tonearm.packages.${pkgs.stdenv.hostPlatform.system}.tonearm
 ];
 # Or if you prefer via Home Manager
 home.packages = [
 inputs.tonearm.packages.${pkgs.stdenv.hostPlatform.system}.tonearm
 ];
}

Arch Linux (AUR)

You will require an AUR helper, such as yay or paru.

This assumes you are using the yay helper. If using paru, adapt the commands accordingly.

yay -S tonearm

Translations

You can bring Tonearm to even more people by helping us translate it into their native language! To make this easier, Tonearm's translations can be edited on Codeberg's Weblate instance!

Screenshots

Explore Page Screenshot of the explore page
Search + Lyrics Screenshot of the search page and lyrics

Acknowledgements

The following projects and resources served as inspiration or were helpful during the development of Tonearm.

  • High Tide for the original design of the player in the sidebar
  • puregotk for making this project possible with only minimal CGO bindings
  • TIDAL for the overall page designs, which we adapted for GTK