[workspace]
resolver = "2"
members = [
    "apps/desktop",
    "crates/application",
    "crates/backend",
    "crates/backend-api",
    "crates/domain",
    "crates/platform-desktop",
    "crates/ui",
]

[workspace.package]
version = "0.1.2"
edition = "2024"
rust-version = "1.97"
license = "WTFPL"
authors = ["Furumi contributors"]
description = "A native desktop player for personal music libraries and the Furumi federated network"
readme = "README.md"

[workspace.dependencies]
anyhow = "1.0.102"
blake3 = "1"
futures-util = "0.3.32"
slint = { version = "=1.17.1", default-features = false, features = [
    "backend-winit",
    "renderer-femtovg",
    "renderer-software",
    "compat-1-2",
] }
slint-build = "=1.17.1"
tokio = { version = "=1.52.3", features = ["rt-multi-thread", "sync", "time", "macros", "io-util", "fs"] }
tokio-util = { version = "=0.7.18", features = ["rt"] }
directories = "6.0.0"
image = { version = "0.25.10", default-features = false, features = ["webp"] }
music-dht = "0.4.0"
serde_json = "1.0.150"
serde = { version = "1.0", features = ["derive"] }
rusqlite = { version = "0.32.1", features = ["bundled"] }
rfd = { version = "0.15.4", default-features = false, features = ["xdg-portal", "tokio"] }
rodio = { version = "0.22.2", default-features = false, features = [
    "playback",
    "mp3",
    "flac",
    "vorbis",
    "wav",
    "symphonia-aac",
    "symphonia-isomp4",
    "symphonia-alac",
] }
reqwest = { version = "0.12.28", default-features = false, features = ["rustls-tls", "stream"] }
rustfft = "6.4.1"
sha2 = "0.10.9"
tract-onnx = "0.23.4"
souvlaki = { version = "0.8.3", default-features = false, features = ["use_zbus"] }
core-foundation = "0.10.1"
objc2 = "0.6.4"
objc2-app-kit = { version = "0.3.2", default-features = false, features = [
    "NSApplication",
    "NSImage",
    "NSResponder",
] }
objc2-foundation = { version = "0.3.2", default-features = false, features = ["NSData"] }
windows-sys = { version = "0.61.2", features = ["Win32_System_LibraryLoader", "Win32_UI_WindowsAndMessaging"] }

furumi-application = { path = "crates/application" }
furumi-backend = { path = "crates/backend" }
furumi-backend-api = { path = "crates/backend-api" }
furumi-domain = { path = "crates/domain" }
furumi-library = "0.1.0"
furumi-platform-desktop = { path = "crates/platform-desktop" }
furumi-ui = { path = "crates/ui" }

[workspace.lints.rust]
unsafe_code = "deny"

[workspace.lints.clippy]
all = "warn"
pedantic = "warn"

[profile.release]
lto = "thin"
codegen-units = 1
strip = "symbols"

[patch.crates-io]
# souvlaki 0.8.3 still uses an uninhabited Objective-C FFI marker.
block = { path = "vendor/block" }
