做了一个无 WebView 的桌面 GUI 框架 Wabou(SolidJS + Rust + Vello)

9 月 10 日
 SunDoge

项目地址: https://github.com/SunDoge/wabou

背景

当前 Rust GUI 开发现状:Tauri 带着浏览器内核,环境碎片化严重、内存重;纯 Rust GUI ( Iced/egui )省资源,但写复杂状态和联动极其痛苦,还没有 HMR 。

因此我在尝试一个折中路线:界面用 SolidJS 写,底层的布局和渲染完全交给 Rust 原生,不嵌浏览器。

架构与原理

没有 DOM ,也没有 HTML/CSS 引擎。分工很简单:

[SolidJS 2 (TSX) + 业务逻辑]
         ↓
    (QuickJS)
         ↓  二进制 Mutation 协议(微任务末尾批量推送)
================================
  Rust 原生运行时
  - 布局:Taffy (Flexbox/Grid)
  - 排版:Parley
  - 绘制:Vello Hybrid / wgpu
  - 窗口:Winit

现状

我用它跑了几个完整应用来压测协议与渲染稳定性:

支持多窗口、透明窗口、中文 IME 输入、终端/代码编辑器 Widget 、自定义 WGSL Shader 、以及无头( Headless )离屏 PNG 测试。

局限

无 DOM 环境:虽然写 TSX ,但凡依赖 window 、document 或浏览器 API 的 npm 包都跑不了,只能用纯算法/工具类 JS 库。

文字与 IME 还在踩坑:跨平台的文字 shaping 、光标定位、输入法候选框对齐还有不少边界 Bug 。

跨平台支持:主力开发在 Linux 和 macOS ,Windows 仍有细节在补。

快速尝试

git clone https://github.com/SunDoge/wabou.git
cd wabou
bun install --frozen-lockfile
bun run wabou doctor
bun run dev

(首次编译 Rust 依赖会比较慢)

如果你也对“响应式前端语法 + 原生 GPU 渲染”这条路线感兴趣,欢迎试用。

936 次点击
所在节点    分享创造
1 条回复
TripleZ
9 月 10 日
支持!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/1241112

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX