Dioxus 0.6 – Crossplatform apps with Rust
Positioning vs Other Frameworks
- Frequently compared to Tauri, Electron, Flutter, React Native, Leptos, egui, iced, and Qt.
- Consensus: Tauri/Electron are app shells for web tech; Dioxus is a full UI framework written in Rust, more like React/Next.js on web and React Native on native.
- Dioxus markets itself as “Flutter-like but web-first,” which causes confusion because people import Flutter’s drawbacks; maintainers stress DOM-first web support.
- Leptos is often mentioned as the closest Rust-web competitor (web-only vs Dioxus web+desktop+mobile).
Architecture & Rendering Model
- On web: Rust compiled to WASM, writing directly to the DOM (no canvas-only rendering). Supports SSR, hydration, streaming HTML, and a Next.js-like fullstack story.
- On native: Rust code runs directly (no JS VM), can call JNI/Objective‑C/FFI, and currently uses system webviews via
wry; a standalone HTML/CSS engine (“Blitz”) and a GPU/Skia-based renderer are under active development. - Layout and APIs are intentionally web-like even on native, but plan to integrate with system accessibility APIs.
Performance & Hot Reloading
- Strong emphasis on performance; internal benchmarks claim very fast DOM diffing and Rust↔JS bindings, though bundle size and memory are acknowledged as worse than top JS frameworks.
- Uses batching and string interning across the WASM/JS boundary; future WebAssembly features (direct DOM access, better string support) are expected to help.
- New release substantially improves hot reloading; can reload most RSX and some simple Rust expressions, though not arbitrary Rust code.
Cross‑Platform Ambitions
- Goal: one Rust codebase targeting web, desktop, mobile, and embedded.
- Some commenters see this as uniquely promising; others argue serious apps still require platform-specific UIs and many
if os == ...branches. - Plans for GPU rendering plus native system widgets aim to keep look consistent while interactions feel native.
Ecosystem, Tooling & Maturity
- Ecosystem seen as early but improving: component libraries and a query-style data library exist, though not yet rich.
- CLI (
dx) and dev tooling still rough: some users hit opaque build failures and system dependency issues (e.g., specific webkit2gtk versions, xdotool on Linux). - Rust compile times and hot-reload speed are pain points compared to JS; users discuss workarounds (workspace splits, profile settings).
- Versioning remains 0.x; maintainers attribute this partly to Rust culture and expect a 1.0 after some API cleanup.
Funding, Governance & Risk
- Dioxus is a VC-backed company (including YC), which raises concerns about long-term openness and potential “rug pulls.”
- Project is MIT/Apache-2 and does not require a CLA; maintainers say OSS donations aren’t critical and even plan to redirect remaining funds into the Rust ecosystem.
- Some worry about bus factor and team size; others argue funding and full-time work improve long-term viability.
Developer Experience & Syntax
- UI written in an
rsx!{}macro DSL, deliberately React/JSX-like and similar to SwiftUI/Jetpack Compose/JSON-style structs. - Supporters praise it for ergonomics, hot reload, and static HTML templating; critics find it unreadable and harder to reason about than plain HTML/JSX.
- Managing shared state across contexts is reported as tricky; some prefer Elm/TEA-style architectures (e.g., in iced, Lustre, Leptos) for more structured state management.