[workspace] members = ["crates/*"] resolver = "2" [workspace.package] version = "1.50.0-dev" edition = "2021" rust-version = "1.95" license = "GPL-3.0-or-later" [workspace.dependencies] tempfile = "3" wiremock = "0.6" mockall = "0.13" proptest = "1" [package] name = "psysonic" version.workspace = true description = "Psysonic Desktop Music Player" authors = [] license.workspace = true repository = "" default-run = "psysonic" edition.workspace = true rust-version.workspace = true [lib] name = "psysonic_lib" crate-type = ["staticlib", "cdylib", "rlib"] [[bin]] name = "psysonic" path = "src/main.rs" [build-dependencies] tauri-build = { version = "2", features = [] } [dependencies] psysonic-core = { path = "crates/psysonic-core" } psysonic-analysis = { path = "crates/psysonic-analysis" } psysonic-audio = { path = "crates/psysonic-audio" } psysonic-library = { path = "crates/psysonic-library" } psysonic-syncfs = { path = "crates/psysonic-syncfs" } psysonic-integration = { path = "crates/psysonic-integration" } tauri = { version = "2", features = ["protocol-asset", "tray-icon", "image-png"] } tauri-plugin-single-instance = "2" tauri-plugin-shell = "2" tauri-plugin-global-shortcut = "2" tauri-plugin-store = "2" tauri-plugin-dialog = "2" tauri-plugin-fs = "2" serde = { version = "1", features = ["derive"] } serde_json = "1" rodio = { version = "0.22", default-features = false, features = ["playback"] } symphonia = { version = "0.6", default-features = false, features = ["flac", "mp3", "pcm", "aac", "alac", "isomp4", "vorbis", "ogg", "wav", "adpcm", "all-meta"] } reqwest = { version = "0.13", default-features = false, features = ["stream", "json", "multipart", "query", "form", "rustls", "blocking", "gzip", "brotli"] } futures-util = "0.3" md5 = "0.8" tokio = { version = "1", features = ["rt", "time", "sync"] } biquad = "0.6" ringbuf = "0.5" tauri-plugin-window-state = "2.4.1" tauri-plugin-process = "2" tauri-plugin-updater = "2" souvlaki = { version = "0.8", default-features = false, features = ["use_zbus"] } discord-rich-presence = "1.1" url = "2" thread-priority = "3" lofty = "0.24" sysinfo = { version = "0.39", default-features = false, features = ["disk", "system"] } id3 = "1.17" symphonia-adapter-libopus = "0.3" rusqlite = { version = "0.40", features = ["bundled"] } ebur128 = "0.1" dasp_sample = "0.11.0" zip = "8" image = { version = "0.25", default-features = false, features = ["jpeg", "png", "webp"] } webp = "0.3" [target.'cfg(unix)'.dependencies] libc = "0.2" [target.'cfg(target_os = "macos")'.dependencies] mach2 = "0.5" [target.'cfg(target_os = "linux")'.dependencies] zbus = { version = "5.16", default-features = false, features = ["blocking-api", "async-io"] } # Match wry/tauri’s WebKitGTK stack — used only to turn off kinetic wheel scrolling. webkit2gtk = { version = "2.0", default-features = false, features = ["v2_40"] } webkit2gtk-nvidia-quirk = "1.3" [target.'cfg(windows)'.dependencies] windows = { version = "0.62", features = [ "Win32_Foundation", "Win32_Graphics", "Win32_Graphics_Gdi", "Win32_System_Com", "Win32_System_Power", "Win32_System_Threading", "Win32_UI_Controls", "Win32_UI_Shell", "Win32_UI_WindowsAndMessaging", ] } # NOTE: The local `symphonia-format-isomp4` path patch (0.5-based) was removed for # the Symphonia 0.6 migration. Symphonia 0.6 upstream already covers the esds # missing-descriptor and SL predefined=null fixes. The malformed-trak skip and # moov-at-end tail scan are validated against the fixture corpus on stock 0.6; if a # case regresses, re-create the patch from the 0.6 isomp4 source and re-add the # [patch.crates-io] entry here. See workdocs task 2026-05-symphonia-0.6-migration.