Rust GUI in mid-2025

Rust GUI in mid-2025

June 26, 2025

对比2024

没有很大的进展。

推荐方案

  • 桌面端(不考虑移动端):推荐 iced/gpui
  • 跨平台:推荐 slint(不过要写 slint 自己的 DSL,我很厌恶 UI 和其它部分使用不同语言的做法)
  • Web:依然是 tauri 和 dioxus 两尊大佛二选一
  • 游戏引擎:可以考虑 bevy
  • 自己搞渲染:推荐 winit + wgpu
  • ImGui 类:推荐 egui(并非专指 dear imgui)

其它都还不太可用,或者比较冷门。

个人看法

要说哪个最看好:

  • slint:我还不好说能不能和他哥哥 Qt 一样流行(Qt 也不算特别流行),至少目前有点粗糙
  • tauri:讨论度是越来越高,人家插件化和权限管理也确实做的好,相比之下 dioxus 就有点冷
  • iced:不温不火
  • gpui:好像除了 zed 没什么用的
  • egui:imgui 大类本身应用面也就那样,感觉不会超过 dear imgui
  • bevy:我基本不接触游戏框架无法评价

尽管面向的分类不同,一定要选一个的话,我认为 tauri 未来最有前途(?)

幻想时间

如果是幻想时间,那我还是觉得我因为:

  • 目前的 imgui 类框架函数式不够纯(还要写 tmd id 来缓存状态,那我不是白即时了吗)
  • slint 这种要独立 UI 语言的东西不喜欢

而正在开发的 tessera ui 最有想法()

Tessera UI 设计理念

设计是把状态全部抽出来,从顶层组件一层层往下传,组件全是函数 + 状态处理回调(因为还是要以组件为单位处理外部输入的)。

这样想要组合组件只要简单的用基本布局组件把子组件全部调用一次(类似 compose)。

而且高度并发化:

  • 什么布局要并发
  • 计算组件树得出 drawer 指令要并发
  • 状态回调的执行那没法并发毕竟什么拦截点击事件向下传播还是得意思一下的

目前还在非常早期开发阶段,可以看看 example 什么的锐评一下:

https://github.com/shadow3aaa/tessera