- Add createChannel RPC (node.capnp @18): create 1:1 channel, returns 16-byte channelId - Store: create_channel(member_a, member_b), get_channel_members(channel_id) - FileBackedStore: channels.bin; SqlStore: migration 003_channels, schema v4 - channel_ops: handle_create_channel (auth + identity, peerKey 32 bytes) - Delivery authz: when channel_id.len() == 16, require caller and recipient are channel members (E022/E023) - Error codes E022 CHANNEL_ACCESS_DENIED, E023 CHANNEL_NOT_FOUND - SUMMARY: link Certificate lifecycle; security audit, future improvements, multi-agent plan docs - Certificate lifecycle doc, SECURITY-AUDIT, FUTURE-IMPROVEMENTS, MULTI-AGENT-WORK-PLAN - Client/core/tls/auth/server main: assorted fixes and updates from review and audit Co-authored-by: Cursor <cursoragent@cursor.com>
quicnprotochat-gui
Native GUI for quicnprotochat using Tauri 2. The UI runs in a webview; all server-facing work (capnp-rpc, node_service::Client) runs on a dedicated backend thread with a tokio LocalSet, since that code is !Send.
Backend threading model
- A single backend thread runs a tokio
LocalSetand a request-response loop. - The UI thread sends commands over an
mpscchannel:Whoami { state_path, password }orHealth { server, ca_cert, server_name }. - For each request, the backend runs sync code (whoami) or
LocalSet::run_until(async { ... })(health). It then sendsResult<String, String>back on the provided reply channel. - Tauri commands (
whoami,health) block on that reply so the frontend gets a simple async-style result.
How to run
From the workspace root:
cargo run -p quicnprotochat-gui
Linux: Tauri uses GTK. Install development packages if the build fails, e.g.:
- Debian/Ubuntu:
sudo apt install libgtk-3-dev libwebkit2gtk-4.1-dev - Fedora:
sudo dnf install gtk3-devel webkit2gtk4.1-devel
Frontend
The frontend is static HTML in ui/index.html (no npm or build step). It provides:
- Whoami – state path (and optional password); calls
whoamiand shows JSON (identity_key, fingerprint, etc.). - Health – server address; calls
healthand shows server status and RTT JSON.
Default CA cert and server name for health are the same as the CLI (data/server-cert.der, localhost) unless overridden via optional params.