当前位置: 首页 > news >正文

【大家的项目】Yororen UI - 基于 Zed 的 gpui 框架的 Rust GUI 组件库,50+ 组件开箱即用

image

(依赖 Yororen UI 开发的 Minecraft 服务器网络加速工具,包含仪表盘、实时统计、自定义窗口边框、数据表格和虚拟化列表,在 Windows 上内存占用仅~20M)

最近在用 Rust 写几个桌面小工具,结果卡在 GUI 库选型上好一阵,最后怎么决定基于 gpui 自建组件库。

为什么不用 gpui-component?

选型过程中,我确实看到了 gpui-component,长桥团队维护的,1w+ Stars,看起来很"官方"的方案,但仔细看了代码和文档后,有几个点让我犹豫:

  1. 动画太基础- 在代码库中搜索animation,只能找到一个cubic_bezier函数。

  2. 国际化有点简陋- 用rust-i18n宏实现,不能运行时热加载翻译文件,不支持本地化日期/货币格式,也没有 RTL 支持。

  3. 主题 API 不太顺手- 扁平化设计(primary_hover),而不是语义化的(action.primary.hover_bg),扩展起来有点别扭。

  4. 依赖太多- 大量依赖(含 Tree Sitter 等),编译时间长,二进制膨胀。

gpui-component 功能确实丰富(图表、代码编辑器、Dock 布局),但对于想做精致小工具的我来说,反而显得笨重,而且关键体验(动画、i18n)不到位。

于是,我写了 Yororen UI

既然现有方案都不完美,决定基于 gpui 自建一套,主打 **"开箱即用的轻量精致体验"**:

目前有什么?

  • 50+ 组件- 按钮、输入框、徽章、工具提示、树形控件...日常够用

  • 完整的动画系统- 60+ 缓动函数(elastic、bounce...)、预设动画(fade、slide、scale)、编排器(顺序/并行/交错)

  • 原生国际化- 国际化支持 + 运行时加载/切换翻译文件 + LTR/RTL 支持 + 数字/日期本地化

  • 智能主题- GlobalTheme + ActiveTheme 双层设计,自动跟随系统明暗切换

  • 20+ SVG 图标- 通过 rust-embed 静态嵌入

  • 高级 Widgets- TitleBar(自定义窗口标题栏)、VirtualList(虚拟化列表)

依赖少,编译快,二进制精简。

Demo 展示

最基础的用法

最基础的用法

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

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

展示树形控件、虚拟列表处理大量文件

展示树形控件、虚拟列表处理大量文件

吐司消息及通知系统

吐司消息及通知系统

选 Yororen UI 还是 gpui-component?

Yororen UI 可能会更适合你,如果:

  • 想要开箱即用的动画效果(gpui-component 几乎没动画)

  • 需要完整的国际化(运行时切换语言、RTL 支持)

  • 喜欢现代化的主题 API(语义化命名而不是扁平化)

  • 希望依赖轻量、编译快

  • 想做精致的小工具而非大型 IDE 类产品

  • 愿意接受早期版本,一起参与打磨

如果:

  • 需要内置图表、代码编辑器、Web等组件

  • 需要 Tree Sitter 语法高亮

  • 要做复杂的多面板 IDE(Dock 布局)

  • 追求生产级稳定性(毕竟 1w+ Stars嘛,久经考验)

  • 需要丰富的社区资源和现成方案

那还是选 gpui-component 吧~

试试看?

Yororen UI 目前 v0.1.0,Apache 2.0 协议开源:

🔗GitHub: https://github.com/MeowLynxSea/yororen-ui

如果你也在用 gpui 做项目,或者在 Rust GUI 选型上纠结,欢迎试用、提 Issue、PR!特别是:

  • 有动画/交互设计经验的朋友

  • 需要国际化支持的多语言应用开发者

目前项目刚刚起步,很多地方还不完善,请多包涵~如果各位有兴趣,欢迎和我一起建设~

http://www.jsqmd.com/news/409719/

相关文章:

  • Qwen3-4B-Instruct-2507前端集成:Chainlit自定义组件实战
  • 前后端分离Spring Boot在线远程考试系统系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程
  • 实测DeepSeek-R1-Distill-Qwen-7B:数学题解答效果令人惊喜
  • SpringBoot+Vue 开发精简博客系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • ClearerVoice-Studio在Matlab中的调用与数据分析应用
  • 小红书爆款内容制作秘籍:FLUX.V2图像生成全攻略
  • 基于SpringBoot+Vue的物流管理系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • 轻量中文大模型部署新范式|通义千问1.8B-GPTQ-Int4+vLLM+Chainlit完整指南
  • SenseVoice-Small ONNX参数详解:batch_size=1适配、use_itn=True与language=auto配置说明
  • DeepSeek-R1-Distill-Qwen-1.5B多模型集成方案:提升回答质量
  • 电商人必学!EasyAnimateV5商品视频自动生成技巧
  • 小白必看!QAnything PDF解析工具保姆级使用教程
  • 解决Discord机器人停止监听消息的问题
  • SeqGPT-560M保姆级教学:新手三分钟完成本地NER服务部署与测试
  • 深入探讨JavaScript中的原型链与对象赋值
  • 告别云端依赖:阿里小云本地语音唤醒方案详解
  • AIVideo在.NET环境下的集成开发指南
  • 5分钟玩转CLAP:音频分类Web服务部署与使用详解
  • Lingyuxiu MXJ LoRA创作引擎Matlab接口开发指南
  • Gemma-3-270m入门指南:面向学生与开发者的Ollama轻量模型实践课
  • 3D Face HRN在虚拟现实中的应用:高保真虚拟化身创建
  • 笑惨了!Meta AI 专家被 OpenClaw 删光邮箱,3 次叫停都不管用,它还说“我记得你的指令,但就是违反了,你有理由生气”
  • DeepSeek-OCR-2与大数据技术结合:海量文档处理平台架构
  • QMC音频解密工具:突破QQ音乐格式限制的高效解决方案
  • Z-Image Turbo零基础教程:AI绘画第一步操作详解
  • 达摩院春联模型开源生态:春联生成模型-中文-base与LangChain集成教程
  • 无需代码!DeepSeek-OCR-2网页版使用全攻略
  • lite-avatar形象库实战入门:3步完成数字人接入——选形象、配ID、启服务
  • DeepSeek-R1-Distill-Qwen-1.5B实战教程:Jupyter集成调用步骤详解
  • AI绘画新高度:BEYOND REALITY Z-Image写实风格深度体验