64 lines
2.4 KiB
Markdown
64 lines
2.4 KiB
Markdown
# product.quicproquo
|
|
|
|
End-to-end encrypted group messaging over QUIC with MLS key agreement and post-quantum crypto.
|
|
|
|
## Tech Stack
|
|
|
|
- Rust 1.75+, Cargo workspace (12 crates)
|
|
- Crypto: OpenMLS 0.8, ML-KEM-768, X25519, ChaCha20-Poly1305, OPAQUE-KE
|
|
- Networking: Quinn (QUIC), Tokio, Tower middleware
|
|
- Serialization: Protobuf (prost) for v2, Cap'n Proto (legacy v1)
|
|
- DB: rusqlite with bundled SQLCipher
|
|
- Build: just (justfile), cargo-deny for supply chain audit
|
|
|
|
## Commands
|
|
|
|
```bash
|
|
just build # Build all workspace crates
|
|
just test # Run all tests
|
|
just test-core # Crypto tests only
|
|
just lint # clippy --workspace -- -D warnings
|
|
just fmt # Format check
|
|
just fmt-fix # Format fix
|
|
just proto # Rebuild protobuf codegen
|
|
just server # Build server binary
|
|
just client # Build client binary
|
|
cargo deny check # Supply chain audit (deny.toml)
|
|
```
|
|
|
|
## Architecture
|
|
|
|
```
|
|
crates/
|
|
quicprochat-core/ # Crypto primitives, MLS, double ratchet
|
|
quicprochat-proto/ # Protobuf definitions + prost codegen
|
|
quicprochat-rpc/ # RPC framework over QUIC
|
|
quicprochat-sdk/ # High-level client SDK
|
|
quicprochat-server/ # Server binary
|
|
quicprochat-client/ # CLI client binary
|
|
quicprochat-p2p/ # P2P mesh via iroh (feature-gated: `mesh`)
|
|
quicprochat-plugin-api/ # Plugin interface
|
|
quicprochat-kt/ # Kotlin/JNI bindings
|
|
meshservice/ # Generic decentralized service layer (FAPP, Housing)
|
|
apps/gui/ # GUI application
|
|
proto/ # .proto source files
|
|
schemas/ # Data schemas
|
|
docker/ # Container configs
|
|
```
|
|
|
|
## Rules
|
|
|
|
- `clippy::unwrap_used` is **deny** workspace-wide -- use proper error handling
|
|
- `unsafe_code` is **warn** -- avoid unless absolutely necessary, document why
|
|
- P2P crate (`quicprochat-p2p`) pulls ~90 extra deps via iroh -- only compiled with `mesh` feature
|
|
- All crypto operations must go through quicprochat-core, never inline crypto
|
|
- Protobuf is the v2 wire format; Cap'n Proto is legacy v1 only
|
|
|
|
## Do NOT
|
|
|
|
- Use `.unwrap()` or `.expect()` outside tests -- clippy will deny it
|
|
- Add crypto primitives outside of quicprochat-core
|
|
- Enable the `mesh` feature by default (heavy dependency tree)
|
|
- Mix v1 (capnp) and v2 (protobuf) serialization in new code
|
|
- Skip `cargo deny check` before adding new dependencies
|