GitHub - NV404/gova
We believe that this document is fully AI-generated.
Hacker News Article AI Analysis
Content Label
AI
AI Generated
100%
Human
0%
Window 1 - 95% AI-Generated
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.Define(func(s *g.Scope) g.View {
return 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 Scope
you can see. No hidden scheduler, no re-render surprises, no Rx, no Redux.
Real native integrations where it matters. NSAlert, NSOpenPanel,
NSSavePanel, and NSDockTile badge/progress/menu on macOS through cgo.
Fyne fallbacks on Windows and Linux — same API everywhere.
One static binary. go build produces a single executable. No
JavaScript runtime, no embedded browser, no extra assets to bundle.
Hot reload that actually reloads. gova dev watches Go files, rebuilds
on save, and relaunches — with an opt-in PersistedState so 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.
Window 2 - 79% AI-Generated
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
State and effects
Native dialogs
Platform integration
CLI
Examples
Every example in examples/ is a runnable program:
Example
What it shows
counter
The minimum viable Gova app
todo
State, lists, forms
fancytodo
Categories, derived state, richer layout
notes
Nav, multi-view, stores
themed
Dark/light mode, semantic colors
components
Viewable composition, ZStack, Scaffold
dialogs
Native dialogs, dock badge / progress / menu, app icon
go run ./examples/dialogs
Platform support
Feature
macOS
Windows
Linux
Core UI
Supported
Supported
Supported
Hot reload (gova dev)
Supported
Supported
Supported
App icon (runtime)
Supported
Supported
Supported
Native dialogs
NSAlert / NSOpenPanel
Fyne fallback
Fyne fallback
Dock / taskbar
NSDockTile
Planned
Planned
CLI
The gova CLI ships alongside the framework.
Window 3 - 90% AI-Generated
Command
Purpose
Notes
gova dev
Hot reload
Watch .go files, rebuild on save, relaunch the window
gova build
Compile
Static binary to ./bin/<name>
gova run
Execute
Build and launch once, no file watching
Contributing
See CONTRIBUTING.md. Tests are the contract:
go test ./...
Issues, discussions, and PRs all live on
GitHub. Security issues? See
SECURITY.md.
License
MIT. Gova is built on Fyne (BSD-3), which ships
with the module as an internal dependency.