[workspace] resolver = "2" members = [ "botapp", "botdevice", "botlib", "botserver", "bottest", "botui", ] [workspace.lints.rust] [workspace.lints.clippy] # ═══════════════════════════════════════════════════════════════════════════════ # WORKSPACE DEPENDENCIES - Single source of truth for all member crates # Member crates reference these with: dependency = { workspace = true } # ═══════════════════════════════════════════════════════════════════════════════ [workspace.dependencies] # ─── INTERNAL CRATES ─── botlib = { path = "botlib" } # ─── CORE / ERROR HANDLING ─── anyhow = "1.0" thiserror = "2.0" log = "0.4" env_logger = "0.11" color-eyre = "0.6.5" # ─── ASYNC RUNTIME ─── tokio = { version = "1.41", default-features = false } tokio-stream = "0.1" tokio-util = { version = "0.7", default-features = false } tokio-rustls = "0.26" tokio-test = "0.4" tokio-tungstenite = { version = "0.24", default-features = false } async-trait = "0.1" async-lock = "2.8.0" async-stream = "0.3" futures = "0.3" futures-util = { version = "0.3", default-features = false } scopeguard = "1.2.0" # ─── SERIALIZATION ─── serde = { version = "1.0", default-features = false } serde_json = "1.0" toml = "0.8" ciborium = "0.2" # ─── DATE / TIME ─── chrono = { version = "0.4", default-features = false } time = { version = "0.3", default-features = false } cron = "0.15.0" # ─── UUID ─── uuid = { version = "1.11", default-features = false } # ─── WEB FRAMEWORK ─── axum = { version = "0.7.5", features = ["ws", "multipart", "macros"] } axum-server = { version = "0.8", features = ["tls-rustls"] } tower = "0.4" tower-http = { version = "0.6", default-features = false } tower-cookies = "0.10" hyper = { version = "1.4", default-features = false } hyper-rustls = { version = "0.27", default-features = false } hyper-util = { version = "0.1.19", default-features = false } http-body-util = "0.1.3" # ─── HTTP CLIENT ─── reqwest = { version = "0.12", default-features = false } # ─── DATABASE ─── diesel = { version = "2.2" } diesel_migrations = "2.2" # ─── CACHING ─── redis = { version = "0.27", default-features = false } # ─── SECURITY / CRYPTO ─── jsonwebtoken = "9.3" base64 = "0.22" aes-gcm = "0.10" argon2 = "0.5" hmac = "0.12.1" sha2 = "0.10.9" sha1 = "0.10.6" hex = "0.4" rand = "0.9.2" ring = "0.17" # ─── TLS / CERTIFICATES ─── rustls = { version = "0.23", default-features = false } rcgen = { version = "0.14", default-features = false } x509-parser = "0.15" rustls-native-certs = "0.8" webpki-roots = "0.25" native-tls = "0.2" # ─── REGEX / TEXT ─── regex = "1.11" smartstring = "1.0.1" urlencoding = "2.1" url = "2.5" # ─── FILESYSTEM ─── dirs = "5.0" tempfile = "3" walkdir = "2.5.0" notify = "8.0" # ─── COMPRESSION / ARCHIVES ─── flate2 = "1.0" zip = "2.2" tar = "0.4" # ─── DOCUMENT PROCESSING ─── docx-rs = "0.4" ooxmlsdk = { version = "0.3", default-features = false } calamine = "0.26" spreadsheet-ods = "1.0" pdf-extract = "0.10.0" quick-xml = { version = "0.37", features = ["serialize"] } rust_xlsxwriter = "0.77" umya-spreadsheet = "2.1" # ─── IMAGE / MEDIA ─── png = "0.18" qrcode = { version = "0.14", default-features = false } # ─── EMAIL ─── imap = "3.0.0-alpha.15" lettre = { version = "0.11", features = ["smtp-transport", "builder"] } mailparse = "0.15" # ─── CONFIGURATION ─── dotenvy = "0.15" figment = { version = "0.10", default-features = false } once_cell = "1.18.0" # ─── TRACING / LOGGING ─── tracing = "0.1" tracing-subscriber = { version = "0.3", default-features = false } # ─── NUMERIC ─── num-format = "0.4" bigdecimal = { version = "0.4", features = ["serde"] } # ─── UTILITIES ─── bytes = "1.8" # ─── CLOUD / AWS ─── aws-config = { version = "1.8.8", default-features = false } aws-sdk-s3 = { version = "1.120", default-features = false } aws-smithy-async = { version = "1.2", features = ["rt-tokio"] } # ─── SCRIPTING ─── rhai = { version = "1.23", features = ["sync"] } # ─── VECTOR DB ─── qdrant-client = "1.16" # ─── VIDEO / MEETINGS ─── livekit = "0.7" # ─── SYSTEM MONITORING ─── sysinfo = "0.37.2" # ─── CONSOLE / TUI ─── crossterm = "0.29.0" ratatui = "0.30" indicatif = "0.18.0" # ─── MEMORY ALLOCATOR ─── tikv-jemallocator = "0.6" tikv-jemalloc-ctl = { version = "0.6", default-features = false } # ─── SECRETS / VAULT ─── vaultrs = "0.7" # ─── CALENDAR / RSS ─── icalendar = "0.17" rss = "2.0" # ─── WEB SCRAPING ─── scraper = "0.25" # ─── RATE LIMITING ─── governor = "0.10" # ─── CSV ─── csv = "1.3" # ─── GRPC ─── tonic = { version = "0.14.2", default-features = false } # ─── STATIC FILES ─── rust-embed = { version = "8.5", features = ["interpolate-folder-path"] } mime_guess = "2.0" # ─── TAURI (Desktop/Mobile) ─── tauri = { version = "2", features = ["unstable"] } tauri-build = "2" tauri-plugin-dialog = "2" tauri-plugin-opener = "2" tauri-plugin-notification = "2" tauri-plugin-http = "2" tauri-plugin-geolocation = "2" # ─── TESTING ─── mockito = "1.7.0" wiremock = "0.6" cookie = "0.18" chromiumoxide = { version = "0.7", features = ["tokio-runtime"], default-features = false } pretty_assertions = "1.4" insta = { version = "1.40", features = ["json", "yaml"] } # ─── PROCESS CONTROL ─── nix = { version = "0.29", features = ["signal", "process"] } which = "7" # ─── ANDROID ─── android_logger = "0.14" # ─── VALIDATOR ─── validator = { version = "0.20", features = ["derive"] } # ─── MISC ─── webbrowser = "0.8" hostname = "0.4" local-ip-address = "0.6.5" image = "0.25" libc = "0.2" trayicon = "0.2" # ═══════════════════════════════════════════════════════════════════════════════ # PROFILES # ═══════════════════════════════════════════════════════════════════════════════ [profile.release] lto = true opt-level = "z" strip = true panic = "abort" codegen-units = 1 [profile.ci] inherits = "release" lto = false codegen-units = 8 debug = false [profile.low-memory] inherits = "release" lto = "thin" codegen-units = 16 debug = false incremental = false opt-level = "s" [profile.dev] debug = 1 incremental = true codegen-units = 32 opt-level = 0