gova-homepage
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.
$go get github.com/nv404/gova@latestshell
Go 1.26+macOSWindowsLinux
package main
import . "github.com/nv404/gova"
var Counter = Define(func(s *Scope) View {
count := State(s, 0)
return VStack(
Text(count.Format("Count: %d")).Font(Title),
Button("+", func() { count.Update(func(n int) int { return n + 1 }) }),
Button("-", func() { count.Update(func(n int) int { return n - 1 }) }),
)
})
func main() { Run("Counter", Counter) }
Binary size32 MBcounter, default go build
Stripped23 MBgo build -ldflags "-s -w"
Memory idle~80 MBRSS, counter running
Go version1.26+plus C toolchain for cgo
LicenseMITno runtime fees
Measured on macOS arm64 with Go 1.26.2, counter example, static build. Your numbers will vary by platform and feature set.
What the framework gives you.
01 / 06
Components as structs
Views are plain Go structs. Props are fields, defaults are zero values, and composition is just function calls. The compiler checks your UI.
02 / 06
Explicit reactive scope
State, signals, and effects live on a Scope you can see. No hidden scheduler, no hook-order rules, no re-render surprises.
03 / 06
Real native dialogs
NSAlert, NSOpenPanel, and NSDockTile on macOS through cgo. Fyne fallbacks on Windows and Linux. Same API everywhere.
04 / 06
One static binary
go build produces a single executable. No JavaScript runtime, no embedded browser, no extra assets to bundle.
05 / 06
Hot reload in dev
gova dev watches Go files and rebuilds on save. Ignores.git, node_modules, vendor, and _test.go files by default.
06 / 06
Cross-platform by default
One codebase compiles to macOS, Windows, and Linux. Platform-specific code degrades to safe fallbacks so your app keeps running.
Platform support.
Gova compiles to macOS, Windows, and Linux from the same Go file. Platform integrations degrade to safe fallbacks so portable code stays portable.
FeaturemacOSWindowsLinux
Supported
Supported
Supported
Hot reload via gova dev
Supported
Supported
Supported
App icon at runtime
Supported
Supported
Supported
Native dialogs
NSAlert and NSOpenPanel on macOS. Fyne fallback elsewhere.
Supported
Partial
Partial
NSDockTile on macOS. Planned on Windows and Linux.
Supported
Planned
Planned
Command-line tools.
The gova CLI ships alongside the framework. Install it with go install github.com/nv404/gova/cmd/gova@latest.
Hot reload
gova dev
Watch.go files in the working directory, rebuild on save, and relaunch the window. Ignores.git, node_modules, vendor, and _test.go.
Compile
gova build
Produce a static binary for the current platform. Pair with -ldflags "-s -w" to strip debug info for a smaller artifact.
Execute
gova run
Build and launch the app once, without file watching. Useful for CI smoke tests or one-off demos.
Quickstart.
01
Install the prerequisites
Go 1.26 or later, plus a C toolchain for cgo. On macOS: Xcode Command Line Tools. On Linux: build-essential and libgl1-mesa-dev. On Windows: mingw-w64.
See the installation guide for platform specifics.
Pull the module
Add gova to a new or existing Go module.
go mod init myapp
go get github.com/nv404/gova
Run the counter example
Clone the repo and run the example directly. No scaffold, no boilerplate.
git clone https://github.com/nv404/gova
cd gova
go run ./examples/counter
Try it. Break it. File an issue.
Gova is pre-1.0 and the API is still moving. If you build a Go desktop app with it, we want to hear what worked and what did not.