RyUI

iOS and Android · Go 1.26+

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

Write an iOS and Android app in Go alone. RyUI shows it with UIKit and Material 3, 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

$ ryui new hello && cd hello
$ ryui dev -ios      # the iOS simulator
$ ryui dev -android  # an emulator or a phone

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