// GUI FEATURE MATRIX

Which power-user surfaces each desktop GUI app turns on · verified 2026-07-11 at the call site · companion to COMPONENTS.md (embeds) and the generated GUI_SCRIPT_ACTIONS.md (verb catalog)

Docs Source
// Color scheme

>_Executive summary

Where COMPONENTS.md says what an app pulls in, this says what an app turns on. Every full Tauri app mounts the same zgui-core shell, so the power-user surfaces — GUI scripting bus, tmux/powerline status bar, tmux tiling WM, editor vim, stryke hooks editor — are near-universal by construction (the identical cyberpunk HUD across apps is intentional). Several ship in zgui-core but must be init()'d per app, so presence is verified at the call site. The signal is at the outliers: zterminal ships native everything (no webview shell) and the JUCE plugins have no webview at all.

16
Webview apps on the shared shell
15
Bus-wired via zgui-bridge
4375
Live bus verbs / 16 apps
2
App-level vim (zoffice, zwire)

~What each surface is

SurfaceWhere it livesWhat it is
GUI scripting (bus)zgui-bridge (Rust socket) + zgui-core/webui/automation*.jsPer-app Unix socket so a stryke script drives the app by name — App::open("<app>")->call(...), and App::here() from a hook running inside it. Verbs cataloged in GUI_SCRIPT_ACTIONS.md.
tmux status barzgui-core/webui/powerline.js (ZGui.powerline)Powerline bar pinned to the bottom: C-b prefix light · scheme · tmux windows · VIM segment · CPU/MEM/SWAP/DISK/IO/NET/LOAD/UP/TEMP/BATT/LAN/WAN/host/clock. Ported from zwire's zstatus.js.
tmux tiling WMzgui-core/webui/tmux.js (ZGui.tmux)Real in-app tiling overlay: SESSION → WINDOWS (tabs) → PANES, split both ways, nested, copy-mode, synchronize-panes, command-prompt. Ported from zwire's ztmux.js.
vim (editor)zpwr-hooks-editormonaco-vimVim keybindings + :cmd line inside the Monaco hooks editor — present wherever the hooks editor is.
vim (app-level)app-ownedVim navigation over the whole app UI (hjkl / marks / / search / :cmd), not just inside an editor.
hooks editorzpwr-hooks-editorMonaco stryke-hooks editor embed.

#Track A — Tauri / webview apps

wired · · not wired · native app implements its own, not the zgui-core one · "Bus verbs" = the app's live automation-bus surface (verbs() over the socket: appShell + engine + dynamically-registered), read from the running app by bin/gen-gui-actions-live and cataloged in GUI_SCRIPT_ACTIONS.md.

AppGUI scriptingBus verbstmux bartmux WMvim (editor)vim (app)hooks editor
zpdf674·
zemail215·
zcite209··
zftp182·
zreq156·
ztunnel128··
zoffice230
zthrottle98·
zlatex65··
zgo144···
traderview1748···
zphoto101·
zstation52··
zcontainer425··
zmusic6·
ztorrent6·
Audio-Haxor241···
ztranslator65··
zmax-gui30·
zwirenative2161
zterminal·native3native3···

On the counts — every Bus-verbs number is the app's live surface, read from the running app over its automation-bus socket by bin/gen-gui-actions-live (a stryke script that opens each app, queries verbs() via a native Unix-domain socket, and closes it). It captures the whole runtime surface — appShell verbs, engine/opts.commands, and verbs registered dynamically at load — which a static source grep cannot see. A static verb source is often larger than the live bus surface (an engine may expose 218 internal ops but wire only 25 onto the bus), so these are the authoritative callable counts.

2 zwire scripts through its own native bus (zwire-host/src/zbus.rs, 161 verbs — the Chromium-superset browser control surface: tabs/windows/tab-groups/downloads/reading-list/power), not the zgui-bridge socket. Its powerline bar, tmux WM, and app-level vim originate here — zgui-core's powerline.js / tmux.js are the generalized ports of zwire's zstatus.js / ztmux.js.

3 zterminal is the GPU terminal itself: it ships a native status bar and native tmux (the ztmux-core wire-protocol client), not the zgui-core webview components. It doesn't mount the appShell, so it has no automation-bus socket, no hooks editor, and no editor vim (vim runs inside it).

4 zcontainer's bus has landed in git — zcontainer/app/src-tauri/src/bus.rs:752 calls serve("zcontainer", handler), so the 25 verbs the live catalog lists are reproducible from source and the row is ✓. 19 apps now call serve("<app>"): Audio-Haxor, traderview, zcite, zcontainer, zemail, zftp, zgo, zlatex, zmax-gui, zmusic, zoffice, zpdf, zphoto, zreq, zstation, zthrottle, ztorrent, ztranslator, ztunnel.

5 zlatex's 65 was read the same way every other number here was — from the running app over its automation-bus socket (serve("zlatex") in app/src-tauri/src/bus.rs). It mounts the powerline bar but not the tmux tiling WM — a two-pane editor/preview does not tile.

6 zmusic and ztorrent post-date the last gen-gui-actions-live run, so neither appears in the catalog and their live verb counts are unread. Every other column in their rows is verified from source.


#Track B — JUCE plugins

zpwr-daw engine · zpwr-synth · zpwr-fx · zpwr-midi-fx. No window.ZGui, no Tauri invoke. The automation-bus, powerline bar, and tmux WM are not wired for the JUCE surface — the bus substrate for Track B (C++/C-ABI, per-plugin-instance socket addressing) is still unbuilt (see GUI_AUTOMATION_BUS_CHECKLIST.md §0B). zpwr-daw's Tauri shell carries monaco-vim + the hooks editor through its embedded ztranslator-core webview; the JUCE ClipEngine half does not.


*Notes