[package] name = "one-kvm" version = "0.2.1" edition = "2021" authors = ["SilentWind"] description = "A open and lightweight IP-KVM solution written in Rust" license = "GPL-2.0" repository = "https://github.com/mofeng-git/One-KVM" keywords = ["kvm", "ipkvm", "remote-management", "embedded"] categories = ["embedded", "network-programming"] [dependencies] # Async runtime tokio = { version = "1", features = ["full"] } tokio-util = { version = "0.7", features = ["rt"] } # Web framework axum = { version = "0.8", features = ["ws", "multipart", "tokio"] } axum-extra = { version = "0.12", features = ["cookie"] } tower-http = { version = "0.6", features = ["cors", "trace", "set-header"] } # Database - Use bundled SQLite for static linking sqlx = { version = "0.8", features = ["runtime-tokio", "sqlite"] } # Serialization serde = { version = "1", features = ["derive"] } serde_json = "1" # Logging tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter", "json", "tracing-log"] } # Error handling thiserror = "2" anyhow = "1" # Authentication argon2 = "0.5" rand = "0.9" # Utilities uuid = { version = "1", features = ["v4", "serde"] } base64 = "0.22" nix = { version = "0.30", features = ["fs", "net", "hostname", "poll"] } # HTTP client (for URL downloads) # Use rustls by default, but allow native-tls for systems with older GLIBC reqwest = { version = "0.13", features = ["stream", "rustls", "json"], default-features = false } urlencoding = "2" # Static file embedding rust-embed = { version = "8", features = ["compression", "debug-embed"] } mime_guess = "2" # TLS/HTTPS rustls = { version = "0.23", features = ["ring"] } rcgen = "0.14" axum-server = { version = "0.8", features = ["tls-rustls"] } # CLI argument parsing clap = { version = "4", features = ["derive"] } # Time (cookie max_age + RFC3339 timestamps) time = { version = "0.3", features = ["serde", "formatting", "parsing"] } # Bytes handling bytes = "1" bytemuck = { version = "1.24", features = ["derive"] } # Frame deduplication (hash-based comparison) xxhash-rust = { version = "0.8", features = ["xxh64"] } # Async channels async-stream = "0.3" futures = "0.3" # WebSocket client (for ttyd proxy) tokio-tungstenite = "0.28" # High-performance synchronization parking_lot = "0.12" arc-swap = "1.8" # WebRTC webrtc = "0.14" rtp = "0.14" rtsp-types = "0.1" sdp-types = "0.1" # HID (serial port for CH9329) serialport = "4" async-trait = "0.1" libc = "0.2" # Ventoy bootable image support ventoy-img = { path = "libs/ventoy-img-rs" } # RustDesk protocol support protobuf = { version = "3.7", features = ["with-bytes"] } sodiumoxide = "0.2" sha2 = "0.10" # TypeScript type generation typeshare = "1.0" [target.'cfg(any(unix, windows))'.dependencies] # Video encoding/decoding (FFmpeg/libjpeg-turbo/libyuv; available on Windows and Linux) hwcodec = { path = "libs/hwcodec" } libyuv = { path = "res/vcpkg/libyuv" } turbojpeg = "1.3" # Note: audiopus links to libopus.so (unavoidable for audio support) audiopus = "0.2" [target.'cfg(unix)'.dependencies] # Video capture (V4L2) v4l2r = "0.0.7" # Audio (ALSA capture) alsa = "0.11" # ATX (GPIO control) gpio-cdev = "0.6" [target.'cfg(windows)'.dependencies] cpal = { version = "0.17", default-features = false } windows-sys = { version = "0.61", features = [ "Win32_Foundation", "Win32_NetworkManagement_IpHelper", "Win32_NetworkManagement_Ndis", "Win32_Networking_WinSock", "Win32_System_SystemInformation", "Win32_System_Threading", ] } [dev-dependencies] tempfile = "3" [build-dependencies] protobuf-codegen = "3.7" [profile.release] opt-level = 3 lto = true codegen-units = 1 strip = true panic = "abort" # Static linking profile for musl targets [profile.release-static] inherits = "release" opt-level = "z" # Optimize for size