Rust 桌面 UI 框架 GPUI Kit 是什么

做桌面应用,常常被描述成一道二选一:Electron 上手快,但背着一个浏览器内核;走原生技术,性能好,可窗口、表格、编辑器全得自己造。
一、先看这道「二选一」

示意图:左边是 Electron 方案,右边是原生方案从零开始。两种路线都能到终点,但代价不同。
Electron 的逻辑很直接:用 Web 技术写界面,打包一个 Chromium,跨平台一致,生态成熟。代价也直接:安装包更大,内存占用更高,界面和系统之间隔着一层浏览器。
原生路线的逻辑同样直接:直接调用系统窗口和 GPU,性能和手感更接近系统应用。代价是,很多东西要从零开始——窗口管理、表格、文本编辑器、停靠布局、无障碍、测试,每一项都不便宜。
二、它不是把网页塞进窗口

示意图:Rust 编译成原生程序,GPU 逐帧绘制界面,不需要 WebView。
GPUI Kit 是一套用 Rust 直接画界面的桌面 UI 框架,底座是 Zed 编辑器的 GPUI 渲染引擎。按官方介绍,它不是在窗口里嵌一个 WebView,而是让 Rust 代码直接参与布局和绘制。
它把几件事收在同一个生态里:
- 75+ 组件;
- 一套代码,覆盖 macOS、Windows、Linux;
- Apache-2.0 许可;
- 底层 GPUI 来自 Zed,同样开源。
按官方文档,Longbridge 在使用 GPUI Kit。这个信息很重要,但它只能说明「有人把它放进真实产品」,不等于「所有场景都适合」。具体适不适合,还要看你的应用形态。
GPUI Kit 瞄准的不是所有桌面软件,而是交易终端、数据看板、开发工具这类信息密集、交互复杂的应用。控件的手感参考 macOS 和 Windows 的现代桌面设计,而不是给网页控件套一层皮。

示意图:一个信息密集的工作区,左侧导航、中间表格与行情、右侧代码编辑器同时存在。
三、信息密集应用,难写的到底是哪几块
GPUI Kit 最想解决的,是信息密集型软件里那些「看起来简单、写起来很贵」的部分。
1. 数据表格

示意图:虚拟列表只渲染可见行;画面中的 284,901 行是示意数据,不是性能基准。
官方文档提到,数据表格支持虚拟滚动、固定列、列宽调整、排序和单元格选择,量级到 10 万行。画面里用了 284,901 行做示意,但这是演示数据,不是 benchmark。
真正难的不是把数据画出来,而是:
- 只渲染可见区域,滚动时不能抖;
- 固定列和横向滚动要跟得上;
- 排序、选择、列宽调整之后,状态不能乱;
- 十万行数据进来,内存和布局不能崩。
这些细节,决定了表格是「能用」还是「敢用」。
2. 代码编辑器

示意图:Rope 文本存储、Tree-sitter 高亮、LSP 诊断与补全在同一个编辑器里。
代码编辑器用 Rope 存文本,官方文档给出的量级是 20 万行。在这个量级下,还要做 Tree-sitter 高亮,以及 LSP 的诊断、补全和悬浮提示。
这几件事叠在一起,难点不在单个功能,而在「同时」:文本要能快速编辑,语法树要跟得上,语言服务器返回的结果要能落在正确的位置,滚动和重绘不能把光标位置弄丢。
3. Dock 布局

示意图:面板停靠、标签拖拽、嵌套分割,布局可以序列化保存。
Dock 布局可以停靠面板、拖拽标签、嵌套分割,还能把布局序列化保存。对开发工具、交易终端这类多面板应用来说,这不是「锦上添花」,而是基本盘。
用户把面板拖来拖去,关掉再打开,布局要能恢复;窗口尺寸变了,分割比例要合理;标签在面板之间移动,状态不能丢。这些行为看起来是 UI,背后其实是状态管理。
四、性能不是口号,是一帧一帧算出来的

示意图:120 Hz 下,一帧大约 8.3 ms;输入、布局、绘制、呈现都要在这段时间里完成。
120 Hz 屏幕下,一帧只有大约 8.3 毫秒。官方文档的原话很克制:「120 Hz 是一个帧预算,不是刷新承诺。」
GPUI 会按需更新,只处理发生变化的部分,而不是每一帧把整个界面重画一遍。但官方也提醒,实际流畅度取决于整个界面、平台调度和 GPU 工作,不是屏幕刷新率一个数字就能保证的。
无障碍和测试,也在工程细节里

示意图:AccessKit 把角色、名称、状态、关系和动作暴露给辅助技术。
无障碍能力接进了交互层。AccessKit 会提供角色、名称、状态、关系和动作;控件需要稳定的 ID,角色本身并不自动带来键盘操作。
测试可以在 headless 窗口里驱动真实的鼠标和键盘,验证状态、焦点、布局和无障碍。对桌面应用来说,这一点很实际:很多问题不是「画错了」,而是「焦点丢了」「状态没同步」「键盘走不到」。
五、WASM 能跑,但官方说「展示 ≠ 交付」

示意图:组件示例可以通过 WebAssembly 在浏览器里运行,但官方标注主要用于展示。
组件示例还能通过 WebAssembly 在浏览器里跑。听起来像是「一套代码,桌面和 Web 都能交付」,但官方文档写得很清楚:
GPUI Kit 的 WebAssembly 支持主要用于在浏览器里展示和试用组件;仓库还没有把 WebAssembly 验证为完整的应用分发路径。
换句话说,WASM 现在是「展示」,不是「交付」。如果你需要的是完整的 Web 产品,还是应该按 Web 的技术栈来规划;如果你需要的是桌面应用,GPUI Kit 才是它的主场。
六、五层架构,一个入口

示意图:gpui、gpui-kit、gpui-base、gpui-component、gpui-shell 五层,应用入口只有一个依赖。
架构上,GPUI Kit 分成五层,但应用入口只有一个依赖:gpui-kit。它把 gpui、base、component 和默认资源重新导出。
五层分别是:
- gpui:UI 运行时,负责窗口、元素、布局、渲染与平台;
- gpui-kit:应用入口,一个依赖,重新导出整套;
- gpui-base:无样式行为层,提供焦点、浮层、虚拟化、无障碍等行为;
- gpui-component:完整组件库,75+ 组件、主题、表格、编辑器;
- gpui-shell:可选的 JavaScript 扩展层。
七、Component 还是 Base:开箱即用,还是自己掌控

示意图:左边 gpui-component 提供现成组件和交互细节,右边 gpui-base 只给行为,像素归你。
想开箱即用,就用 gpui-component:75+ 组件、明暗主题、交互细节都齐了。适合快速做出一个完整的产品界面。
想自己掌控视觉,就在 gpui-base 上复用焦点、浮层、虚拟化和无障碍行为,像素归你。适合有成熟设计系统、需要品牌差异化的团队。
一句话:同一套行为,可以要现成的外观,也可以自己画。
八、gpui-shell:Rust 宿主,JavaScript 按项授权

示意图:Rust 宿主与扩展脚本在同一个进程;能力逐项授权,默认什么都不给。
需要 JavaScript 扩展时,再加 gpui-shell。
它的设计有几个关键点:
- 宿主仍然是 Rust;
- 能力逐项授予,默认什么都不给;
- 脚本在同一个进程里画真实界面;
- 保存即热更新,不用 fork,也不用发新版本。
示意图里列出的能力示例包括 fs.read、fs.write、network.hosts、clipboard.write、process.exit、fs.execute。这些开关不是装饰:文件读写、网络访问、剪贴板、进程退出、执行外部进程,每一项都对应真实权限。默认关闭、按需打开,是这套扩展模型里最重要的安全边界。
九、一条原则:行为属于基础层,视觉属于应用

示意图:焦点、浮层、虚拟化、无障碍、键盘属于基础层;色彩、字体、间距、图标、品牌属于应用。
GPUI Kit 的原则可以概括成一句话:
行为属于基础层,视觉属于应用。
焦点、浮层、虚拟化、无障碍、键盘,这些是「行为」,应该在基础层里做好;色彩、字体、间距、图标、品牌,这些是「视觉」,应该由应用决定。
这条边界决定了组件能复用多少,也决定了设计系统能走多远。很多组件库的问题,不是组件不够多,而是把行为和视觉绑死在了一起:想换皮,得改组件;想改行为,得复制组件。
把边界划清楚,组件才能真正复用。
十、它适合谁,不适合谁
适合:
- 交易终端、数据看板、开发工具、监控台这类信息密集、交互复杂的桌面应用;
- 已经有 Rust 技术栈,或愿意投入 Rust 的团队;
- 对性能、原生手感、安装包体积有要求的桌面产品;
- 需要表格、编辑器、停靠布局、无障碍和 headless 测试这些「硬骨头」的项目。
不一定适合:
- 内容站点、简单表单、以展示为主的轻应用;
- 团队里没有 Rust 经验,且项目周期很紧;
- 强依赖 Web 生态和第三方前端库的产品;
- 需要完整 Web 交付路径的产品——WASM 目前主要是展示,不是交付。
还要补一句:GPUI Kit 目前是 v0.9.0,仍处于 0.x 阶段。选它之前,建议先用一个真实页面做原型,评估迁移成本、团队学习曲线和长期维护,而不是只看演示效果。
十一、怎么开始

示意图:在 Cargo.toml 里加入 gpui-kit,一个依赖带入匹配的 GPUI、组件与默认资源。
安装只需要在 Cargo 配置文件里加上 gpui-kit:
[dependencies]
gpui-kit = "0.9.0"
然后:
use gpui_kit::*;
官方文档给出的前置条件是 Rust 1.92+,以及对应平台的构建依赖(Xcode、Visual Studio 或 Ubuntu 依赖)。文档、组件画廊和完整 API 都在 gpui-kit.com。
如果你想快速判断它适不适合自己,可以按这个顺序:
- 先读官方文档的安装和架构页;
- 跑一个最小示例,确认平台依赖和构建链没问题;
- 用你产品里最难的一屏做原型——最好是表格、编辑器或多面板布局;
- 检查无障碍树、键盘焦点和 headless 测试能不能满足要求;
- 再决定要不要扩大使用范围。
最后
GPUI Kit 不是要让所有人立刻换框架。它更像是给原生桌面开发多了一个认真考虑的选择:如果你厌倦了「Electron 的包体和内存」和「从零造轮子」之间的二选一,它至少提供了一条新的中间路线。
参考
- 本文根据 gpui-kit.com 官方文档(v0.9.0)与同名介绍视频整理;产品功能、版本和平台支持以官方文档为准。