I’m Using GPUI For Everything

核心摘要
本期是单一主题集:斯科特·托林斯基向韦斯·博斯完整介绍 GPUI——Zed 团队的 GPU 加速 Rust UI 框架,并论证它已在自己的工作流里取代了 Electron 和 Tauri。切入角度是 Web 开发者的视角:GPUI 保住了 React 式的心智模型——组件、props、state、render 函数和显式的 notify——样式则变成读起来像 Tailwind 的链式内联方法。一次现场翻文档发现布局只有 flexbox、没有 CSS grid;GPUI Kit 组件库被呈现为真正实用的解锁点,其 data table 与虚拟化被点名表扬。节目中段处理社区摩擦:GPUI CE 分支的出现源于贡献者认为 Zed 团队只优先满足自身需求,维护者的一段引述解释了 GPUI Kit 拒绝支持该分支的原因。斯科特展示了他用 GPUI 已经做出的小型个人工具——跨机器项目监视器、Hazel 式文件自动化、窗口摆放工具——并把整个论证落在体积经济上:DaisyDisk 更新只有八兆,而 Electron 同类约为 267 MB。缺点也直言不讳:UI 非原生、Web 目标走 WASM 而非 DOM、生态年轻、实际上只限桌面端、测试需要 computer-use 工具——他用自己的无障碍树驱动 Jev 测试项目应对。结论:不适合移动端和 Web,适合小型原生桌面软件,AI 智能体写 Rust 的水平够用。以上均为发言人观点,非独立核实结论。
章节看点与核心要点
9 条GPUI 给 Web 开发者一套类 React 的 API——组件、props、state、render 和显式 notify——装在一个原生 Rust 程序里,从 React 迁移的成本因此很低。
斯科特反对原生 WebView 桌面应用的理由是 macOS 特有的:WKWebView 的功能集贫弱且版本不可预测,因为引擎版本不随应用固定;Electron 则可以随包发指定版本的 Chromium。
GPUI 当前的布局只有 flexbox——文档里没有 CSS grid——变通办法是在 Rust 里编程排版。
GPUI 应用是一个 Rust 程序:UI 与逻辑同进程,无需构建 RPC 层;GPUI 本身只是 UI 层,接到现有应用上即可。
GPUI Kit 是实用的解锁点——一个 shadcn 规模的组件库,其 data table 自带虚拟化和排序——没人应该从原语开始重造每个组件。
原生工具的体积经济是本期最具体的锚点:DaisyDisk 八兆的更新对上假想中 267 MB 的 Electron 版,外加每个闲置 Chromium 的内存。
GPUI CE 分支反映出社区认为 Zed 团队只发布服务于自身的功能;GPUI Kit 维护者拒绝支持它,理由是只有被真实应用验证过的项目才能改进框架。
明确的缺点:非原生 UI 元素、Web 端走 WASM 而非 DOM、生态年轻、实际上仅限桌面、测试靠 computer-use 而非浏览器自动化。
最终结论:移动端和 Web 应用都选错了工具,快速小型个人桌面软件才是正解——配上最佳实践 skill 的 AI 智能体能把 GPUI 的 Rust 写好。
深度解读
为什么用 GPUI 而不是 Electron 写桌面应用?
斯科特·托林斯基在 Syntax 上的论证:对小型个人桌面软件,随包附带的 Chromium 得不偿失。Zed 背后的 Rust 框架 GPUI 在单个原生程序里保住类 React 的 API,靠 GPUI Kit 把工具更新压到兆级;非原生 UI、Web 只有 WASM、生态年轻,是他明说的代价。
阅读完整文章访谈精粹
5 组核心对谈- 问
GPUI 有没有把 Web 开发者习以为常的 CSS 能力都实现出来?
Wes Bos 提问11:23答Scott Tolinski 回答就斯科特的实际体验,样式层把他试过的东西都做出来了:阴影、透明度、纹理、背景、循环背景,还有弹簧动画,官方文档里给了旋转 SVG 的示例。样式写法是在单个元素上链式调方法,他自嘲这套东西像「Tailwind 类名膨胀」混上 jQuery 链式调用,文件因此很长。但这对他影响不大:大部分代码是 AI 智能体写的,而且写得不错。他不认为 GPUI 覆盖了 CSS 的全部,只是到目前为止想要的效果没有缺过。
- 问
GPUI 的布局既支持 flexbox 也支持 CSS grid 吗?
Wes Bos 提问12:52答Scott Tolinski 回答两人现场翻文档,只找到 flexbox,任何地方都没有 CSS grid,双方都承认这是 GPUI 当下的一个真实局限。斯科特补充:可以在 Rust 代码里自己量尺寸、用程序方式完成大部分排版,况且 CSS grid 出现之前 Web 开发者也一直这么做;韦斯则说真遇到类似需求,碰到的可能是 subgrid 式的缺口。一句话:现在布局只有 flex 可用。
- 问
用 GPUI 开发桌面应用,像视频处理这类重活需要独立后端进程吗,还是逻辑就写在同一个程序里?
Wes Bos 提问14:18答Scott Tolinski 回答不需要。GPUI 应用就是一个 Rust 程序:界面和业务逻辑在同一个代码库里,调函数就是直接调用,省掉了 Electron 里进程之间那层 RPC。斯科特特别强调 GPUI 只负责 UI——把它接到现有的 Rust 应用上,架构完全由你自己定;相比之下 Electron 对这套拆分更有主见。
- 问
小工具类的个人软件,为什么值得用 GPUI 做原生应用而不是套 Electron?
Wes Bos 提问22:48答Scott Tolinski 回答原生应用可以做到很小。斯科特举 DaisyDisk 为例:一次更新只有 8 MB——换成 Electron 版的同类工具,大概率要拖着 267 MB 的体积分发,还常驻内存。对文件自动化、文件查重这种要一直挂着的小工具,他要的就是薄、轻、快。韦斯完全认同:他不想为每个小点子都跑一个 Chromium 实例,也因此正把自己的录屏工具重写成精简的 GPUI 应用。
- 问
用 GPUI 开发桌面应用,主要的缺点有哪些?
Wes Bos 提问27:08答Scott Tolinski 回答最大的缺点是 UI 元素并非原生:macOS 的 Liquid Glass 观感、各平台的原生样式都不会免费送上门,要就得自己在 GPUI 里实现——这对一些人是劝退点,对想完全掌控外观的人反而是优点(他现在这套界面主题就故意做成「韦斯·博斯风」)。其次没有浏览器 DOM:上 Web 靠编译成 WASM,而不是走真正的 DOM。生态还年轻:组件库基本只有 GPUI Kit,资源少,斯科特靠 AI 智能体加一份 Rust 最佳实践 skill 来写代码。它也不是「一次编写、到处部署」的平台——做不到 React Native 那样一套代码同时出原生移动端、Web 和桌面端,他自己只用于原生桌面。测试同样没法用浏览器自动化,得走 computer use;他为此做了个早期项目,用 Jev 驱动 GPUI 的无障碍树来点击测试,省掉了截图环节。