Skip to content

lullabyX/sone

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

543 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SONE

SONE

The native desktop client for TIDAL on Linux. Lossless streaming with bit-perfect ALSA output up to 24-bit/192kHz (MAX) — your DAC, not your browser's resampler.

License: GPL-3.0 Platform: Linux Built with Tauri 2

Download on Flathub

Important

Requires an active TIDAL subscription. Not affiliated with TIDAL.

sone_demo.mp4

SONE Linux TIDAL client — home page with lossless streaming library SONE now playing drawer — Hi-Res FLAC playback with synced lyrics SONE custom theme — native Linux music player with full color customization

The Vision

The Linux desktop app TIDAL never built.

SONE finally gives Linux users a first-class streaming client. It delivers the complete, fully-featured experience you expect with seamless library management and a sleek, familiar workflow—and then supercharges it.

We went beyond the basics with direct-to-DAC bit-perfect ALSA output, a resizable-adaptive floating miniplayer, custom themes, Discord Rich Presence, and multi-service scrobbling (Last.fm, Libre.fm, ListenBrainz)—all wrapped in a fast, native Linux app.

Table of Contents

Features

Audio

  • Lossless FLAC and MQA streaming up to Hi-Res (24-bit/192kHz) with automatic quality fallback
  • Bit-perfect output — no resampling, no dithering. Your DAC receives the unaltered decoded signal
  • Exclusive ALSA — bypasses PipeWire/PulseAudio entirely for direct hardware access
  • Smart DAC matching — automatically detects your hardware's supported formats and sample rates, picking the best fit
  • Volume normalization (ReplayGain) with automatic context switching between album and track gain
  • Autoplay — discovers and plays similar tracks when your queue ends

Interface

  • Custom themes — 12 presets and a full color picker for accent and background with both light/dark mode
  • Lyrics — synced lyrics display for supported tracks
  • Miniplayer — compact floating window with album art, playback controls, and resizable-adaptive layout
  • Full-screen player — maximized view with album art, lyrics option and auto-hiding controls
  • Queue persistence — picks up where you left off across restarts
  • MPRIS integration — media keys, shuffle, repeat, seek, and desktop widget support
  • Scrobbling — track your listening history on Last.fm, Libre.fm, and ListenBrainz with full ISRC and MusicBrainz metadata
  • Proxy support — route traffic through HTTP, HTTPS, or SOCKS5 proxies
  • Discord Rich Presence — show what you're listening to with album art, track info, and a direct TIDAL link
  • System tray with playback controls and minimize-to-tray
  • Keyboard shortcuts for all common actions with a built-in shortcut overlay

Library

  • Library management — browse and sort your playlists, albums, artists, and mixes with playlist folder support
  • Share — share tracks, albums, playlists, artists, and mixes with your friends via a direct TIDAL link
  • Deep links — open tidal:// URLs directly in SONE

Why SONE?

SONE is a lightweight, native alternative to the official TIDAL web player and Electron-based unofficial clients.

  • Full audio quality — browsers and Electron apps downsample audio to 48kHz before it leaves the application. SONE is native — it outputs at the source's original sample rate, up to 192kHz (TIDAL's max). Exclusive ALSA mode bypasses the system mixer entirely for bit-perfect output to your DAC.
  • Familiar interface — a modern UI inspired by the streaming apps you already use
  • Direct hardware access — GStreamer talks directly to your audio hardware. Lock your DAC to the exact source format, bypassing the system mixer
  • Lightweight — built with Tauri and Rust. Small binary, low memory footprint
  • Encrypted at rest — credentials, cache, and settings are encrypted with AES-256-GCM
  • No telemetry, no tracking — fully open source under GPL-3.0. Your listening data stays on your machine

Installation / Download

OS Packages

Pre-built packages for Ubuntu/Debian (.deb), Fedora (.rpm), openSUSE (.rpm), and Arch Linux (PKGBUILD) are available on the GitHub Releases page.

Download SONE .deb package for Debian and Ubuntu Download SONE .rpm package for Fedora Linux Download SONE .rpm package for openSUSE Linux Download SONE PKGBUILD for Arch Linux and Manjaro Install SONE from AUR (build from source) Install SONE from AUR (pre-built binary)

Flathub

SONE is also officially available on Flathub, making it easy to install on any Linux distribution. You can install it via your software center or by using the CLI:

Install the application

flatpak install flathub io.github.lullabyX.sone

Run the application

flatpak run io.github.lullabyX.sone
Download on Flathub

Building from source

Rust:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source "$HOME/.cargo/env"

Node.js 18+ (via nvm, fnm, or your preferred method)

System dependencies:

Ubuntu / Debian
sudo apt install -y \
    build-essential curl wget file patchelf \
    libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev libssl-dev \
    libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
    gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-libav \
    libsecret-1-dev

Optional (for exclusive ALSA output):

sudo apt install -y gstreamer1.0-alsa
Fedora
sudo dnf install -y \
    gcc gcc-c++ make curl wget file patchelf \
    webkit2gtk4.1-devel gtk3-devel libappindicator-gtk3-devel librsvg2-devel openssl-devel \
    gstreamer1-devel gstreamer1-plugins-base-devel \
    gstreamer1-plugins-base gstreamer1-plugins-good gstreamer1-plugins-bad-free gstreamer1-libav \
    libsecret-devel

Optional (for exclusive ALSA output):

sudo dnf install -y gstreamer1-plugins-base-tools
Arch Linux

AUR

SONE is available on the AUR in two variants:

  • sone — builds from source
  • sone-bin — pre-built binary, no compilation required

Install with your AUR helper:

yay -S sone       # build from source
# or
yay -S sone-bin   # pre-built binary

Manual Install

sudo pacman -S --needed \
    base-devel curl wget file patchelf \
    webkit2gtk-4.1 gtk3 libayatana-appindicator librsvg openssl \
    gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad gst-libav \
    libsecret

Optional (for exclusive ALSA output):

sudo pacman -S --needed gst-plugin-pipewire alsa-plugins

Build and run:

git clone https://github.com/lullabyX/sone.git
cd sone
npm install
npm run tauri dev          # Development mode
npm run tauri build        # Release build (produces .deb, .rpm, .AppImage)

Using build scripts:

Docker-based build scripts are provided in build-scripts/build/ to produce distro-specific packages in isolated environments. Requires Docker.

./build-scripts/build/all.sh              # Build all packages in parallel (deb, rpm, pacman)
./build-scripts/build/deb.sh              # Build .deb only (Ubuntu 22.04)
./build-scripts/build/rpm.sh              # Build .rpm only (Fedora)
./build-scripts/build/pacman.sh           # Build pacman package only (Arch)
./build-scripts/build/all.sh --omit rpm   # Build all except rpm

Output goes to dist/<format>/. Pass --no-cache to force a clean Docker build.

Usage

  1. Launch the app
  2. Click Get Login Code. You'll be automatically redirected to the official link.tidal.com to login and approve the code. Optionally, you can scan the QR Code to login via your mobile device.
  3. Your library loads automatically — browse and play!

Note

NVIDIA GPU users: If you see a blank window, rendering glitches, or a Wayland protocol error on launch, start the app with:

WEBKIT_DISABLE_COMPOSITING_MODE=1 sone
Troubleshooting

No sound? Make sure GStreamer plugins are installed — you need at minimum gstreamer1.0-plugins-base, gstreamer1.0-plugins-good, gstreamer1.0-plugins-bad, and gstreamer1.0-libav (or your distro's equivalents).

Playback errors in exclusive/bit-perfect mode? SONE automatically detects your DAC's supported formats and sample rates, but if playback still fails, your hardware may not support the source format at all. Try a lower quality tier or switch to normal output mode.

"Error 71 (Protocol error) dispatching to Wayland display" on launch? This is a known WebKitGTK/Wayland issue affecting Tauri apps on systems with NVIDIA GPUs (tauri-apps/tauri#10702). As a workaround, launch SONE with the DMA-BUF renderer disabled:

WEBKIT_DISABLE_DMABUF_RENDERER=1 sone

If you're using X11 or don't have an NVIDIA GPU but still see this error, try updating your WebKitGTK and graphics drivers to the latest versions.

Blank window or rendering glitches on NVIDIA? If the app launches but shows a blank/white window or has visual artifacts, try disabling WebKit's compositing mode:

WEBKIT_DISABLE_COMPOSITING_MODE=1 sone

This is a known issue with NVIDIA's proprietary drivers and WebKitGTK hardware acceleration.

FAQ

I'm getting a "Device busy" error in exclusive or bit-perfect mode

Your system's sound server (PulseAudio or PipeWire) or another application is already using the ALSA device. Exclusive and bit-perfect modes need direct hardware access — only one application can hold the device at a time.

To fix this, either close the other application using the device, or select a different output device in SONE's settings.

What is the difference between exclusive mode and bit-perfect mode?

Both bypass your system's sound server (PulseAudio/PipeWire) and write directly to the ALSA hardware device. The difference is in how much processing happens before audio reaches your DAC.

Exclusive mode locks the ALSA device so no other application can use it. Audio is converted to a fixed format (32-bit integer, stereo) while preserving the source's native sample rate — no resampling occurs. You still have software volume control and volume normalization (ReplayGain).

Bit-perfect mode goes a step further. There is zero processing — no format conversion, no resampling, no volume control. The decoded audio reaches your DAC exactly as it was encoded. The volume slider is locked at 100% and disabled. This is the mode to use if you want the purest signal path to your DAC.

In short: exclusive gives you direct hardware access with volume control. Bit-perfect gives you a completely unaltered signal.

Tech Stack

  • Backend: Rust (Tauri 2)
  • Frontend: React 19, Tailwind 4, Jotai
  • Audio: GStreamer
  • Config: ~/.config/sone/

Contributing

Issues and pull requests are welcome on GitHub. To set up a development environment, follow the Building from source instructions.

If you enjoy using SONE, consider giving the project a star to help others find it.

Disclaimer

SONE is an independent, community-driven project. It is not affiliated with, endorsed by, or connected to TIDAL in any way. All content is streamed directly from TIDAL's service and requires a valid paid subscription. SONE is a streaming client only — it does not support offline downloads, and does not redistribute or circumvent protection of any content. As with any third-party client, please be aware of TIDAL's terms of use.

All trademarks belong to their respective owners.

License

GPL-3.0-only


TL;DR — SONE is an open-source, native Linux desktop client for TIDAL built with Tauri 2 and Rust. It streams lossless FLAC and Hi-Res audio up to 24-bit/192kHz, with exclusive ALSA output that bypasses PulseAudio and PipeWire entirely for bit-perfect playback directly to your DAC. Lightweight, encrypted at rest, and fully offline — no telemetry, no tracking.

About

Native TIDAL desktop client for Linux. Modern UI, custom themes, and bit-perfect lossless audio up to 24-bit/192kHz via exclusive ALSA.

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

Contributors