Dioxus in HTML and CSS,drawn natively by Compose.
Write your app the way you would for the web: div, h1,
flexbox, a stylesheet, hooks and signals. dioxus-compose lays it out in Rust and hands the
result to Compose Multiplatform, through compose-rust, to draw.
No webview and no JVM in what you ship. Compose widget names work in
rsx! too.
- No webview
- No JVM in the shipped binary
- Your CSS, laid out in Rust
- Platform IME, including Korean
rsx! {
main { class: "page",
h1 { "Hello, Dioxus" }
p {
a {
href: "#",
onclick: move |event| {
event.prevent_default();
hellos += 1;
},
"Say hello"
}
}
}
}
CSS in Rust, pixels in Compose
blitz-dom resolves your stylesheet and lays the page out inside the Rust process, the same engines Dioxus's own native renderer uses. Compose receives rectangles, colours and runs of text, never CSS, and draws them with its own text stack and input method.
Today the HTML path lays screens out and plans the drawing, and the bridge that draws them is being built (status). The widget path draws now.
The VS Code comparison covers the activity bar, sidebar tree and editor tabs, measured on 2026-10-03 on macOS. The size is the notepad sample, release build, on a Mac mini (M1).
Where it stands today
| Part | State |
|---|---|
| HTML and CSS: layout, events, forms, images, scrolling | implemented in the Host, tested by the examples |
| HTML and CSS: drawing on screen | partial the renderer bridge is being built (#43, #67) |
| Text measured by Compose | partial (#43) |
| CSS transforms beyond translate, transitions and animations | planned (#46, #47) |
| HTML and widgets on one screen | planned |
Compose widgets in rsx! | implemented drawn on macOS, Android and the web; Windows, Linux and iOS build and start |
This is an early project and it says so plainly. The status page lists every item with the issue that tracks it.
Start here
Getting started
Add the crate, write a page with HTML and CSS, lay it out.
Layout and CSS
Block, inline, flexbox, grid, tables and positioning, with the examples.
Forms and events
Clicks, fields, selects and keyed lists, and why fields are uncontrolled.
Compose widgets
The second way to write a screen: Column, Text, Button.
Status
Implemented, partial and planned, with issues.