Gova is a declarative GUI framework for Go that aims to simplify desktop application development across macOS, Windows, and Linux using a single Go codebase. It avoids embedding web technologies like Chromium or JavaScript runtimes, instead relying on native platform APIs where available—such as NSAlert and NSOpenPanel on macOS—and falling back to Fyne on other platforms. The project positions itself as an alternative to GUI toolkits that require external toolchains, complex build steps, or runtime dependencies. As of mid-2024, it has 298 stars on GitHub and is licensed under the MIT license.

What it does
Gova provides a typed, struct-based approach to building UIs in Go, where components are plain Go structs and views are defined declaratively. It uses explicit reactive scopes to manage state and effects—no hidden reactivity, no hook ordering rules, no virtual DOM. Its CLI supports hot reloading with optional UI state persistence across rebuilds. Binaries are statically linked and self-contained: a minimal counter app builds to around 32 MB (or 23 MB when stripped), with idle memory usage near 80 MB on macOS arm64. The framework wraps Fyne internally but exposes its own stable API surface, insulating users from renderer-level changes.

Getting it running
To use Gova, you need Go 1.26 or newer, plus a C toolchain—Xcode Command Line Tools on macOS, build-essential and libgl1-mesa-dev on Debian/Ubuntu Linux, or MinGW on Windows. Install the library with:

go get github.com/nv404/gova@latest

Optionally, install the CLI tool for development workflows:

go install github.com/nv404/gova/cmd/gova@latest

Then run an example like the counter app:

gova dev ./examples/counter

This command watches Go source files, rebuilds on save, and relaunches the app. You can also build a standalone binary directly with go build, as Gova produces one static executable without external dependencies.

Who this is for
Developers who write Go and want to ship native desktop apps without learning JavaScript, maintaining web frontend tooling, or managing cross-platform build matrices may find Gova useful. Its API design favors Go idioms—structs over configuration objects, explicit scopes over implicit reactivity—so it fits teams already invested in Go’s type system and tooling. It is appropriate for internal tools, CLI-adjacent utilities with a GUI, or lightweight desktop applications where binary portability matters more than minimal footprint. Because it depends on cgo and native platform bindings, it is less suited for environments where C toolchains are unavailable or disallowed (e.g., certain constrained CI runners or pure Go-only deployments).

How it compares
Fyne is the most direct comparison: Gova builds on top of Fyne but abstracts it away, offering a different API layer focused on declarative composition and explicit state. Unlike Fyne’s imperative widget tree construction, Gova uses typed components and reactive scopes. Compared to Wails, which embeds a web frontend in a native window, Gova has no HTML/CSS/JS layer—so there’s no web view overhead or web security model to manage. Walk, another Go GUI library, uses Windows-native APIs only and does not target macOS or Linux. giu, built on Dear ImGui, offers immediate-mode rendering and low-level control but lacks native platform integrations like macOS file dialogs or dock menu support. Gova’s use of cgo for macOS-specific features makes it heavier than pure-Go alternatives like eframe, but eframe relies on Rust and WebAssembly and targets web and native via different backends. Gova’s binary size (~23–32 MB) sits between those extremes—larger than minimal pure-Go GUIs, smaller than Electron-based tools.

Gova is still in pre-1.0 development, and the README notes that the API will change before v1.0.0. Users planning production deployments are advised to pin to a specific tag rather than @latest. It is not intended for high-performance UIs requiring sub-16ms frame updates, nor for applications where avoiding cgo is a hard requirement. Documentation is hosted at gova.dev, and the source code is available at github.com/NV404/gova.