No description
Find a file
Jonathan Kelley 4fe66dbf64
Merge pull request #10 from Demonthos/master
fixed resize race condition and stop rendering for zero sized nodes
2022-02-04 23:46:53 -05:00
.vscode feat: wire up stretch into place 2021-12-31 23:53:37 -05:00
examples fix: cargo fmt and readme update 2022-02-04 17:57:00 -05:00
src Merge branch 'master' of https://github.com/Demonthos/rink 2022-02-04 20:19:19 -06:00
tests feat: wire up stretch into place 2021-12-31 23:53:37 -05:00
.gitignore wip: first pass 2021-07-28 10:52:38 -04:00
Cargo.toml added component rendering and updated dioxus version 2022-02-04 07:24:02 -06:00
README.md docs: update readme 2022-02-04 18:05:03 -05:00
test.html wip: add an image 2022-01-01 01:08:31 -05:00

Rink

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(cx: Scope) -> Element {
    cx.render(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 stylesheets, inline styles, tree hierarchy, components, and more in your text-based user interface (TUI) application.

Rink is basically a port of Ink but for Rust and Dioxus. Rink 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: Rink 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

Rink features:

  • Flexbox based layout system
  • CSS selectors
  • inline CSS support
  • Built-in focusing system
  • high-quality keyboard support
  • Support for events, hooks, and callbacks
  • Html tags1

1 Currently, HTML tags don't translate into any meaning inside of rink. So an input won't really mean anything nor does it have any additional functionality.