写一次 Rust。 在 8 个平台上直接画到 GPU 上。
GPUX 把 GPUI 的渲染管线与 GPUI-Kit 组件库封成一层薄宿主抽象, 同一份 Rust 视图代码编译成桌面、移动、鸿蒙、Web 与小程序的本地可执行文件。 没有 WebView,没有 JS 侧,也不需要写桥接宏。
其他安装方式见 快速开始:cargo install gpux-cli、pnpm、bun、yarn。
- Release 单文件体积
- 3.8MB
- 首屏常驻内存 (RSS)
- 28MB
- 冷启动首帧
- 16ms
- 进程内服务调用
- 1.2µs
01 · Platforms
8 个宿主,同一套视图
每个平台都直接对接系统图形接口。窗口、VSync、输入法与安全区由对应的 gpux-desktop /
gpux-mobile / gpux-web 宿主接管,业务代码不需要写 #[cfg] 分叉。
use gpux::prelude::*;
use gpux::ui::component::button::{Button, ButtonVariants as _};
impl Render for ClusterMonitor {
fn render(&mut self, _: &mut Window, cx: &mut Context<Self>) -> impl IntoElement {
let state = self.store.read();
v_flex().size_full().p_5().gap_4()
.bg(cx.theme().background).text_color(cx.theme().foreground)
.child(format!("活跃节点: {} · P99: {:.2}ms", state.nodes, state.p99_ms))
.child(
h_flex().gap_2()
.child(Button::new("scale-up").primary().label("+ 扩容节点")
.on_click(cx.listener(|this, _, _, cx| {
this.store.update(|s| s.nodes += 1);
cx.notify();
})))
.child(Button::new("inspect").outline().label("调用 cluster.inspect")
.on_click(cx.listener(Self::on_sample_snapshot))),
)
}
}
02 · Design
三个决定,其余是细节
GPUX 不去包装一个浏览器,也不在两种语言之间架桥。它只做三件事。
macOS 与 iOS 走 Metal,Windows 走 DirectX 12,Linux 与 Android 走 Vulkan, 鸿蒙走 XComponent,Web 走 WebGPU。上层是同一套 WGSL 着色器与布局引擎。
视图、状态与后台逻辑都在 Rust 里。服务就是普通函数,通过
ServiceRegistry 在进程内调用,不需要宏、schema 或权限 JSON。
gpux build --platform <target> 从同一份源码产出
.app / .msi / .ipa / .apk / HAP / WASM 与小程序包。
03 · Capabilities
框架自带的部分
开箱可用,不需要再拼装第三个库。
按钮、输入、虚拟表格、可停靠面板、命令面板、Markdown、语法高亮,全部为 GPU 图元绘制。
线程安全的 Store<T> 与带返回栈的 Router<R>,原生联动 iOS 侧滑返回、Android 预测式返回与鸿蒙手势。
系统托盘、全局快捷键、窗口菜单、SQLite、生物识别、通知、剪贴板与传感器,统一为 Rust trait。
gpux doctor 检查 Rust target、NDK、OHOS SDK 与 wasm-bindgen 是否就绪,缺什么说什么。
组件里可以直接挂着色器画布,与布局系统共享同一条提交队列,不必另开渲染线程。
iOS staticlib、Android cdylib、鸿蒙 ArkTS 壳与小程序脚手架由 CLI 生成,接进现有工程即可。
04 · Benchmarks
同一应用的体积与内存
同一份「响应式状态 + 10,000 行虚拟列表 + 1,000 次服务调用」应用,在 Apple M3 Max (macOS 15.3) 与 Linux Wayland/Vulkan 上对比原生自绘、系统 WebView、Skia/JVM 与 Chromium 四类跨端方案。完整 12 款框架对比与测试方法 →
Release 二进制体积 · strip 后产物
原生 GPU / Skia AOT 与系统 WebView、内置 Chromium 的分发体积差异。
首屏常驻物理内存 RSS · 含全部子进程
Rust/C++ 原生自绘通常在 18–35 MB;系统 WebView 与 JVM/Skia 在 60–115 MB;Electron 超过 200 MB。
05 · Documentation
文档
从环境搭建到 8 端交付,一步一步写清楚了。
06 · Community
社区
问题、提案和版本公告都在这些地方。