dioxus/packages/dioxus-tui
2024-01-13 21:12:21 -08:00
..
.vscode Move dioxus-specifc code into dioxus-tui crate and rename core crate to Rink 2023-03-13 12:04:51 -05:00
benches remove cx.render 2024-01-13 21:12:21 -08:00
examples remove cx.render 2024-01-13 21:12:21 -08:00
src Merge branch 'master' into events-2 2023-10-30 15:37:29 -05:00
tests remove cx.render 2024-01-13 21:12:21 -08:00
.gitignore Move dioxus-specifc code into dioxus-tui crate and rename core crate to Rink 2023-03-13 12:04:51 -05:00
Cargo.toml feat: Remove unused deps (#1447) 2023-10-09 10:14:46 -05:00
README.md remove cx.render 2024-01-13 21:12:21 -08:00
test.html Move dioxus-specifc code into dioxus-tui crate and rename core crate to Rink 2023-03-13 12:04:51 -05:00

Dioxus TUI

Beautiful terminal user interfaces in Rust with Dioxus .


Leverage React-like patterns, CSS, HTML, and Rust to build beautiful, portable, terminal user interfaces with Dioxus.

fn app() -> Element {
    rsx!{
        div {
            width: "100%",
            height: "10px",
            background_color: "red",
            justify_content: "center",
            align_items: "center",
            "Hello world!"
        }
    })
}

demo app

Background

You can use Html-like semantics with inline styles, tree hierarchy, components, and more in your text-based user interface (TUI) application.

Dioxus TUI is essentially a port of Ink but for Rust and Dioxus. Dioxus TUI doesn't depend on Node.js or any other JavaScript runtime, so your binaries are portable and beautiful.

Limitations

  • Subset of Html Terminals can only render a subset of HTML. We support as much as we can.
  • Particular frontend design Terminals and browsers are and look different. Therefore, the same design might not be the best to cover both renderers.

Status

WARNING: Dioxus TUI is currently under construction!

Rendering a VirtualDom works fine, but the ecosystem of hooks is not yet ready. Additionally, some bugs in the flexbox implementation might be quirky at times.

Features

Dioxus TUI features:

  • Flexbox-based layout system
  • CSS selectors
  • inline CSS support
  • Built-in focusing system
  • Widgets1
  • Support for events, hooks, and callbacks2
  • Html tags3

1 Currently only a subset of the input element is implemented as a component (not an element). The Input component supports sliders, text, numbers, passwords, buttons, and checkboxes. 2 Basic keyboard, mouse, and focus events are implemented. 3 Currently, most HTML tags don't translate into any meaning inside of Dioxus TUI. So an input element won't mean anything nor does it have any additional functionality.