// 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
4308
Live bus verbs / 17 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
zpdf649·
zcite206·
zemail208·
zftp160·
zreq151·
ztunnel125·
zoffice199
zthrottle91·
zgo140·
traderview1732·
zphoto101·
zstation37·
zcontainer25·
Audio-Haxor239·
ztranslator54·
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).


#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