vivaui/viva

开发工具

用 Go 构建原生桌面应用,直接走各平台自己的窗口与 GPU API,不依赖 WebView,也不打包运行时。

101
9
Go
Apache-2.0
创建于 7 天前

Viva 是一个面向 macOS、Windows 和 Linux 的 Go 桌面 UI 框架。它不内嵌 WebView,也不自带浏览器引擎,而是直接调用平台自身的窗口与 GPU API:macOS 上是 Cocoa 与 Metal,Windows 上是 Win32 配合 Direct3D 11,Linux 上是 XCB 配合 Vulkan。目标是更小的发布产物、更低的空闲资源占用,以及直接使用原生平台能力。移动端明确不在范围内。

一个具体工作流

新项目从 viva init 开始,它会生成一个可运行的窗口、一个不开窗口也能跑的测试、viva.toml 以及描述编程模型的 AGENTS.md。viva dev 提供热重载:保存文件后窗口更新并保留状态。viva build 为 darwin、windows、linux 或 web 生成可复现的发布程序;viva package 再套上各平台自己的安装包格式。viva 命令只是构建工具,不会被链接进最终程序。

工作机制

框架维护一个节点身份稳定的保留式场景,只更新变化的矩形;README 称其局部更新为 O(1) 且热路径零分配,采用事件驱动重绘,没有空闲帧循环。1000 行列表的滚动据称只虚拟化到可见窗口并重绘一次。绘制由事件触发,没有变化时不会持续渲染。

Viva 还维护一棵独立的语义无障碍树,分别映射到 NSAccessibility、Windows UI Automation 和 Linux AT-SPI 对象,屏幕阅读器的操作通过 handler 回到应用;这部分在无障碍文档中有单独说明。状态栏图标、多窗口应用、自定义标题栏和系统密钥存储共同构成了原生集成面。

要求与当前状态

需要 Go 1.26 或更新版本,工具链可以在首次使用时自动下载。macOS 需要 Xcode 命令行工具,因为 Viva 通过 cgo 调用 Cocoa 和 Metal。Linux 需要 X11 以及系统的 XCB 和 Vulkan 加载器。Windows 需要 Direct3D 11 和 DirectWrite。系统库在运行时加载,一个都不打包。

状态列表对成熟度比较坦诚:macOS 后端最完整,Windows 和 Linux 被标为实验性。原生标签渲染器只绘制单行文本,浏览器预览走 Canvas2D 后端。README 描述了交叉编译、Wine/DXVK 冒烟测试和一致性场景,但部分路径只在特定虚拟机上验证,或需要真实硬件。仓库的测量针对自己的程序,因此性能结论应视为作者在相应条件下的报告。

许可证为 Apache-2.0。可参阅构建与打包指南、无障碍文档以及在线站点中的指南和组件预览。

本文由 AI 根据项目 README 生成,更新于 2026年10月30日,以项目官方文档为准。