Bridge between Dioxus Core (reactive components) and Ratatui (terminal rendering). Architecture: retained TuiNode tree + immediate Ratatui render Dioxus VirtualDom → WriteMutations → TuiTree → Frame → Terminal Modules: tree.rs — retained node tree (Element, Text, Placeholder) renderer.rs — WriteMutations impl (14 methods) layout.rs — Dioxus attrs → Ratatui Constraint/Direction style.rs — attrs → Ratatui Style (colors, bold, italic) events.rs — crossterm quit detection render.rs — tree walker → Ratatui widget rendering lib.rs — launch() + event loop + terminal lifecycle Elements: div, p, span, h1-h3, hr Layout: vertical/horizontal split, percentage/length/fill constraints Styling: named colors, hex, bold, italic, underline, dim Events: keyboard quit (Ctrl+C, q) 453 lines. Zero governance/substrate dependencies. Apache 2.0 — pure community crate. Signed-off-by: Tyler King <tking@guildhouse.dev>
49 lines
1.1 KiB
Markdown
49 lines
1.1 KiB
Markdown
# dioxus-ratatui
|
|
|
|
Ratatui renderer for Dioxus — build reactive terminal UIs with Dioxus components.
|
|
|
|
**Early development** — API will change.
|
|
|
|
## Quick Start
|
|
|
|
```rust
|
|
use dioxus::prelude::*;
|
|
|
|
fn main() {
|
|
dioxus_ratatui::launch(App);
|
|
}
|
|
|
|
fn App() -> Element {
|
|
rsx! {
|
|
div {
|
|
h1 { "Hello from Dioxus + Ratatui!" }
|
|
p { "Press 'q' or Ctrl+C to quit." }
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Architecture
|
|
|
|
Dioxus VirtualDom sends mutations via `WriteMutations` trait. The bridge maintains a retained tree of `TuiNode` structs. Each frame, Ratatui walks the tree and renders widgets.
|
|
|
|
```
|
|
Dioxus VirtualDom → WriteMutations → TuiTree → Ratatui Frame → Terminal
|
|
```
|
|
|
|
## Supported Elements
|
|
|
|
| Element | Widget | Status |
|
|
|---|---|---|
|
|
| `div` | Block container | v0.1 |
|
|
| `p`, `span` | Paragraph | v0.1 |
|
|
| `h1`-`h3` | Bold paragraph | v0.1 |
|
|
| `hr` | Horizontal line | v0.1 |
|
|
|
|
## Layout
|
|
|
|
Children of `div` elements are stacked vertically by default. Ratatui constraints are derived from element attributes via the layout module.
|
|
|
|
## License
|
|
|
|
Apache 2.0
|