macOS · Windows · Linux

用 Go 写原生桌面应用。

Viva 直接通过各操作系统自己的接口和 GPU 绘制窗口、文字与组件。没有 WebView,没有浏览器引擎,也没有捆绑的运行时;应用空闲时完全不做事。

剥离后的可执行文件
1.6 MiB
空闲时的 GPU 提交
0
空闲 CPU
0.0%

这就是真实的组件

下面的控件是编译成 WebAssembly 的生产 Go 组件,不是 HTML 仿制品。浏览器版本用 Canvas2D 绘制;原生版本使用 Metal、Direct3D 11 或 Vulkan。

启用 JavaScript 后可运行预览;源码和安装命令仍可直接查看。

Viva 围绕什么构建

原生,不是浏览器

macOS 调用 Cocoa 与 Metal,Windows 调用 Win32 与 Direct3D 11,Linux 调用系统自带的 XCB 与 Vulkan 库。应用只链接系统框架和 Go 运行时,别无其他。

空闲就是空闲

未变化的一帧不做布局、不重建场景、不向 GPU 提交任何东西。默认没有后台定时器和轮询。

组件归你所有

viva add 把组件的 Go 源码复制进你的项目。没有组件注册表,运行时也没有样式表解析器:组件就是可以随意修改的普通 Go 代码。

无需窗口即可测试

无头驱动用显式调用运行真实的绘制器、输入路由和焦点规则,在 macOS 上还能截取窗口会显示的像素,测试不需要桌面会话。

一套 API,三个原生后端

macOS 使用 Cocoa 与 Metal,Windows 使用 Win32 与 Direct3D 11,Linux 使用 X11 与 Vulkan。应用只链接系统框架和 Go 运行时,别无其他。

只做桌面

Viva 面向 macOS、Windows 和 Linux。移动端不在范围内,所以桌面 API 不会为了给移动端留门而被削弱。

实测,可复现

每个数字都引自仓库里的基准报告,写明了机器和构建方式——你可以自己重新跑一遍。

剥离后的可执行文件
1.6 MiB1,697,506 字节,带 Metal 管线的最小 macOS 窗口(M0,Apple 芯片)。
空闲时的 GPU 提交
0首次呈现之后,未变化的窗口不提交任何东西,稳定后 CPU 读数为 0.0%(M0)。
保留式场景,10,000 个节点
2.0 ns · 12.4 ns先是清空一个未变化的场景,再是更新其中一个节点,两者都是零分配(M1)。
组件展示应用
1.9 MiB剥离后 1,972,834 字节:带预览与图标的原生展示应用(Apple M2 Pro)。

完整基准 →

目前能在哪里运行

macOS

Cocoa · Metal · CoreText

原生文本输入,支持中文输入法组合;无障碍、状态栏图标,可打包为 .app、.zip 与 .dmg。

Windows

Win32 · Direct3D 11 · DirectWrite

原生窗口、Direct3D 渲染、系统文字,以及 amd64 与 arm64 打包构建。

Linux

X11 · Vulkan · Pango/Cairo

通过系统 XCB 与 Vulkan 库使用 X11,Pango/Cairo 文字,并提供打包构建。

平台详情 →