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.
- Sidebar navigation — a persistent left nav groups every section: Queue (with the hovered track's cover art), Playlists, Favorite Songs / Artists / Albums, Recently Played, Daily Mixes, Search, and Themes
- Contextual action sheet (
o) — from any track, open a popup of actions: play now, play next, add to queue, add to playlist, start radio, go to artist/album, favorite, copy link - Command palette (
:orCtrl+P) — fuzzy-run any action or jump to any section - Hybrid queue / playlist model — the queue is your live workspace; opening a saved playlist loads it and tracks its origin. The header shows
synced,edited — S save, orradio · unsaved — S save, andSsaves the queue as a new playlist. Edits never silently change a saved playlist - First-class favorites — browse favorite songs, artists, and albums as their own sections
- Grouped search — results are split into Songs / Artists / Albums; drill into an artist or album from any hit
- In-app theme picker — eight built-in color schemes (TIDALT, Catppuccin, Tokyo Night, Gruvbox, Nord, Rosé Pine, Dracula, Amber CRT) plus an "Auto — match terminal" option, with live preview as you move the cursor; the choice is persisted
- Artist view — browse an artist's full discography and play everything, their top tracks, or a single album
- Song radio — build a queue of similar tracks for any song
- Shuffle (Fisher-Yates pre-shuffle or random pick)
- 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
- 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
See docs/ui.md for a full tour of the interface.
The interface has two focus zones: the sidebar (section navigation) and the
main pane (the selected section's content). h / l move focus between them.
| Key | Action |
|---|---|
j / k (↓/↑) |
Move the cursor |
h / l |
Move focus between the sidebar and the main pane |
Enter |
Open the section / play the selected track / confirm |
o |
Open the contextual action sheet for the selected track |
: / Ctrl+P |
Open the command palette |
/ |
Jump to Search |
Space |
Pause / resume |
← / → |
Seek back / forward 10 seconds |
> / < |
Next / previous track |
s |
Cycle shuffle mode (Off → Shuffle → Random) |
r |
Start a radio queue from the selected track |
a |
Open the artist view for the selected track |
f |
Toggle favorite on the selected track |
S |
Save the current queue as a new playlist |
x |
Remove the selected track from the queue |
C |
Clear the queue |
t |
Cycle the color theme |
9 / 0 |
Volume down / up 5% |
c |
Copy the current track link to the clipboard |
d |
Open the output device selector |
Esc |
Close an overlay / back out of the artist view / refocus the sidebar |
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 |
