mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-09-09 22:11:02 +03:00
`libs/base` (crate `base`) takes the parts of hbb_common that only this app uses: `fs`, `platform`, `keyboard`, `message.proto`, and 145 of the 177 `config::keys` constants. hbb_common keeps what the server names, and the 32 keys it reads itself are re-exported from `base::config::keys` so call sites still see the full set through one path. Sources move verbatim. The only edits inside them are `crate::` prefixes that now have to say `hbb_common::`; `keyboard.rs` and `platform/windows.rs` are byte-identical. The crate stays on edition 2018, the edition the moved code was written under. `log`, `lazy_static` and `anyhow` become direct dependencies so the bare paths in that code resolve exactly as before, and its winapi features are spelled out rather than left to feature unification. Two call sites outside Rust and Cargo had to follow the move: the Android protobuf source dir, which still pointed at hbb_common/protos for message.proto, and the three AGENTS.md entries that named hbb_common for options, protos and file transfer. `scrap`'s `drm` feature now forwards to `base/wayland_probe`. Left pointing at hbb_common it would still have compiled, silently dropping the Wayland socket-probe fallback, so that forward is verified by a build with and without the feature. `config::keys` carries a test asserting its names stay disjoint from the ones hbb_common kept: the glob re-export and the local constants share a namespace, and Rust prefers the local item silently, so a name added to both sides would otherwise let client and server disagree with no diagnostic. Verified: macOS and Linux, debug and release, `--all-targets`; the 177 key constants diffed name-for-name and value-for-value; the generated protobuf types compared before and after; every `#[cfg]` gate on a moved import checked against its original; and every file that was `rustfmt`-clean before this change still is, compared against master file by file. Windows is checked by inspection only -- it cannot be compiled here. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab
273 lines
9.9 KiB
TOML
273 lines
9.9 KiB
TOML
[package]
|
|
name = "rustdesk"
|
|
version = "1.5.0"
|
|
authors = ["rustdesk <info@rustdesk.com>"]
|
|
edition = "2021"
|
|
build= "build.rs"
|
|
description = "RustDesk Remote Desktop"
|
|
default-run = "rustdesk"
|
|
rust-version = "1.75"
|
|
|
|
[lib]
|
|
name = "librustdesk"
|
|
crate-type = ["cdylib", "staticlib", "rlib"]
|
|
|
|
[[bin]]
|
|
name = "naming"
|
|
path = "src/naming.rs"
|
|
|
|
[[bin]]
|
|
name = "service"
|
|
path = "src/service.rs"
|
|
|
|
[features]
|
|
inline = []
|
|
use_samplerate = ["samplerate"]
|
|
use_rubato = ["rubato"]
|
|
use_dasp = ["dasp"]
|
|
flutter = ["flutter_rust_bridge"]
|
|
default = ["use_dasp"]
|
|
hwcodec = ["scrap/hwcodec"]
|
|
vram = ["scrap/vram"]
|
|
mediacodec = ["scrap/mediacodec"]
|
|
drm = ["scrap/drm"]
|
|
# The display wake, as its OWN compile gate on top of `drm`. Everything else in the drm backend
|
|
# READS (it captures a scanout); the wake WRITES, injecting one synthetic pointer event from the
|
|
# root service so a compositor that idle-disabled its outputs re-enables them. That is a different
|
|
# kind of operation and deserves a switch that can remove it from the binary entirely, without
|
|
# giving up DRM capture: `--features drm` builds the capture path with no wake code compiled in.
|
|
drm-wake = ["drm"]
|
|
linux-pkg-config = ["magnum-opus/linux-pkg-config", "scrap/linux-pkg-config"]
|
|
unix-file-copy-paste = [
|
|
"dep:x11-clipboard",
|
|
"dep:x11rb",
|
|
"dep:percent-encoding",
|
|
"dep:once_cell",
|
|
"clipboard/unix-file-copy-paste",
|
|
]
|
|
screencapturekit = ["cpal/screencapturekit"]
|
|
|
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
|
|
|
[dependencies]
|
|
async-trait = "0.1"
|
|
scrap = { path = "libs/scrap", features = ["wayland"] }
|
|
hbb_common = { path = "libs/hbb_common", features = ["webrtc"] }
|
|
base = { path = "libs/base" }
|
|
serde_derive = "1.0"
|
|
serde = "1.0"
|
|
serde_json = "1.0"
|
|
serde_repr = "0.1"
|
|
cfg-if = "1.0"
|
|
lazy_static = "1.4"
|
|
sha2 = "0.10"
|
|
repng = "0.2"
|
|
parity-tokio-ipc = { git = "https://github.com/rustdesk-org/parity-tokio-ipc" }
|
|
magnum-opus = { git = "https://github.com/rustdesk-org/magnum-opus" }
|
|
dasp = { version = "0.11", features = ["signal", "interpolate-linear", "interpolate"], optional = true }
|
|
rubato = { version = "0.12", optional = true }
|
|
samplerate = { version = "0.2", optional = true }
|
|
uuid = { version = "1.3", features = ["v4"] }
|
|
num_cpus = "1.15"
|
|
bytes = { version = "1.4", features = ["serde"] }
|
|
default-net = "0.14"
|
|
wol-rs = "1.0"
|
|
flutter_rust_bridge = { version = "=1.80", features = ["uuid"], optional = true}
|
|
errno = "0.3"
|
|
rdev = { git = "https://github.com/rustdesk-org/rdev" }
|
|
url = { version = "2.3", features = ["serde"] }
|
|
crossbeam-queue = "0.3"
|
|
hex = "0.4"
|
|
chrono = "0.4"
|
|
cidr-utils = "0.5"
|
|
fon = "0.6"
|
|
shutdown_hooks = "0.1"
|
|
totp-rs = { version = "5.4", default-features = false, features = ["gen_secret", "otpauth"] }
|
|
stunclient = "0.4"
|
|
kcp-sys= { git = "https://github.com/rustdesk-org/kcp-sys", branch = "rustdesk-patches" }
|
|
reqwest = { version = "0.12", features = ["blocking", "socks", "json", "native-tls", "rustls-tls", "rustls-tls-native-roots", "gzip", "zstd"], default-features=false }
|
|
|
|
[target.'cfg(not(target_os = "linux"))'.dependencies]
|
|
# https://github.com/rustdesk/rustdesk/discussions/10197, not use cpal on linux
|
|
cpal = { git = "https://github.com/rustdesk-org/cpal", branch = "osx-screencapturekit" }
|
|
ringbuf = "0.3"
|
|
|
|
[target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies]
|
|
mac_address = "1.1"
|
|
sciter-rs = { git = "https://github.com/rustdesk-org/rust-sciter", branch = "dyn" }
|
|
sys-locale = "0.3"
|
|
enigo = { path = "libs/enigo", features = [ "with_serde" ] }
|
|
clipboard = { path = "libs/clipboard" }
|
|
ctrlc = "3.2"
|
|
# arboard = { version = "3.4", features = ["wayland-data-control"] }
|
|
arboard = { git = "https://github.com/rustdesk-org/arboard", features = ["wayland-data-control"] }
|
|
clipboard-master = { git = "https://github.com/rustdesk-org/clipboard-master" }
|
|
portable-pty = { git = "https://github.com/rustdesk-org/wezterm", branch = "rustdesk/pty_based_0.8.1", package = "portable-pty" }
|
|
|
|
system_shutdown = "4.0"
|
|
qrcode-generator = "4.1"
|
|
|
|
[target.'cfg(target_os = "windows")'.dependencies]
|
|
winapi = { version = "0.3", features = [
|
|
"winuser",
|
|
"wincrypt",
|
|
"shellscalingapi",
|
|
"pdh",
|
|
"synchapi",
|
|
"memoryapi",
|
|
"shellapi",
|
|
"devguid",
|
|
"setupapi",
|
|
"cguid",
|
|
"cfgmgr32",
|
|
"ioapiset",
|
|
"winspool",
|
|
] }
|
|
windows = { version = "0.61", features = [
|
|
"Win32",
|
|
"Win32_Foundation",
|
|
"Win32_Security",
|
|
"Win32_Security_Authorization",
|
|
"Win32_Storage_FileSystem",
|
|
"Win32_System",
|
|
"Win32_System_Com",
|
|
"Win32_System_Diagnostics",
|
|
"Win32_System_Diagnostics_ToolHelp",
|
|
"Win32_System_Environment",
|
|
"Win32_System_IO",
|
|
"Win32_System_Memory",
|
|
"Win32_System_Pipes",
|
|
"Win32_System_Registry",
|
|
"Win32_System_SystemInformation",
|
|
"Win32_System_Threading",
|
|
"Win32_UI_Shell",
|
|
"Win32_UI_WindowsAndMessaging",
|
|
] }
|
|
winreg = "0.11"
|
|
windows-service = "0.6"
|
|
virtual_display = { path = "libs/virtual_display" }
|
|
remote_printer = { path = "libs/remote_printer" }
|
|
impersonate_system = { git = "https://github.com/rustdesk-org/impersonate-system" }
|
|
shared_memory = "0.12"
|
|
tauri-winrt-notification = "0.1"
|
|
|
|
[target.'cfg(target_os = "macos")'.dependencies]
|
|
objc = "0.2"
|
|
cocoa = "0.24"
|
|
dispatch = "0.2"
|
|
core-foundation = "0.9"
|
|
core-graphics = "0.22"
|
|
include_dir = "0.7"
|
|
fruitbasket = "0.10"
|
|
objc_id = "0.1"
|
|
# If we use piet "0.7" here, we must also update core-graphics to "0.24".
|
|
piet = "0.6"
|
|
piet-coregraphics = "0.6"
|
|
foreign-types = "0.3"
|
|
|
|
[target.'cfg(any(target_os = "macos", target_os = "linux", target_os = "windows"))'.dependencies]
|
|
tray-icon = { git = "https://github.com/tauri-apps/tray-icon", version = "0.21.3" }
|
|
tao = { git = "https://github.com/rustdesk-org/tao", branch = "dev" }
|
|
image = "0.24"
|
|
|
|
[target.'cfg(any(target_os = "macos", target_os = "linux"))'.dependencies]
|
|
keepawake = { git = "https://github.com/rustdesk-org/keepawake-rs" }
|
|
|
|
[target.'cfg(any(target_os = "windows", target_os = "linux"))'.dependencies]
|
|
wallpaper = { git = "https://github.com/rustdesk-org/wallpaper.rs" }
|
|
tiny-skia = "0.11"
|
|
softbuffer = "0.4"
|
|
fontdb = "0.23"
|
|
bytemuck = "1.23"
|
|
ttf-parser = "0.25"
|
|
|
|
[target.'cfg(target_os = "linux")'.dependencies]
|
|
libxdo-sys = "0.11"
|
|
psimple = { package = "libpulse-simple-binding", version = "2.27" }
|
|
pulse = { package = "libpulse-binding", version = "2.27" }
|
|
rust-pulsectl = { git = "https://github.com/rustdesk-org/pulsectl" }
|
|
async-process = "1.7"
|
|
evdev = { git="https://github.com/rustdesk-org/evdev" }
|
|
dbus = "0.9"
|
|
dbus-crossroads = "0.5"
|
|
x11-clipboard = {git="https://github.com/clslaid/x11-clipboard", branch = "feat/store-batch", optional = true}
|
|
x11rb = {version = "0.12", features = ["all-extensions"], optional = true}
|
|
percent-encoding = {version = "2.3", optional = true}
|
|
once_cell = {version = "1.18", optional = true}
|
|
nix = { version = "0.29", features = ["term", "process"]}
|
|
gtk = "0.18"
|
|
termios = "0.3"
|
|
terminfo = "0.8"
|
|
winit = "0.30"
|
|
|
|
[target.'cfg(any(target_os = "linux", target_os = "android"))'.dependencies]
|
|
openssl = { version = "0.10", features = ["vendored"] }
|
|
|
|
[target.'cfg(target_os = "android")'.dependencies]
|
|
android_logger = "0.13"
|
|
jni = "0.21"
|
|
android-wakelock = { git = "https://github.com/rustdesk-org/android-wakelock" }
|
|
|
|
[workspace]
|
|
members = ["libs/scrap", "libs/hbb_common", "libs/base", "libs/enigo", "libs/clipboard", "libs/virtual_display", "libs/virtual_display/dylib", "libs/portable", "libs/remote_printer"]
|
|
exclude = ["vdi/host"]
|
|
|
|
# Patch libxdo-sys to use a stub implementation that doesn't require libxdo
|
|
# This allows building and running on systems without libxdo installed (e.g., Wayland-only)
|
|
[patch.crates-io]
|
|
libxdo-sys = { path = "libs/libxdo-sys-stub" }
|
|
# One branch off upstream v0.13.0, the tag whose crate versions match this stack.
|
|
# webrtc-util: reads the Windows adapter list's IPv6 addresses as host-order u16 groups, so every
|
|
# one comes out byte-swapped, fails to bind, and ICE gathers no IPv6 host candidate on Windows.
|
|
# webrtc-sctp: RFC 4960's 1s RTO floor makes a single loss cost 1-3s on a link whose RTT is 24-64ms,
|
|
# and fast retransmit cannot cover a request/response exchange; INITIAL_MTU 1228 also fragments on
|
|
# IPv6; and its AIMD pins a lossy long-haul link to MSS/(RTT*sqrt(p)), so a switch sends without
|
|
# a congestion window, as KCP does - on by default, `allow-webrtc-congestion-control` opts back in.
|
|
# Sending that way, a reordering window keeps a chunk that is merely late from being resent on a
|
|
# path that jitters, every DATA chunk asks for its SACK at once so a lost tail is back within an
|
|
# RTT at KCP's RTO floors, and bundles of small chunks stay within the MTU. A T3-rtx resends
|
|
# everything outstanding when it packs into four packets and otherwise probes with one and lets
|
|
# the SACK settle the rest (F-RTO), timed from the latest send, so a stall no longer resends the
|
|
# whole backlog behind itself while a short lost tail still comes back at once.
|
|
# Pinned by rev, not branch: a fork branch can be rewritten out from under the lockfile.
|
|
webrtc-util = { git = "https://github.com/rustdesk-org/webrtc", rev = "b221f13b1d6f21fbce09f9f63096be27dd392265" }
|
|
webrtc-sctp = { git = "https://github.com/rustdesk-org/webrtc", rev = "b221f13b1d6f21fbce09f9f63096be27dd392265" }
|
|
|
|
[package.metadata.winres]
|
|
LegalCopyright = "Copyright © 2026 Purslane Tech Pte. Ltd. All rights reserved."
|
|
ProductName = "RustDesk"
|
|
FileDescription = "RustDesk Remote Desktop"
|
|
OriginalFilename = "rustdesk.exe"
|
|
|
|
[target.'cfg(target_os="windows")'.build-dependencies]
|
|
winres = "0.1"
|
|
winapi = { version = "0.3", features = [ "winnt", "pdh", "synchapi" ] }
|
|
|
|
[build-dependencies]
|
|
cc = "1.0"
|
|
hbb_common = { path = "libs/hbb_common" }
|
|
os-version = "0.2"
|
|
|
|
[dev-dependencies]
|
|
hound = "3.5"
|
|
docopt = "1.1"
|
|
tokio = { version = "1.44", features = ["test-util"] }
|
|
|
|
[package.metadata.bundle]
|
|
name = "RustDesk"
|
|
identifier = "com.carriez.rustdesk"
|
|
icon = ["res/32x32.png", "res/128x128.png", "res/128x128@2x.png"]
|
|
osx_minimum_system_version = "10.14"
|
|
|
|
#https://github.com/johnthagen/min-sized-rust
|
|
[profile.release]
|
|
lto = true
|
|
codegen-units = 1
|
|
panic = 'abort'
|
|
strip = true
|
|
#opt-level = 'z' # only have smaller size after strip
|
|
rpath = true
|
|
|
|
[profile.dev]
|
|
debug = 1
|