Gova: Declarative GUI Framework for Go
NV404/govadeclarative GUI framework for Go
AI Analysis
Build native desktop apps with typed components and reactive state in pure Go.
Built for Go developers looking to build cross-platform desktop applications without JavaScript or embedded browsers.
From the README
Gova
The declarative GUI framework for Go. Build native desktop apps for macOS, Windows, and Linux from a single Go codebase — typed components, reactive state, real platform dialogs, and one static binary. No JavaScript runtime, no embedded browser, no C++ toolchain to learn.
Status: pre-1.0. The API will shift before
v1.0.0. Pin a tag in production.
package main
import g "github.com/nv404/gova"
type Counter struct{}
func (Counter) Body(s *g.Scope) g.View {
count := g.State(s, 0)
return g.VStack(
g.Text(count.Format("Count: %d")).Font(g.Title),
g.HStack(
g.Button("-", func() { count.Set(count.Get() - 1) }),
g.Button("+", func() { count.Set(count.Get() + 1) }),
).Spacing(g.SpaceMD),
).Padding(g.SpaceLG)
}
func main() {
g.Run("Counter", g.Component(Counter{}))
}
Why Gova
- Components as structs. Views are plain Go structs with typed prop fields; defaults are zero values; composition is plain function calls. No magic property wrappers, no string keys, no hook-ordering rules.
- Explicit reactive scope. State, signals, and effects live on a
Scopeyou can see. No hidden scheduler, no re-render surprises, no Rx, no Redux. - Real native integrations where it matters.
NSAlert,NSOpenPanel,NSSavePanel, andNSDockTilebadge/progress/menu on macOS through cgo. Fyne fallbacks on Windows and Linux — same API everywhere. - One static binary.
go buildproduces a single executable. No JavaScript runtime, no embedded browser, no extra assets to bundle. - Hot reload that actually reloads.
gova devwatches Go files, rebuilds on save, and relaunches — with an opt-inPersistedStateso UI state survives the reload. - Built on Fyne, but Fyne stays internal. The public API is yours to rely on. We swap out renderer details without breaking your code.
At a glance
| Metric | Value | Notes |
|---------------|-----------|-------------------------------------|
| Binary size | ~32 MB | counter example, default build |
| Stripped | ~23 MB | go build -ldflags "-s -w" |
| Memory idle | ~80 MB | RSS, counter running |
| Go version | 1.26+ | plus a C toolchain for cgo |
| License | MIT | no runtime fees |
Measured on macOS arm64 with Go 1.26.2. Numbers will vary by platform and feature set.
Install
go get github.com/nv404/gova@latest
Optional CLI for dev / build / run:
go install github.com/nv404/gova/cmd/gova@latest
gova dev ./examples/counter
Prerequisites: Go 1.26+ and a C toolchain (Xcode CLT on macOS,
build-essential + libgl1-mesa-dev on Linux, MinGW on Windows).
Docs
Full documentation lives at gova.dev (or run
npm run dev inside docs-site/ for local browsing). Key sections:
- Getting started
- [Core concepts](