Introduction
The declarative GUI framework for Go.
Gova is a declarative GUI toolkit for writing native desktop applications in Go. It combines struct-based views, modifier chains, and reactive state into a small, opinionated API built from plain Go primitives: structs and methods, interfaces, generics, and free functions. It is built on top of Fyne but hides the underlying widget toolkit so you write against a smaller, opinionated surface.
What Gova gives you
- Struct components. Declare a view as a struct with typed prop fields;
implement one
Bodymethod to render. - Call-site state.
State(s, initial)uses the caller's file and line as identity, so you never write string keys. - Modifier chains.
Text("hello").Font(Title).Bold().Padding(SpaceMD)is the canonical way to style. Modifier order is irrelevant. - Reactive primitives. States, signals, derived values, and stores all update the view automatically when they change.
- Navigation that is not magical. A
NavStackowns its stack,UseNavhands you a typed handle to push and pop, andNavLinkis the declarative shortcut. - Headless testing.
TestRenderrenders a component without opening a window, so you can assert on the tree and simulate taps.
What a program looks like

The program above, running on macOS.
The rest of the documentation walks through every concept and every exported identifier. Start with Getting started if you are new.
Conventions in these docs
- Code examples import the package as
"github.com/nv404/gova"and use names without an alias. Feel free to alias the import in your own code; the framework does not require a specific alias. - No feature is documented unless it exists in the current codebase.
- Mentions of "the scope" refer to the
*gova.Scopevalue passed to a component'sBodymethod or to aDefineclosure.