# quicproquo-gui Native GUI for quicproquo using [Tauri 2](https://v2.tauri.app/). 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` 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: ```bash cargo run -p quicproquo-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.