Asuka

Native apps in Go.The platform's widgets, not a web view.

Write one app in Go alone, for phones, desktops and the web. Asuka shows it with each platform's own widgets, and updates only what changed.

Get started
main.go
func Counter() ui.Node {
	count := signal.New(0)
	label := signal.Func(func() string {
		return fmt.Sprintf("Count: %d", count.Get())
	})
	return ui.SafeArea(ui.Style{Align: ui.AlignCenter, Justify: ui.JustifyCenter},
		ui.Text(label),
		ui.Button(ui.ButtonProps{
			Title:   ui.Val("Add"),
			Variant: ui.ButtonFilled,
			OnPress: func() { count.Set(count.Peek() + 1) },
		}),
	)
}

func main() { app.Run(Counter) }

Run it

$ asuka new hello && cd hello
$ asuka dev                    # this computer: Mac, PC or Linux
$ asuka dev -platform ios      # the iOS simulator
$ asuka dev -platform android  # an emulator or a phone
$ asuka dev -platform web      # your browser

Save a Go file and the app reloads in a moment, its state kept. See the examples: the gallery shows every component.