Files
quicproquo/crates/quicnprotochat-gui
Christian Nennemann 750b794342 DM channels (createChannel), channel authz, security/docs, future improvements
- 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>
2026-02-23 22:54:28 +01:00
..

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 LocalSet and a request-response loop.
  • The UI thread sends commands over an mpsc channel: Whoami { state_path, password } or Health { server, ca_cert, server_name }.
  • For each request, the backend runs sync code (whoami) or LocalSet::run_until(async { ... }) (health). It then sends Result<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 whoami and shows JSON (identity_key, fingerprint, etc.).
  • Health server address; calls health and 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.