Rename the entire workspace:
- Crate packages: quicnprotochat-{core,proto,server,client,gui,p2p,mobile} -> quicproquo-*
- Binary names: quicnprotochat -> qpq, quicnprotochat-server -> qpq-server,
quicnprotochat-gui -> qpq-gui
- Default files: *-state.bin -> qpq-state.bin, *-server.toml -> qpq-server.toml,
*.db -> qpq.db
- Environment variable prefix: QUICNPROTOCHAT_* -> QPQ_*
- App identifier: chat.quicnproto.gui -> chat.quicproquo.gui
- Proto package: quicnprotochat.bench -> quicproquo.bench
- All documentation, Docker, CI, and script references updated
HKDF domain-separation strings and P2P ALPN remain unchanged for
backward compatibility with existing encrypted state and wire protocol.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
33 lines
1.5 KiB
Markdown
33 lines
1.5 KiB
Markdown
# 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<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:
|
||
|
||
```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.
|