一个 Zig UI 框架冒出来,本身不稀奇。
稀奇的是,Gooey 看起来不像那种只画一个按钮、证明“窗口能打开”的玩具仓库。它的示例里已经有 todo、Pomodoro、chat-zig、虚拟列表、10k 行表格、代码编辑器、动画、文件对话框。
但它也没有装成熟。项目明确标了 Early Development,API 还在变。
所以这事别看歪。现在讨论 Gooey 能不能替代 Qt、Flutter、React,太早,也不准。真正该看的,是 Zig 这种系统级语言,是否开始补上 GUI 这块长期缺口。
Gooey 现在是什么,不是什么
Gooey 是一个给 Zig 用的 GPU 加速 UI 框架。它采用 hybrid immediate/retained mode。
说人话:界面写法偏声明式,但输入框、滚动容器这类需要保留内部状态的控件,也有 retained widget 支撑。
它瞄准的平台很清楚:
| 平台 | 渲染 / 窗口目标 | 现在要注意什么 |
|---|---|---|
| macOS | Metal | 要 macOS 12+ |
| Linux | Wayland + Vulkan | 需要 Vulkan 驱动、FreeType、HarfBuzz、Fontconfig 等系统库 |
| Browser | WASM + WebGPU | 受 Zig 0.16 上游阻塞,不能说已经跑通成品路线 |
这里有个容易误读的点:Gooey 说的 “Zero Dependencies”,不是没有系统依赖。
它指的是没有外部 Zig 包依赖。到了 Linux 上,Wayland、Vulkan、FreeType、HarfBuzz 这些系统库仍然绕不开。
这对 Zig 开发者很重要。你如果只是想找一个能马上交付商业桌面应用的框架,Gooey 现在不是那个答案。你应该观望,最多拿来试项目、读设计、做小工具验证。
但如果你在写 Zig 原生应用,或者想用系统级语言做 GUI,Gooey 已经值得放进观察名单。原因不是它成熟,而是它的路线不像随手写的 demo。
技术取舍真正解决什么
Gooey 的卖点不少:GPU 渲染、声明式 UI、文本、动画、主题、图片和 SVG、剪贴板、IME、可访问性、拖拽、快捷键、原生文件对话框。
这些功能表看着热闹,但我更在意两个设计。
一个是 GPU 渲染。
这条路不新。现代 UI 早就不只是 CPU 画几条线。高 DPI、动画、复杂列表、代码编辑器、主题切换,都在逼框架吃掉更多图形能力。
Gooey 选择 Metal、Vulkan、WebGPU 这条线,说明它想从一开始就站在现代渲染管线里,而不是先糊一个窗口层再慢慢补。
另一个是 Cx 和 ui.* 分离。
Cx 管状态、事件、焦点、动画。ui.* 管布局和绘制原语。
这不是命名洁癖。GUI 框架最容易烂的地方,就是状态逻辑和界面代码缠死。最后测试变成点鼠标、看截图、祈祷别坏。
Gooey 的 todo 示例里,纯状态模型可以脱离 UI 单独测试。这个设计不宏大,但很实用。
对真正写应用的人来说,这比“又多一个漂亮控件”更关键。控件可以慢慢补,状态模型一开始走歪,后面很难救。
可以拿几类路线做个粗对照:
| 路线 | 优点 | 代价 | Gooey 更接近哪边 |
|---|---|---|---|
| 原生老牌框架 | 稳、控件全、生态厚 | 语言绑定和平台差异重 | 不是直接竞争对象 |
| Web 技术壳 | 开发快、人才多 | 体积、性能和原生质感常被质疑 | 不是它的主线 |
| 新语言原生 GUI | 语言一致、可控性强 | 文档、控件、生态都要从头攒 | Gooey 属于这一类 |
这张表也说明一个现实:Gooey 现在最准确的对比对象,不是 React,不是 Flutter,也不是 Qt。
它真正填的是 Zig 原生 GUI 生态里的空白。
价值在方向,考验在耐久
我对 Gooey 的判断偏正面,但不是因为它现在能拿去生产替代成熟框架。
恰恰相反。它的价值在方向,不在当下可用性。
Zig 过去给人的强项很明确:系统编程、底层库、工具链、可控内存、可预测性能。可一旦你想写一个像样的桌面应用,路会突然变窄。
这不是 Zig 独有。早期 Rust 也走过类似阶段:命令行工具和后端库先涨起来,GUI 慢半拍。
原因很冷。GUI 不是画矩形。它要字体、输入法、焦点、窗口系统、可访问性、布局、控件习惯,还要处理各个平台的小脾气。
“天下熙熙,皆为利来”。这句话放在 UI 框架上尤其准。
没有足够多真实应用反复折磨,控件不会成熟。没有文档和社区接盘,API 再漂亮,也只是作者自己的秩序。
所以不同读者该做的动作不一样。
Zig 开发者可以试,但别赌。拿 Gooey 做内部工具、小型实验、学习 Zig GUI 设计,都合理。把它压到生产主链上,现在风险偏高。
技术负责人可以关注,但别迁移。尤其是已经有 Qt、Web 前端壳、原生平台方案的团队,没必要为了“Zig 原生”提前换栈。迁移成本会先来,生态收益还没结算。
接下来最该看四件事:
- 文档能不能让新人少猜。
- 控件能不能覆盖真实应用,而不只覆盖 demo。
- Linux 体验能不能少踩系统依赖和驱动坑。
- API 演进能不能稳住,不把早期使用者反复打散。
还有 WebGPU/WASM 这条线。目前它受 Zig 0.16 上游阻塞。跨平台目标写在 README 上很容易,跨平台完成度只能靠时间和维护强度结账。
这也是我不愿意把 Gooey 吹成“Zig GUI 终于成熟”的原因。那会误导人。
更准确的说法是:它像一个严肃开头。
系统级语言想走进普通应用,最后都要过 GUI 这一关。命令行能证明锋利,界面才能证明耐用。
Gooey 现在刚到关口。刀磨出来了,能不能上阵,还要看控件、文档、生态和维护者的耐心。
