跳到正文
QuickGUI
v0.1.0 已发布至 crates.io

只渲染变化部分的桌面 UI。

用 Rust 或 TypeScript 构建原生桌面应用的 GPU 加速 GUI 框架。熟悉的布局、真正好用的文本、内置无障碍——应用空闲时零 CPU 占用。

开始使用
$cargo add quickgui

桌面应用需要的,都在这里。

空闲时零 CPU

屏幕上没有变化,就什么都不运行。空闲窗口不绘制任何帧,也不耗电。

默认就快

渲染在 GPU 上进行,并且只重绘窗口中发生变化的部分。

你已熟悉的布局

Flexbox 与 CSS Grid,外加 Tailwind 风格的简写。会排网页,就会排窗口。

组件开箱即用

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

文本真正好用

选择、编辑、撤销、输入法、emoji、从右到左文字,表现与所有原生应用一致。

默认无障碍

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

再大也流畅

百万行的表格与列表,滚动不掉帧。

原生,而且是真原生

真实窗口、原生菜单、对话框、托盘图标与系统通知——不是套壳浏览器。

一个 CLI,从开发到发布

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

用 Rust 或 TypeScript 来写。

想用哪个都行——产出的是同一个原生应用,而且没有 webview。

struct Counter {
    count: usize,
}

impl View for Counter {
    fn render(
        &mut self,
        cx: &mut ViewContext<'_, Self>,
    ) -> impl IntoElement {
        let increment = cx.listener("increment", |this, cx| {
            this.count += 1;
            cx.invalidate();
        });

        div()
            .size_full()
            .flex_col()
            .items_center()
            .justify_center()
            .gap_3()
            .child(text(format!("Count: {}", self.count)))
            .child(
                div()
                    .on_click(increment)
                    .px_4()
                    .py_2()
                    .rounded_lg()
                    .bg(Color::rgb8(24, 24, 27))
                    .text_color(Color::rgb8(250, 250, 250))
                    .hover(|s| s.bg(Color::rgb8(63, 63, 70)))
                    .child("Increment"),
            )
    }
}

一分钟上手。

Rust

01

添加 crate

cargo add quickgui
02

写一个视图

上面的计数器就是完整的 main.rs——直接复制进来。

03

运行

cargo run --release

TypeScript · Solid

01

创建应用

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

发布

quickgui build --target darwin-arm64 \
  --sign "Developer ID Application: Example (TEAMID)" \
  --notarize quickgui-notary

你会得到一个真实、已签名、自包含的应用,连安装包都有。

macOS现已可用
Windows开发中
Linux开发中

做点原生的东西。

写一个视图,发布一个真正的应用——让空闲窗口真正空闲。