2026-03-19 15:21:22 -06:00
2026-03-11 12:53:13 -06:00
2026-03-11 12:53:13 -06:00
2026-01-08 22:35:34 -06:00
2026-01-08 22:35:34 -06:00

QBZ logo

GitHub repo Release AUR Snap Flathub License Platform

StandWithPalestine

QBZ

QBZ is a free and open source high-fidelity streaming client for Linux with native playback. It is a real desktop application — not a web wrapper — with DAC passthrough, per-track sample rate switching, exclusive mode, and bit-perfect audio delivery.

No API keys needed. No telemetry. No tracking. Just music.

  • This application uses the Qobuz API but is not certified by Qobuz.
  • Qobuz is a trademark of Qobuz. QBZ is not affiliated with, endorsed by, or certified by Qobuz.
  • Offline cache is a temporary playback store for listening without an internet connection while you have a valid subscription. If your subscription becomes invalid, QBZ will remove all cached content after 3 days.
  • Local library is a "bring your own music" feature — play your own files with bit-perfect audio and the full QBZ interface, no streaming subscription required.
  • Qobuz Terms of Service: https://www.qobuz.com/us-en/legal/terms

Why QBZ

Browsers cap audio output at 48 kHz and resample everything through WebAudio. QBZ uses a native playback pipeline with direct device control so your DAC receives the original resolution — up to 24-bit / 192 kHz — with no forced resampling.

Installation

Arch Linux (AUR)

yay -S qbz-bin    # or paru -S qbz-bin

Flatpak (Flathub)

flatpak install flathub com.blitzfc.qbz

Audiophiles: Flatpak sandboxing limits PipeWire bit-perfect. Use ALSA Direct backend for guaranteed bit-perfect in Flatpak, or install via native packages for full PipeWire support.

Snap

sudo snap install qbz-player
sudo snap connect qbz-player:alsa
sudo snap connect qbz-player:pipewire

APT Repository (Debian/Ubuntu/Mint)

curl -fsSL https://vicrodh.github.io/qbz-apt/qbz-archive-keyring.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/qbz-archive-keyring.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/qbz-archive-keyring.gpg arch=$(dpkg --print-architecture)] https://vicrodh.github.io/qbz-apt stable main" | sudo tee /etc/apt/sources.list.d/qbz.list
sudo apt update && sudo apt install qbz

Requires glibc 2.38+ (Ubuntu 24.04+, Debian 13+). For older releases use Flatpak, Snap, or AppImage.

RPM (Fedora/openSUSE)

Download from Releases: sudo dnf install ./qbz-*.rpm

Requires glibc 2.38+ (Fedora 39+, openSUSE Tumbleweed).

AppImage

Download from Releases: chmod +x QBZ.AppImage && ./QBZ.AppImage

Features

Audio and Playback

  • Bit-perfect playback with DAC passthrough and per-track sample rate switching (44.1–192 kHz)
  • Four audio backends: PipeWire, ALSA, ALSA Direct (hw: bypass), PulseAudio
  • HiFi Wizard — guided bit-perfect configuration with real DAC capability detection
  • Native decoding: FLAC, MP3, AAC, ALAC, WavPack, Ogg Vorbis, Opus (Symphonia)
  • Gapless playback on all backends
  • Loudness normalization (EBU R128) with ReplayGain support
  • Two-level audio cache with next-track prefetching
  • Streaming playback — start listening before download completes

Queue and Library

  • Queue with shuffle, repeat (track/queue/off), and history
  • Favorites and playlists from your Qobuz account
  • Qobuz playlist follow/unfollow — subscribe natively, syncs across all Qobuz clients
  • Local library — directory scanning, metadata extraction, CUE sheets, SQLite indexing
  • Tag editor with sidecar storage (preserves original files)
  • Virtualized lists for large libraries

Qobuz Connect

Multi-device playback control using Qobuz's real-time streaming protocol.

  • Renderer mode — receive playback commands from your phone, tablet, or web player
  • Controller mode — control remote devices from QBZ
  • Server-authoritative queue sync across all devices
  • Bidirectional transport: play, pause, skip, seek, shuffle, repeat, volume

Casting

  • Chromecast, DLNA/UPnP, and AirPlay discovery and streaming
  • Seamless playback handoff to network devices

Integrations

  • MPRIS media controls and media keys
  • Last.fm scrobbling and now-playing
  • ListenBrainz scrobbling with offline queue
  • MusicBrainz artist enrichment, musician credits, relationships (no telemetry — one-way pull)
  • Discogs artwork for local library
  • Playlist import from Spotify, Apple Music, Tidal, Deezer
  • Desktop notifications with artwork

Immersive Player

  • Full-screen player with tabbed panel system
  • 17+ visualization panels: spectrum, oscilloscope, spectrogram, Linebed (3D terrain), Laser, Tunnel, Comet, coverflow, and more
  • Synchronized lyrics with line-by-line display
  • Queue, track info, history, and suggestions panels

Discovery

  • Scene Discovery — explore artists by location and musical scene (MusicBrainz-powered)
  • 3-tab Home: customizable Home, Editor's Picks, personalized For You
  • Genre filtering, artist similarity engine, radio stations
  • Musician pages, label pages, album credits

Interface

  • 26+ themes (Dark, OLED, Nord, Dracula, Tokyo Night, Catppuccin, Breeze, Adwaita...)
  • Auto-theme from DE, wallpaper, or custom image
  • Focus mode, mini player, PDF booklet viewer
  • Configurable keyboard shortcuts, UI zoom 80–200%
  • 5 languages: English, Spanish, German, French, Portuguese
  • Offline mode with automatic reconnection

Tech Stack

Layer Technology
Desktop shell Rust + Tauri 2.0
Frontend SvelteKit + Svelte 5 (runes) + TypeScript + Vite
Audio decoding Symphonia (all codecs) via rodio 0.22
Audio backends PipeWire, ALSA (alsa-rs), ALSA Direct (hw:), PulseAudio
Networking reqwest (rustls-tls), axum (local API server)
Database rusqlite (bundled SQLite, WAL mode)
PDF MuPDF 0.6 (native rendering)
Desktop souvlaki (MPRIS), ashpd (XDG notifications), keyring
Casting rust_cast (Chromecast), rupnp (DLNA/UPnP), mdns-sd (AirPlay)
i18n svelte-i18n (5 locales)

Multi-Crate Architecture

crates/
  qbz-models/            Shared domain types
  qbz-audio/             Audio backends, loudness, device management
  qbz-player/            Playback engine, streaming, queue
  qbz-qobuz/             Qobuz API client and auth
  qbz-core/              Orchestrator (player + audio + API)
  qbz-library/           Local library scanning and metadata
  qbz-integrations/      Last.fm, ListenBrainz, MusicBrainz, Discogs
  qbz-cache/             L1 memory + L2 disk audio caching
  qbz-cast/              Chromecast, DLNA/UPnP, AirPlay
  qconnect-protocol/     Qobuz Connect protobuf wire format
  qconnect-core/         Queue and renderer domain models
  qconnect-app/          Application logic and concurrency
  qconnect-transport-ws/ WebSocket transport with qcloud framing

Building from Source

Prerequisites

  • Rust (latest stable), Node.js 20+, Linux with audio support

System Dependencies

Debian/Ubuntu:

sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libasound2-dev \
  libayatana-appindicator3-dev librsvg2-dev libssl-dev pkg-config

Fedora:

sudo dnf install webkit2gtk4.1-devel gtk3-devel alsa-lib-devel \
  libappindicator-gtk3-devel librsvg2-devel openssl-devel pkg-config

Arch Linux:

sudo pacman -S webkit2gtk-4.1 gtk3 alsa-lib libappindicator-gtk3 \
  librsvg openssl pkg-config

Build

git clone https://github.com/vicrodh/qbz.git && cd qbz
npm install
npm run tauri dev       # development
npm run tauri build     # production (DEB, RPM, AppImage)

API Proxy (for self-hosted builds)

Pre-built releases include a hosted API proxy for Last.fm, Discogs, Tidal, and Spotify integrations — no API keys needed.

If you build from source and want these integrations, you can either:

  1. Deploy your own proxy (recommended) — a Cloudflare Worker that securely holds API keys server-side:
git clone https://github.com/vicrodh/qbz-api-proxy.git
cd qbz-api-proxy
# Add your API keys to wrangler.toml or via `wrangler secret put`
wrangler deploy

Then set the proxy URL before building QBZ:

export QBZ_API_PROXY_URL="https://your-worker.your-account.workers.dev"
npm run tauri build
  1. Use direct API keys — set them in .env (see .env.example). Keys are embedded at compile time.

MusicBrainz and Spotify playlist import work without any API keys or proxy.

Environment Variables

Variable Effect
QBZ_HARDWARE_ACCEL=0 Disable GPU rendering (crash recovery)
QBZ_FORCE_X11=1 Use XWayland (NVIDIA Wayland issues)
QBZ_SOFTWARE_RENDER=1 Force Mesa llvmpipe (VMs)
QBZ_DISABLE_DMABUF=1 Disable DMA-BUF (Intel Arc EGL crashes)

If QBZ crashes on startup: qbz --reset-graphics

Known Issues

  • Hi-Res seeking — seeking in tracks >96kHz can take 10-20s (decoder must scan from start). Use prev/next for instant navigation.
  • ALSA Direct — exclusive access blocks other apps. Use DAC/amplifier physical volume control.
  • PipeWire bit-perfect in Flatpak — limited by sandbox. Use ALSA Direct or native packages.

Documentation

User guides, audio configuration, integrations, and troubleshooting: QBZ Wiki (work in progress).

Open Source

QBZ is MIT-licensed. No telemetry, no tracking, no hidden services. Built for Linux audio enthusiasts.

Contributing

Contributions welcome. Please read CONTRIBUTING.md before submitting issues or pull requests.

License

MIT

S
Description
No description provided
Readme MIT
74 MiB
0 Stars 1 Watchers 0 Forks
Languages
Rust 70.8%
QML 26.2%
Python 0.8%
Shell 0.7%
C++ 0.7%
Other 0.7%