Skip to content

Desktop app

The desktop app shows the same data as wayglass watch and wayglass review in a window: the open intents, the changes policy routed to a person (approve or reject, with a required reason), overlaps, the audit timeline, and counters. It is built with Wails v2 and lives in desktop/ in the main repository as its own Go module.

It uses the login that wayglass login stored and keeps no secret of its own.

You need Go 1.25.8 or later, the Xcode command line tools on macOS (the GTK3 and WebKitGTK development packages on Linux), and the Wails v2 CLI:

Terminal window
go install github.com/wailsapp/wails/v2/cmd/wails@v2.16.0
wayglass login --worker https://wayglass.example.com --key-stdin # once
make desktop # tests, then wails build
open desktop/build/bin/Wayglass.app # macOS

Without the Wails CLI, on macOS:

Terminal window
cd desktop
CGO_LDFLAGS="-framework UniformTypeIdentifiers -mmacosx-version-min=10.13" \
go build -tags desktop,production -ldflags "-w -s" -o build/bin/wayglass-desktop .

Approvals are recorded under the display name set in the window: click the name in the title bar. It is saved in ~/.config/wayglass/desktop.yaml, never in the credentials file. Without one, the app uses the CLI’s identity: WAYGLASS_AGENT, else the agent stored by wayglass login, else user@host.

The app refuses to decide a change its identity wrote, and the Worker refuses it too.

The Worker has no route that lists projects, so the project picker starts with WAYGLASS_PROJECT and the .wayglass/config.yaml of the directory the app was started from. Add others with +. The list is kept in ~/.config/wayglass/desktop.yaml (project names and the display name only).

The app polls like wayglass watch: every 2 seconds, backing off to 30 seconds while the Worker does not answer. An idle poll reads only the audit log.

Notifications (the bell icon) need the bundled .app. A bare binary has no bundle id, so it only updates the window title.