Skip to content

Status

What has been proven on a real display, a real device or a real terminal; what is only compiled; and what CI does not cover yet.

These pages were checked against the modules at the tags listed under Modules. Where a module’s README and its code disagree, the pages follow the code.

Proven live

A codec tested in-process proves the codec. These are the places where the platform itself was asked:

WhatWhere it was proven
X11 windowCI, under Xvfb: a known pattern presented, captured and sampled; a click and a key synthesised with xdotool and the dispatched toolkit.Event asserted; Show/Hide/Raise read back from the server
Cocoa windowa macOS CI lane: a window opened and rendered, pixels sampled, a click and a key synthesised; Show/Hide/Raise asked of a real NSWindow from another goroutine and read back from AppKit
Win32 windowa Windows 11 arm64 VM: a real window rendering a VBox, a Label and a Button, three injected clicks driving its counter from 0 to 3 through the window procedure
Wayland windowagainst a fake compositor that enforces xdg-shell’s map and unmap rules
wasmbox windowheadless Chromium driving the real wasmdesk compositor: the composited pixels read back, a real click routed to the widget
Androidan Android 15 arm64 device: damage-only blits measured, memfd dirty memory measured, the accessibility tree benchmarked on the device
macOS traya real macOS session: the icon leaves the menu bar when the program stops, returns when it starts, and opens its menu
Linux trayCI against a real session bus: the name is claimed, the menu answers GetLayout, Quit withdraws it
Windows traythe icon and its menu on a Windows 11 VM
Terminal demosa real pty in CI: key bytes sent, the rendered frame asserted

Compiled, not run

  • Win32 Show/Hide/Raise: the decision table is unit-tested, the calls on the window’s thread are only compiled.
  • The Windows tray’s Attach.
  • webcanvas’s DOM loop (run_js.go): behind a js && wasm build tag, so it is outside the measured coverage; the applications that use it exercise it.
  • application’s native Run: opening a real window is excluded from its coverage gate; the contract, the event translation and the ready counter are covered.

Not done

  • The Windows and Linux trays ignore MenuItem.Icon: a row with an icon draws without it.
  • window’s Wayland back-end cannot Raise: xdg-shell has no such request, and xdg-activation needs a token from the user’s own input.
  • Android: android/arm64 only, because it is the only Android target Go links without cgo.
  • window.Screens returns ErrScreensUnsupported on js/wasm.

What CI covers

On 2026-10-10 the five gaps this page listed were closed:

ModuleWasNow
mvvmtkno coverage gate; amd64 and arm64 onlythe exact 100% gate the toolkit uses (it stood at 100.0% already); Linux on all six
applicationLinux, macOS and Windows on amd64 onlyLinux on all six; macOS and Windows on amd64 and arm64
trayfive OS/architecture pairsLinux on all six, macOS on two, Windows on one
mvvmlintno cross-buildLinux on all six, macOS and Windows
bricolinta “6 arches” step that built fiveloong64 added

So all seventeen libraries and tools now cross-build for the six 64-bit Linux architectures, and all nineteen gate at 100% statement coverage. app-template and gallery are browser applications and build for js/wasm, which is their only target.

Security

Measured with govulncheck (symbol level: only code the module can reach) on 2026-10-10:

  • 15 of the 19 modules reached vulnerable code: in the standard library of go1.27.1 (html/template, net/http, crypto/tls, mime/multipart; fixed in go1.27.2) and in golang.org/x/net v0.58.0 (http2, through gRPC in data; fixed in v0.60.0).
  • Fixed the same evening. Every module’s CI builds with go1.27.2, and every module requires x/net v0.60.0. It is an indirect requirement in most of them, which Renovate does not update, so it was raised by hand. A second govulncheck pass over all 19 modules finds no reachable vulnerability.
  • Released: android v0.16.0, app-template v0.5.0, application v0.8.0, bricolint v0.4.1, data v0.4.0, mvvm v0.15.0, mvvmlint v0.4.1, mvvmtk v0.15.0, painter v0.16.0, skin v0.3.0, svg v0.7.0, tray v0.15.0, webcanvas v0.4.1, window v0.89.0, each version derived from its API by gorelease. On 2026-10-11: toolkit v0.329.0, and tui v0.62.0, desktop v0.20.0, gallery v0.7.0 and isoicons v0.4.0. For those four gorelease cannot load the module graph, which reaches github.com/ajroetker/go-highway/hwy/goat v0.0.0, a version that was never published (ajroetker/go-highway#73), so their versions were derived with apidiff on linux, darwin and windows instead, under the same rule.
  • The workflows of all 23 repositories (31 files) were audited with actionlint and wfaudit: no privileged trigger, no write grant at the workflow level, no token left in an uploaded checkout, no untrusted expression in a shell step. Every workflow declares its permissions, so none depends on a repository’s default token.

Created on by tannevaled

Modified on by tannevaled