# Table of Contents - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) - [Dioxus | Fullstack crossplatform app framework for Rust](#dioxus-fullstack-crossplatform-app-framework-for-rust) --- # Dioxus | Fullstack crossplatform app framework for Rust * [Tutorial\ --------](https://dioxuslabs.com/learn/0.6/guide/) * [Web\ ---](https://dioxuslabs.com/learn/0.6/guides/web/) * [Desktop\ -------](https://dioxuslabs.com/learn/0.6/guides/desktop/) * [Mobile\ ------](https://dioxuslabs.com/learn/0.6/guides/mobile/) * [Fullstack\ ---------](https://dioxuslabs.com/learn/0.6/guides/fullstack/) * [Typesafe Routing\ ----------------](https://dioxuslabs.com/learn/0.6/router/reference/) Using Stable Version 0.7.0 [Version 0.70.7.0](https://dioxuslabs.com/learn/0.7/) [Version 0.60.6.3](https://dioxuslabs.com/learn/0.6/) [Version 0.50.5.7](https://dioxuslabs.com/learn/0.5/) [Version 0.40.4.3](https://dioxuslabs.com/learn/0.4/) [Version 0.30.3.2](https://dioxuslabs.com/learn/0.3/) [Dioxus 0.7.0](https://dioxuslabs.com/learn/0.7/) [Welcome](https://dioxuslabs.com/learn/0.7/) Dioxus is a framework for building cross-platform apps with the Rust programming language. With one codebase, you can build apps that run on web, desktop, and mobile platforms. src/readme.rs use dioxus::prelude::\*; pub 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 dioxus::prelude::\*; pub 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!" } } } High-Five counter: 0 ==================== Up high!Down low! This guide is split into different sections: * [Tutorial](https://dioxuslabs.com/learn/0.7/tutorial/) walks you through your first Dioxus app. * [Core Concepts](https://dioxuslabs.com/learn/0.7/essentials/) provides detail on topics like managing state. * [Guides](https://dioxuslabs.com/learn/0.7/guides/) provides references for things like assets, routing, testing, and more. First, try walking through the [Tutorial](https://dioxuslabs.com/learn/0.7/tutorial/) to get familiar with Dioxus. Before embarking on a larger project, we strongly recommend reading the entire [Essential Concepts](https://dioxuslabs.com/learn/0.7/essentials/) and glancing through the [Guides Overview](https://dioxuslabs.com/learn/0.7/guides/) . This guide assumes you already know some [Rust](https://www.rust-lang.org/) ! If not, we recommend reading [_the book_](https://doc.rust-lang.org/book/ch01-00-getting-started.html) to learn Rust first. Dioxus is a developer-friendly framework that empowers developers to ship cross-platform apps with one codebase. You write your apps in Rust, style them with HTML/CSS, enhance them with native APIs, and distribute them as platform-native bundles. ![Multi-platform app architecture diagram](https://dioxuslabs.com/assets/dioxus-architecture-diagram-dxhd23d2163061852.webp) In many ways, Dioxus is similar to Flutter: we integrate our own build tools, foster an ecosystem, and provide a GUI framework. In key areas, Dioxus takes a different approach: * Apps are declared with HTML and CSS instead of a custom styling solution * Reactivity is inspired by web frameworks like React and SolidJS * Dioxus code runs natively with no virtual machine, enabling zero-overhead calls to system APIs Our goal is to provide a "better Flutter": faster, slimmer, and web-native. You can think of Dioxus as a hybrid of [Flutter](https://flutter.dev/) , [React Native](https://reactnative.dev/) , and [NextJS](http://nextjs.org/) : cross-platform apps with stellar fullstack support. Today, Dioxus apps can only be written in Rust, but we plan to support more languages in the future. We built Dioxus because we believe the current standard of building apps is too complex. Developers need to learn and install dozens of different tools just to get their app into the world. We need a simpler and more powerful framework to bring apps from ideas to reality. ![App stack](https://dioxuslabs.com/assets/dioxus-app-stack-dxh28c73e74c53725.webp) Our vision for Dioxus is a framework that is fast, flexible, and has a minimal learning curve. We want developers to confidently launch their app from idea to production as fast as possible. We believe that fewer tools and a simpler architecture make it easier to develop apps. Apps that are easier to build ship faster and are more likely to succeed. With Dioxus, we try to maintain a very high bar for developer experience. We believe that building apps should be fun and straightforward. We've worked to push forward Rust itself, developing technologies like [Subsecond](https://crates.io/crates/subsecond) Rust hot-reloading, [WASM bundle-splitting](https://crates.io/crates/wasm-splitter) , [linker-based asset bundling](https://crates.io/crates/manganis) , and a modular [WGPU-based HTML/CSS renderer](https://crates.io/crates/blitz) . The Dioxus syntax is similar to React's JSX markup, borrowing React's component and hooks approach. All components are Rust functions that take `Properties`, define state with hooks, and return an `Element`. We only support markup declared with the `rsx! {}` macro; this ensures your app is automatically optimized and supports our powerful devtools. #\[component\] fn Component(name: String) -> Element { let mut count \= use\_signal(|| 0); rsx! { em { "Hello, {name}" } p { "Count: {count}" } } } #\[component\] fn Component(name: String) -> Element { let mut count \= use\_signal(|| 0); rsx! { em { "Hello, {name}" } p { "Count: {count}" } } } Dioxus is designed to be easy to extend and fairly thin over system APIs. This means you can easily drop into system APIs when first-party APIs are lacking. When targeting the web, this might mean using [`web-sys`](http://crates.io/crates/web-sys/) , on Android using [`jni`](http://crates.io/crates/jni) , or on iOS using [`objc2`](https://crates.io/crates/objc2) . fn PromptModal() { #\[cfg(web)\] web\_sys::call\_web\_function(); #\[cfg(android)\] jni\_sys::call\_android\_function(); #\[cfg(ios)\] objc2::call\_ios\_function(); } fn PromptModal() { #\[cfg(web)\] web\_sys::call\_web\_function(); #\[cfg(android)\] jni\_sys::call\_android\_function(); #\[cfg(ios)\] objc2::call\_ios\_function(); } The core Dioxus framework covers a number of utilities that are either challenging to design or need to support our devtools: * [App Routing](https://dioxuslabs.com/learn/0.7/essentials/router/) * [Backend integration via server functions](https://dioxuslabs.com/learn/0.7/essentials/fullstack/) * [Including and optimizing](https://dioxuslabs.com/learn/0.7/essentials/ui/assets) assets * [State management](https://dioxuslabs.com/learn/0.7/essentials/basics/) (signals-based reactivity) * [SDK](https://github.com/dioxusLabs/sdk) : 1st-party System integrations Dioxus is funded by a mix of corporate sponsorships, enterprise support contracts, [crowd-sourced funding](https://github.com/sponsors/DioxusLabs#sponsors) , and [venture capital](http://ycombinator.com/companies/dioxus-labs) . We strive to maintain a healthy mix of funding to balance the various competing visions of the future. We want to provide "Flutter but better" for everyone - not controlled by Apple, Meta, or Google - and we need to make sure Dioxus has a sustainable long-term financial future. Ultimately, we'd like Dioxus to be self-sustaining. This means that you'll eventually have the option to deploy your production apps with [Dioxus Deploy](https://dioxuslabs.com/deploy) . Revenue from _Dioxus Deploy_ will in turn fund development on Dioxus itself. We're committed to keeping Dioxus free and open source forever. You'll never need to pay us to build apps nor will we ever change the license of Dioxus. [PREVIOUSWelcome](https://dioxuslabs.com/learn/0.7/) [NEXTGetting Started](https://dioxuslabs.com/learn/0.7/getting_started/) On this page ------------ * [What is Dioxus?](https://dioxuslabs.com/learn/0.7/#what-is-dioxus) * [Why Dioxus?](https://dioxuslabs.com/learn/0.7/#why-dioxus) * [Stellar Developer Experience](https://dioxuslabs.com/learn/0.7/#stellar-developer-experience) * [Syntax and Ecosystem](https://dioxuslabs.com/learn/0.7/#syntax-and-ecosystem) * [Who's funding Dioxus?](https://dioxuslabs.com/learn/0.7/#whos-funding-dioxus) [Edit this page](https://github.com/DioxusLabs/docsite/edit/main/docs-src/0.7/src//index.md) --------------------------------------------------------------------------------------------- --- # Dioxus | Fullstack crossplatform app framework for Rust * [Tutorial\ --------](https://dioxuslabs.com/learn/0.6/guide/) * [Web\ ---](https://dioxuslabs.com/learn/0.6/guides/web/) * [Desktop\ -------](https://dioxuslabs.com/learn/0.6/guides/desktop/) * [Mobile\ ------](https://dioxuslabs.com/learn/0.6/guides/mobile/) * [Fullstack\ ---------](https://dioxuslabs.com/learn/0.6/guides/fullstack/) * [Typesafe Routing\ ----------------](https://dioxuslabs.com/learn/0.6/router/reference/) One codebase, every platform. ### Dioxus is _the_ Rust framework for building fullstack web, desktop, and mobile apps. Iterate with live hotreloading, add server functions, and deploy in record time. [Get started](https://dioxuslabs.com/learn/0.7/) [Take a tour](https://www.youtube.com/watch?v=WgAjWPKRVlQ) ![Animated Icon](https://dioxuslabs.com/assets/multiplatform-dark-dxh5dba3226639ed576.svg)![Animated Icon](https://dioxuslabs.com/assets/multiplatform-light-dxh203fb17ed9c3d5.svg) Trusted by top companies ======================== ![](https://dioxuslabs.com/assets/airbuslogo-dxhb3596bd12b8f2d.svg)![](https://dioxuslabs.com/assets/ESA_logo-dxh049cbf22ee52a31.svg)![](https://dioxuslabs.com/assets/yclogo-dxhfa534c26646b3d8.svg)![](https://dioxuslabs.com/assets/futurewei_bw-dxhab74ebc254151814.png)![](https://dioxuslabs.com/assets/satellite-dxh8802932eaade8c4.webp) --- # Dioxus | Fullstack crossplatform app framework for Rust * [Tutorial\ --------](https://dioxuslabs.com/learn/0.6/guide/) * [Web\ ---](https://dioxuslabs.com/learn/0.6/guides/web/) * [Desktop\ -------](https://dioxuslabs.com/learn/0.6/guides/desktop/) * [Mobile\ ------](https://dioxuslabs.com/learn/0.6/guides/mobile/) * [Fullstack\ ---------](https://dioxuslabs.com/learn/0.6/guides/fullstack/) * [Typesafe Routing\ ----------------](https://dioxuslabs.com/learn/0.6/router/reference/) Loading... --- # Dioxus | Fullstack crossplatform app framework for Rust * [Tutorial\ --------](https://dioxuslabs.com/learn/0.6/guide/) * [Web\ ---](https://dioxuslabs.com/learn/0.6/guides/web/) * [Desktop\ -------](https://dioxuslabs.com/learn/0.6/guides/desktop/) * [Mobile\ ------](https://dioxuslabs.com/learn/0.6/guides/mobile/) * [Fullstack\ ---------](https://dioxuslabs.com/learn/0.6/guides/fullstack/) * [Typesafe Routing\ ----------------](https://dioxuslabs.com/learn/0.6/router/reference/) Dioxus Deploy ============= ### Coming soon! A deployment platform designed for app developers ------------------------------------------------- The batteries-included platform for deploying desktop, web, and mobile apps. Iterate quickly, collaborate with your team, and scale to millions. [Join the Waitlist](https://forms.gle/zeBZmrjSkajqg7hUA) Build ===== Iterate on your app with first-class tooling designed for the Dioxus ecosystem. * 📜 Automatic previews * đŸ‘„ Real-time collaboration * 🏠 Localhost ready * 🔄 Integrated hotreloading * đŸ’Ș Powerful devtools Deploy ====== Get your app on the internet in seconds, with previews, and powerful real-time collaboration * 🔆 Push-to-deploy * đŸ‘©â€đŸ’» Deploy to App Store * 📊 Hosted LiteFS + Sqlite * đŸ§” Cross-platform bundler * 🧯 Automated backups Scale ===== Monitor your app, track down bugs, and grow to as big or as small as you need. * 🔬 Tracing Log Visualizer * 📈 Automatic Dashboards * đŸ’„ Crash Analytics * 👝 Scale-to-zero * đŸ«Ł A/B Testing --- # Dioxus | Fullstack crossplatform app framework for Rust * [Tutorial\ --------](https://dioxuslabs.com/learn/0.6/guide/) * [Web\ ---](https://dioxuslabs.com/learn/0.6/guides/web/) * [Desktop\ -------](https://dioxuslabs.com/learn/0.6/guides/desktop/) * [Mobile\ ------](https://dioxuslabs.com/learn/0.6/guides/mobile/) * [Fullstack\ ---------](https://dioxuslabs.com/learn/0.6/guides/fullstack/) * [Typesafe Routing\ ----------------](https://dioxuslabs.com/learn/0.6/router/reference/) Blog ---- [Dioxus 0.6\ ----------\ \ December 9, 2024\ \ Massive Tooling Improvements: Mobile Simulators, Magical Hot-Reloading, Interactive CLI, and more!](https://dioxuslabs.com/blog/release-060) [Dioxus 0.5\ ----------\ \ March 21, 2024\ \ A signal rewrite, zero unsafe, no lifetimes, unified launch, and more!](https://dioxuslabs.com/blog/release-050) [Dioxus 0.4\ ----------\ \ August 1, 2023\ \ Server Functions, Suspense, Enum Router, Overhauled Docs, Bundler, Android Support, and more!](https://dioxuslabs.com/blog/release-040) [Going fulltime on Dioxus\ ------------------------\ \ May 5, 2023\ \ Dioxus is now my full time job! I'm so excited to be able to work on this full time.](https://dioxuslabs.com/blog/fulltime) [Dioxus 0.3\ ----------\ \ February 8, 2023\ \ The next big release of Dioxus is here! Templates, autoformatting, multiwindow support, and more!](https://dioxuslabs.com/blog/release-030) [Making Dioxus (almost) as fast as SolidJS\ -----------------------------------------\ \ December 11, 2022\ \ Using a new technique called subtree memoization, Dioxus is now almost as fast as SolidJS.](https://dioxuslabs.com/blog/templates-diffing) [Dioxus 0.2\ ----------\ \ March 9, 2022\ \ Just over two months in, and we already have a ton of awesome changes to Dioxus!](https://dioxuslabs.com/blog/release-020) [Dioxus 0.1\ ----------\ \ Release Notes\ \ After months of work, we're very excited to release the first version of Dioxus! Dioxus is a new library for building interactive user interfaces with Rust.](https://dioxuslabs.com/blog/introducing-dioxus) --- # Dioxus | Fullstack crossplatform app framework for Rust * [Tutorial\ --------](https://dioxuslabs.com/learn/0.6/guide/) * [Web\ ---](https://dioxuslabs.com/learn/0.6/guides/web/) * [Desktop\ -------](https://dioxuslabs.com/learn/0.6/guides/desktop/) * [Mobile\ ------](https://dioxuslabs.com/learn/0.6/guides/mobile/) * [Fullstack\ ---------](https://dioxuslabs.com/learn/0.6/guides/fullstack/) * [Typesafe Routing\ ----------------](https://dioxuslabs.com/learn/0.6/router/reference/) [Back to blog](https://dioxuslabs.com/blog/) Making Dioxus (almost) as fast as SolidJS ========================================= December 11, 2022 - Jonathan Kelley ### Using a new technique called subtree memoization, Dioxus is now almost as fast as SolidJS. [Dioxus](https://github.com/dioxuslabs/dioxus) is a UI library for Rust that makes it easy to target almost any platform with the same React-like codebase. You can build apps for WASM, desktop, mobile, TUI, static-sites, SSR, LiveView, and more. * * * In preparation for the next big release of Dioxus, one of the lead contributors, ealmloff, added a long-awaited feature: **subtree memoization**. Subtree memoization reduces the overall work that Dioxus needs to do to get your desired UI state to the screen by several orders of magnitude. In fact, it’s so fast, that it pushes Dioxus to the leading edge of performance for web frameworks, on par with the likes of SolidJS, even beating out signal-based Rust libraries like Sycamore 0.8 and Leptos 0.0.3. ![Untitled](https://dioxuslabs.com/assets/jsframework-diffing-dxhc5e392be84b42d7c.webp) There’s obviously still some room to grow as WASM-based UI libraries face unique challenges compared to their JavaScript counterparts. Ultimately, we hope that this update demonstrates what’s really possible with the current React paradigm. And, of course, we need to mention that benchmarks never give a truly clear insight into how performant a library is, especially as an app scales. It’s definitely reasonable to believe that as an app grows in size, any other library might come out ahead. You shouldn’t make a decision on the framework for your next project just because it’s slightly more or less performant than any other library based on entirely arbitrary benchmarks. ![Untitled](https://imgs.xkcd.com/comics/optimization.png) Anyways
 As eloquently put by the creator of Svelte, the [“Virtual DOM is pure overhead”](https://svelte.dev/blog/virtual-dom-is-pure-overhead) . So, why does Dioxus continue to share the React DNA if it’s ultimately just frivolous work? Well, we still love React, despite its warts, footguns, and idiosyncrasies. * React is just JavaScript, no magic compilation needed. * Components are just tiny event loops with mostly predictable re-renders. * React’s paradigm maps extremely well into Rust. The final point is arguably the most important: React’s functional model maps well into Rust’s lifetime system. Any value provided to the component through `use_hook` is bounded by the lifetime of the `Scope` itself. `Scope` can be shared into any handler - like `onclick` in the following example. Since `value` shares a lifetime with `Scope`, it can be modified directly within element callbacks. fn app(cx: Scope) -> Element { let value: &mut u32 \= cx.use\_hook(|| 0); cx.render(rsx!( button { onclick: move |\_| value += 1, "Increment" } )) } fn app(cx: Scope) -> Element { let value: &mut u32 \= cx.use\_hook(|| 0); cx.render(rsx!( button { onclick: move |\_| value += 1, "Increment" } )) } This clean mapping of React’s paradigms into Rust makes it possible for Dioxus to achieve excellent developer experience. * Components are just regular functions. * The foundational `use_hook` provides a direct mutable reference to a value. * Values created with the Scope’s lifetime can be passed directly into children, unlike nearly all non-signal-based libraries. let doc \= use\_document\_builder(cx); rsx! { Doc { document: doc } } #\[component\] fn Doc<'a\>(cx: Scope<'a\>, document: &'a SomeBigDocument) -> Element { // document is passed from a parent by reference! // no smart pointers required! } let doc \= use\_document\_builder(cx); rsx! { Doc { document: doc } } #\[component\] fn Doc<'a\>(cx: Scope<'a\>, document: &'a SomeBigDocument) -> Element { // document is passed from a parent by reference! // no smart pointers required! } All in all, we’ve learned to love lifetimes rather than fear them. But for all the good of React, we’re still stuck with the bad. One of the biggest issues React has is the need to recreate entire chunks of the virtual DOM between renders. If you’re not aware, in React, your JSX markup is converted directly to `React.createElement` calls. // This markup
Hello world
// becomes these calls React.createElement(div, { class: "abc" }, \[React.createText("hello world")\]); // This markup
Hello world
// becomes these calls React.createElement(div, { class: "abc" }, \[React.createText("hello world")\]); This means for every new element in your tree, the transpiled JS is allocating several objects, arrays, and complex structures between _every_ render. There’s no wonder why React isn’t on the top of the performance charts! In Rust, it’s generally not best practice to generate so many heap-allocated objects. Heck, there was even a very popular reddit post talking about this problem. [“Worried about “modern” Rust GUI libraries”](https://www.reddit.com/r/rust/comments/yd9ngs/worried_about_modern_rust_gui_libraries/) In Dioxus, we noticed this early on and decided to see if we could reuse all the heap allocations instead of just tossing them out. Inspired by the work on Dodrio, Dioxus is implemented using a bump allocator and double-buffering, just like many high-performance GPU APIs. When you create a div, or a piece of text, or anything in Dioxus, it simply gets allocated inside a bump arena that gets reset when diffed. No cleanup, no extra heap allocations, just steady-state reuse of pre-allocated memory. ![Making%20Dioxus%20(almost)%20as%20fast%20as%20SolidJS%20baea0d5b4e614351ac8e3d4fc4240d04/Screen_Shot_2021-08-17_at_2.24.39_AM.png](https://dioxuslabs.com/assets/bump-alloc-dxh81afb9427d0b8e8.webp) This is fast. Really fast. And when coupled with automatic component memoization, it’s really easy to write Dioxus apps that are memory efficient and faster than React. Great, case-closed, that’s it, right? Well, no. Dioxus still wasn’t nearly as fast as Svelte, Sycamore, SolidJS, or even InfernoJS. We’ve optimized a bunch of tiny things, like string caching, batched DOM manipulations, faster PartialEq, diffing, and pretty much everything you could think of. Except, we’re creating new objects, still in the heap, and doing a lot of diffing work. In the words of the creator of Svelte, > But you know what would be even faster? _Not doing that._ To really make Dioxus faster, we need to make it do less work - or, at the very least, less work at runtime. SolidJS does this by thrusting you into this world of signals. We love signals! They might even come to Dioxus at some point (aka Preact signals). But, in the world where we still care about providing `&mut T` from `use_hook` , we need to find a new solution that doesn’t require rewriting your React apps to use signals. Well, we’re working in Rust, we’ve got const, macros, custom PartialEq
 let’s see if we can move some of this work to compile time. To build a Dioxus app, you pretty much have to use the `rsx!` proc macro. We unfortunately don’t support a builder API or alternatives. There’s a lot of good reasons to do this: performance, forward compatibility, tooling, ergonomics, etc. A block of `rsx!` might look like this: rsx! { div { h1 {"Glorious Counter"} p { "Count: {val}" } button { onclick: move |\_| val += 1, "Increment" } button { onclick: move |\_| val \-= 1, "Decrement" } } } rsx! { div { h1 {"Glorious Counter"} p { "Count: {val}" } button { onclick: move |\_| val += 1, "Increment" } button { onclick: move |\_| val \-= 1, "Decrement" } } } If you look closely, you’ll notice that the entire tree is declared within the macro. There aren’t elements being created at compile time, except for the dynamic text within the paragraph element. In React, you’d have to create every element from scratch, one-by-one, every time. But in Dioxus, we can do better. The new technique Dioxus uses is to split each `rsx!` call into a static `Template` and a list of dynamic nodes. For the above `rsx!` call, this might look like static THIS\_TEMPLATE: Template \= Template { /\* \*/ }; VNode { template: THIS\_TEMPLATE, dynamic\_nodes: \[\ Text(format\_args!("Count: {val}")\ \] } static THIS\_TEMPLATE: Template \= Template { /\* \*/ }; VNode { template: THIS\_TEMPLATE, dynamic\_nodes: \[\ Text(format\_args!("Count: {val}")\ \] } Now, on every render, we only create the single dynamic node. When we go to diff the VNode, we only need to diff that one text node too. So now, instead of 11 comparisons (9 elements and 2 attributes) we have one comparison. Diffing this template takes 90% less time than before! This is a huge win! Our app can be 10x bigger for the same diffing cost. And the results speak for themselves. Combined with the integration of [Sledgehammer](https://crates.io/crates/sledgehammer) , Dioxus is pushing the limits of what the React model can reasonably achieve. ![Untitled](https://dioxuslabs.com/assets/jsframework-diffing-dxhc5e392be84b42d7c.webp) The React team also agrees that React can be better. That’s why they’ve started working on an experimental compiler for React. [https://reactjs.org/blog/2022/06/15/react-labs-what-we-have-been-working-on-june-2022.html](https://reactjs.org/blog/2022/06/15/react-labs-what-we-have-been-working-on-june-2022.html) The plan here is to cache these elements and only update them when variables inside the _component_ change. However, React-Forget still doesn’t fix the underlying issue of node creation, memory usage, or anything of the other things compile-time memoization achieves. Templates make diffing the tree faster, but they can also make building the UI faster too. Both SolidJS and LitHTML take advantage of this hack to achieve fantastic performance. With support from the renderer, Dioxus can actually serialize these parsed RSX templates and let the renderer do all the caching. Before, if we wanted to assemble a tree of nodes from an iterator, we’d have to do a ton of tedious work, creating each list item part by part. // This tree ul { (0..len).map(|id| rsx!{ li { h3 { "user" } div { "hello {id}" } } }) } // item one... Edit::CreateElement("li") Edit::CreateElement("h3") Edit::CreateText("user") Edit::AppendChildren(1) Edit::CreateElement("div") Edit::CreateText("hello 0", 2) Edit::AppendChildren(1) Edit::AppendChildren(2) // item two... Edit::CreateElement("li") Edit::CreateElement("h3") Edit::CreateText("user") Edit::AppendChildren(1) Edit::CreateElement("div") Edit::CreateText("hello 0", 2) Edit::AppendChildren(1) Edit::AppendChildren(2) // and so on until we attach all the li to the ul Edit::AppendChildren(len) // This tree ul { (0..len).map(|id| rsx!{ li { h3 { "user" } div { "hello {id}" } } }) } // item one... Edit::CreateElement("li") Edit::CreateElement("h3") Edit::CreateText("user") Edit::AppendChildren(1) Edit::CreateElement("div") Edit::CreateText("hello 0", 2) Edit::AppendChildren(1) Edit::AppendChildren(2) // item two... Edit::CreateElement("li") Edit::CreateElement("h3") Edit::CreateText("user") Edit::AppendChildren(1) Edit::CreateElement("div") Edit::CreateText("hello 0", 2) Edit::AppendChildren(1) Edit::AppendChildren(2) // and so on until we attach all the li to the ul Edit::AppendChildren(len) With templates, we can serialize the tree and pass it to the renderer: static TEMPLATE\_HTML \= "
  • user

    hello \_id\_
  • "; Edit::SaveTemplate("demo.rs:5:1", TEMPLATE\_HTML); static TEMPLATE\_HTML \= "
  • user

    hello \_id\_
  • "; Edit::SaveTemplate("demo.rs:5:1", TEMPLATE\_HTML); Now, whenever we create the list elements, it’s as simple as cloning some nodes that already exist and precisely modifying just a small part Edit::LoadTemplate("demo.rs:5:1"); Edit::HydateText(0, "hello 0"); Edit::LoadTemplate("demo.rs:5:1"); Edit::HydateText(0, "hello 0"); For the tiny case we’re showing here, the benefit might seem limited. However, for real-world apps with lots of elements, custom styles, and all sorts of extra metadata, this caching system is immensely powerful and extremely performant. Now that we’re working with the mindset of templates, we can start to build new functionality previously locked behind the old model. One amazing feature added to Dioxus using the new template model is hot reloading. You can now modify your running Dioxus app without recompiling, provided you add, remove, or modify elements inside of `rsx!` . This mechanism works for _any_ renderer too, since each renderer has to implement the same protocol to manage edits. Not only can templates be cached inside of a renderer, they can be modified after-the-fact. The renderer is smart enough to track down the instance of every template node on the page and apply the same patches. Another addition to Dioxus 0.3 is the new LiveView renderer. Much like its counterpart Phoenix LiveView, Dioxus LiveView enables entirely server-rendered apps and components while shipping minimal JS to the client. In the Liveview model, minimizing latency and bandwidth is crucial to keeping apps snappy, especially for lower-end clients. ![ElixirLivewview.jpg](https://dioxuslabs.com/assets/elixir-dxhb625b88feb32d599.webp) Now, instead of sending hundreds or thousands of edits to the client to render things like lists and complex markup, Dioxus packages all the templates the client will use inside of the HTML shipped to the client. A sample HTML document that might be sent from the server to the client may look like this: