跳到正文
QuickGUI

Pre-alpha接口可能变更

构建原生桌面应用,用 Go、TypeScript 或 Rust。

使用 Go、TypeScript 或 Rust 开发原生界面,支持快速增量构建、细粒度响应式和无障碍组件,共享同一个 GPU 渲染器。

$bunx @quickgui/cli init my-app

基准测试

在同一台 Mac 上测量 QuickGUI Go、QuickGUI TypeScript、QuickGUI Rust、GPUI、Tauri 和 Electron 的空闲内存与安装体积。每个应用都运行相同的任务管理器,包含 1,000 条任务。

Apple M5 · 32 GiB 内存 · macOS 27.0 · arm64测量日期:2026/9/8 – 2026/9/13

应用空闲内存

应用空闲内存QuickGUI Go: 83.1 MB; QuickGUI TypeScript: 97.5 MB; QuickGUI Rust: 68.7 MB; GPUI: 78.2 MB; Tauri: 101.7 MB; Electron: 136.1 MB037.575112.5150QuickGUI Go 0.1.3: 83.1 MB · 各次启动中位数:81.9–83.2 MBQuickGUI Gov0.1.3 · 9月8日83.1 MBQuickGUI TypeScript 0.1.3: 97.5 MB · 各次启动中位数:92.6–97.9 MBQuickGUI TypeScriptv0.1.3 · 9月9日97.5 MBQuickGUI Rust 0.1.4-next.2: 68.7 MB · 各次启动中位数:68.7–70 MBQuickGUI Rustv0.1.4-next.2 · 9月13日68.7 MBGPUI 0.2.2: 78.2 MB · 各次启动中位数:78.1–78.2 MBGPUIv0.2.2 · 9月13日78.2 MBTauri 2.11.5: 101.7 MB · 各次启动中位数:101.5–101.9 MBTauriv2.11.5 · 9月8日101.7 MBElectron 44.2.0: 136.1 MB · 各次启动中位数:132.1–136.7 MBElectronv44.2.0 · 9月8日136.1 MB

安装体积

安装体积QuickGUI Go: 25.9 MB; QuickGUI TypeScript: 84.4 MB; QuickGUI Rust: 13.7 MB; GPUI: 6.3 MB; Tauri: 8.3 MB; Electron: 300.8 MB0100200300400QuickGUI Go 0.1.3: 25.9 MBQuickGUI Gov0.1.3 · 9月8日25.9 MBQuickGUI TypeScript 0.1.3: 84.4 MBQuickGUI TypeScriptv0.1.3 · 9月9日84.4 MBQuickGUI Rust 0.1.4-next.2: 13.7 MBQuickGUI Rustv0.1.4-next.2 · 9月13日13.7 MBGPUI 0.2.2: 6.3 MBGPUIv0.2.2 · 9月13日6.3 MBTauri 2.11.5: 8.3 MBTauriv2.11.5 · 9月8日8.3 MBElectron 44.2.0: 300.8 MBElectronv44.2.0 · 9月8日300.8 MB

一个 1,100 × 720 窗口,加载相同的 1,000 条任务,每页保留 100 行,并选中第一条任务。每个框架重新启动 3 次,每次至少等待 30 秒,并要求内存稳定、CPU 不超过 1% 的状态持续 15 秒,再进行 10 次空闲采样。柱条表示各次启动中位数的中位数,端点线表示它们的范围。

测量方法

内存为应用及渲染辅助进程的物理占用之和,包括 WebKit 或 Chromium 的渲染、GPU 和网络进程,不包含自动填充及其他 macOS 系统服务。采样期间 CPU 和内存必须保持稳定,截图在采样结束后进行。数据包含压缩内存,使用与活动监视器一致的十进制 MB(1,000,000 字节),不强制垃圾回收或清空缓存。

体积统计 .app 内实际分发的文件,包括原生库和框架。QuickGUI TypeScript 包含 Bun 和 Solid 2,QuickGUI Rust 将原生核心链接进可执行文件,GPUI 将 Zed 的 GPU UI 框架打进可执行文件,Electron 包含 Chromium 和 Node,不含系统提供的 WebKit 等框架。这是安装体积,而非压缩下载大小。

演示支持搜索、状态筛选、翻页、备注编辑和完成操作。数据仅在当前会话的内存中保存,不使用数据库或网络服务。图表衡量应用加载后的空闲占用,不代表交互吞吐量。结果会随应用、设备和操作系统变化。QuickGUI 使用开发版本构建,每项结果均记录了对应的代码版本。

基准测试应用
QuickGUI Go 运行包含 1,000 条任务的基准演示

特性

空闲窗口保持休眠

界面没有变化时,窗口保持休眠。信号只更新相关属性,事件中的更新会合并为一次重绘。

快速增量构建

重新编译 Go、TypeScript 或 Rust 应用时,复用原生运行时。缩短反馈周期,把更多时间留给界面打磨。

Flexbox 与 CSS Grid

使用 Flexbox、CSS Grid 和熟悉的样式选项,在 Go、TypeScript 或 Rust 中组合布局并复用组件样式。

组件开箱即用

一大批可访问的无样式组件——菜单、对话框、弹出层、select、combobox、标签页、表格、树——随你定制

文本编辑

支持文本选择、编辑、撤销、输入法、emoji 和从右到左的文字。

默认无障碍

屏幕阅读器看到的是真实的按钮、列表和文本, 无需额外代码

虚拟化列表

虚拟化表格随滚动挂载可见行,轻松管理较大的历史记录和数据视图。

原生桌面能力

真实窗口、系统菜单、文件对话框、托盘图标和通知,都是应用的一部分。

开发与打包

quickgui dev 边改边跑;quickgui build 直接产出已签名、可安装的发布版本

Go、TypeScript 与 Rust 示例

同一个响应式计数器,三种熟悉的语言。选择语言,查看对应代码。

counter.go
func Counter() *ui.Element {
count, setCount := ui.CreateSignal(0)
return ui.View().
FlexCol().
SizeFull().
ItemsCenter().
JustifyCenter().
Gap(20).
Bg("#090d16").
TextColor("#e2e8f0").
Child(ui.Text("Count: ", count())).
Child(ui.Button().
OnClick(func() { setCount(count() + 1) }).
Padding(12).
RoundedLg().
Bg("#2563eb").
Hover(func(s ui.StyleBuilder) ui.StyleBuilder { return s.BackgroundColor("#3b82f6") }).
Child("Increment"))
}

链式原生视图、可组合样式与信号,让界面随状态同步更新。

Go 文档
Native SwiftUI · macOS

在 QuickGUI 中使用原生 SwiftUI

在 macOS 的 Go、TypeScript 或 Rust 应用中嵌入真正的 SwiftUI 控件,与 QuickGUI 组件一起使用。

swiftui.go
ui.SwiftUI.Host(
ui.SwiftUIHostProps{MatchContents: true},
func() *native.Node {
return ui.SwiftUI.Button(ui.SwiftUIButtonProps{
Label: "Save changes",
SystemImage: "checkmark",
Modifiers: []ui.SwiftUIModifier{
ui.SwiftUI.ButtonStyle("glass"),
},
})
},
)

快速开始

01

创建并运行

bunx @quickgui/cli init my-app
cd my-app
quickgui dev
02

格式化与构建

quickgui fmt
quickgui build
03

签名与打包

quickgui build --target darwin-arm64 \
  --sign "Developer ID Application: Example (TEAMID)" \
  --notarize quickgui-notary
macOS现已可用
Windows开发中
Linux开发中

开始使用 QuickGUI

编写 Go、TypeScript 或 Rust 组件,发布自带运行时的原生应用。