[workspace] resolver = "2" members = [ "crates/quicprochat-core", "crates/quicprochat-proto", "crates/quicprochat-plugin-api", "crates/quicprochat-kt", "crates/quicprochat-rpc", "crates/quicprochat-sdk", "crates/quicprochat-server", "crates/quicprochat-client", # P2P crate uses iroh (~90 extra deps). Only compiled when the `mesh` # feature is enabled on quicprochat-client. "crates/quicprochat-p2p", # Generic decentralized service layer (FAPP, Housing, etc.) "crates/meshservice", ] [workspace.package] edition = "2021" rust-version = "1.75" repository = "https://github.com/quicprochat/quicprochat" description = "End-to-end encrypted group messaging over QUIC" keywords = ["encryption", "messaging", "quic", "mls", "post-quantum"] categories = ["cryptography", "network-programming"] # Shared dependency versions — bump here to affect the whole workspace. [workspace.dependencies] # ── Crypto ──────────────────────────────────────────────────────────────────── openmls = { version = "0.8" } openmls_rust_crypto = { version = "0.5" } openmls_traits = { version = "0.5" } openmls_memory_storage = { version = "0.5" } # tls_codec must match the version used by openmls 0.8 (which uses 0.4) to avoid # duplicate Serialize trait versions in the dependency graph. tls_codec = { version = "0.4", features = ["derive"] } # ml-kem 0.2 is the current stable release (FIPS 203, ML-KEM-768). ml-kem = { version = "0.2" } x25519-dalek = { version = "2", features = ["static_secrets"] } ed25519-dalek = { version = "2", features = ["rand_core"] } sha2 = { version = "0.10" } hmac = { version = "0.12" } hkdf = { version = "0.12" } ciborium = { version = "0.2" } chacha20poly1305 = { version = "0.10" } opaque-ke = { version = "4", features = ["ristretto255", "argon2"] } zeroize = { version = "1", features = ["derive", "serde"] } subtle = { version = "2" } argon2 = { version = "0.5" } rand = { version = "0.8" } serde = { version = "1", features = ["derive"] } serde_json = { version = "1" } bincode = { version = "1" } # ── Serialisation (v2: protobuf) ───────────────────────────────────────────── prost = { version = "0.13" } prost-types = { version = "0.13" } prost-build = { version = "0.13" } # ── Serialisation (v1 legacy — capnp, used by existing server/client) ──────── capnp = { version = "0.19" } capnp-rpc = { version = "0.19" } # ── Async / networking ──────────────────────────────────────────────────────── tokio = { version = "1", features = ["macros", "rt-multi-thread", "time", "sync", "signal", "io-util", "io-std"] } tokio-util = { version = "0.7", features = ["codec", "compat"] } futures = { version = "0.3" } quinn = { version = "0.11" } quinn-proto = { version = "0.11" } rustls = { version = "0.23", default-features = false, features = ["std", "ring"] } rcgen = { version = "0.13" } # ── Middleware ──────────────────────────────────────────────────────────────── tower = { version = "0.5", features = ["util", "limit", "timeout"] } # ── Database ───────────────────────────────────────────────────────────── rusqlite = { version = "0.31", features = ["bundled-sqlcipher"] } # ── Encoding ───────────────────────────────────────────────────────────────── hex = { version = "0.4" } bytes = { version = "1" } # ── Server utilities ────────────────────────────────────────────────────────── dashmap = { version = "5" } tracing = { version = "0.1" } tracing-subscriber = { version = "0.3", features = ["env-filter"] } # ── Error handling ──────────────────────────────────────────────────────────── anyhow = { version = "1" } thiserror = { version = "1" } # ── Config / CLI ────────────────────────────────────────────────────────────── toml = { version = "0.8" } clap = { version = "4", features = ["derive", "env"] } rustyline = { version = "14" } # ── Certificate parsing ────────────────────────────────────────────────────── x509-parser = { version = "0.16", default-features = false } # ── Build-time ──────────────────────────────────────────────────────────────── capnpc = { version = "0.19" } [workspace.lints.rust] unsafe_code = "warn" [workspace.lints.clippy] unwrap_used = "deny" [profile.release] opt-level = 3 lto = "thin" codegen-units = 1 strip = "symbols" [profile.dev] opt-level = 0 debug = true