Repolode
egoist

egoist/mygo

A Go framework for building desktop apps with either a web frontend in the OS webview or a native UI drawn on the GPU.

Stars
5,015
Forks
303
Open issues
100
Last commit
20 hours ago

What is it?

MyGo lets developers build desktop applications in Go with two kinds of window: one that shows a web page in the webview already provided by the operating system (WKWebView on macOS, WebKitGTK on Linux, WebView2 on Windows), and one that uses a native Go UI toolkit drawn by MyGo on the GPU, with no HTML, JavaScript or webview. A single window or app can mix both.

For web frontends, Go services are bound and exposed through a TypeScript client generated from the Go code, with typed IPC, channels for streaming values and typed events. The project is pure Go without cgo, so it can be cross-compiled from any machine. Desktop APIs cover windows, menus, tray, dialogs, notifications, global shortcuts, deep links, file associations and system accent color.

The project also includes packaging and distribution tooling: app bundles, disk images, Windows installers, Debian packages, code signing, notarization and signed auto-updates with delta updates.

Key features

  • 01Web page windows that call Go code through a generated TypeScript client.
  • 02Native UI toolkit written in Go with flexbox and grid layout, widgets and virtualized lists.
  • 03Pure Go with no cgo, enabling cross-platform builds from any machine.
  • 04Desktop APIs for menus, tray, dialogs, notifications, global shortcuts and deep links.
  • 05Packaging and signed auto-updates for macOS, Windows and Linux.

Use cases

  • Building a desktop tool where the team wants Go for both backend logic and UI.
  • Creating lightweight native-UI apps that open quickly and use little memory.
  • Shipping a cross-platform desktop app with code signing and auto-updates.
  • Adding a Go-backed web frontend to a desktop app using the system webview.

Quick start

  1. 1

    Install Go 1.27.3+ and Bun

  2. 2

    Create a web-frontend app

    bunx mygo-cli init my-app
  3. 3

    Enter the project folder

    cd my-app
  4. 4

    Start the development server

    bun run dev

Things to know

  • The quick start requires Go 1.27.3 or newer and Bun.

Featured in Repolode Weekly

In collections

Topics

FAQ

What is mygo?
A Go framework for building desktop apps with either a web frontend in the OS webview or a native UI drawn on the GPU. MyGo lets developers build desktop applications in Go with two kinds of window: one that shows a web page in the webview already provided by the operating system (WKWebView on macOS, WebKitGTK on Linux, WebView2 on Windows), and one that uses a native Go UI toolkit drawn by MyGo on the GPU, with no HTML, JavaScript or webview. A single window or app can mix both.
Is mygo free to use? What license does it have?
mygo is open source under the MIT license. Check the license terms before using it in commercial products.
Is mygo still maintained?
Actively maintained. The last commit to mygo was on Nov 6, 2026.
What can I use mygo for?
Building a desktop tool where the team wants Go for both backend logic and UI. Creating lightweight native-UI apps that open quickly and use little memory. Shipping a cross-platform desktop app with code signing and auto-updates. Adding a Go-backed web frontend to a desktop app using the system webview.
How do I install mygo?
Install Go 1.27.3+ and Bun Create a web-frontend app: bunx mygo-cli init my-app Enter the project folder: cd my-app Start the development server: bun run dev
Where can I get mygo?
The source code and installation instructions are on GitHub: https://github.com/egoist/mygo

Summary generated by AI from the project's README. GitHub stats refresh daily.

Related projects