Desktop apps with Go and a web frontend, on the system webview.
MyGo apps show their UI in the webview the OS already has: WKWebView on macOS, WebKitGTK on Linux, WebView2 on Windows. An app is a single Go binary of a few megabytes, focused on low memory and CPU use.
- Pure Go, no cgo: build for every platform from any machine.
- Typed IPC: bind Go services, stream values through channels and send typed events; the TypeScript client is generated from your Go code.
- Desktop APIs: windows, menus, tray, dialogs, notifications, global shortcuts, deep links, file associations and more.
- Ready to ship: app bundles and disk images, Windows installers, Debian packages and a Linux install script, code signing, notarization, and signed auto-updates with delta updates and an update window in the manner of Sparkle.
type Greeter struct{}
// Greet returns a greeting.
func (Greeter) Greet(name string) string { return "Hello, " + name }
func main() {
mygo.Bind(Greeter{})
mygo.App.WhenReady(func() {
mygo.NewWindow(mygo.WindowOptions{Title: "Hello", URL: "/"})
})
if err := mygo.App.Run(); err != nil {
log.Fatal(err)
}
}import { Greeter } from "./mygo"; // generated
document.body.textContent = await Greeter.greet("Ada");bunx mygo-cli init my-app # or: npx mygo-cli init my-app
cd my-app
bun run devOr, without npm — the CLI is a Go program, which Go runs too:
go run github.com/egoist/mygo/cmd/mygo@latest init my-app
cd my-app
bun run devRead the documentation.
MyGo is at v0.1: the system webview on macOS 12+, Linux and Windows 10+ (x64 and arm64). v0.2 will add a bundled CEF option.
MIT