Summary
Create apps/traverse-starter/linux-gtk/ — a native Linux client using GTK4 and Rust. Phase 1 uses HTTP polling (reqwest) matching web-react. Shares traverse-core-rs crate with the CLI client (see #59). SSE is the phase 2 upgrade path.
Phase 1 scope (HTTP polling — unblocked)
- Native GTK4 app calling the Traverse HTTP/JSON API via
reqwest + Tokio
- Text input →
POST /v1/workspaces/{workspace}/execute → poll → render result
- Runtime URL + workspace configurable via Preferences dialog
- Health check status in header bar
- GNOME UI conventions: AdwApplicationWindow, AdwHeaderBar, AdwToast
Stack
| Concern |
Choice |
| Language |
Rust |
| UI framework |
gtk4-rs + libadwaita |
| HTTP |
reqwest (async, tokio runtime) |
| Architecture |
ExecutionState enum in Arc<Mutex<>> — idle/loading/polling/done |
Directory structure
apps/traverse-starter/linux-gtk/
Cargo.toml
src/
main.rs
client.rs # reqwest HTTP client (execute + poll)
execution_state.rs # state enum + transitions
ui/
main_window.rs
preferences.rs
tests/
client_tests.rs
Phase 2 upgrade path (do not implement now)
When Traverse ships #525 / #526 / #527:
Definition of Done
Summary
Create
apps/traverse-starter/linux-gtk/— a native Linux client using GTK4 and Rust. Phase 1 uses HTTP polling (reqwest) matchingweb-react. Sharestraverse-core-rscrate with the CLI client (see #59). SSE is the phase 2 upgrade path.Phase 1 scope (HTTP polling — unblocked)
reqwest+ TokioPOST /v1/workspaces/{workspace}/execute→ poll → render resultStack
ExecutionStateenum inArc<Mutex<>>— idle/loading/polling/doneDirectory structure
Phase 2 upgrade path (do not implement now)
When Traverse ships #525 / #526 / #527:
reqwestSSE streaming (byte stream + event parsing)traverse-core-rscrate (see Extract traverse-core-rs: shared Rust HTTP/SSE crate for linux-gtk and cli-rust #59)execute()withsend_command("submit", json!({ "note": ... }))Definition of Done
cargo buildsucceeds on Ubuntu 22.04+ with GTK4 + libadwaita installedclient.rslinux-gtk/covering: prerequisites, system deps, runtime URL config, build and runscripts/ci/repository_checks.shupdated to acknowledgelinux-gtk/directory