2022-02-04 23:01:53 +00:00
< div align = "center" >
2023-03-14 22:31:21 +00:00
< h1 > Dioxus TUI< / h1 >
2022-02-04 23:01:53 +00:00
< p >
2022-02-04 23:02:34 +00:00
< strong > Beautiful terminal user interfaces in Rust with < a href = "https://dioxuslabs.com/" > Dioxus < / a > .< / strong >
2022-02-04 23:01:53 +00:00
< / p >
< / div >
2021-07-28 14:52:38 +00:00
2022-02-04 23:01:53 +00:00
< div align = "center" >
<!-- Crates version -->
< a href = "https://crates.io/crates/dioxus" >
< img src = "https://img.shields.io/crates/v/dioxus.svg?style=flat-square"
alt="Crates.io version" />
< / a >
<!-- Downloads -->
< a href = "https://crates.io/crates/dioxus" >
< img src = "https://img.shields.io/crates/d/dioxus.svg?style=flat-square"
alt="Download" />
< / a >
<!-- docs -->
< a href = "https://docs.rs/dioxus" >
< img src = "https://img.shields.io/badge/docs-latest-blue.svg?style=flat-square"
alt="docs.rs docs" />
< / a >
<!-- CI -->
< a href = "https://github.com/jkelleyrtp/dioxus/actions" >
< img src = "https://github.com/dioxuslabs/dioxus/actions/workflows/main.yml/badge.svg"
alt="CI status" />
< / a >
2021-07-28 14:52:38 +00:00
2022-02-04 23:01:53 +00:00
<!-- Awesome -->
< a href = "https://github.com/dioxuslabs/awesome-dioxus" >
< img src = "https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt = "Awesome Page" / >
< / a >
<!-- Discord -->
< a href = "https://discord.gg/XgGxMSkvUM" >
< img src = "https://img.shields.io/discord/899851952891002890.svg?logo=discord&style=flat-square" alt = "Discord Link" / >
< / a >
< / div >
< br / >
2022-02-04 23:05:03 +00:00
Leverage React-like patterns, CSS, HTML, and Rust to build beautiful, portable, terminal user interfaces with Dioxus.
2021-07-28 14:52:38 +00:00
2022-01-13 20:15:02 +00:00
```rust
2022-02-04 23:05:03 +00:00
fn app(cx: Scope) -> Element {
2021-07-28 14:52:38 +00:00
cx.render(rsx!{
2022-02-04 22:57:00 +00:00
div {
width: "100%",
2022-01-01 06:08:31 +00:00
height: "10px",
background_color: "red",
justify_content: "center",
align_items: "center",
"Hello world!"
2021-07-28 14:52:38 +00:00
}
})
}
```
2022-01-01 06:08:31 +00:00
![demo app ](examples/example.png )
2021-07-28 14:52:38 +00:00
2022-02-04 22:57:00 +00:00
## Background
2023-01-10 16:16:11 +00:00
You can use Html-like semantics with inline styles, tree hierarchy, components, and more in your [`text-based user interface (TUI)` ](https://en.wikipedia.org/wiki/Text-based_user_interface ) application.
2022-02-04 22:57:00 +00:00
2023-03-14 22:31:21 +00:00
Dioxus TUI is essentially a port of [Ink ](https://github.com/vadimdemedes/ink ) but for [`Rust` ](https://www.rust-lang.org/ ) and [`Dioxus` ](https://dioxuslabs.com/ ). Dioxus TUI doesn't depend on Node.js or any other JavaScript runtime, so your binaries are portable and beautiful.
2022-02-04 22:57:00 +00:00
## Limitations
- **Subset of Html**
2023-03-14 22:31:21 +00:00
Terminals can only render a subset of HTML. We support as much as we can.
2022-02-04 22:57:00 +00:00
- **Particular frontend design**
2023-03-14 22:31:21 +00:00
Terminals and browsers are and look different. Therefore, the same design might not be the best to cover both renderers.
2021-07-28 14:52:38 +00:00
2022-01-01 06:14:08 +00:00
## Status
2023-03-14 22:31:21 +00:00
**WARNING: Dioxus TUI is currently under construction!**
2022-01-01 06:14:08 +00:00
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.
2021-07-28 14:52:38 +00:00
## Features
2023-03-14 22:31:21 +00:00
Dioxus TUI features:
2023-01-10 16:16:11 +00:00
- [x] Flexbox-based layout system
2022-01-01 06:14:08 +00:00
- [ ] CSS selectors
2022-01-13 20:15:02 +00:00
- [x] inline CSS support
2022-05-03 23:43:28 +00:00
- [x] Built-in focusing system
2023-03-14 22:31:21 +00:00
2023-01-10 16:16:11 +00:00
* [x] Widgets< sup > 1</ sup >
* [ ] Support for events, hooks, and callbacks< sup > 2</ sup >
* [ ] Html tags< sup > 3</ sup >
2022-01-01 06:14:08 +00:00
2023-01-10 16:16:11 +00:00
< sup > 1</ sup > 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.
< sup > 2< / sup > Basic keyboard, mouse, and focus events are implemented.
2023-03-14 22:31:21 +00:00
< sup > 3</ sup > 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.