Aligns the README with the wiki and website: QBZ exists to give Linux users the
Qobuz client they deserve, and is explicitly not a web wrapper and not a
download tool. Keeps the technical native-pipeline explanation below it.
Promote the headless daemon to its own section with a screenshot and the
wiki link, add a Kiosk Mode section for Raspberry screens and handheld
consoles, remove the mermaid architecture diagram and the star-history
chart.
cc
Verified empirically against the pre-flight artifact (objdump shows
GLIBC_2.39 as the highest versioned symbol — the ubuntu-24.04 runner's
libc). Fedora needs 40+ accordingly; the Ubuntu/Debian guidance was
already right.
cc
Recent macOS (Sequoia+) dropped the right-click Open bypass for
un-notarized apps, so the section now walks both unlock paths: the
Privacy & Security 'Open Anyway' route and the xattr quarantine
removal command, with a plain explanation of what each does.
cc
Documents the Slint memory wall properly: the per-knob guard table,
a CI-proven low-RAM recipe for machines under 32 GB, the auto-tiering
scripts/slint-run.sh (FAST/SAFE/MIN) and the two development loops
(release-perf slint-dev.sh vs fast-debug slint-dev-fast.sh, plus the
macOS counterpart). Fixes the toolchain claim (scripts need nightly
for -Z threads; plain stable cargo build works), adds macOS build
prerequisites, and records the DSD direct-mode seek/volume limitation
under known issues.
cc
qbzd was a premature daemon experiment that never shipped (gated off
behind QBZD_ENABLED, no user access). Its ratatui 0.29 dependency pinned
unicode-width =0.2.0, which conflicts with slint's annotate-snippets in a
shared workspace. Remove it entirely; it will be reimplemented from
scratch later on the clean, UI-agnostic shell.
- Delete crates/qbzd daemon crate + workspace member (drops ratatui,
crossterm and the other qbzd-only deps from the lock).
- Delete src-tauri qbzd_discovery (mDNS) + its commands/state wiring in
lib.rs; drop the direct mdns-sd dep (Chromecast keeps its own via
qbz-cast).
- Delete remoteApi/remoteEvents/playbackTargetStore; neutralize
commandRouter to local-only dispatch (isRemote/skipIfRemote are now
always-false no-ops so the ~100 guard call-sites keep compiling).
- Strip qbzd branches from playbackService and the remote banner from
NowPlayingBar; excise qbzd from CastPicker (Chromecast/DLNA kept).
- Remove qbzd i18n keys (5 locales), README daemon node, gitignore note.
cargo check (crates + src-tauri) and svelte-check all green.
cc
Version bumped across Cargo.toml, tauri.conf.json, package.json, snapcraft.yaml (version + source-tag), flake.nix, and the lockfiles. metainfo.xml gains a 1.2.13 release entry, the About modal codename becomes "400+ stars", and the README contributors list adds @Vudgekek and @DoubleGate.
cc
.env.example is now a placeholder pointing to the hosted Cloudflare
Workers proxy. README updates the API Proxy section accordingly and
.gitignore adds CLAUDE.md and AGENTS.md.
cc
AirPlay was scaffolded in both crates/qbz-cast/src/airplay and
src-tauri/src/cast/airplay but never worked at runtime: the RAOP
sender required an Apple MFi-licensed stack with no free/open
alternative, and the backend state was already disabled via the
commented `.manage(airplay_state)` line in src-tauri/src/lib.rs.
The CastPicker UI already hid the AirPlay tab pending streaming
support that was never going to ship.
Delete:
- crates/qbz-cast/src/airplay/ (entire directory)
- src-tauri/src/cast/airplay/ (entire directory)
- 10x v2_airplay_* commands from commands_v2/library.rs + their
tauri::generate_handler entries
- AirPlayError from qbz-cast errors
- 'airplay' from CastProtocol + every case arm in castStore.ts,
CastPicker.svelte, AudioOutputBadges.svelte
- Corresponding i18n keys if present
Zero behavior change for Chromecast / DLNA / QConnect / MPRIS. If
AirPlay ever becomes feasible we'll revisit from scratch with a
real streaming backend.
cc
Major rewrite reflecting current state of the project:
- Qobuz Connect as headline feature
- No API keys needed (proxy-based architecture)
- API proxy self-hosting instructions for source builds
- Updated tech stack (rodio 0.22, MuPDF 0.6, ashpd, 5 locales)
- 13 crates including 4 QConnect crates
- Removed outdated sections (KWin title bar, vendored rodio, data migration)
- Streamlined installation and known issues
cc
Remove Spotify API credential setup from README since playlist import
now uses embed scraping. Update resolve_via_odesli_and_search doc
comment to reflect the new Spotify data path.
- Add Flathub badge and install command to README
- Rename Flatpak section to include both Flathub and GitHub Release
- Remove mpris from snap connect instructions (interface not available)
- Apply Flathub quality guidelines: developer id block, drop categories/keywords
- Expand feature list: local library, Plex, immersive/miniplayer modes,
artist blacklist, ListenBrainz, smart cache, customization
Major updates:
- Replace outdated 1.1.8 highlights with comprehensive feature list
- Add all 4 audio backends, loudness normalization, cache sizes
- Document immersive player with 14 visualization panels
- Add 26 themes, auto-theme, native KDE title bar
- Document multi-crate architecture and all 9 crates
- Add system dependencies per distro (Debian, Fedora, Arch)
- Update project structure to reflect current codebase
- Add 4-language i18n, custom artist images, recommendations
- Update tech stack table with all major dependencies
- Remove stale "Coming soon" screenshots placeholder
Ubuntu 24.04 build target (required for Snap Store) means native
packages need glibc 2.38+. Older distros should use Flatpak, Snap,
or AppImage instead.
Resets all graphics/composition settings to defaults:
- force_x11: false
- gdk_scale: auto
- gdk_dpi_scale: auto
- force_dmabuf: false
Use when QBZ crashes on startup due to bad graphics config.
cc
Add comprehensive Flatpak section with:
- Warning about PipeWire bit-perfect limitations in sandbox
- Instructions for ALSA Direct workaround
- NAS/network storage access commands (flatpak override)
- Note in Audio Backends section about Flatpak restrictions
This helps users make informed installation choices before downloading.
Documents known limitations discovered during ALSA Direct testing:
1. Seekbar Performance with Hi-Res Audio
- 10-20s delay when seeking with >96kHz sample rates
- Root cause: decoder must decode all samples from start to seek position
- Workaround: Use prev/next track buttons (instant)
- Future: Byte-level seeking planned for next release
2. First Sample Rate Change
- Brief delay on first large rate change (e.g., 88.2→44.1 kHz)
- Hardware stabilization time - normal behavior
- Subsequent changes are smooth
3. ALSA Direct Mode
- Bit-perfect but exclusive access (blocks other apps)
- Hardware volume control experimental
- Some DACs don't support hardware mixer
4. PipeWire DAC Passthrough
- Requires PipeWire configuration for rate switching
- Link to documentation
This section helps users understand limitations and workarounds, setting
proper expectations for bit-perfect audio modes.
- Remove separate DEV_API_KEYS.md file
- Add compile-time env var explanation in README
- Document npm run dev:tauri command usage
- Explain why .env must be sourced before build
cp