Hi everyone,
I’ve built Hakari — a lightweight Go framework for building desktop applications and games with HTML, CSS, and JavaScript as the UI layer.
What it does
Hakari wraps the native WebView (via abemedia/go-webview) in a simple, ergonomic API:
- Screens — each screen has its own HTML/CSS/JS, with state preserved between transitions
- Data binding — Go and JavaScript share data through
window.hakari - Events — call Go functions from JS, update JS from Go
- Save/Load — JSON persistence in the OS config directory
- File dialogs — open any file, served through a local HTTP server
- Asset bundling — separate CSS/JS files are inlined into a single HTML at load time
- Built-in DevTools — debug your UI like a web page
Why I made it
I tried Fyne, Wails, and Gio. Each solves part of the problem but creates a new one:
- Fyne — awkward API, thread safety issues
- Wails — pulls in Node.js and WebView2 SDK
- Gio — steep learning curve, immediate-mode
What I wanted was: download → write HTML → write Go → run → it works. No dependencies, no bundlers, no configs.
Hakari is that. No CGo. No Node.js. One binary. Under 100 MB of RAM.
Why it’s useful
Compared to existing Go GUI options:
- No CGo — cross-compilation works out of the box
- No Node.js — no build step, no npm
- One binary — all assets embedded via
//go:embed - DevTools — debug your UI as a web page (Fyne/Gio don’t have this)
- Familiar workflow — write HTML/CSS/JS like on the web
Project
- GitHub:
github [dot] com/Muchprow/hakari - Documentation:
github [dot] com/Muchprow/hakari/blob/main/docs/BOOK.md - Demo: see
examples/demoin the repo
Currently early development, but the core is working. I’d love feedback, especially from anyone who’s tried other Go GUI frameworks.
With love from Ukraine ![]()