A native desktop TIDAL client written in Rust, bundling the TidaLuna client mod.
Windows · Linux · macOS · NixOS
- TidaLuna ships built in
- Lighter and smoother
- TIDAL Connect receiver (Windows, Linux, macOS)
- Audio cache system
- ASIO output on Windows
- OS volume sync on Windows
- System media controls integration
- In-app updater
- More to come
- Exclusive ALSA output on Linux
- Crossfade
- Cache settings
Every build is on GitHub Releases.
| Platform | Formats |
|---|---|
| Windows | .exe installer (per-user, no admin prompt), portable .zip |
| Linux | .deb (amd64, arm64), portable .tar.gz |
| macOS | .zip (Apple Silicon, Intel) |
| NixOS | flake |
- Linux:
sudo apt install ./tidalunar_<version>_amd64.deb, or unpack the.tar.gzand run./tidalunar. - macOS: unsigned, so right-click > Open on first launch. No in-app updater; re-download to update.
- NixOS:
nix profile install github:Brskt/TidaLuna, ornix run github:Brskt/TidaLuna.
Something not working? Come ask on the TidaLuna Discord.
- Rust (edition 2024, rustc >= 1.96)
- Bun
- CMake
- Ninja
sudo apt-get update
sudo apt-get install -y \
build-essential \
pkg-config \
libasound2-dev \
libdbus-1-dev \
libx11-dev \
libglib2.0-dev \
libgdk-pixbuf-2.0-dev \
cmake \
ninja-build- Visual Studio Build Tools (Desktop development with C++)
- Ninja (
choco install ninja)
- Xcode Command Line Tools
- CMake and Ninja (
brew install cmake ninja)
Dev build:
cargo xtask bundleRelease build (optimized, strips debug symbols from CEF binaries):
cargo xtask bundle --releaseThe bundle is created in dist/ with the executable, CEF files, and Bun runtime.
build.rs rebuilds the frontend (bun esbuild.config.ts) automatically on Linux and macOS. On Windows it reuses an existing frontend/dist/bundle.js, so after editing frontend/src, frontend/render, or frontend/plugins, run bun esbuild.config.ts from frontend/ before cargo xtask bundle.
CEF's Rust bindings (cef-dll-sys) are large and recompile whenever the build
fingerprint changes (switching between bundle and clippy, dev vs --release,
or WSL vs Windows). sccache caches the
compiler output so they build once and are reused:
cargo install sccache
export RUSTC_WRAPPER=sccache # add to your shell profile to persist
export CARGO_INCREMENTAL=0 # lets sccache cache the workspace crate toocargo fmt
cargo xtask clippyLogs are controlled by LOGS (default: 0):
LOGS=0- No logsLOGS=1- General logs (IPC, player, plugins, media controls, TIDAL Connect, updater)LOGS=2- + Streaming details (governor state changes, range restarts, TTFB)LOGS=3- + Streaming verbose (chunk progress, governor periodic stats)
The in-app Settings toggle can raise the level too; LOGS acts as a floor over the saved value.
Linux/macOS:
LOGS=1 ./dist/tidalunarWindows CMD:
set "LOGS=1" && dist\tidalunar.exe- Linux:
~/.local/share/tidalunar - Windows:
%LOCALAPPDATA%\tidalunar - macOS:
~/.local/share/tidalunar
TIDAL is a trademark of its respective owner. TidaLunar is an unofficial client, not affiliated with or endorsed by TIDAL.
