[package] name = "clash-verge" version = "2.4.3" description = "clash verge" authors = ["zzzgydi", "Tunglies", "wonfen", "MystiPanda"] license = "GPL-3.0-only" repository = "https://github.com/clash-verge-rev/clash-verge-rev.git" default-run = "clash-verge" edition = "2024" build = "build.rs" [package.metadata.bundle] identifier = "io.github.clash-verge-rev.clash-verge-rev" [build-dependencies] tauri-build = { version = "2.5.1", features = [] } [dependencies] warp = { version = "0.4.2", features = ["server"] } anyhow = "1.0.100" open = "5.3.2" log = "0.4.28" dunce = "1.0.5" nanoid = "0.4" chrono = "0.4.42" sysinfo = { version = "0.37.2", features = ["network", "system"] } boa_engine = "0.21.0" serde_json = "1.0.145" serde_yaml_ng = "0.10.0" once_cell = "1.21.3" port_scanner = "0.1.5" delay_timer = "0.11.6" parking_lot = "0.12.5" percent-encoding = "2.3.2" tokio = { version = "1.48.0", features = [ "rt-multi-thread", "macros", "time", "sync", ] } serde = { version = "1.0.228", features = ["derive"] } reqwest = { version = "0.12.24", features = ["json", "cookies"] } regex = "1.12.2" sysproxy = { git = "https://github.com/clash-verge-rev/sysproxy-rs" } tauri = { version = "2.9.2", features = [ "protocol-asset", "devtools", "tray-icon", "image-ico", "image-png", ] } network-interface = { version = "2.0.3", features = ["serde"] } tauri-plugin-shell = "2.3.3" tauri-plugin-dialog = "2.4.2" tauri-plugin-fs = "2.4.4" tauri-plugin-process = "2.3.1" tauri-plugin-clipboard-manager = "2.3.2" tauri-plugin-deep-link = "2.4.5" tauri-plugin-window-state = "2.4.1" zip = "6.0.0" reqwest_dav = "0.2.2" aes-gcm = { version = "0.10.3", features = ["std"] } base64 = "0.22.1" getrandom = "0.3.4" futures = "0.3.31" sys-locale = "0.3.2" libc = "0.2.177" gethostname = "1.1.0" scopeguard = "1.2.0" tauri-plugin-notification = "2.3.3" tokio-stream = "0.1.17" isahc = { version = "1.7.2", default-features = false, features = [ "text-decoding", "parking_lot", ] } backoff = { version = "0.4.0", features = ["tokio"] } compact_str = { version = "0.9.0", features = ["serde"] } tauri-plugin-http = "2.5.4" flexi_logger = "0.31.7" console-subscriber = { version = "0.5.0", optional = true } tauri-plugin-devtools = { version = "2.0.1" } tauri-plugin-mihomo = { git = "https://github.com/clash-verge-rev/tauri-plugin-mihomo" } clash_verge_logger = { git = "https://github.com/clash-verge-rev/clash-verge-logger" } async-trait = "0.1.89" smartstring = { version = "1.0.1", features = ["serde"] } clash_verge_service_ipc = { version = "2.0.21", features = [ "client", ], git = "https://github.com/clash-verge-rev/clash-verge-service-ipc" } arc-swap = "1.7.1" [target.'cfg(windows)'.dependencies] runas = "=1.2.0" deelevate = "0.2.0" winreg = "0.55.0" winapi = { version = "0.3.9", features = [ "winbase", "fileapi", "winnt", "handleapi", "errhandlingapi", "minwindef", "winerror", "tlhelp32", "processthreadsapi", "winhttp", "winreg", ] } windows-sys = { version = "0.61.2", features = [ "Win32_Foundation", "Win32_Graphics_Gdi", "Win32_System_SystemServices", "Win32_UI_WindowsAndMessaging", ] } [target.'cfg(target_os = "linux")'.dependencies] users = "0.11.0" [target.'cfg(unix)'.dependencies] signal-hook = "0.3.18" [target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies] tauri-plugin-autostart = "2.5.1" tauri-plugin-global-shortcut = "2.3.1" tauri-plugin-updater = "2.9.0" [features] default = ["custom-protocol"] custom-protocol = ["tauri/custom-protocol"] verge-dev = ["clash_verge_logger/color"] tauri-dev = [] tokio-trace = ["console-subscriber"] clippy = ["tauri/test"] tracing = [] [[bench]] name = "draft_benchmark" path = "benches/draft_benchmark.rs" harness = false [profile.release] panic = "abort" codegen-units = 1 lto = "thin" opt-level = 3 debug = false strip = true overflow-checks = false rpath = false [profile.dev] incremental = true codegen-units = 64 opt-level = 0 debug = true strip = "none" overflow-checks = true lto = false rpath = false [profile.fast-release] inherits = "release" codegen-units = 64 incremental = true lto = false opt-level = 0 debug = true strip = false [lib] name = "app_lib" crate-type = ["staticlib", "cdylib", "rlib"] [dev-dependencies] criterion = { version = "0.7.0", features = ["async_tokio"] } [lints.clippy] # Core categories - most important for code safety and correctness correctness = { level = "deny", priority = -1 } suspicious = { level = "deny", priority = -1 } # Critical safety lints - warn for now due to extensive existing usage unwrap_used = "warn" expect_used = "warn" panic = "deny" unimplemented = "deny" # Development quality lints todo = "warn" dbg_macro = "warn" #print_stdout = "warn" #print_stderr = "warn" # Performance lints for proxy application clone_on_ref_ptr = "warn" rc_clone_in_vec_init = "warn" large_stack_arrays = "warn" large_const_arrays = "warn" # Security lints #integer_division = "warn" #lossy_float_literal = "warn" #default_numeric_fallback = "warn" # Mutex and async lints - strict control async_yields_async = "deny" # Prevents missing await in async blocks mutex_atomic = "deny" # Use atomics instead of Mutex mutex_integer = "deny" # Use AtomicInt instead of Mutex rc_mutex = "deny" # Single-threaded Rc with Mutex is wrong unused_async = "deny" # Too many false positives in Tauri/framework code await_holding_lock = "deny" large_futures = "deny" future_not_send = "deny" # Common style improvements redundant_else = "deny" # Too many in existing code needless_continue = "deny" # Too many in existing code needless_raw_string_hashes = "deny" # Too many in existing code # Disable noisy categories for existing codebase but keep them available #style = { level = "allow", priority = -1 } #complexity = { level = "allow", priority = -1 } #perf = { level = "allow", priority = -1 } #pedantic = { level = "allow", priority = -1 } #nursery = { level = "allow", priority = -1 } #restriction = { level = "allow", priority = -1 } or_fun_call = "deny" cognitive_complexity = "deny" useless_let_if_seq = "deny" use_self = "deny" tuple_array_conversions = "deny" trait_duplication_in_bounds = "deny" suspicious_operation_groupings = "deny" string_lit_as_bytes = "deny" significant_drop_tightening = "deny" significant_drop_in_scrutinee = "deny" redundant_clone = "deny" # option_if_let_else = "deny" // 过于激进,暂时不开启 needless_pass_by_ref_mut = "deny" needless_collect = "deny" missing_const_for_fn = "deny" iter_with_drain = "deny" iter_on_single_items = "deny" iter_on_empty_collections = "deny" # fallible_impl_from = "deny" // 过于激进,暂时不开启 equatable_if_let = "deny" collection_is_never_read = "deny" branches_sharing_code = "deny"