📌 项目地址:DioxusLabs/dioxus | ⭐ 37,556 颗星 | 🔧 Rust | 📜 未标注
用同一份代码开发 Web、桌面和移动应用
如果你写过 React,再看 Dioxus 的代码会非常眼熟——但它用的是 Rust。这个项目的核心价值在于一套代码,三种平台:浏览器(Web)、原生桌面(macOS/Linux/Windows)和原生移动端(Android/iOS)。更关键的是,它从底层就设计了完整的全栈能力,不像 Tauri 那样需要额外写前端,也不像 Flutter 那样需要学 Dart。
README 里放了一个直观的计数器例子:
fn app() -> Element {
let mut count = use_signal(|| 0);
rsx! {
h1 { "High-Five counter: {count}" }
button { onclick: move |_| count += 1, "Up high!" }
button { onclick: move |_| count -= 1, "Down low!" }
}
}
use_signal 是状态管理的核心,类似 React 的 useState,但响应式更接近 Solid 的信号机制。rsx! 宏写 HTML-like 结构,直接在 Rust 里操作。
快速上手:零配置热重载
安装 Dioxus CLI 后,一条命令就能跑起应用。官方文档给了最常用的开发指令:
dx serve
启动后修改 HTML、CSS 会实时生效。更激进的是实验性的 --hotpatch 参数:
dx serve --hotpatch
这个功能可以实时热更新 Rust 代码逻辑(不仅仅是前端样式),对于 Rust 这种编译型语言来说相当少见。README 强调:整个热重载过程是“subsecond”(亚秒级)。
打包部署同样简洁:
dx bundle
Web 端会自动优化,生成 .avif 图片、.wasm 文件;桌面端打包成 .deb、.dmg 或 .msi;移动端直接跑在模拟器或真机上。从开发到发布,不需要额外配置 Webpack 或 Gradle。
全栈能力:Server Functions + Axum
Dioxus 内置了与 axum 的深度集成。你可以在前端代码里定义 Server Function,自动生成对应的后端 API 路由,全程类型安全。README 列出了开箱即用的功能:
- WebSocket、SSE 服务端推送
- 文件上传/下载
- 服务端渲染(SSR)
- 表单处理
- 中间件
也可以直接接入已有的 axum 后端。这意味着你在一个项目中既写客户端逻辑,又写服务端逻辑,而状态管理、路由、类型全由 Rust 编译器保证一致性。
与 React / Flutter / Tauri 的差异
| 工具 | 语言 | 平台支持 | 核心差异 |
|---|---|---|---|
| React | JS/TS | Web(移动端需 React Native) | 拥有最庞大的生态,但性能受限于 JS 解释器 |
| Flutter | Dart | 移动端、Web、桌面 | 自绘引擎,UI 一致性高,但 Dart 语言小众 |
| Tauri + 前端 | Rust + JS | 桌面、移动端 | 后端 Rust,前端 JS,代码分层,不能一套同时跑 |
| Dioxus | Rust | Web、桌面、移动端、服务器 | 原生 Rust 全栈,信号驱动,热重载 Rust 代码 |
Dioxus 的特殊之处在于:它不依赖 WebView(桌面端用 webview-like 渲染,但移动端有原生 WGPU 渲染器实验),而且可以“三行代码”切换目标平台——仅需修改 dx serve --platform 的参数。
README 里专门提到实验性的原生渲染器:基于 WGPU,可用于嵌入式 Linux、Bevy 游戏引擎等场景。这意味着 Dioxus 的适用范围还在扩展。
当前局限与注意事项
- Rust 学习曲线:如果你不熟悉 Rust 的所有权、生命周期、异步,会有一段适应期。Dioxus 虽然 API 模仿 React,但底层强制 Rust 的规则。
- 移动端仍算早期:官方文档承认 Android/iOS 支持是“first-class”,但实际使用需要配置 JNI/Native API 环境,并且实验性渲染器(WGPU)的稳定性不如 Web 端。
- 生态规模:第三方组件库不像 React 那样丰富。Dioxus 提供了类似 shadcn/ui 的原始组件,但复杂 UI 可能需要自己封装。
- 许可证:Dioxus 使用 MIT 或 Apache 2.0 双许可,可以自由使用。
如果你已经是 Rust 开发者,并且需要在多个平台快速原型或交付生产级应用,Dioxus 是目前最接近“写一次、到处运行”的 Rust 方案。如果是 JS 生态重度用户,建议先用小项目试水,因为 Rust 的编译器报错在你熟练之前可能会很磨人。