
(依赖 Yororen UI 开发的 Minecraft 服务器网络加速工具,包含仪表盘、实时统计、自定义窗口边框、数据表格和虚拟化列表,在 Windows 上内存占用仅~20M)
最近在尝试用 Rust 写几个桌面小工具,但在 GUI 库的选型上却卡壳了很久。最终,我决定基于 Zed 的 gpui 框架,从零开始打造一个自己的组件库。
为什么没有选择现有的 gpui-component?
在选型过程中,我当然也考察了 gpui-component —— 这个由长桥团队维护、拥有 1w+ Stars 的方案。它看起来很“官方”,但深入研究其代码和文档后,我发现有几个点并不符合我的预期:
- 动画功能薄弱 - 在代码库中搜索
animation,只能找到一个 cubic_bezier 函数,远谈不上一个完整的动画系统。
- 国际化支持有限 - 它通过
rust-i18n 宏实现,不支持运行时热加载翻译文件,也缺乏对本地化日期/货币格式以及 RTL(从右至左)布局的支持。
- 主题 API 设计不够顺手 - 采用了扁平化的设计(例如
primary_hover),而非更现代、更易扩展的语义化设计(例如 action.primary.hover_bg)。
- 依赖较多 - 引入了包括 Tree Sitter 在内的大量依赖,导致编译时间较长,最终二进制文件体积也偏大。
平心而论,gpui-component 功能确实丰富,包含了图表、代码编辑器、Dock 布局等高级组件。但对于我这种只想做精致小工具的开发者来说,它显得有些笨重,而且在关键的动画和国际化体验上又有所欠缺。
从零搭建:Yororen UI 的诞生
既然现有的方案都不够完美,我决定基于 gpui 框架自己动手,目标是打造一个 “开箱即用的轻量精致体验” 的组件库。
目前已实现的核心特性
- 50+ 常用组件 - 覆盖了按钮、输入框、徽章、工具提示、树形控件等日常开发所需的大部分基础组件。
- 完整的动画系统 - 内置 60+ 种缓动函数(如 elastic、bounce),提供淡入淡出、滑动、缩放等预设动画,并支持顺序、并行、交错等动画编排。
- 原生的国际化支持 - 不仅支持多语言,还能在运行时动态加载和切换翻译文件,完整支持 LTR/RTL 布局以及数字、日期的本地化格式化。
- 智能主题系统 - 采用 GlobalTheme + ActiveTheme 的双层设计,可以轻松实现主题切换,并自动跟随系统的明暗模式。
- 20+ 内置 SVG 图标 - 通过
rust-embed 静态嵌入,无需额外文件依赖。
- 高级组件 - 如
TitleBar(用于创建自定义窗口标题栏)和 VirtualList(用于高性能渲染超长列表)。
得益于精心控制的依赖数量,整个库编译速度快,最终的二进制文件也非常精简。
功能演示截图

最基础的计数器组件演示

展示列表、输入框、按钮、模态框等组件的交互和国际化功能

展示树形控件、虚拟列表在文件浏览器场景下处理大量数据的能力

功能丰富的吐司(Toast)消息及通知中心系统
如何选择:Yororen UI 还是 gpui-component?
这是一个很实际的问题。简单来说,如果你的需求场景符合以下几点,那么 Yororen UI 可能更适合你:
- 希望组件拥有开箱即用的精致动画效果(
gpui-component 在这方面几乎为零)。
- 需要完整、灵活的国际化支持(包括运行时切换语言和 RTL 支持)。
- 更喜欢现代化、语义化的主题 API 设计。
- 追求依赖轻量、编译速度快、产物精简。
- 主要目标是开发精致的桌面小工具,而非大型 IDE 或复杂桌面软件。
- 愿意尝试早期项目,并一起参与打磨和改进。
反之,如果你需要:
- 内置的图表、代码编辑器、Web视图等重型组件。
- Tree Sitter 提供的强大语法高亮能力。
- 构建类似 VSCode 那样拥有复杂多面板布局的 IDE 应用。
- 追求经过大量项目验证的生产级稳定性(毕竟
gpui-component 有 1w+ Stars)。
- 丰富的社区资源和现成的解决方案。
那么,选择 gpui-component 依然是更稳妥的决定。
欢迎试用与共建
Yororen UI 目前处于 v0.1.0 阶段,采用 Apache 2.0 协议开源。
🔗 GitHub 仓库:https://github.com/MeowLynxSea/yororen-ui
如果你也在使用 gpui 框架,或者正在为 Rust GUI 选型而纠结,非常欢迎你来试用、提交 Issue 或 Pull Request!我们特别期待:
- 拥有动画或交互设计经验的朋友,一起来打磨组件细节。
- 正在开发多语言应用、需要强大国际化支持的开发者。
作为一个刚刚起步的 开源实战 项目,Yororen UI 还有很多不完善的地方。如果你的项目正好需要这样一个轻量、精致、现代化的 Rust GUI 组件库,不妨给它一个机会。也欢迎在 云栈社区 分享你的使用体验或想法,让我们一起把它建设得更好。
|