egoist/mygo
egoist/mygo has 5,636 GitHub stars and 342 forks. GitHot measured +280 stars in 24 hours and +1,479 in 7 days. Last checked 2026-11-09 14:28 UTC. Last push 2026-11-02.
Develop desktop apps with native UI or web frontend in Go
Measured star growth
- in 24h
- +280
- in 7 days
- +1,479
- in 15 days
- Collecting history
- in 1 month
- Collecting history
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
Original
Desktop apps in Go, with native UI or a web frontend.
Sponsored by:
Each MyGo window shows one of two kinds of interface, and one app, or one window, can mix them:
- A web page, in the webview the OS already has: WKWebView on macOS, WebKitGTK on Linux, WebView2 on Windows. Build the frontend with any web tools; it calls your Go code through a TypeScript client generated from it.
- Native UI, written in Go alone with package
uiand drawn by MyGo itself on the GPU: no HTML, no JavaScript and no webview, so the window opens at once and takes little memory.
Either way, 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 for pages: bind Go services, stream values through channels and send typed events; the TypeScript client is generated from your Go code.
- A Go UI toolkit for native UI: flexbox and grid layout, widgets, text editing with input methods, virtualized lists, SVG icons, animations, screen reader support, and views you test without a window; Liquid Glass on every platform with the glass plugin; web pages inside native UI, under the menus and dialogs it shows over them.
- Desktop APIs for both: windows, menus, tray, dialogs, notifications, global shortcuts, deep links, file associations, recent documents, Now Playing and the media keys, the system accent color and accessibility settings, watching files, and more.
- Ready to ship: app bundles and disk images, Windows installers, Debian packages, PKGBUILDs for Arch Linux and a Linux install script, code signing, notarization, and signed auto-updates with delta updates and an update window in the manner of Sparkle.
A window with a web page, whose frontend calls Go:
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");
A window with native UI, whose view is a Go function of the app's state:
type counter struct{ n int }
func (s *counter) view(c *ui.Context) {
ui.Column(c).Fill().Center().Gap(12).Children(func() {
ui.Text(c, fmt.Sprint(s.n)).FontSize(40).Bold()
if ui.PrimaryButton(c, "Increment").Clicked() {
s.n++
}
})
}
func main() {
s := &counter{}
mygo.App.WhenReady(func() {
mygo.NewWindow(mygo.WindowOptions{
Title: "Counter",
Content: ui.View(s.view),
})
})
if err := mygo.App.Run(); err != nil {
log.Fatal(err)
}
}
Getting started
With Go 1.27.3+ and Bun, create an app with a web frontend:
bunx mygo-cli init my-app # or: npx mygo-cli init my-app
cd my-app
bun run dev
An app of native UI needs Go alone:
go run github.com/egoist/mygo/cmd/mygo@latest init -template native my-app
cd my-app
go tool mygo dev
Read the documentation.
License
MIT
Explore related projects
freeCodeCamp/freeCodeCamp
freeCodeCamp.org's open-source codebase and curriculum. Learn math, programming, and computer science for free.
458,809 starsdonnemartin/system-design-primer
Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.
377,424 starsreact/react
The library for web and native user interfaces.
252,439 starsvuejs/vue
This is the repo for Vue 2. For Vue 3, go to https://github.com/vuejs/core
212,621 stars