Skip to content
Tech News
← Back to articles

Show HN: Gova – The declarative GUI framework for Go

read original get Gova GUI Framework for Go → more articles
Why This Matters

Gova introduces a declarative, native GUI framework for Go that enables developers to create cross-platform desktop applications with a single codebase. Its emphasis on simplicity, explicit reactive scope, and native integrations makes it a compelling choice for Go developers seeking efficient and maintainable desktop apps without complex dependencies. This development could streamline desktop app development in the Go ecosystem, reducing reliance on web-based or multi-language solutions.

Key Takeaways

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 . 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.

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.

State, signals, and effects live on a 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.

, , , and 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.

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.

... continue reading