🌗🚀 Dioxus
A concurrent, functional, virtual DOM for Rust
# About
Dioxus is a new approach for creating performant cross platform user experiences in Rust. In Dioxus, the UI is represented as a tree of Virtual Nodes not bound to any specific renderer. Instead, external renderers can leverage Dioxus' virtual DOM and event system as a source of truth for rendering to a medium of their choice. Developers experienced with building react-based experiences should feel comfortable with Dioxus.
Dioxus is unique in the space of UI for Rust. Dioxus supports a renderer approach called "broadcasting" where two VDoms with separate renderers can sync their UI states remotely. Our goal as a framework is to work towards "Dioxus Liveview" where a server and client work in tandem, eliminating the need for frontend-specific APIs altogether.
## Features
Dioxus' goal is to be the most advanced UI system for Rust, targeting isomorphism and hybrid approaches. Our goal is to eliminate context-switching for cross-platform development - both in UI patterns and programming language. Hooks and components should work *everywhere* without compromise.
Dioxus Core supports:
- [ ] Hooks
- [ ] Concurrent rendering
- [ ] Context subscriptions
- [ ] State management integrations
On top of these, we have several projects you can find in the `packages` folder.
- [x] `dioxus-cli`: Testing, development, and packaging tools for Dioxus apps
- [ ] `dioxus-router`: A hook-based router implementation for Dioxus web apps
- [ ] `Dioxus-vscode`: Syntax highlighting, code formatting, and hints for Dioxus html! blocks
- [ ] `Redux-rs`: Redux-style global state management
- [ ] `Recoil-rs`: Recoil-style global state management
- [ ] `Dioxus-iso`: Hybrid apps (SSR + Web)
- [ ] `Dioxus-live`: Live view
- [ ] `Dioxus-desktop`: Desktop Applications
- [ ] `Dioxus-ios`: iOS apps
- [ ] `Dioxus-android`: Android apps
- [ ] `Dioxus-magic`: AR/VR Apps
## Hello World
Dioxus should look and feel just like writing functional React components. In Dioxus, there are no class components with lifecycles. All state management is done via hooks. This encourages logic reusability and lessens the burden on Dioxus to maintain a non-breaking lifecycle API.
```rust
#[derive(Properties, PartialEq)]
struct MyProps {
name: String
}
fn Example(ctx: &Context