28 releases (17 stable)

1.9.2 Mar 4, 2024
1.9.1 Oct 16, 2023
1.9.0 Aug 22, 2023
1.8.0 Aug 14, 2022
0.5.1 Jul 31, 2021

#24 in Command line utilities

Download history 104/week @ 2023-12-23 107/week @ 2023-12-30 196/week @ 2024-01-06 250/week @ 2024-01-13 235/week @ 2024-01-20 141/week @ 2024-01-27 174/week @ 2024-02-03 146/week @ 2024-02-10 195/week @ 2024-02-17 264/week @ 2024-02-24 563/week @ 2024-03-02 324/week @ 2024-03-09 372/week @ 2024-03-16 349/week @ 2024-03-23 424/week @ 2024-03-30 230/week @ 2024-04-06

1,413 downloads per month
Used in 14 crates (12 directly)

MIT license

265KB
6K SLoC

tui-realm

~ A ratatui framework inspired by Elm and React ~

Get started · Standard Library · Documentation

Developed by @veeso

Current version: 1.9.2 (04/03/2024)

License-MIT Repo stars Downloads counter Latest version Ko-fi

Ratatui-Crossterm CI Ratatui-Termion CI Tui-Crossterm CI Termion CI Crossterm CI (Windows) Coveralls Docs



About tui-realm 👑

tui-realm is a framework for tui and ratatui to simplify the implementation of terminal user interfaces adding the possibility to work with re-usable components with properties and states, as you'd do in React. But that's not all: the components communicate with the ui engine via a system based on Messages and Events, providing you with the possibility to implement update routines as happens in Elm. In addition, the components are organized inside the View, which manages mounting/umounting, focus and event forwarding for you.

And that's also explains the reason of the name: Realm stands for React and Elm.

tui-realm also comes with a standard library of components, which can be added to your dependencies, that you may find very useful. Don't worry, they are optional if you don't want to use them 😉, just follow the guide in get started.

Demo

See tui-realm in action in the Example or if you want to read more about tui-realm start reading the official guide HERE.

Features 🎁

  • ⌨️ Event-driven
  • ⚛️ Based on React and Elm
  • 🍲 Boilerplate code
  • 🚀 Quick-setup
  • 🎯 Single focus and states management
  • 🙂 Easy to learn
  • 🤖 Adaptable to any use case

Get started 🏁

⚠️ Warning: currently tui-realm supports these backends: crossterm, termion

Add tui-realm to your Cargo.toml 🦀

If you want the default features, just add tuirealm 1.x version:

tuirealm = "^1.9.0"

otherwise you can specify the features you want to add:

tuirealm = { version = "^1.9.0", default-features = false, features = [ "derive", "serialize", "termion" ] }

Supported features are:

  • derive (default): add the #[derive(MockComponent)] proc macro to automatically implement MockComponent for Component. Read more.
  • serialize: add the serialize/deserialize trait implementation for KeyEvent and Key.
  • tui: use the tui-rs terminal UI library
  • ratatui: use the ratatui terminal UI library
  • crossterm: use the crossterm terminal backend
  • termion: use the termion terminal backend

Deprecated feature flags:

  • with-crossterm
  • with-termion

⚠️ You can enable only one backend at the time and at least one must be enabled in order to build.
❗ You don't need tui as a dependency, since you can access to tui types via use tuirealm::tui::

Enabling other backends ⚠️

This library supports two backends: crossterm and termion, and two high level terminal TUI libraries: tui and ratatui. Whenever you explicitly declare any of the TUI library or backend feature sets you should disable the crate's default features.

❗ You can never have more than one backend and one UI library enabled at the same time

Example using the termion backend:

tuirealm = { version = "^1.9.0", default-features = false, features = [ "termion", "derive", "tui" ] }

Example using the ratatui UI library:

tuirealm = { version = "^1.9.0", default-features = false, features = [ "ratatui", "derive", "crossterm" ]}

Create a tui-realm application 🪂

View how to implement a tui-realm application in the related guide.

Run examples 🔍

Still confused about how tui-realm works? Don't worry, try with the examples:

  • demo: a simple application which shows how tui-realm works

    cargo run --example demo
    

Standard components library 🎨

Tui-realm comes with an optional standard library of components I thought would have been useful for most of the applications. If you want to use it, just add the tui-realm-stdlib to your Cargo.toml dependencies.

Community components 🏘️

These components are not included in tui-realm, but have been developed by other users. I like advertising other's contents, so here you can find a list of components you may find useful for your next tui-realm project 💜.

Want to add yours? Open an issue using the New app/component template 😄


Guides 🎓


Documentation 📚

The developer documentation can be found on Rust Docs at https://docs.rs/tuirealm


Apps using tui-realm 🚀

Want to add yours? Open an issue using the New app/component template 😄


Support the developer ☕

If you like tui-realm and you're grateful for the work I've done, please consider a little donation 🥳

You can make a donation with one of these platforms:

ko-fi PayPal


Contributing and issues 🤝🏻

Contributions, bug reports, new features and questions are welcome! 😉 If you have any question or concern, or you want to suggest a new feature, or you want just want to improve tui-realm, feel free to open an issue or a PR.

Please follow our contributing guidelines


Changelog ⏳

View tui-realm's changelog HERE


License 📃

tui-realm is licensed under the MIT license.

You can read the entire license HERE

Dependencies

~8–19MB
~228K SLoC