gpui-kit:用 Rust 和 GPUI 构建跨平台桌面界面
给 Rust/GPUI 桌面应用的完整组件框架,兼顾 WebAssembly、无障碍和大数据表。
GitHub longbridge/gpui-kit 更新 2026-09-30 分支 main 星标 15.1K 分叉 945
Rust GPUI 桌面应用 WebAssembly AccessKit 数据表格

🧭 决策指南

适合,如果你

  • 你要用 Rust 和 GPUI 做 macOS、Windows、Linux 桌面应用。
    README 的 Features 章节明确写有 Cross Platform,并列出 macOS、Windows、Linux。
  • 你的产品需要 75+ 组件、数据表、Dock Layout 或 Code Editor。
    README 的 Features 章节列出 75+ Components、Data Tables、Dock Layout 和 Code Editor。
  • 你需要 AccessKit 无障碍和真实组件 UI 集成测试。
    README 的 Accessibility 与 UI Integration Testing 条目分别说明 AccessKit 和 headless windows 测试。
  • 你希望 Rust 应用只声明一个 gpui-kit 依赖。
    README 架构说明写明 gpui-kit pins the matching GPUI release,并 re-exports GPUI、base、component 和 assets。

不适合,如果你

  • 你的团队不能采用 Rust 或 GPUI 作为桌面 UI 基础。
    README 将项目定义为 comprehensive Rust desktop application framework,并要求使用 GPUI。
  • 你需要已明确的开源许可证条款才能引入依赖。
    项目元数据中的许可协议为 Other,提供材料没有具体许可证名称或条款。
  • 你的目标是只做普通 Web 前端,而不需要 Rust 桌面应用或 wasm32-unknown-unknown。
    README 的核心描述是 Rust desktop application framework,WebAssembly 是其跨运行环境能力之一。

前置条件

  • 依赖写法为 gpui-kit = "0.7",当前最新版本是 GPUI Kit v0.7.0。
  • 应用必须先调用 gpui_kit::init(cx),README 注明这是使用 GPUI Component features 前的必要步骤。
  • 若运行 WebAssembly,README 指定目标为 wasm32-unknown-unknown。
  • 默认 gpui-kit 引入 gpui-component、GPUI 和默认图标集;可关闭 default features 以减少层数。
  • JavaScript extension host 需要额外加入 gpui-shell,样式目录由 gpui-component-shell 提供。

第一步命令(README 原文)

cargo run

要注意

  • gpui_kit::init(cx) 必须在使用 GPUI Component features 前调用。
    README 的 Basic Example 下方说明。
  • open_window 会挂载 Base Root,Cargo features 不会切换 root 类型。
    README Usage 章节对 gpui_kit::open_window 的说明。
  • 移除默认 assets feature 后,需要按 IconName 定义提供自己的 SVG 图标。
    README Icons 章节说明默认 Lucide 图标和自定义 IconName。
  • JavaScript 扩展能力需要显式授予每项能力,并额外使用 gpui-shell。
    README Features 的 JavaScript Extensions 条目及架构说明。

替代方案

  • Iced:当你的选型对比范围包含 Iced,且需要按 README 提供的对比页面评估桌面 UI 框架时。
    README 的 Compare to others 章节
  • egui:当你的选型对比范围包含 egui,且需要按 README 提供的对比页面进行框架比较时。
    README 的 Compare to others 章节
  • Qt 6:当你的选型对比范围包含 Qt 6,且需要按 README 提供的对比页面进行框架比较时。
    README 的 Compare to others 章节

材料未说明

  • 材料未说明支持的 Rust 工具链版本和最低 GPUI 版本。
  • 材料未说明 macOS、Windows、Linux 的最低系统版本及各平台构建依赖。
  • 材料未提供 WebAssembly 的完整构建、打包和部署命令。
  • 材料未说明 120 FPS、200K 行编辑器和数十万行数据表的测试硬件与基准方法。
  • 材料未说明 Other 对应的具体许可证名称、版权义务和商业分发限制。
  • 材料未说明 10 名贡献者、5 个版本发布与 10 个最近提交对应的维护节奏。
  • 材料未展示 gpui-kit 与 Iced、egui、Qt 6 在功能、性能或生态上的量化差异。

💡 深度解析

6
适合 我的 Rust/GPUI 工具需要稳定打开 200K 行代码,并提供 Tree-sitter 语法高亮、LSP 诊断、补全和悬停信息;gpui-kit 是否值得采用?
适合读者: 正在用 Rust 和 GPUI 开发需要打开 200K 行代码文件、同时接入 Tree-sitter 和 LSP 的代码工具开发者

适合,因为 README 直接把 200K 行代码编辑器、Tree-sitter 和 LSP 能力列为项目支持的生产级场景。

  • Code Editor 声称在 200K lines 下保持稳定性能,覆盖 Tree-sitter 语法高亮以及 LSP diagnostics、completion 和 hover。
  • Tree-sitter 属于 gpui-component 的可选 feature,README 说明可以按需启用 tree-sitter 及各语言子 feature。
  • 项目提供独立的 example-editor,可先验证编辑器示例的编译和运行路径。
  • 但“稳定性能”没有对应的文件结构、语言、LSP 实现、内存占用或输入延迟指标;README 也未说明是否自带 LSP server。
  • Features:Code Editor: Stable performance at 200K lines with Tree-sitter highlighting and LSP diagnostics, completion, and hover.
  • Usage:The `gpui-component` features (`inspector`, `decimal`, `tree-sitter`, and each `tree-sitter-`) are available under the same names.
  • Development / Examples:`cargo run -p example-editor`
  • 项目洞察:编辑器场景需要合理使用虚拟化、异步数据加载和 LSP 管理
cargo run -p example-editor
材料未说明:README 未列出支持的 Tree-sitter 语言集合和各语言 feature 名称。;README 未说明 LSP server 的来源、协议版本、并发模型和资源占用。;README 未提供 200K 行编辑器的公开基准数据。
视情况 我使用 Rust 和 GPUI,希望把组件展示或应用编译到 `wasm32-unknown-unknown` 并运行在 Web 环境;gpui-kit 是否能直接替代 Web UI 技术栈?
适合读者: 已经采用 Rust/GPUI、希望把同一套组件展示或应用运行到 WebAssembly 的跨端原型开发者

视情况,它支持 WebAssembly 运行,但不能据此视为 React、Vue、Electron 或普通 Web 组件库的直接替代品。

  • README 明确支持 wasm32-unknown-unknown,并说明应用和同一组件展示可以运行在 Web 上。
  • 项目核心实现是 Rust 和 GPUI,统一入口仍然围绕 GPUI 的元素、实体、上下文和窗口模型组织。
  • 项目洞察指出,Web 环境与桌面环境在系统级 API、窗口行为和文件访问方面存在边界,桌面能力不一定能原样迁移到浏览器。
  • README 没有给出 WASM 构建命令、浏览器兼容矩阵、包体积或系统 API 支持清单,因此是否能承载完整应用取决于具体功能。
  • Features:WebAssembly: Run applications and the same component showcases on the web with `wasm32-unknown-unknown`.
  • 项目数据:主语言为 Rust,语言分布中 Rust 占绝大多数。
  • 项目洞察:GPUI Kit 不能直接作为 React、Vue、Electron 或普通 Web 应用的组件库使用。
  • 项目洞察:系统级 API、窗口行为和文件访问未必能以相同方式迁移到浏览器。
材料未说明:README 未提供 WASM 的完整构建、打包和部署命令。;README 未说明浏览器支持范围、包体积、性能指标以及文件和窗口 API 的可用性。;README 未说明 `gpui-shell` 的 JavaScript 扩展运行时是否支持 WASM。
适合 我已经选择 Rust 和 GPUI,团队只有一套代码基础,但需要发布 macOS、Windows 和 Linux 桌面应用;gpui-kit 是否适合作为统一的 UI 基础设施?
适合读者: 使用 Rust 和 GPUI、需要同时发布 macOS、Windows 和 Linux 桌面应用的小型产品团队

适合,因为它正面向 Rust/GPUI 的跨平台桌面应用,并把组件、状态、布局和 GPUI 版本整合到统一入口中。

  • README 明确支持“one Rust codebase”发布到 macOS、Windows 和 Linux。
  • gpui-kit 会固定匹配的 GPUI release,并重新导出 GPUI、gpui-base、gpui-component 和资源,应用通常只需一个主依赖。
  • 项目提供 75+ 个有文档的组件,覆盖表单、导航、弹窗、数据展示、编辑和布局,减少从底层控件开始搭建的工作。
  • 但跨平台能力不代表窗口、字体、输入法、系统菜单和辅助技术行为完全一致;README 没有给出各平台的兼容矩阵或 CI 覆盖范围。
  • Features:Cross Platform: Ship one Rust codebase to macOS, Windows, and Linux.
  • README:`gpui-kit` pins the matching GPUI release and re-exports GPUI, base, component, and assets.
  • Features:75+ Components and Primitives
  • 项目洞察:窗口管理、输入法、字体和辅助技术表现仍需要分别验证
cargo run -p hello_world
材料未说明:README 未说明 macOS、Windows、Linux 的最低版本和具体 CI 测试矩阵。;README 未说明各平台窗口、输入法、原生菜单和文件对话框的行为差异。
适合 我的 Rust/GPUI 桌面应用必须验证键盘导航、焦点、布局和 AccessKit 语义,并且需要在无头窗口中做真实鼠标键盘测试;gpui-kit 是否能覆盖这套验收约束?
适合读者: 为 macOS、Windows 和 Linux 桌面应用负责无障碍验收、键盘交互和 UI 自动化的 Rust/GPUI 工程师

适合,因为它把 AccessKit 语义和真实组件级 UI 集成测试都放进了交互层,而不是只提供视觉组件。

  • README 说明 AccessKit 覆盖 roles、names、states、relationships 和 actions,并且这些能力由测试覆盖。
  • UI Integration Testing 支持在 headless windows 中渲染真实组件、驱动 pointer 和 keyboard input,并断言 state、focus、layout 和 accessibility。
  • 组件还封装焦点、键盘、拖拽和布局行为,适合桌面应用的验收模型。
  • 但 README 没有说明 macOS、Windows、Linux 上辅助技术的具体兼容性,也没有给出测试运行器、断言 API 或持续集成示例;平台级无障碍结果仍不能仅凭组件测试推断。
  • Features:Accessibility: AccessKit roles, names, states, relationships, and actions are built into the interaction layer and covered by tests.
  • Features:UI Integration Testing: Render real components in headless windows, drive pointer and keyboard input, and assert state, focus, layout, and accessibility.
  • 项目洞察:组件不仅包含外观,还封装焦点、键盘、交互状态、布局和可访问性等行为。
  • 项目洞察:macOS、Windows 和 Linux 的辅助技术表现仍需要分别验证。
cargo run -p hello_world
材料未说明:README 未提供 UI 集成测试的具体命令、测试 API 和断言示例。;README 未说明 AccessKit 在 macOS、Windows、Linux 上分别对接哪些辅助技术。;README 未说明无头窗口测试是否覆盖多窗口、输入法、拖拽和系统级快捷键。
适合 我已经有一个 Rust 商业桌面应用,想加载 JavaScript 面板和业务逻辑,同时不希望脚本默认拥有全部宿主权限;gpui-kit 的扩展方案是否适合?
适合读者: 维护已发布 Rust 商业桌面应用、希望通过 JavaScript 面板和业务脚本扩展产品的应用宿主开发者

适合,因为 gpui-shell 专门提供 Rust 宿主加载 JavaScript 面板和业务逻辑的路径,并要求显式授予能力。

  • README 将 JavaScript Extensions 描述为可让已发布的 Rust host 加载 scripts,并强调 every capability granted explicitly。
  • gpui-shell 作为可选扩展运行时单独加入,gpui-component-shell 提供样式化组件目录,能把宿主和 UI 扩展分层。
  • 这比把脚本直接嵌入业务代码更适合插件化桌面产品,但权限边界、错误隔离、扩展生命周期和版本兼容仍需宿主自行治理。
  • 项目洞察特别指出,授权范围过宽会扩大扩展的安全影响面;README 没有提供沙箱强度、权限清单或安全模型细节。
  • README:JavaScript extension hosts add `gpui-shell` separately; `gpui-component-shell` supplies the styled catalog.
  • Features:JavaScript Extensions: `gpui-shell` lets a shipped Rust host load panels and business logic as scripts, with every capability granted explicitly.
  • 项目洞察:若宿主应用授权范围过宽,仍可能扩大扩展的安全影响面。
  • 项目数据:项目有 Longbridge Pro 的公开商业桌面应用使用背景。
材料未说明:README 未说明 JavaScript 引擎、沙箱机制、可授予能力的完整列表和默认拒绝策略。;README 未说明扩展崩溃后的隔离方式、热更新能力和宿主/扩展版本兼容策略。;项目许可证字段为 Other,商业分发扩展运行时前仍需核查 LICENSE 和资源授权。
视情况 我正在用 Rust 和 GPUI 构建一个需要展示数十万行数据的数据表,并希望界面达到 README 所称的 120 FPS;gpui-kit 能否满足这个约束?
适合读者: 需要展示数十万行数据、要求高帧率交互的 Rust/GPUI 数据产品开发者

视情况,组件层面匹配这个场景,但 120 FPS 不是仅由 gpui-kit 自动保证的结果。

  • README 的 Data Tables 支持虚拟滚动、固定或可调整列、排序和单元格选择,目标明确覆盖 hundreds of thousands of rows。
  • Virtual Lists 只渲染可见范围,并支持不同项目高度,适合减少大列表的渲染数量。
  • 项目宣称 GPU-accelerated interfaces 可达到 120 FPS,因此渲染基础与高帧率目标一致。
  • 但 README 没有给出具体硬件、数据更新频率、排序耗时或基准测试条件;数据加载、筛选和业务计算若阻塞交互,仍可能成为瓶颈。
  • Features:Data Tables: Virtual scrolling, fixed and resizable columns, sorting, and cell selection across hundreds of thousands of rows.
  • Features:Virtual Lists: Render only the visible range, including lists whose items have different sizes.
  • Features:120 FPS: GPU-accelerated interfaces that remain smooth under load.
  • 项目洞察:高性能依赖应用架构和数据访问方式,虚拟化不能自动解决频繁状态更新或低效数据转换
材料未说明:README 未提供 120 FPS 的测试硬件、分辨率、数据更新频率和具体基准结果。;README 未说明虚拟表格在排序、筛选和实时更新下的性能边界。

✨ 核心亮点

  • 75+ 组件覆盖表单、导航与数据展示
  • 200K 行代码编辑器支持 Tree-sitter 与 LSP
  • 数据表支持数十万行虚拟滚动
  • AccessKit 无障碍能力内置并覆盖测试
  • 同一组件展示可运行于 wasm32-unknown-unknown

🔧 工程化

  • gpui-kit 单一依赖整合 GPUI、gpui-base 与组件层
  • gpui-component 提供窗口、布局、编辑和数据能力
  • 支持 macOS、Windows、Linux 与 WebAssembly
  • UI 集成测试可驱动鼠标键盘并断言焦点布局

⚠️ 风险

  • 许可协议标为 Other,README 未提供具体条款
  • 项目仅有 10 名贡献者与 5 个版本发布
  • README 未说明 Rust、GPUI 或系统版本要求
  • WebAssembly 仅注明目标 wasm32-unknown-unknown,未给出构建命令

👥 适合谁?

  • 用 Rust 和 GPUI 开发跨平台桌面应用的团队
  • 需要 200K 行编辑器与 LSP 能力的工具开发者
  • 处理数十万行数据表且需要虚拟滚动的应用
  • 需要 AccessKit 与 UI 集成测试的桌面产品团队