Files
qbz/crates/Cargo.toml
T
vicrodh f9713591fe chore: bump version to 2.0.2
Workspace version 2.0.1 -> 2.0.2 (Cargo.toml + lock, workspace crates only —
no dependency re-resolution), a new metainfo <release> entry, and the release
docs: TAG_DETAILS.md (human-facing, About-modal/website format, 2.0.2 section
prepended above 2.0.1/2.0.0) + CHANGELOG.md (full detail since v2.0.1 — the
headless daemon, kiosk mode, dynamic background, cast/quality #638, audio,
rendering #617, library, themes and security work). Codename inherited on the
patch line; About-modal literal untouched.

cc
2026-07-20 19:49:09 -06:00

150 lines
5.5 KiB
TOML

[workspace]
resolver = "2"
members = [
"qbz-app",
"qbz-theme",
"qbz-models",
"qbz-audio",
"qbz-player",
"qbz-qobuz",
"qbz-radio",
"qbz-core",
"qbz-integrations",
"qbz-cache",
"qbz-library",
"qbz-cast",
"qbz-cmaf",
"qbz-dsd",
"qbz-secrets",
"qbz-offline-cache",
"qbz-plex",
"qconnect-core",
"qconnect-protocol",
"qconnect-transport-ws",
"qconnect-app",
"qbz-ui",
"qbz-dac-wizard",
"qbz-text-utils",
"qbz-slint-common",
"qbz",
"qbz-credentials",
"qbz-media-controls",
"qbz-mixtape",
"qbz-playlist-import",
"qbz-lyrics",
"qbz-i18n",
"qbz-music-link",
"qbz-reco",
"qbz-external-reco",
"qbz-log",
"qbzd",
]
[workspace.package]
version = "2.0.2"
edition = "2021"
license = "MIT"
repository = "https://github.com/vicrodh/qbz"
[workspace.dependencies]
# Async runtime
tokio = { version = "1", features = ["full"] }
async-trait = "0.1"
futures-util = "0.3"
tokio-stream = { version = "0.1", features = ["sync"] }
# Serialization
serde = { version = "1", features = ["derive"] }
serde_json = "1"
# HTTP
reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls", "cookies", "stream"] }
# Logging
log = "0.4"
tracing = "0.1"
# Error handling
thiserror = "2"
anyhow = "1"
# Crypto (Qobuz auth)
md-5 = "0.10"
base64 = "0.22"
# Time
chrono = "0.4"
# Regex
regex = "1"
# Audio
symphonia = { version = "0.5", features = ["all"] }
# Random number generation (shuffle / DJ-mix) — mirrors src-tauri pin
rand = "0.10"
# Fuzzy string similarity (track-mix dedup) — mirrors src-tauri pin
strsim = "0.11"
# Note: Linux-specific dependencies (alsa) go in individual crate Cargo.toml files
# because workspace manifests cannot have [target] sections
[profile.release]
# Strip symbol tables from release binaries. Measured on 2026-07-02:
# 400 MB -> 218 MB (-45%). There are no .debug_* sections in a default
# release build — the weight is .strtab (151 MB) + .symtab (22 MB), inflated
# by Slint's generated generic symbol names. Trade-off: panic backtraces show
# addresses instead of names; the release workflow archives the UNSTRIPPED
# binary as an Actions artifact per tag for offline symbolication.
# Codegen knobs (opt-level / codegen-units / jobs) intentionally stay in the
# workflows' env (CARGO_PROFILE_RELEASE_*) — they are CI-memory tuning, not
# a property of the package.
strip = "symbols"
[patch.crates-io]
# Slint 1.16's femtovg-wgpu renderer leaves the wgpu surface alpha mode at
# `Auto`, which resolves as an opaque compositor surface on KWin/Wayland and
# makes borderless transparent windows show a black rectangular backing. The
# patch keeps Slint pinned but chooses a supported non-opaque composite alpha
# mode when the surface advertises one, so the miniplayer card can have real
# transparent rounded corners. The non-opaque mode is PER-WINDOW opt-in
# (`wgpu::set_surface_prefers_transparent`, flipped from qbz's winit
# window-attributes hook): only the miniplayer pays the compositor-blend cost,
# the main window keeps an Opaque swapchain.
i-slint-renderer-femtovg = { path = "vendor/i-slint-renderer-femtovg-1.16.1" }
# On modern macOS, fontique's CoreText per-script fallback can fail to resolve
# a Han-script family (the suggested PingFang is not always in the scanned
# family map), so Japanese kanji rendered blank while kana worked. The patch
# pre-registers the known system CJK families (Hiragino/PingFang/Apple SD
# Gothic Neo/Arial Unicode MS, Japanese-biased default) in the fallback map at
# collection creation, which takes priority over the CoreText query. macOS-only
# (#[cfg]); Linux keeps its working fontconfig fallback.
i-slint-common = { path = "vendor/i-slint-common-1.16.1" }
# With `overflow: elide`, sharedparley culled EVERY line whose bottom edge
# exceeded max_height — including the FIRST one, eliding the text to nothing.
# CJK fallback fonts (Hiragino on macOS) report line metrics taller than
# snug fixed-height boxes (TrackRow's 20px title line at 14px), so every
# CJK track title rendered blank on macOS while Latin fit (#543; verified
# with a headless repro matrix on the Mac Mini). The patch always draws the
# first line — it still gets the ellipsis treatment as the last visible one.
i-slint-core = { path = "vendor/i-slint-core-1.16.1" }
# Slint compiles femtovg with the swash raster path. Swash fails to scale
# some variable fonts at a non-default variation instance (the CFF2-based
# CJK system fonts on modern macOS), and femtovg cached those glyphs as
# permanently missing — so CJK text at any non-regular weight rendered
# blank (#543; regular weight = empty coords = renders fine). The patch
# retries the glyph at the font's DEFAULT instance before giving up: worst
# case the glyph draws at regular weight instead of not at all. No effect
# on fonts/instances that already render.
femtovg = { path = "vendor/femtovg-0.23.2" }
# macOS Skia renderer: skia bug 310510989 makes new_from_data fail for TTC
# faces at index > 0, and for some system collections (AppleSDGothicNeo.ttc,
# where EVERY weight sits at index > 0) the upstream read/write-fonts rebuild
# workaround ALSO fails — every Korean glyph run at non-regular weights drew
# nothing. The patch adds a second-chance workaround: resolve the same face
# through CoreText by family name + OS/2 weight, guarded by cmap glyph-id
# spot checks so a wrong match is rejected instead of drawing wrong glyphs.
i-slint-renderer-skia = { path = "vendor/i-slint-renderer-skia-1.16.1" }