GPUI Kit:用 Rust 做跨平台桌面界面,GitHub 本月新增 3,924 Star
用 Rust 写桌面软件时,窗口、输入、表格、停靠面板和代码编辑往往要自己从渲染层往上搭。 GPUI Kit 把这些放进同一套框架:底层是 Zed 的 GPUI,上面是带样式的组件、无样式的交互基础,以及可选的 JavaScript 扩展宿主。官方文档写明,它从第一天起就用在已公开发布的商业桌面应用 Longbridge Pro 里。
截至 2026-10-28,GitHub 仓库 Star 18,702、Fork 1,155。当天 GitHub Trending 的 Rust 月榜列出 21 个仓库,GPUI Kit 排第 4,页面标注 this month 新增 3,924 Star。最新版本是 2026-10-26 发布的 v0.8.1,crates.io 上的
gpui-kit也是这个版本。
1. 应用只声明一个 crate
仓库把入口收成 gpui-kit。应用的 Cargo.toml 只写这一个依赖,就会带上固定版本的 GPUI、无样式的 gpui-base、带样式的 gpui-component,以及默认的 Lucide 图标资源。组件从 gpui_kit::component 来,GPUI 的类型从 gpui_kit::* 来,不必再单独声明 GPUI。
默认后端是发布到 crates.io 的上游快照,包名是 gpui-pre,当前钉在 0.3.10。它不是另一套渲染器。需要换 GPUI Fast 时,打开同名 feature 即可,导入和 init 不用改;官方说明这个 feature 是累加的,上游包仍会参与编译。
JavaScript 扩展不在这个默认依赖里,要另外使用 gpui-shell。
2. 表格、Dock 和代码编辑器
中文 README 把组件和原语写成 75+,覆盖表单、导航、浮层、数据展示、编辑、反馈和布局。复杂界面里,文档点名的几块是:
数据表:虚拟滚动、固定列、列宽调整、排序和单元格选择。README 写可以承载数十万行。
虚拟列表:只画可见区域,列表项高度可以不同。
Dock:面板可调、标签可拖、分割可嵌套、边缘可停靠,布局能序列化保存。仓库示例是
cargo run -p example-dock。代码编辑器:README 写 20 万行规模下仍保持稳定,并接上 Tree-sitter 高亮和 LSP 的诊断、补全、悬浮提示。示例是
cargo run -p example-editor。正文:同一套 UI 里可以渲染 Markdown 和 HTML,也带图表。对应示例是
example-markdown和example-html。
v0.8.1 的发布说明把这一版的改动集中在文本选择、Markdown、编辑器布局、滚动、焦点和无障碍,并给文本样式、编辑器滚动条、Diff 解析和高亮加了兼容的定制接口。默认后端仍是 gpui-pre 0.3.10,可选的 GPUI Fast 是 0.1.12。
3. 发布之后用 JavaScript 加面板
三层的分工在 README 里写得很直:
层 | 做什么 | 适合 |
|---|---|---|
| 带样式的完整组件,可换主题 | 直接做应用 |
| 焦点、浮层、虚拟化等行为,不带预设外观 | 自己的设计系统 |
| Rust 宿主里的 JavaScript 运行时,能力要逐项授予 | 插件和脚本化面板 |
gpui-shell 的定位是:贡献者不用 fork、也不用等一次发版,就能往已发布的 Rust 宿主里加面板和业务逻辑。v0.8.1 的说明里,它准备以配套的 quickjs-jit、quickjs-jit-runtime、quickjs-jit-stdlib 0.14.1 发到 crates.io。
交互层带 AccessKit 的 role、name、state、relationship 和 action。测试可以在 headless window 里渲染真实组件,驱动鼠标和键盘,再核对状态、焦点、布局和无障碍信息。组件画廊用仓库根目录的 cargo run 打开。
Web 目标是 wasm32-unknown-unknown。iOS 和 Android 的嵌入方式在下一节,桌面那套 application() 到了移动端不再使用。
4. 移动端:GPUI 实验性嵌入,以及 Native Shell
手机上有两条路,画出来的东西不一样。
GPUI Kit 移动端把 GPUI 嵌进原生 App。移动端文档 标成「实验性」和「依赖平台」。
首要目标仍是桌面。移动端用来复用一部分组件,例如在原生界面里用 TextView 渲染富文本。
中间是一块 GPUI 自己画的 View。导航栏、底部输入框留在原生 UI,两边各自管布局和输入。
组件还是 Kit 的 Rust 组件。移动端不调用
gpui_kit::application()或gpui_kit::platform。宿主初始化 GPUI,调用gpui_kit::init(cx),再包一层component::Root。gpui_kit::is_mobile()只看编译目标是不是 iOS 或 Android。
平台层是社区项目 gpui-mobile,实现 gpui::Platform:iOS 用 Metal / wgpu,Android 用 Vulkan 或 GL / wgpu,管窗口、触摸、文字和 GPU 表面。
作者账号 itsbalamurali,资料名 Balamurali Pandranki,地点 Tallinn, Estonia,公司栏
@wearekesk。仓库创建于 2026-03-03。2026-10-28 的 Star 是 441,许可证 AGPL-3.0。
公开资料里没有把他写成 Longbridge 成员或 GPUI Kit 维护者。
GPUI Kit 当前接的是兼容 fork longbridge/gpui-mobile。
GitHub 的 parent 和 source 都是
itsbalamurali/gpui-mobile。fork 创建于 2026-09-11,许可证仍是 AGPL-3.0。以
gpui-pre-mobile发到 crates.io。0.1.0 对着gpui-pre和gpui-pre-wgpu0.3.4,平台、渲染器和应用用同一套 GPUI 类型。下游不必再检出 Zed 的 Git 仓库,也不必自己打 Cargo patch。
文档把它称作临时兼容包。等上游
gpui-mobile接入、GPUI 自己也发布 crate 之后,改回社区包。Rust 视图树和组件仍由 GPUI 与 GPUI Kit 管。
文档写明的验证范围:
Swift 托管的 iOS 示例在模拟器里构建并运行过。固定脚本面向 iOS 18.6 的 iPhone 16 Pro;示例最低部署版本写成 iOS 16,不表示每个系统版本都测过。
一个 AI Chat 区域在 iOS 和 Android 上做过功能和性能验证,用到 TextView、Button、Menu、Popover、Scrollbar、Input、Textarea 和文本选择。TextView 在这个场景里覆盖完整。
其他组件和完整应用布局还没有在移动端验证。Android 的 Activity 示例走另一条宿主路径,该页没有展开步骤。
示例把
gpui-pre钉在 0.3.4,当前 Kit 工作树是 0.3.10。只换本地路径,Cargo 仍可能同时选出两套 GPUI 类型。模拟器上的布局和点击不能代替真机帧耗时。
Native Shell 是手机上的另一条路。仓库 longbridge/nsh,文档 nsh.dev。按钮和文字由系统控件绘制。
iOS:UIKit、CoreText,iOS 15+。
Android:Android View、
StaticLayout,Android 9(API 28)+。界面用 Rust、TSX,或让 TSX 引用 Rust 组件。菜单在桌面上是弹出层,在手机上是 sheet。
单独运行:
nsh run my-app --target ios(Xcode 和模拟器),nsh run my-app --target android(Android SDK,模拟器或真机)。嵌进已有 App:iOS 用 Swift 的
NshAppView(NativeShell.xcframework),Android 用 Java / Kotlin 的NshView(nsh.aar)。示例是examples/embed-ios、examples/embed-android。导航、地图留在宿主里。NSH 那一块仍是 Rust 或 TSX。
仓库数据、桌面平台和 Swift 注册方式在下一节。
5. 兄弟项目 Native Shell
GPUI Kit 中文 README 把它写成兄弟项目。源码链接是 longbridge/native-shell。2026-10-28 打开后,仓库名是 longbridge/nsh,主页 nsh.dev。
创建于 2026-10-14。当天 Star 775、Fork 58,最近推送 2026-10-28。
用 Rust 写的原生 UI 框架,平台包括 iOS、Android、macOS、Windows、Linux 和 Web。
状态、逻辑和 API 共用。颜色、字体、间距和动效由应用自己定。
界面可以全用 Rust,也可以用 TSX,或让 TSX 屏幕引用 Rust 组件。
nsh init --template mixed混的是 Rust 和 TSX。
各平台用自己的控件绘制:
平台 | 绘制 | 版本要求 |
|---|---|---|
iOS | UIKit、CoreText | iOS 15+ |
Android | Android View、 | Android 9(API 28)+ |
macOS | AppKit、Core Animation、CoreText | macOS 14+ |
Windows | Win32、Direct2D、DirectWrite | Windows 10 1809+ |
Linux | GTK 4、Pango | GTK 4.14+ |
GPUI | GPUI(GPUI Fast),crate | macOS、Windows;Linux 需要 Vulkan |
Web | HTML、CSS | 现代浏览器 |
菜单、启动和嵌入:
菜单在桌面上是弹出层,在手机上是 sheet。
运行时可以加载签名的 TSX 包,在宿主配置的沙箱里跑插件、功能和由 AI 生成的界面。
命令行是
nsh。nsh init my-app --template rust或--template ts,再用nsh run my-app --target ios这类目标启动。安装见 nsh.dev 的安装文档。
嵌进已有的 Swift / UIKit App 时,NSH 的屏幕仍然用 Rust 或 TSX 写。iOS 文档:
链接
NativeShell.xcframework,import NativeShell,放一个NshAppView。它是UIView子类。加载
nsh build产出的bundle.nshc。开发用NativeShellDev.xcframework连接nsh dev。原生页面、导航和这块 NSH 界面在同一棵 UIKit 树里。一个 App 可以放多个
NshAppView,每个是独立引擎。示例
examples/embed-ios/main.swift:上面一条原生 header,下面一块 NSH。文档里的 Swift 示例是 UIKit,没有把 SwiftUI 写成宿主。
Swift 控件插进 NSH 布局,见 Native Components:
宿主实现
NshComponent,用app.register(component:)按名字注册任意UIView。文档举例是地图、相机预览。NSH 侧用 Rust 的
native("名字")或 TSX 的nativeComponent(),把它当成普通元素排进去。props、事件和
command走 JSON。不经过这块视图时,Swift 用
app.params、app.send、app.handle,对应 TSX 的host.params、host.on、host.call/host.post。
和 GPUI Kit 的关系,两边 README 各写了一句:
GPUI Kit 中文 README:GPUI 桌面后端正在开发,将基于 GPUI Kit 构建。
Native Shell 同日 README:GPUI 后端已经在 macOS、Windows、Linux 上用 GPUI 绘制,并能嵌进 GPUI 与 GPUI Kit 应用。命令是
nsh run my-app --target gpui。nsh/base里 Button、Checkbox、Switch 这类无样式组件,在名称和范围上跟随gpui-base。编码指南和设计指南也引用 GPUI Kit。
6. 功能对照
场景 | 仓库里已有的入口 | 边界 |
|---|---|---|
第一个窗口和按钮 | Getting Started 的 | 使用组件前要先 |
看全部组件 |
| 第一次编译依赖会比较久 |
IDE 式布局 |
| Dock 序列化是组件能力,业务状态仍由应用保存 |
代码编辑 |
| Tree-sitter 按 feature 选用 |
Markdown / HTML |
| HTML 渲染不是完整浏览器 |
浏览器里跑 | 工具链要求与桌面不同 | |
iOS / Android 里嵌一块 GPUI | 实验性;中间是 GPUI 自己画的 View | |
iOS / Android 上用系统控件画界面 |
| |
多平台原生界面,或嵌进 GPUI Kit | 独立项目;Swift 宿主用 | |
系统库和编译器 | 桌面要求见下一节 |
官方站点还有一份与 Iced、egui、Qt 6 的 对照。那一页的性能结论以项目方材料为准,本文不转写排名。
7. 在本机跑起来
安装文档按当前依赖图要求 Rust 1.92 或更新(Linux 侧的 oo7 0.6.0 写明了这个下限)。平台要求是:
macOS 15 或更高,并安装 Xcode Command Line Tools(
xcode-select --install)。Windows 10 或更高,安装 Visual Studio 2022 的 Desktop development with C++,Rust 使用 MSVC 目标,终端里要能运行
cmake --version。Linux 以 Ubuntu 24.04 的包装清单为准,还需要可用的 Wayland 或 X11 会话和 Vulkan 驱动。
libasound2-dev只在打开speechfeature 时需要。
sudo apt update
sudo apt install -y gcc g++ clang libfontconfig-dev libwayland-dev \
libwebkit2gtk-4.1-dev libxkbcommon-x11-dev libx11-xcb-dev \
libssl-dev libzstd-dev libasound2-dev vulkan-validationlayers libvulkan1新建应用:
cargo new gpui-hello
cd gpui-hello[dependencies]
gpui-kit = "0.8.1"官方入门把 src/main.rs 换成下面这样。窗口中央是一行字和一个主按钮,点击后终端打印 Clicked!。
use gpui_kit::component::button::{Button, ButtonVariants};
use gpui_kit::*;
struct HelloWorld;
impl Render for HelloWorld {
fn render(&mut self, _: &mut Window, _: &mut Context<Self>) -> impl IntoElement {
div()
.flex()
.flex_col()
.size_full()
.items_center()
.justify_center()
.gap_2()
.child("Hello, World!")
.child(
Button::new("hello")
.primary()
.label("Click me")
.on_click(|_, _, _| println!("Clicked!")),
)
}
}
fn main() {
application()
.with_assets(assets::Assets)
.run(|cx| {
init(cx);
open_window(WindowOptions::default(), cx, |_, cx| cx.new(|_| HelloWorld))
.expect("Failed to open window");
});
}cargo run已克隆本仓库时,安装文档用 cargo run -p hello_world 检查工具链、开窗和点击。Debug 构建几乎不优化 GPUI 和组件,帧耗时会明显高于 release;安装文档给框架依赖写了 [profile.dev.package] 的 opt-level = 3,这只改善运行,不缩短编译。
可选后端:
gpui-kit = { version = "0.8.1", features = ["gpui-fast"] }8. 谁在维护
GitHub 组织 longbridge 的公开资料是 “Longbridge Developers”,主页指向 longbridge.com。组织页创建于 2020-07-17。GPUI Kit 仓库创建于 2024-06-13;这个日期只说明仓库何时出现在 GitHub,不能当成 gpui-kit 这个 crate 的上架日。crates.io 上 gpui-kit 的包记录始于 2026-09-03。
提交数最高的两个账号,GitHub 资料都写着 Longbridge:
huacnlee(资料名 Jason Lee,简介 “Ruby / Go / Rust”,公司
@longbridge),contributors 接口的 contributions 为 1,501。madcodelife(资料名 Floyd Wang,公司
@Longbridge),contributions 为 474。
这两个数字是默认分支上的 commit 贡献计数,不是 PR 数,也不能据此写成头衔或全部维护者名单。
9. 技术栈
版本以 2026-10-28 仓库 main 的 workspace 和 v0.8.1 发布说明为准。
部分 | 要求或版本 | 用途 |
|---|---|---|
语言 | Rust,workspace | 组件、示例和壳都在这个 workspace |
编译器 | Rust 1.92+ | 安装文档给出的当前依赖下限,高于 edition 本身的门槛 |
桌面 | macOS 15+、Windows 10+(MSVC)、Linux | 一份 Rust 代码;Linux 包装清单在 Ubuntu 24.04 验证过 |
入口 |
| 应用侧通常只依赖它 |
渲染 |
| Zed GPUI 的配套快照,版本必须精确相等 |
可选渲染 |
| feature |
组件层 |
| 样式组件、无样式行为、默认图标 |
扩展 |
| 发布后的脚本面板 |
文本与布局 | Taffy、rustybuzz、ttf-parser、ropey | 排版和编辑器文本结构 |
编辑相关 |
| 诊断、补全、高亮 |
界面语言 |
| 组件文案 |
Web |
| 文档中的浏览器目标 |
移动端 | 实验性;文档示例钉 | 嵌入 iOS / Android 原生界面,不用桌面的 |
数据库 / 队列 | 无 | 这是 UI 框架,不带服务端存储 |
源码和文档里的代码示例是 Apache-2.0。文档正文和原创图示另外提供 CC BY 4.0。GitHub 仓库的 license 字段因此是 Other,不是单一 SPDX 标识。
10. 项目活跃度
查询时间:2026-10-28。
指标 | 数值 |
|---|---|
Star | 18,702 |
Fork | 1,155 |
Contributors | 211 |
累计 commit | 2,711 |
最近 commit 日期 | 2026-10-28 |
开放 Issue | 113 |
开放 PR | 16 |
已合并 PR | 2,508 |
已关闭未合并 PR | 326 |
Release | 18,最新 v0.8.1(2026-10-26) |
crates.io | 189,694 |
当天默认分支最新 commit 是 089bcd5(message_scroller: Let the scrollbar reach the end of padded content)。按发布时间倒序,跨进 2026-09 的前几条 Release 里,落在 2026-10 的是 v0.7.1(10-05)、v0.7.3(10-12)、v0.8.0(10-19)和 v0.8.1(10-26)。v0.7.0 的发布时间是 2026-09-28。这些是已发生的发布和提交,不能单独换成“长期不会再有破坏性更新”。
Star、Fork、Issue、PR、commit、Release 来自 GitHub REST / GraphQL。本月新增 Star 来自 Trending 页面原文 “3,924 stars this month”,没有改成自行计算的近 30 天。Contributors 来自 /repos/longbridge/gpui-kit/contributors?anon=true,每页 100 条,读完 3 页。
11. 如何贡献
说明在仓库的 CONTRIBUTING.md。
反馈:bug 和想法可以开 Issue,也可以到 Discussions。指南更鼓励能复现时直接提 PR。一个 PR 只做一件事。
本地验证:
./script/bootstrap安装依赖;Windows 用.\script\install-window.ps1。改现有界面时跑cargo run看 story,或cargo run -p <示例名>。改渲染时,macOS 可用MTL_HUD_ENABLED=1 cargo run看帧率,也可以用 Samply。UI 改动需要跑到受影响的 story 或示例,并附截图或录屏。提交 PR:允许完全由 AI 写出的补丁,但提交者要自己看过、测过,并让 diff 保持小。新增、修改或删除公开 API 时,描述里要有
## Public API,按 crate 写出签名和用途。已有公开项的变化放进## Breaking Changes。GPUI 核心行为应提到上游;gpui-pre只做版本对齐的快照,不在 Kit 里携带行为补丁。
仓库:https://github.com/longbridge/gpui-kit
文档:https://gpui-kit.com/zh-CN/docs/getting-started
移动端:https://gpui-kit.com/zh-CN/docs/mobile
Native Shell:https://nsh.dev ,仓库 https://github.com/longbridge/nsh
组件画廊和示例都在该仓库的 crates/story 与 examples/。
资料与使用说明
热度查询日期为 2026-10-28。Star 18,702、Fork 1,155 同时出现在 GitHub REST
repos/longbridge/gpui-kit和当天 Rust 月榜卡片上。月榜页面是 https://github.com/trending/rust?since=monthly,GPUI Kit 在该次抓取的 21 个仓库中排第 4。新增 Star 的口径是页面上的 “this month”,不是按日历日重算的 30 天增量。日榜和周榜当次抓取没有这个仓库。官网导航角标当天仍显示 18,664 Star,与 API 的 18,702 不一致。正文 Star 用 API。
累计 commit 2,711、开放 Issue 113、已关闭 Issue 630、开放 PR 16、已合并 PR 2,508、已关闭未合并 PR 326、Release 18,来自 GitHub GraphQL。REST 的
open_issues_count为 129,等于开放 Issue 加开放 PR,不要把它当成 129 个 Issue。Contributors 为 211 个账号:2 个 bot、209 个非 bot 登录名、匿名贡献 0。名单包含维护者本人,只统计默认分支上的 commit 作者,不含只参与 Issue、讨论或未合并 PR 的人。
contributions不是 PR 数。仓库创建时间 2024-06-13 不等于 crate 发布日。crates.io
gpui-kit创建于 2026-09-03,最新版 0.8.1 发布于 2026-10-26,累计下载 189,694。同日gpui-component的简介仍写 “60+ desktop UI components”,下载量 361,448;中文 README 写的是 “75+ 组件与原语”。两套数字都保留原文,没有相加。仓库根目录 README 的依赖示例仍是
gpui-kit = "0.7"。安装步骤采用同日的入门文档和 crates.io:0.8.1。Hello World 代码来自 Getting Started,按该页可运行示例缩进整理,未改 API。“120 FPS”“表格数十万行”“编辑器 20 万行”是 README 的项目方表述,本文没有做对照测试。贡献指南写明 Metal HUD 只在 macOS 可用,显示帧率受显示器刷新率限制,常见是 60 或 120。安装文档也写明 Debug 运行明显慢于 release,
cargo run -p hello_world不能当作性能测试。桌面平台范围以安装文档为准。移动端以 2026-10-28 查阅的 移动端文档 为准:页面自标实验性,并写明首要目标仍是桌面。文中的模拟器目标、已验证组件名单,以及
gpui-pre0.3.4 与当前 Kit 0.3.10 的差异,都来自该页,没有另做真机测试。itsbalamurali 的姓名、地点和公司栏来自同日 GitHub 用户资料,没有再核对他的雇主或职务。上游仓库创建于 2026-03-03,Star 441,许可证 AGPL-3.0;longbridge/gpui-mobile的 parent/source、创建日 2026-09-11 和gpui-pre-mobile的 0.3.4 钉版本,来自同日 GitHub API 与该 fork 的 README。WebAssembly 另有工具链要求。Native Shell 的 Star 775、Fork 58、创建时间 2026-10-14、最近推送 2026-10-28,来自同日 GitHub REST
repos/longbridge/nsh。GPUI Kit 中文 README 仍链接longbridge/native-shell,当天该地址对应的仓库全名是longbridge/nsh。GPUI 后端「正在开发」出自 GPUI Kit README,「已能嵌进 GPUI Kit」出自 Native Shell README,两句并列,没有并成一种进度。平台版本表来自 Native Shell README 的 Platforms 表。Swift 嵌入、NshAppView、NshComponent和examples/embed-ios/main.swift来自同日查阅的 iOS 文档 与 Native Components。第 4 节的手机对照还用了 Native Shell README 的 Platforms 表:Android 绘制为 Android View /StaticLayout,嵌入类是NshView(nsh.aar),系统要求 Android 9(API 28)+;示例目录examples/embed-android来自该 README 的示例表。mixed模板的含义来自仓库 README 对nsh init my-app --template mixed的说明。文档没有把 SwiftUI 写成宿主。本文没有安装或运行nsh,也没有编译该 Swift 示例。本文没有安装或运行 GPUI Kit,也没有核对对照页里的帧耗时。功能范围以 README、v0.8.1 发布说明和上述文档页面为准。


成为第一条评论!
Nobody's responded to this post yet. Add your thoughts and get the conversation going.