项目详情

Dioxus

Rust 的 React,一套代码跑遍 web/桌面/移动端

GitHub 地址 Apache-2.0 RustRSX

更新于 2026-07-23

← 返回汇总
项目速览

一句话定位

Rust 的 React,一套代码跑遍 web/桌面/移动端

Rust 全栈跨平台 UI 框架。React 风格组件模型 + RSX 宏,一套代码编译到 web(WASM)、桌面(Webview/WGPU)、移动端、SSR。Signals 状态管理融合 React/Solid/Svelte,Server Functions 深度集成 axum 实现全栈 Rust。亚秒级热重载(含实验性 Rust hot-patch),dx CLI 一键 serve/bundle/ship。38.1k Stars,全职核心团队,5 年沉淀。Web hello world <50kb,桌面/移动 app <5MB。

项目速览

核心数据

38.1k
GitHub Stars
5 年
项目年龄
v0.7
最新主版本
<50kb
Web hello world

Rust · Apache-2.0 · 全职核心团队(FutureWei / Satellite.im / GitHub Accelerator 资助)· 桌面/移动 app 可小于 5MB · 实验性 WGPU 原生渲染器

为什么存在

Rust UI 的三难

Electron 太重

JS/TS 生态成熟,但打包带整个 Chromium,动辄百 MB 内存。Rust 党想要轻量原生体验。

Tauri 只是壳

Tauri 用 web 前端 + Rust 后端,靠 IPC 通信。UI 仍是 JS,不是"全栈 Rust"。跨端逻辑要写两套。

原生 GUI 碎片

Slint/egui/iced 各有 DSL,无 web 技术栈红利,生态小,学习成本高。

核心理念

React 心,Rust 骨

借走 React 最成熟的两个抽象——组件模型 + 声明式 UI——用 Rust 重写。RSX 宏让 Rust 代码写起来像 JSX,但全程类型安全、零成本抽象。

RSX 宏 VirtualDOM Diff 算法 渲染器(DOM/Webview/WGPU)

同一套组件树,根据目标平台切换渲染后端。web 走 WebAssembly + DOM,桌面走 Webview 或实验性 WGPU,移动端走 Webview + JNI/ObjC 桥接。

核心机制

Signals 状态管理

融合 React Hooks、Solid Signals、Svelte Store 三家之长。细粒度响应式,无虚拟 DOM diff 开销,自动追踪依赖。

fn app() -> Element {
    let mut count = use_signal(|| 0);  // 细粒度 signal
    rsx! {
        h1 { "High-Five counter: {count}" }
        button { onclick: move |_| count += 1, "Up high!" }
        button { onclick: move |_| count -= 1, "Down low!" }
    }
}

use_signal 类似 useState 但基于 Solid 式 signal——只有读取该 signal 的节点才重渲染,非整树 diff。

核心机制

Server Functions 全栈一体

深度集成 axum。用 #[server] 宏标注的函数,客户端调用时自动序列化为 HTTP 请求,服务端执行——前后端同一套 Rust 代码,类型端到端安全。

开发体验

亚秒级热重载

一条 dx serve 启动,改 markup/CSS 毫秒级生效。实验性 --hotpatch 连 Rust 代码都能实时热补丁——改逻辑不重启。

DX 1
资产热重载
RSX、CSS、图片等资产修改毫秒级反映到运行中的应用,无需重编译。
DX 2
Rust hot-patching(实验)
修改 Rust 业务逻辑,运行中的应用直接热更新,跳过完整重编译循环。

这是 Dioxus 对标前端框架(Vite 体验)的关键投入——Rust 编译慢的痛点被热重载大幅缓解。

平台覆盖

真正全平台

平台渲染方式特点
WebWebAssembly → DOMSSR 预渲染 + 客户端 rehydrate。hello world 约 50kb,可比 React
桌面Webview / 实验 WGPU / Freya(Skia)macOS/Linux/Windows。原生系统访问无需 IPC,cargo run 即跑
移动Webview / 实验 WGPU/Skia生成 .ipa/.apk。直调 Java/ObjC,秒级上设备
SSR服务端渲染Suspense、水合、静态生成、增量再生
实验WGPU 原生 / Liveview可嵌入 Bevy/WGPU,甚至跑在嵌入式 Linux
竞品对比

vs Tauri / Leptos / Slint

维度TauriLeptosSlintDioxus
定位桌面壳(web+Rust)Web 框架原生 UI DSL全栈跨平台
UI 语言JS/TS(任意前端框架)RSX(Rust)自有 DSLRSX(Rust)
全栈 Rust否(IPC)是(Web)是(全平台)
跨端桌面为主Web 为主桌面/嵌入式Web/桌面/移动/SSR
状态管理取决于前端Signals(优秀)自有响应式Signals(融合三家)

选型建议:纯 Web 选 Leptos;桌面壳 + 现成 JS 前端选 Tauri;嵌入式/原生 DSL 选 Slint;一套代码全平台 + 全栈 Rust 选 Dioxus

生态与工程化

不只是框架

  • dx CLIserve 开发、bundle 打包、ship 部署全流程
  • 内置打包优化:Web 自动 .avif 生成、.wasm 压缩、代码压缩
  • 一等公民组件库:仿 shadcn/ui 与 Radix-Primitives 的原生组件集
  • TailwindCSS 内置支持:或加载任意 CSS 库,HTML/CSS 样式
  • 社区 SDK:dioxus-std 社区维护,dioxus-community 组织聚合最佳 crate
  • 文档严谨:所有 HTML 元素/监听器配 MDN 文档,CI 保证文档与代码同步
快速上手

三步起跑

# 1. 装 CLI
curl -fsSL https://dioxuslabs.com/install.sh | bash
# 或 cargo install --git ... dioxus-cli
# 2. 新建项目(零配置)
dx new my-app
cd my-app
# 3. 启动开发(热重载)
dx serve
# 移动端:
dx serve --platform android
# 4. 打包发布
dx bundle   # 自动优化,Web/桌面/移动

从 hello world 到设备运行以秒计。Rust 类型安全贯穿前后端,编译期消灭整类 bug。

适用场景

谁该用 Dioxus

风险提示

需要权衡

潜力评估

未来空间

Rust 全栈 UI 赛道最完整的答案。38.1k stars + 全职团队 + 5 年沉淀——它把"一套 Rust 代码跑全平台"从口号做成了可用产品。v0.7 的热重载 + axum 全栈 + signals 统一是质变里程碑,DX 已逼近前端框架。若移动端与 WGPU 原生渲染走向稳定,且 1.0 承诺 API 冻结,有机会成为 Rust 生态的"React"——定义跨平台 UI 的标准范式。挑战在于:React/Tauri 生态护城河深,Dioxus 需在"全栈 Rust + 真跨端"这条差异化路线上持续证明自己。长期看,Rust 在系统级应用的渗透是不可逆趋势,Dioxus 站对了赛道。


上一个
Outlines
下一个
Hyprland
1 / 15