mygo README

The project's README from github.com/egoist/mygo. As one markdown file: README.md.

MyGo

Desktop apps in Go, with a web frontend or a native UI.

Each MyGo window shows one of two kinds of interface, and one app can mix them:

Either way, an app is a single Go binary of a few megabytes, focused on low memory and CPU use.

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

mygo (egoist/mygo)

Searching Database…

2.2K ·GitHub
Что это?MyGo — набор инструментов для Go, чтобы строить десктопные приложения, которые либо встраивают веб-фронтенд в нативный webview ОС, либо рисуют полностью нативный UI средствами самого MyGo на GPU; в одном приложении можно сочетать оба варианта.
Это обёртка над webview или настоящий нативный UI-тулкит?И то и другое: окно может быть веб-страницей в webview ОС (WKWebView, WebKitGTK или WebView2), которая вызывает код на Go через сгенерированный TypeScript-клиент, либо чисто нативным UI, написанным только на Go с помощью пакета «ui», — без какого-либо HTML, JS или webview.
Как создать новое приложение?Для приложения с веб-фронтендом проект создают с помощью Go и Bun; для приложения с чисто нативным UI нужен только Go, без каких-либо JS-инструментов.
Что нужно установить перед сборкой приложения с веб-фронтендом?Нужны Go 1.27 или новее и Bun; для приложений только с нативным UI достаточно Go, потому что зависимости cgo нет, а для веб-страниц используется встроенный webview ОС.
Нужен ли cgo или платформенно-зависимый тулчейн для кросс-сборки?Нет, MyGo — чистый Go без cgo, поэтому бинарники для macOS, Windows и Linux можно собирать с одной машины без нативных тулчейнов.
Для каких операционных систем можно выпускать приложения?macOS, Linux и Windows; окна с веб-фронтендом используют webview соответствующей ОС (WKWebView, WebKitGTK, WebView2), а MyGo также умеет собирать бандлы приложений, образы дисков, установщики Windows и пакеты Debian.
Что входит в нативный UI-тулкит из коробки?Раскладку на flexbox и grid, виджеты, редактирование текста с методами ввода, виртуализированные списки, SVG-иконки, анимации, поддержку скринридеров и представления, которые можно тестировать без открытия окна.
Умеет ли он доставлять автообновления для моего приложения?Да, MyGo поддерживает подписанные автообновления с дельта-обновлениями и окном обновления в духе Sparkle, а также подписание кода и нотаризацию для распространения.
Насколько маленькие и лёгкие приложения на MyGo?Приложение компилируется в один Go-бинарник размером в несколько мегабайт; поскольку это чистый Go без cgo, а нативный UI вовсе обходится без webview, упор сделан на низкое потребление памяти и процессора.
Можно ли сочетать в одном приложении окно с веб-страницей и окно с нативным UI?Да: каждое окно MyGo — это либо веб-страница, либо нативный UI, и одно приложение может сочетать окна обоих типов.
Creator
egoist
Size
56.6 MB
Stars
2.2K
Age
22d
Commits · 90 Days