Rust 的 GUI 生态一直是个热闹的话题。从早期的 egui、iced,到 Dioxus、Slint,各家在自绘、原生渲染、Web 技术栈之间走不同的路线。最近注意到三个较新的框架——WaterUI、Blinc 和 Ply——它们都在尝试用 Rust 写一套代码,跑在移动端、桌面端甚至 Web 上。本文简单梳理它们的特点和差异。
三条路线的简要定位
| 框架 | 渲染方式 | API 风格 | 核心依赖 |
|---|---|---|---|
| WaterUI | 原生控件渲染 | SwiftUI 式声明式 | 平台原生 UIKit/Android View/GTK4 |
| Blinc | GPU 自绘 | SwiftUI 式声明式 | wgpu + Taffy |
| Ply | GPU 自绘 | Builder 链式 | macroquad/miniquad |
简单说:WaterUI 像 React Native,走原生桥接;Blinc 像 Flutter,走 GPU 统一自绘;Ply 更像游戏 UI 框架,基于 macroquad 快速搭建界面。
WaterUI:原生渲染的 SwiftUI 追随者
WaterUI 的野心很明确:让 Rust 写出类似 SwiftUI 的代码,然后翻译成各平台的原生控件。iOS 和 macOS 上走 UIKit/AppKit,Android 上用 Android View,Linux 用 GTK4,同时还有一个 Web 后端。
它的响应式系统基于 nami crate,采用细粒度依赖追踪,没有虚拟 DOM。这让它在状态更新时可以直接定位到具体控件,避免整树刷新。框架本身也支持 no-std,对嵌入式场景留了余地。
use waterui::prelude::*;
fn main() -> impl View {
vstack((
text("Hello, WaterUI!").size(24.0).bold(),
text("Build native UIs with Rust"),
))
.spacing(12.0)
.padding()
}
WaterUI 提供了 CLI 工具,支持热重载(water preview),对开发体验有加分。不过项目还在早期阶段,API 稳定性需要关注。
适合谁:想要真正原生外观和交互、熟悉 SwiftUI 范式、愿意接受早期项目的开发者。
Blinc:wgpu 上的自绘方案
Blinc 选择了另一条路——全部自己画。它基于 wgpu 做 GPU 加速渲染,布局由 Taffy(一个 Rust 实现的 Flexbox 引擎)负责。这种架构的好处是视觉表现完全由框架控制,可以实现毛玻璃、金属质感、阴影等复杂效果,而不受平台控件能力限制。
div()
.glass()
.rounded(16.0)
.p(24.0)
.child(text("Frosted Glass"))
Blinc 的动画系统值得一提:它使用弹簧物理(spring physics)而非固定时长,动画手感更自然。组件可以通过 #[derive(BlincComponent)] 生成类型安全的动画钩子,编译期就能检查动画属性的合法性。
平台覆盖也很全:macOS、Windows、Linux、Android、iOS 和 Web(WASM + WebGPU)。不过 WebGPU 在部分浏览器和旧设备上的支持度仍是需要注意的点。
适合谁:需要统一视觉风格、追求复杂动画和特效、对 GPU 渲染有掌控欲的项目。
Ply:macroquad 上的轻量 UI 层
Ply 的定位比前两者更轻量。它直接建立在 macroquad/miniquad 之上,这是一个在 Rust 游戏开发社区广泛使用的轻量级跨平台渲染库。Ply 提供的不是一套完整的视觉系统,而是一个用于快速构建 UI 的 element tree 和布局引擎。
ui.element()
.width(grow!()).height(grow!())
.layout(|l| l.align(CenterX, CenterY))
.children(|ui| {
ui.text("Hello, Ply!", |t| t
.font_size(32)
.color(0xFFFFFF)
);
});
Ply 使用 Builder 模式而非声明式宏,API 风格更偏向程序化 UI。它的 CLI 工具 plyx 能快速脚手架项目,并内置了 Google Fonts 选择、shader 管线、TinyVG 矢量图等可选功能。许可证是 Zero-Clause BSD,极其宽松。
适合谁:已经在用 macroquad 做游戏或工具、需要快速叠加 UI 层、喜欢 builder 风格的开发者。
怎么选
- 要原生感、跟系统走 → WaterUI。它的原生渲染意味着无障碍、输入法、系统主题等都能自动继承平台行为,代价是各平台表现可能不完全一致。
- 要统一视觉、重动画特效 → Blinc。wgpu 自绘给了你完全的控制权,代价是包体积和 WebGPU 兼容性。
- 要轻量、快速上手、偏游戏/工具 → Ply。macroquad 的成熟生态和极简许可证降低了准入门槛,代价是它更像 UI 层而非完整应用框架。
三款框架都处于快速迭代期,目前看来 WaterUI 和 Blinc 偏向"应用级 UI 框架",Ply 偏向"游戏/工具 UI 层"。Rust GUI 生态还没有出现一家独大的局面,这种百花齐放的状态反而给了开发者按场景选择的空间。
Sources: