[package] name = "quicprochat-client" version = "0.1.0" edition.workspace = true description = "CLI client for quicprochat." license = "Apache-2.0 OR MIT" repository.workspace = true [[bin]] name = "qpc" path = "src/main.rs" [dependencies] quicprochat-core = { path = "../quicprochat-core" } quicprochat-proto = { path = "../quicprochat-proto" } quicprochat-kt = { path = "../quicprochat-kt" } openmls_rust_crypto = { workspace = true } # Serialisation + RPC capnp = { workspace = true } capnp-rpc = { workspace = true } # Async tokio = { workspace = true } tokio-util = { workspace = true } futures = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } bincode = { workspace = true } # Crypto — OPAQUE PAKE opaque-ke = { workspace = true } rand = { workspace = true } # Error handling anyhow = { workspace = true } thiserror = { workspace = true } # Crypto — for fingerprint verification in fetch-key subcommand sha2 = { workspace = true } argon2 = { workspace = true } chacha20poly1305 = { workspace = true } ciborium = { workspace = true } zeroize = { workspace = true } quinn = { workspace = true } quinn-proto = { workspace = true } rustls = { workspace = true } # Logging tracing = { workspace = true } tracing-subscriber = { workspace = true } # CLI clap = { workspace = true } # Local message/conversation storage rusqlite = { workspace = true } # Hex encoding/decoding hex = { workspace = true } # Secure password prompting (no echo) rpassword = "5" # mDNS discovery for mesh mode (Freifunk). Only compiled with --features mesh. mdns-sd = { version = "0.12", optional = true } # Optional P2P transport for direct node-to-node messaging. quicprochat-p2p = { path = "../quicprochat-p2p", optional = true } # Optional TUI dependencies (Ratatui full-screen interface). ratatui = { version = "0.29", optional = true, default-features = false, features = ["crossterm"] } crossterm = { version = "0.28", optional = true } # YAML playbook parsing (only compiled with --features playbook). serde_yaml = { version = "0.9", optional = true } # v2 SDK-based CLI (thin shell over quicprochat-sdk). quicprochat-sdk = { path = "../quicprochat-sdk", optional = true } quicprochat-rpc = { path = "../quicprochat-rpc", optional = true } rustyline = { workspace = true, optional = true } [lints] workspace = true [features] # Enable mesh-mode features: mDNS local peer discovery + P2P transport. # Build: cargo build -p quicprochat-client --features mesh mesh = ["dep:mdns-sd", "dep:quicprochat-p2p"] # Enable full-screen Ratatui TUI: cargo build -p quicprochat-client --features tui tui = ["dep:ratatui", "dep:crossterm"] # Enable playbook (scripted command execution): YAML parser + serde derives. # Build: cargo build -p quicprochat-client --features playbook playbook = ["dep:serde_yaml"] # v2 CLI over SDK: cargo build -p quicprochat-client --features v2 v2 = ["dep:quicprochat-sdk", "dep:quicprochat-rpc", "dep:rustyline"] [dev-dependencies] dashmap = { workspace = true } assert_cmd = "2" tempfile = "3" portpicker = "0.1" rand = "0.8"