经过 Longbridge 生产验证

构建出色的高性能桌面应用。

生产就绪的 Rust UI 框架,提供 75+ 组件与原语、WebAssembly、无障碍与 UI 集成测试,并集成数据表格、Dock、图表、代码编辑器和 JavaScript 扩展能力。

  • 14.6k GitHub stars
  • Apache-2.0 许可
  • macOS / Windows / Linux / WebAssembly
Cargo.tomlgpui-kit = "0.6.0"
main.rs
use gpui_kit::component::{button::*, *};

impl Render for HelloWorld {
    fn render(&mut self, _: &mut Window, cx: &mut Context<Self>) -> impl IntoElement {
        div()
            .v_flex()
            .gap_2()
            .items_center()
            .child("Hello, World!")
            .child(
                Button::new("ok")
                    .primary()
                    .label("Let's Go!")
                    .on_click(cx.listener(Self::go)),
            )
    }
}
核心能力

为信息密集型软件而生。

复杂桌面应用真正需要的系统能力,都已整合在框架之中。

120 FPS 渲染

每一帧都由 GPU 绘制,高密度界面依然稳定流畅,不掉帧。

  • RenderOnce
  • GPU

复杂数据表格

虚拟滚动、列固定、列宽调整、排序与单元格选择,可承载数十万行。

  • Table
  • DataTable

高性能虚拟列表

只渲染可见区域,超长列表滚动依然保持流畅。

  • VirtualList
  • List

完整代码编辑器

Rope 存储,20 万行仍保持稳定性能;内置 Tree-sitter 高亮与 LSP 诊断、补全、悬浮提示。

  • Rope
  • Tree-Sitter
  • LSP
  • Highlighter

Dock 自由布局

面板停靠、拖拽重排与缩放,并可序列化保存。

  • DockArea
  • DockLayout
  • TabGroup

多主题支持

基于语义化 token 的明暗与多主题切换,而非无尽的样式字段。

  • Theme
  • ThemeColor
  • ActiveTheme

WebAssembly

应用与组件示例可通过 wasm32-unknown-unknown 在 Web 中运行,并与原生端共享实现。

  • WASM
  • Web

无障碍

交互层内置 AccessKit role、name、state、relationship 与 action。

  • AccessKit
  • Accessibility

UI 集成测试

在 headless window 中渲染真实组件,驱动鼠标与键盘,并验证状态、Focus、布局和无障碍。

  • gpui_kit::test
  • TestWindowExt
三个层次,一个生态

决定由谁掌控视觉系统。

使用 gpui-component 保持统一风格,基于 gpui-base 构建自己的设计系统,或用 gpui-shell 让应用可以被 JavaScript 扩展。

gpui-component

保持风格统一

gpui-component 提供完整、成熟且开箱即用的视觉与交互系统。

Button::new("save")
    .primary()
    .label("Save changes")
    .on_click(cx.listener(Self::save))
  • 75+ 个组件与原语
  • 内置明暗主题
  • 开箱即用的交互细节
开始使用
gpui-base

拥有设计系统

复用 Focus、选择、浮层与虚拟化行为,视觉完全由你决定。

Button::new("save")
    .on_click(cx.listener(Self::save))
    .rounded_md()
    .child("Save changes")
  • 零样式原语
  • 完整可访问性行为
  • 视觉表达 100% 自主
阅读 gpui-base 文档
gpui-shell

用 JavaScript 扩展应用

宿主仍然是 Rust,扩展是 JavaScript:脚本能碰到什么由宿主逐项授予,界面则在同一个进程里画出来。

import { Button, text } from "gpui";

Button.new("save")
    .on_click((_e, cx) => this.save(cx))
    .child(text("Save changes"))
  • 扩展产品不必 fork,也不必发新版本
  • 默认不授予任何系统能力
  • 保存文件即 hot-reload,无需重启
了解 gpui-shell
设计原则
行为属于基础层。视觉属于应用。

gpui-base 处理困难的交互机制:Focus、浮层定位、虚拟化与无障碍;你的产品决定它们最终呈现的样子。

探索 gpui-base