Files
spotifast/Cargo.toml
T
2026-08-27 16:27:23 +02:00

88 lines
3.4 KiB
TOML

[package]
name = "fastpotify"
version = "0.1.3"
edition = "2024"
rust-version = "1.95"
license = "MIT"
description = "A fast, lightweight, native Spotify client built with Rust and egui"
repository = "https://github.com/crmne/fastpotify"
keywords = ["spotify", "music", "egui", "librespot", "player"]
categories = ["multimedia::audio"]
[lib]
name = "fastpotify"
path = "src/lib.rs"
[[bin]]
name = "fastpotify"
path = "src/main.rs"
[dependencies]
anyhow = "1"
thiserror = "2"
clap = { version = "4.5", features = ["derive"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
log = "0.4"
env_logger = { version = "0.11", default-features = false, features = ["auto-color", "humantime"] }
directories = "6"
# The whole UI. glow keeps the binary and the dependency tree small; wgpu is
# not needed for a 2D music client.
eframe = { version = "0.36", default-features = false, features = ["glow", "default_fonts", "links", "wayland", "x11", "persistence"] }
egui = "0.36"
egui_extras = { version = "0.36", features = ["image", "svg"] }
image = { version = "0.25", default-features = false, features = ["jpeg", "png"] }
# Spotify playback and Connect. rustls everywhere so the client links one TLS
# stack and builds without OpenSSL on every platform.
#
# librespot-core depends on hyper-proxy2 for HTTP proxy support, whose only
# published release (0.1.0) pins rustls 0.22 and so drags in rustls-webpki
# 0.102, which carries advisories against its CRL and name-constraint
# handling. Fastpotify never configures a proxy (SessionConfig.proxy stays
# None), so that TLS client is compiled in but never used to verify anything.
# Every connection this app actually makes (the Web API through reqwest, and
# librespot's own sessions) goes through rustls 0.23 with a patched
# rustls-webpki. Removing the old copy needs a release of hyper-proxy2, or a
# librespot that stops depending on it.
librespot-core = { version = "0.8", default-features = false, features = ["rustls-tls-native-roots"] }
librespot-playback = { version = "0.8", default-features = false, features = ["rodio-backend", "rustls-tls-native-roots"] }
librespot-connect = { version = "0.8", default-features = false }
librespot-metadata = { version = "0.8", default-features = false }
librespot-protocol = { version = "0.8", default-features = false }
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls-native-roots", "json", "gzip", "http2", "blocking"] }
tokio = { version = "1", features = ["rt-multi-thread", "sync", "time", "macros"] }
sha1 = "0.10"
sha2 = "0.10"
base64 = "0.22"
rand = "0.9"
open = "5"
percent-encoding = "2"
urlencoding = "2"
jiff = "0.2"
mdns-sd = "0.21"
hmac = "0.12"
pbkdf2 = "0.12"
aes = "0.8"
ctr = "0.9"
[target.'cfg(target_os = "linux")'.dependencies]
ksni = { version = "0.3", features = ["blocking"] }
librespot-playback = { version = "0.8", default-features = false, features = ["rodio-backend", "pulseaudio-backend", "rustls-tls-native-roots"] }
mpris-server = { version = "0.10", features = ["tokio"] }
[features]
# Sample data and screenshot flags; never part of a release build.
demo = []
[profile.release]
lto = "thin"
codegen-units = 1
strip = true
panic = "abort"
# Audio decoding and immediate-mode layout are too slow at opt-level 0 to
# audition the app in development. Keep every dependency optimized while the
# application crate itself stays incremental.
[profile.dev.package."*"]
opt-level = 2