Skip to content

Scaffold linux-gtk: native GTK4/Rust client for traverse-starter #54

Description

@enricopiovesan

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

  • cargo build succeeds on Ubuntu 22.04+ with GTK4 + libadwaita installed
  • Preferences dialog: manual URL + workspace, persisted to GSettings or config file
  • Health check status in header bar
  • Note input → execute → poll → renders output fields
  • Reset returns to idle
  • Unit tests for client.rs
  • README in linux-gtk/ covering: prerequisites, system deps, runtime URL config, build and run
  • scripts/ci/repository_checks.sh updated to acknowledge linux-gtk/ directory

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions