v0.1.0

框架:

明日香

跨平台原生控件,用 Go 写。

UIKit、Material、AppKit、Win32、GTK 和 DOM。不是 GPU 自绘,也不是 Web View。

只用 Go 写一个应用,就能跑在手机、桌面和 Web 上。每个平台都用自己的控件、输入法和无障碍功能来呈现它,Asuka 只更新真正变化的部分。

快速上手

可运行于 iOS (UIKit), Android (Android Views · Material 3), macOS (AppKit), Windows (Win32,Windows 11 外观), Linux (GTK 4 · libadwaita), Web (DOM).

规格

只用 Go
一种语言。
iOS · Android · macOS · Windows · Linux · Web
六个平台。
全是各平台自己的控件
零 Web View。

转译

写的是 Go,
跑的是原生。

ui.Column(ui.Style{Gap: 12},
  1. ui.TextField(ui.TextFieldProps{Value: name}),UITextField
  2. ui.Toggle(ui.ToggleProps{Value: alerts}),UISwitch
  3. ui.Slider(ui.SliderProps{Value: volume}),UISlider
  4. ui.Button(ui.ButtonProps{Title: ui.Val("保存")}),UIButton
)

这里的控件只是按各平台配色画的示意图;在真机上,它们就是平台自己的控件。

出击

一名驾驶员,
六台机体。

  1. 01 号机 运行中

    iOS

    UIKit

    同步率 100%
  2. 02 号机 运行中

    Android

    Android Views · Material 3

    同步率 100%
  3. 03 号机 运行中

    macOS

    AppKit

    同步率 100%
  4. 04 号机 运行中

    Windows

    Win32,Windows 11 外观

    同步率 100%
  5. 05 号机 运行中

    Linux

    GTK 4 · libadwaita

    同步率 100%
  6. 06 号机 运行中

    Web

    DOM

    同步率 100%

第 00 话 / Hello

你好,原生。

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) }
Counter() · 运行
1 次
label · 运行
1 次
上次提交
14 个 op

运行中

Count: 0

发给宿主的 op

  1. 第 01 次提交 · 14 个 op · 2 批
  2. Create 1 View
  3. Command 1 Locale 00656e
  4. Create 2 Text
  5. SetProp 2 Text="Count: 0"
  6. Create 3 Button
  7. SetProp 3 Variant=1
  8. SetProp 3 Title="Add"
  9. Listen 3 Press
  10. Insert 1 2 @0
  11. Insert 1 3 @1
  12. SetRoot 1
  13. SetFrame 2 163,396.66666 64x20
  14. SetFrame 3 171,416.66666 48x44
  15. SetFrame 1 0,0 390x844

即 host/fake 为这段代码记录下的 op,屏幕为 iPhone 的 390 × 844。

运行全平台

$ asuka new hello && cd hello$ asuka dev                     # 本机:Mac、PC、Linux$ asuka dev --platform ios      # iOS 模拟器$ asuka dev --platform android  # Android 模拟器或手机$ asuka dev --platform web      # 浏览器

保存 Go 文件,应用片刻间就会重新加载,状态原样保留。更多用法请看示例,其中的 gallery 展示了全部组件。

全六话

它能做什么

下回预告

Go 在核心,万屏皆原生。