{"id":37345327,"url":"https://github.com/vicrodh/qbz","last_synced_at":"2026-04-29T08:03:29.354Z","repository":{"id":331972344,"uuid":"1131146506","full_name":"vicrodh/qbz","owner":"vicrodh","description":"QBZ is a Qobuz native desktop player for Linux - No, it is not a wrapper for the webplayer. ","archived":false,"fork":false,"pushed_at":"2026-01-16T06:36:42.000Z","size":9459,"stargazers_count":20,"open_issues_count":7,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-16T13:43:28.350Z","etag":null,"topics":["linux","opensource","qobuz","qobuz-desktop-player","rust"],"latest_commit_sha":null,"homepage":"https://qbz.lol/","language":"Svelte","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vicrodh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-09T14:46:50.000Z","updated_at":"2026-01-16T10:22:39.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/vicrodh/qbz","commit_stats":null,"previous_names":["vicrodh/qbz"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/vicrodh/qbz","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vicrodh%2Fqbz","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vicrodh%2Fqbz/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vicrodh%2Fqbz/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vicrodh%2Fqbz/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vicrodh","download_url":"https://codeload.github.com/vicrodh/qbz/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vicrodh%2Fqbz/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28629216,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-21T04:47:28.174Z","status":"ssl_error","status_checked_at":"2026-01-21T04:47:22.943Z","response_time":86,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["linux","opensource","qobuz","qobuz-desktop-player","rust"],"created_at":"2026-01-16T03:57:17.015Z","updated_at":"2026-04-29T08:03:29.345Z","avatar_url":"https://github.com/vicrodh.png","language":"Svelte","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"static/logo.png\" alt=\"QBZ logo\" width=\"180\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/vicrodh/qbz\"\u003e\u003cimg src=\"https://img.shields.io/badge/github-vicrodh%2Fqbz-0b0b0b?style=flat-square\u0026logo=github\" alt=\"GitHub repo\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/vicrodh/qbz/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/vicrodh/qbz?style=flat-square\" alt=\"Release\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://aur.archlinux.org/packages/qbz-bin\"\u003e\u003cimg src=\"https://img.shields.io/aur/version/qbz-bin?style=flat-square\u0026logo=archlinux\" alt=\"AUR\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://snapcraft.io/qbz-player\"\u003e\u003cimg src=\"https://img.shields.io/badge/snap-qbz--player-0b0b0b?style=flat-square\u0026logo=snapcraft\" alt=\"Snap\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://flathub.org/apps/com.blitzfc.qbz\"\u003e\u003cimg src=\"https://img.shields.io/flathub/v/com.blitzfc.qbz?style=flat-square\u0026logo=flathub\" alt=\"Flathub\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/vicrodh/qbz\"\u003e\u003cimg src=\"https://img.shields.io/github/license/vicrodh/qbz?style=flat-square\" alt=\"License\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/vicrodh/qbz\"\u003e\u003cimg src=\"https://img.shields.io/badge/platform-Linux-0b0b0b?style=flat-square\u0026logo=linux\" alt=\"Platform\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/vicrodh/qbz\"\u003e\u003cimg src=\"https://img.shields.io/badge/macOS-experimental-0b0b0b?style=flat-square\u0026logo=apple\" alt=\"macOS (experimental)\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://techforpalestine.org/learn-more\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/Safouene1/support-palestine-banner/master/StandWithPalestine.svg\" alt=\"StandWithPalestine\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n# QBZ\n\nQBZ is a free and open source high-fidelity streaming client for Linux (with experimental macOS support) 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.\n\nNo API keys needed. No telemetry. No tracking. Just music.\n\n## Legal / Branding\n\n- This application uses the Qobuz API but is not certified by Qobuz.\n- Qobuz is a trademark of Qobuz. QBZ is not affiliated with, endorsed by, or certified by Qobuz.\n- **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.\n- **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.\n- Qobuz Terms of Service: https://www.qobuz.com/us-en/legal/terms\n\n## Why QBZ\n\nBrowsers 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.\n\n## Installation\n\n### Arch Linux (AUR)\n\n```bash\nyay -S qbz-bin    # or paru -S qbz-bin\n```\n\n### Flatpak (Flathub)\n\n```bash\nflatpak install flathub com.blitzfc.qbz\n```\n\n\u003e **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.\n\n### Snap\n\n```bash\nsudo snap install qbz-player\nsudo snap connect qbz-player:alsa\nsudo snap connect qbz-player:pipewire\n```\n\n\u003e **Note:** After installing, connect ALSA and PipeWire interfaces for full audio support. MPRIS media keys work out of the box.\n\n### APT Repository (Debian/Ubuntu/Mint)\n\n```bash\ncurl -fsSL https://vicrodh.github.io/qbz-apt/qbz-archive-keyring.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/qbz-archive-keyring.gpg \u003e /dev/null\necho \"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\nsudo apt update \u0026\u0026 sudo apt install qbz\n```\n\n\u003e Requires glibc 2.38+ (Ubuntu 24.04+, Debian 13+). For older releases use Flatpak, Snap, or AppImage.\n\n### RPM (Fedora/openSUSE)\n\nDownload from [Releases](https://github.com/vicrodh/qbz/releases): `sudo dnf install ./qbz-*.rpm`\n\n\u003e Requires glibc 2.38+ (Fedora 39+, openSUSE Tumbleweed).\n\n### Gentoo\n\n```bash\neselect repository add qbz-overlay git https://github.com/vicrodh/qbz-overlay.git\nemerge --sync qbz-overlay\nemerge media-sound/qbz-bin    # prebuilt binary\n# or\nemerge media-sound/qbz        # build from source\n```\n\n### NixOS / Nix\n\nAdd the flake input to your `flake.nix`:\n\n```nix\ninputs.qbz.url = \"github:vicrodh/qbz\";\n```\n\n**NixOS (system-wide):**\n\n```nix\n{pkgs, inputs, ...}:\n{\n  environment.systemPackages = [\n    inputs.qbz.packages.${pkgs.system}.default\n  ];\n}\n```\n\n**Home Manager:**\n\n```nix\n{pkgs, inputs, ...}:\n{\n  home.packages = [\n    inputs.qbz.packages.${pkgs.system}.default\n  ];\n}\n```\n\n\u003e QBZ is also available in [nixpkgs](https://github.com/NixOS/nixpkgs) as `qbz`.\n\n### AppImage\n\nDownload from [Releases](https://github.com/vicrodh/qbz/releases): `chmod +x QBZ.AppImage \u0026\u0026 ./QBZ.AppImage`\n\n### macOS (Experimental)\n\n\u003e **QBZ is a Linux-first application.** macOS support is experimental and limited. Features like PipeWire, ALSA Direct, casting, and device control are unavailable.\n\nDownload the unsigned DMG from [Releases](https://github.com/vicrodh/qbz/releases).\n\nSince the DMG is unsigned, you may need to allow it in System Settings \u003e Privacy \u0026 Security after first launch.\n\n## Features\n\n### Audio and Playback\n\n- **Bit-perfect playback** with DAC passthrough and per-track sample rate switching (44.1–192 kHz)\n- **Four audio backends:** PipeWire, ALSA, ALSA Direct (hw: bypass), PulseAudio\n- **HiFi Wizard** — guided bit-perfect configuration with real DAC capability detection\n- Native decoding: FLAC, MP3, AAC, ALAC, WavPack, Ogg Vorbis, Opus (Symphonia)\n- Gapless playback on all backends\n- **Loudness normalization** (EBU R128) with ReplayGain support\n- Two-level audio cache with next-track prefetching\n- Streaming playback — start listening before download completes\n\n### Queue and Library\n\n- Queue with shuffle, repeat (track/queue/off), and history\n- Favorites and playlists from your Qobuz account\n- **Qobuz playlist follow/unfollow** — subscribe natively, syncs across all Qobuz clients\n- **Local library** — directory scanning, metadata extraction, CUE sheets, SQLite indexing\n- Tag editor with sidecar storage (preserves original files)\n- Virtualized lists for large libraries\n\n### Qobuz Connect\n\nMulti-device playback control using Qobuz's real-time streaming protocol.\n\n- **Renderer mode** — receive playback commands from your phone, tablet, or web player\n- **Controller mode** — control remote devices from QBZ\n- Server-authoritative queue sync across all devices\n- Bidirectional transport: play, pause, skip, seek, shuffle, repeat, volume\n\n### Casting\n\n- **Chromecast** and **DLNA/UPnP** discovery and streaming\n- Seamless playback handoff to network devices\n\n### Integrations\n\n- **MPRIS** media controls and media keys\n- **Last.fm** scrobbling and now-playing\n- **ListenBrainz** scrobbling with offline queue\n- **MusicBrainz** artist enrichment, musician credits, relationships (no telemetry — one-way pull)\n- **Discogs** artwork for local library\n- Playlist import from Spotify, Apple Music, Tidal, Deezer\n- Desktop notifications with artwork\n\n### Immersive Player\n\n- Full-screen player with tabbed panel system\n- **17+ visualization panels:** spectrum, oscilloscope, spectrogram, Linebed (3D terrain), Laser, Tunnel, Comet, coverflow, and more\n- Synchronized lyrics with line-by-line display\n- Queue, track info, history, and suggestions panels\n\n### Discovery\n\n- **Scene Discovery** — explore artists by location and musical scene (MusicBrainz-powered)\n- **3-tab Home:** customizable Home, Editor's Picks, personalized For You\n- Genre filtering, artist similarity engine, radio stations\n- Musician pages, label pages, album credits\n\n### Interface\n\n- 26+ themes (Dark, OLED, Nord, Dracula, Tokyo Night, Catppuccin, Breeze, Adwaita...)\n- Auto-theme from DE, wallpaper, or custom image\n- Focus mode, mini player, PDF booklet viewer\n- Configurable keyboard shortcuts, UI zoom 80–200%\n- **5 languages:** English, Spanish, German, French, Portuguese\n- Offline mode with automatic reconnection\n\n## Tech Stack\n\n| Layer | Technology |\n|-------|-----------|\n| **Desktop shell** | Rust + Tauri 2.0 |\n| **Frontend** | SvelteKit + Svelte 5 (runes) + TypeScript + Vite |\n| **Audio decoding** | Symphonia (all codecs) via rodio 0.22 |\n| **Audio backends** | PipeWire, ALSA (alsa-rs), ALSA Direct (hw:), PulseAudio |\n| **Networking** | reqwest (rustls-tls), axum (local API server) |\n| **Database** | rusqlite (bundled SQLite, WAL mode) |\n| **PDF** | MuPDF 0.6 (native rendering) |\n| **Desktop** | souvlaki (MPRIS), ashpd (XDG notifications), keyring |\n| **Casting** | rust_cast (Chromecast), rupnp (DLNA/UPnP), mdns-sd |\n| **i18n** | svelte-i18n (5 locales) |\n\n### Multi-Crate Architecture\n\n```\ncrates/\n  qbz-models/            Shared domain types\n  qbz-audio/             Audio backends, loudness, device management\n  qbz-player/            Playback engine, streaming, queue\n  qbz-qobuz/             Qobuz API client and auth\n  qbz-core/              Orchestrator (player + audio + API)\n  qbz-library/           Local library scanning and metadata\n  qbz-integrations/      Last.fm, ListenBrainz, MusicBrainz, Discogs\n  qbz-cache/             L1 memory + L2 disk audio caching\n  qbz-cast/              Chromecast, DLNA/UPnP\n  qconnect-protocol/     Qobuz Connect protobuf wire format\n  qconnect-core/         Queue and renderer domain models\n  qconnect-app/          Application logic and concurrency\n  qconnect-transport-ws/ WebSocket transport with qcloud framing\n```\n\n## Building from Source\n\n### Prerequisites\n\n- Rust (latest stable), Node.js 20+, Linux or macOS with audio support\n\n### System Dependencies\n\n**Debian/Ubuntu:**\n```bash\nsudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libasound2-dev \\\n  libayatana-appindicator3-dev librsvg2-dev libssl-dev pkg-config\n```\n\n**Fedora:**\n```bash\nsudo dnf install webkit2gtk4.1-devel gtk3-devel alsa-lib-devel \\\n  libappindicator-gtk3-devel librsvg2-devel openssl-devel pkg-config\n```\n\n**Arch Linux:**\n```bash\nsudo pacman -S webkit2gtk-4.1 gtk3 alsa-lib libappindicator-gtk3 \\\n  librsvg openssl pkg-config\n```\n\n**Gentoo:**\n```bash\nsudo emerge net-libs/webkit-gtk:4.1 x11-libs/gtk+:3 media-libs/alsa-lib \\\n  dev-libs/libayatana-appindicator gnome-base/librsvg dev-libs/openssl virtual/pkgconfig\n```\n\n### Build\n\n```bash\ngit clone https://github.com/vicrodh/qbz.git \u0026\u0026 cd qbz\nnpm install\nnpm run tauri dev       # development\nnpm run tauri build     # production (DEB, RPM, AppImage)\n```\n\n### API Proxy\n\nLast.fm, Discogs, Tidal, Spotify-import, and MusicBrainz traffic goes through a hosted Cloudflare Workers proxy (`qbz-api-proxy.blitzkriegfc.workers.dev`) that holds all credentials server-side. Both pre-built releases and source builds use it out of the box — **no API keys or `.env` file required**.\n\nIf you want to run against your own proxy (for development, or if you fork QBZ), the proxy source lives at [`vicrodh/qbz-api-proxy`](https://github.com/vicrodh/qbz-api-proxy). Deploy it with `wrangler deploy` and then edit the `*_PROXY_URL` constants in `src-tauri/src/lastfm/mod.rs`, `discogs/mod.rs`, `playlist_import/providers/tidal.rs`, and `musicbrainz/client.rs` to point at your worker before rebuilding.\n\n### Environment Variables\n\n| Variable | Effect |\n|----------|--------|\n| `QBZ_HARDWARE_ACCEL=0` | Disable GPU rendering (crash recovery) |\n| `QBZ_FORCE_X11=1` | Use XWayland (NVIDIA Wayland issues) |\n| `QBZ_SOFTWARE_RENDER=1` | Force Mesa llvmpipe (VMs) |\n| `QBZ_DISABLE_DMABUF=1` | Disable DMA-BUF (Intel Arc EGL crashes) |\n\nIf QBZ crashes on startup: `qbz --reset-graphics`\n\n## Known Issues\n\n- **Hi-Res seeking** — seeking in tracks \u003e96kHz can take 10-20s (decoder must scan from start). Use prev/next for instant navigation.\n- **ALSA Direct** — exclusive access blocks other apps. Use DAC/amplifier physical volume control.\n- **PipeWire bit-perfect in Flatpak** — limited by sandbox. Use ALSA Direct or native packages.\n\n## Documentation\n\nUser guides, audio configuration, integrations, and troubleshooting: **[QBZ Wiki](https://github.com/vicrodh/qbz/wiki)** (work in progress).\n\n\n## Diagram\n\n```mermaid\nflowchart TD\n\nsubgraph group_frontend[\"Frontend\"]\n  node_ui_shell[\"Svelte UI\u003cbr/\u003esveltekit app\"]\n  node_ui_state[\"Stores \u0026 Services\u003cbr/\u003eui orchestration\"]\n  node_ui_views[\"Views\u003cbr/\u003escreen layer\"]\n  node_ui_remote[\"Remote Runtime\u003cbr/\u003eqconnect client\u003cbr/\u003e[qconnectRuntime.ts]\"]\nend\n\nsubgraph group_tauri[\"Desktop App\"]\n  node_tauri_backend[\"Tauri Backend\u003cbr/\u003enative backend\"]\n  node_cmd_v2[\"Commands v2\u003cbr/\u003ebackend api\"]\n  node_cmd_legacy[\"Legacy Commands\u003cbr/\u003ecompat api\"]\n  node_app_audio[\"App Audio\u003cbr/\u003ebackend audio\"]\n  node_app_player[\"App Player\u003cbr/\u003eplayback engine\"]\n  node_app_library[\"App Library\u003cbr/\u003elibrary service\"]\n  node_app_cache[\"Offline Cache\u003cbr/\u003elocal cache\"]\n  node_app_cast[\"Casting\u003cbr/\u003edevice handoff\"]\n  node_app_connect[\"Qconnect Service\u003cbr/\u003eremote control bridge\"]\nend\n\nsubgraph group_crates[\"Rust Crates\"]\n  node_rust_player[\"qbz-player\u003cbr/\u003eplayback core\"]\n  node_rust_audio[\"qbz-audio\u003cbr/\u003eaudio backend\"]\n  node_rust_cache[\"qbz-cache\u003cbr/\u003eaudio cache\"]\n  node_rust_qobuz[\"qbz-qobuz\u003cbr/\u003eapi client\"]\n  node_rust_library[\"qbz-library\u003cbr/\u003elibrary index\"]\n  node_rust_cast[\"qbz-cast\u003cbr/\u003ecast stack\"]\n  node_rust_connect[\"qconnect stack\u003cbr/\u003eprotocol stack\"]\n  node_rust_integrations[\"qbz-integrations\u003cbr/\u003eexternal services\"]\nend\n\nsubgraph group_service[\"Daemon\"]\n  node_daemon[\"qbzd\u003cbr/\u003elocal daemon\"]\nend\n\nsubgraph group_packaging[\"Packaging\"]\n  node_packaging_ci[\"Packaging \u0026 CI\u003cbr/\u003erelease automation\u003cbr/\u003e[workflows]\"]\nend\n\nnode_ui_shell --\u003e|\"uses\"| node_ui_state\nnode_ui_shell --\u003e|\"renders\"| node_ui_views\nnode_ui_state --\u003e|\"calls\"| node_cmd_v2\nnode_ui_state --\u003e|\"syncs\"| node_ui_remote\nnode_ui_remote --\u003e|\"bridges\"| node_app_connect\nnode_tauri_backend --\u003e|\"exposes\"| node_cmd_v2\nnode_tauri_backend -.-\u003e|\"keeps\"| node_cmd_legacy\nnode_cmd_v2 --\u003e|\"drives\"| node_app_player\nnode_cmd_v2 --\u003e|\"queries\"| node_app_library\nnode_cmd_v2 --\u003e|\"reads/writes\"| node_app_cache\nnode_cmd_v2 --\u003e|\"controls\"| node_app_cast\nnode_cmd_v2 --\u003e|\"syncs\"| node_rust_integrations\nnode_app_player --\u003e|\"uses\"| node_rust_player\nnode_app_audio --\u003e|\"uses\"| node_rust_audio\nnode_app_player --\u003e|\"prefetches\"| node_rust_cache\nnode_app_library --\u003e|\"indexes\"| node_rust_library\nnode_app_library --\u003e|\"enriches\"| node_rust_qobuz\nnode_app_cast --\u003e|\"delegates\"| node_rust_cast\nnode_app_connect --\u003e|\"implements\"| node_rust_connect\nnode_daemon --\u003e|\"coordinates\"| node_app_player\nnode_daemon --\u003e|\"serves\"| node_app_library\nnode_daemon --\u003e|\"hosts\"| node_app_connect\nnode_packaging_ci -.-\u003e|\"builds\"| node_tauri_backend\nnode_packaging_ci -.-\u003e|\"packages\"| node_daemon\nnode_packaging_ci -.-\u003e|\"bundles\"| node_ui_shell\n\nclick node_ui_shell \"https://github.com/vicrodh/qbz/tree/main/src\"\nclick node_ui_state \"https://github.com/vicrodh/qbz/tree/main/src/lib/stores\"\nclick node_ui_views \"https://github.com/vicrodh/qbz/tree/main/src/lib/components/views\"\nclick node_ui_remote \"https://github.com/vicrodh/qbz/blob/main/src/lib/services/qconnectRuntime.ts\"\nclick node_tauri_backend \"https://github.com/vicrodh/qbz/tree/main/src-tauri/src\"\nclick node_cmd_v2 \"https://github.com/vicrodh/qbz/tree/main/src-tauri/src/commands_v2\"\nclick node_cmd_legacy \"https://github.com/vicrodh/qbz/tree/main/src-tauri/src/commands\"\nclick node_app_audio \"https://github.com/vicrodh/qbz/tree/main/src-tauri/src/audio\"\nclick node_app_player \"https://github.com/vicrodh/qbz/tree/main/src-tauri/src/player\"\nclick node_app_library \"https://github.com/vicrodh/qbz/tree/main/src-tauri/src/library\"\nclick node_app_cache \"https://github.com/vicrodh/qbz/tree/main/src-tauri/src/offline_cache\"\nclick node_app_cast \"https://github.com/vicrodh/qbz/tree/main/src-tauri/src/cast\"\nclick node_app_connect \"https://github.com/vicrodh/qbz/blob/main/src-tauri/src/qconnect_service.rs\"\nclick node_rust_player \"https://github.com/vicrodh/qbz/tree/main/crates/qbz-player/src\"\nclick node_rust_audio \"https://github.com/vicrodh/qbz/tree/main/crates/qbz-audio/src\"\nclick node_rust_cache \"https://github.com/vicrodh/qbz/tree/main/crates/qbz-cache/src\"\nclick node_rust_qobuz \"https://github.com/vicrodh/qbz/tree/main/crates/qbz-qobuz/src\"\nclick node_rust_library \"https://github.com/vicrodh/qbz/tree/main/crates/qbz-library/src\"\nclick node_rust_cast \"https://github.com/vicrodh/qbz/tree/main/crates/qbz-cast/src\"\nclick node_rust_connect \"https://github.com/vicrodh/qbz/tree/main/crates/qconnect-protocol/src\"\nclick node_rust_integrations \"https://github.com/vicrodh/qbz/tree/main/crates/qbz-integrations/src\"\nclick node_daemon \"https://github.com/vicrodh/qbz/tree/main/crates/qbzd/src\"\nclick node_packaging_ci \"https://github.com/vicrodh/qbz/blob/main/.github/workflows\"\n\nclassDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a\nclassDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554\nclassDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f\nclassDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d\nclassDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337\nclassDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81\nclassDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a\nclass node_ui_shell,node_ui_state,node_ui_views,node_ui_remote toneBlue\nclass node_tauri_backend,node_cmd_v2,node_cmd_legacy,node_app_audio,node_app_player,node_app_library,node_app_cache,node_app_cast,node_app_connect toneAmber\nclass node_rust_player,node_rust_audio,node_rust_cache,node_rust_qobuz,node_rust_library,node_rust_cast,node_rust_connect,node_rust_integrations toneMint\nclass node_daemon toneRose\nclass node_packaging_ci toneIndigo\n```\n\n## Open Source\n\nQBZ is MIT-licensed. No telemetry, no tracking, no hidden services. Built for Linux audio enthusiasts, with experimental macOS support.\n\n## Contributing\n\nContributions welcome. Please read `CONTRIBUTING.md` before submitting issues or pull requests.\n\n### Contributors\n\n- [@vorce](https://github.com/vorce)\n- [@boxdot](https://github.com/boxdot)\n- [@arminfelder](https://github.com/arminfelder)\n- [@afonsojramos](https://github.com/afonsojramos) — macOS port\n- [@GwendalBeaumont](https://github.com/GwendalBeaumont) — i18n\n- [@AdamArstall](https://github.com/AdamArstall)\n\n## License\n\nMIT\n\n## Fancy charts\n\n\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/chart?repos=vicrodh/qbz\u0026type=date\u0026theme=dark\u0026legend=top-left\" /\u003e\n  \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/chart?repos=vicrodh/qbz\u0026type=date\u0026legend=top-left\" /\u003e\n  \u003cimg alt=\"Star History Chart\" src=\"https://api.star-history.com/chart?repos=vicrodh/qbz\u0026type=date\u0026legend=top-left\" /\u003e\n\u003c/picture\u003e\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvicrodh%2Fqbz","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvicrodh%2Fqbz","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvicrodh%2Fqbz/lists"}