tidalt is a Tidal music player for Linux that delivers bit-perfect, lossless audio directly to your DAC — no PipeWire, no PulseAudio, no resampling.
It is built on top of the Tidal API and can run in three ways:
- Interactive TUI — browse, search, and control playback from the terminal
- Daemon — headless background process, controlled via the TUI or any MPRIS2 client
- Client — lightweight TUI that forwards commands to a running daemon over D-Bus
All three modes share the same playback engine. The daemon holds exclusive access to the audio device only while a track is actually playing — releasing it on pause so other applications can use it freely.
Linux only. Requires a Tidal HiFi or HiFi Plus subscription.
Pre-built packages are available on the releases page.
The official Docker image is available at benehiko/tidalt — see docs/docker.md for usage.
sudo pacman -U tidalt-*.pkg.tar.zstsudo dpkg -i tidalt_*.deb
sudo apt-get install -fsudo dnf install tidalt-*.rpmAll packages (Arch, Debian, Fedora — amd64 and arm64) can be built locally with a single command using Docker Buildx bake:
# One-time: create a multi-platform builder
docker buildx create --use
# Build all packages (replace VERSION as needed)
docker buildx bake \
--file docker-bake.hcl \
--set "*.args.VERSION=3.0.0" \
--set "*.output=type=local,dest=dist"Artifacts land in dist/:
dist/
tidalt-3.0.0-1-x86_64.pkg.tar.zst # Arch
tidalt_3.0.0-1_amd64.deb # Debian / Ubuntu (amd64)
tidalt_3.0.0-1_arm64.deb # Debian / Ubuntu (arm64)
tidalt-3.0.0-1.fc43.x86_64.rpm # Fedora (amd64)
tidalt-3.0.0-1.fc43.aarch64.rpm # Fedora (arm64)
To build a single target: append debian, arch, or fedora to the command.
See docs/installation.md for building packages locally without Docker or installing from source.
Register the tidal:// URL handler so clicking "Open in desktop app" on
tidal.com opens the track directly in tidalt:
tidalt setupOptionally install tidalt as a systemd user service (starts at login, no terminal window):
tidalt setup --daemonOn first launch you will be prompted to log in via the Tidal OAuth2 device flow. Your session is saved to the system keychain (or an age-encrypted file at ~/.config/tidalt/secrets) and reused on subsequent runs.
- Browse favorites and Daily Mixes
- Search tracks by name or paste a Tidal track URL
- Song radio — load a playlist of similar tracks for any song
- Shuffle (Fisher-Yates pre-shuffle or random pick)
- Favorite / unfavorite tracks
- Bit-perfect FLAC playback via direct ALSA
hw:— bypasses PipeWire/PulseAudio entirely - Auto-negotiates the best PCM format your DAC supports
- Auto-advances through the queue; respects shuffle mode
- Seek forward/back 10 seconds with
←/→ - Volume control and output device selection, both persisted between sessions
- Session and playback position restored on next launch
- MPRIS2 registration — media keys and
playerctlwork without TUI focus - Daemon mode — run headless in the background, control via TUI client or playerctl
| Key | Action |
|---|---|
Tab |
Cycle tabs (My Music → Daily Mixes → Search) |
↑ / k |
Move cursor up |
↓ / j |
Move cursor down |
Enter |
Play selected track / load mix / confirm |
Space |
Pause / resume |
← |
Seek back 10 seconds |
→ |
Seek forward 10 seconds |
s |
Cycle shuffle mode (Off → Shuffle → Random) |
r |
Load radio playlist for selected track |
f |
Toggle favorite on selected track |
9 |
Volume down 5% |
0 |
Volume up 5% |
d |
Open output device selector |
Esc |
Close device selector |
q / Ctrl+C |
Quit |
Daemon mode required. These shortcuts only work when
tidaltis running as a background daemon (viatidalt setup --daemon/ systemd). A plaintidaltTUI session does not register a persistent MPRIS2 service, so media keys andplayerctlwill have no effect when the TUI is closed.
When the daemon is running, tidalt registers as an MPRIS2 media player so playback can be controlled from any MPRIS2 client — playerctl, KDE Connect, your desktop environment's media key handler — without a TUI open.
Many keyboards and desktop environments map dedicated media keys directly to MPRIS2:
| Key | Action |
|---|---|
fn + . |
Play / pause |
fn + , |
Previous track |
fn + / |
Next track |
These are handled by your desktop environment via MPRIS2 — tidalt does not implement any special key capture itself.
On keyboards without dedicated media keys, bind playerctl to custom shortcuts via your desktop environment:
| Shortcut | Action |
|---|---|
Alt+0 |
Previous track |
Alt+- |
Play / pause |
Alt+= |
Next track |
See docs/media-keys.md for full setup instructions.
Auto-detection scans /proc/asound/cards. Any ALSA-visible device can be selected manually with the d key.
| DAC | Auto-detected |
|---|---|
| Hidizs S9 Pro | Yes |
| Hidizs S9 Pro Plus ("Martha") | Yes |
| Focusrite Scarlett Solo | Yes |
| Any ALSA-visible device | Manual (d key) |
| What | Where |
|---|---|
| OAuth2 session | System keychain or ~/.config/tidalt/secrets (age-encrypted) |
| Volume & device preference | ~/.local/share/tidalt/tidal-cache.db |
| Track metadata cache | Same database |
