{"id":13571737,"url":"https://github.com/veeso/tui-realm","last_synced_at":"2025-05-14T06:14:11.227Z","repository":{"id":38230415,"uuid":"355599114","full_name":"veeso/tui-realm","owner":"veeso","description":"👑 A ratatui framework to build stateful applications with a React/Elm inspired approach ","archived":false,"fork":false,"pushed_at":"2025-02-12T09:15:17.000Z","size":5945,"stargazers_count":686,"open_issues_count":4,"forks_count":31,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-02T11:23:34.219Z","etag":null,"topics":["console","crossterm","gui","ratatui","rust","stateful","stateful-tui","terminal","terminal-app","terminal-graphics","tui","tui-framework","tui-realm"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/veeso.png","metadata":{"funding":{"github":"veeso","ko_fi":"veeso"},"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-04-07T15:42:01.000Z","updated_at":"2025-03-27T15:56:13.000Z","dependencies_parsed_at":"2024-06-19T11:29:43.658Z","dependency_job_id":"909d89bb-8c7f-4544-9acb-0ce6570ca133","html_url":"https://github.com/veeso/tui-realm","commit_stats":{"total_commits":265,"total_committers":6,"mean_commits":"44.166666666666664","dds":"0.030188679245283012","last_synced_commit":"547728dd3541571df6d741adc96d2617c0adc47a"},"previous_names":[],"tags_count":37,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veeso%2Ftui-realm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veeso%2Ftui-realm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veeso%2Ftui-realm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veeso%2Ftui-realm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/veeso","download_url":"https://codeload.github.com/veeso/tui-realm/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248045230,"owners_count":21038553,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["console","crossterm","gui","ratatui","rust","stateful","stateful-tui","terminal","terminal-app","terminal-graphics","tui","tui-framework","tui-realm"],"created_at":"2024-08-01T14:01:05.504Z","updated_at":"2025-04-09T13:02:55.941Z","avatar_url":"https://github.com/veeso.png","language":"Rust","funding_links":["https://github.com/sponsors/veeso","https://ko-fi.com/veeso","https://www.paypal.me/chrisintin"],"categories":["Rust"],"sub_categories":[],"readme":"# tui-realm\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/images/tui-realm.svg\" alt=\"logo\" width=\"256\" height=\"256\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e~ A ratatui framework inspired by Elm and React ~\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"docs/en/get-started.md\" target=\"_blank\"\u003eGet started\u003c/a\u003e\n  ·\n  \u003ca href=\"https://github.com/veeso/tui-realm-stdlib\" target=\"_blank\"\u003eStandard Library\u003c/a\u003e\n  ·\n  \u003ca href=\"https://docs.rs/tuirealm\" target=\"_blank\"\u003eDocumentation\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003eDeveloped by \u003ca href=\"https://veeso.github.io/\" target=\"_blank\"\u003e@veeso\u003c/a\u003e\u003c/p\u003e\n\u003cp align=\"center\"\u003eCurrent version: 2.1.0 (12/02/2025)\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://opensource.org/licenses/MIT\"\n    \u003e\u003cimg\n      src=\"https://img.shields.io/badge/License-MIT-teal.svg\"\n      alt=\"License-MIT\"\n  /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/veeso/tui-realm/stargazers\"\n    \u003e\u003cimg\n      src=\"https://img.shields.io/github/stars/veeso/tui-realm.svg?style=plain\"\n      alt=\"Repo stars\"\n  /\u003e\u003c/a\u003e\n  \u003ca href=\"https://crates.io/crates/tuirealm\"\n    \u003e\u003cimg\n      src=\"https://img.shields.io/crates/d/tuirealm.svg\"\n      alt=\"Downloads counter\"\n  /\u003e\u003c/a\u003e\n  \u003ca href=\"https://crates.io/crates/tuirealm\"\n    \u003e\u003cimg\n      src=\"https://img.shields.io/crates/v/tuirealm.svg\"\n      alt=\"Latest version\"\n  /\u003e\u003c/a\u003e\n  \u003ca href=\"https://ko-fi.com/veeso\"\u003e\n    \u003cimg\n      src=\"https://img.shields.io/badge/donate-ko--fi-red\"\n      alt=\"Ko-fi\"\n  /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://github.com/veeso/tui-realm/actions/workflows/ratatui_crossterm.yml\"\n    \u003e\u003cimg\n      src=\"https://github.com/veeso/tui-realm/actions/workflows/ratatui_crossterm.yml/badge.svg\"\n      alt=\"Ratatui-Crossterm CI\"\n  /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/veeso/tui-realm/actions/workflows/ratatui_termion.yml\"\n    \u003e\u003cimg\n      src=\"https://github.com/veeso/tui-realm/actions/workflows/ratatui_termion.yml/badge.svg\"\n      alt=\"Ratatui-Termion CI\"\n  /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/veeso/tui-realm/actions/workflows/crossterm-windows.yml\"\n    \u003e\u003cimg\n      src=\"https://github.com/veeso/tui-realm/actions/workflows/crossterm-windows.yml/badge.svg\"\n      alt=\"Crossterm CI (Windows)\"\n  /\u003e\u003c/a\u003e\n  \u003ca href=\"https://coveralls.io/github/veeso/tui-realm\"\n    \u003e\u003cimg\n      src=\"https://coveralls.io/repos/github/veeso/tui-realm/badge.svg\"\n      alt=\"Coveralls\"\n  /\u003e\u003c/a\u003e\n  \u003ca href=\"https://docs.rs/tuirealm\"\n    \u003e\u003cimg\n      src=\"https://docs.rs/tuirealm/badge.svg\"\n      alt=\"Docs\"\n  /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n- [tui-realm](#tui-realm)\n  - [About tui-realm 👑](#about-tui-realm-)\n  - [Features 🎁](#features-)\n  - [Get started 🏁](#get-started-)\n    - [Add tui-realm to your Cargo.toml 🦀](#add-tui-realm-to-your-cargotoml-)\n      - [Enabling other backends ⚠️](#enabling-other-backends-️)\n    - [Create a tui-realm application 🪂](#create-a-tui-realm-application-)\n    - [Run examples 🔍](#run-examples-)\n  - [Standard components library 🎨](#standard-components-library-)\n  - [Community components 🏘️](#community-components-️)\n  - [Guides 🎓](#guides-)\n  - [Documentation 📚](#documentation-)\n  - [Apps using tui-realm 🚀](#apps-using-tui-realm-)\n  - [Support the developer ☕](#support-the-developer-)\n  - [Contributing and issues 🤝🏻](#contributing-and-issues-)\n  - [Changelog ⏳](#changelog-)\n  - [License 📃](#license-)\n\n---\n\n## About tui-realm 👑\n\ntui-realm is a **framework** for **[ratatui](https://github.com/ratatui-org/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.\n\nAnd that also explains the reason of the name: **Realm stands for React and Elm**.\n\ntui-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](#get-started-).\n\n![Demo](/docs/images/demo.gif)\n\nSee tui-realm in action in the [Example](#run-examples-) or if you want to read more about tui-realm start reading the official guide [HERE](docs/en/get-started.md).\n\n## Features 🎁\n\n- ⌨️ **Event-driven**\n- ⚛️ Based on **React** and **Elm**\n- 🍲 **Boilerplate** code\n- 🚀 Quick-setup\n- 🎯 Single **focus** and **states** management\n- 🙂 Easy to learn\n- 🤖 Adaptable to any use case\n\n---\n\n## Get started 🏁\n\n\u003e ⚠️ Warning: currently tui-realm supports these backends: crossterm, termion\n\n### Add tui-realm to your Cargo.toml 🦀\n\nIf you want the default features, just add tuirealm 1.x version:\n\n```toml\ntuirealm = \"2\"\n```\n\notherwise you can specify the features you want to add:\n\n```toml\ntuirealm = { version = \"2\", default-features = false, features = [ \"derive\", \"serialize\", \"termion\" ] }\n```\n\nSupported features are:\n\n- `derive` (*default*): add the `#[derive(MockComponent)]` proc macro to automatically implement `MockComponent` for `Component`. [Read more](https://github.com/veeso/tuirealm_derive).\n- `serialize`: add the serialize/deserialize trait implementation for `KeyEvent` and `Key`.\n- `crossterm`: use the [crossterm](https://github.com/crossterm-rs/crossterm) terminal backend\n- `termion`: use the [termion](https://github.com/redox-os/termion) terminal backend\n\n#### Enabling other backends ⚠️\n\nThis library supports two backends: `crossterm` and `termion`, and two high\nlevel terminal TUI libraries: `tui` and `ratatui`. Whenever you explicitly\ndeclare any of the TUI library or backend feature sets you should disable the\ncrate's default features.\n\n\u003e ❗ The two features can co-exist, even if it doesn't make too much sense.\n\nExample using crossterm:\n\n```toml\ntuirealm = { version = \"2\", default-features = false, features = [ \"derive\", \"crossterm\" ]}\n```\n\nExample using the termion backend:\n\n```toml\ntuirealm = { version = \"2\", default-features = false, features = [ \"derive\", \"termion\" ] }\n```\n\n### Create a tui-realm application 🪂\n\nView how to implement a tui-realm application in the [related guide](/docs/en/get-started.md).\n\n### Run examples 🔍\n\nStill confused about how tui-realm works? Don't worry, try with the examples:\n\n- [demo](/examples/demo/demo.rs): a simple application which shows how tui-realm works\n\n    ```sh\n    cargo run --example demo\n    ```\n\n---\n\n## Standard components library 🎨\n\nTui-realm comes with an optional standard library of components I thought would have been useful for most of the applications.\nIf you want to use it, just add the [tui-realm-stdlib](https://github.com/veeso/tui-realm-stdlib) to your `Cargo.toml` dependencies.\n\n## Community components 🏘️\n\nThese 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 💜.\n\n- [tui-realm-textarea](https://github.com/veeso/tui-realm-textarea) A textarea/editor component developed by [@veeso](https://github.com/veeso)\n- [tui-realm-treeview](https://github.com/veeso/tui-realm-treeview) A treeview component developed by [@veeso](https://github.com/veeso)\n\nWant to add yours? Open an issue using the `New app/component` template 😄\n\n---\n\n## Guides 🎓\n\n- [Get Started Guide](/docs/en/get-started.md)\n- [Advanced concepts](/docs/en/advanced.md)\n\n---\n\n## Documentation 📚\n\nThe developer documentation can be found on Rust Docs at \u003chttps://docs.rs/tuirealm\u003e\n\n---\n\n## Apps using tui-realm 🚀\n\n- [BugStalker](https://github.com/godzie44/BugStalker)\n- [cliflux](https://github.com/spencerwi/cliflux)\n- [csvs](https://github.com/koma-private/csvs)\n- [donmaze](https://github.com/veeso/donmaze)\n- [matrix-rust-sdk](https://github.com/matrix-org/matrix-rust-sdk)\n- [paat](https://github.com/ebakoba/paat)\n- [termusic](https://github.com/tramhao/termusic)\n- [termscp](https://github.com/veeso/termscp)\n- [tisq](https://crates.io/crates/tisq)\n- [todotui](https://github.com/newfla/todotui)\n- [tuifeed](https://github.com/veeso/tuifeed)\n- [turdle](https://crates.io/crates/turdle)\n\nWant to add yours? Open an issue using the `New app/component` template 😄\n\n---\n\n## Support the developer ☕\n\nIf you like tui-realm and you're grateful for the work I've done, please consider a little donation 🥳\n\nYou can make a donation with one of these platforms:\n\n[![ko-fi](https://img.shields.io/badge/Ko--fi-F16061?style=for-the-badge\u0026logo=ko-fi\u0026logoColor=white)](https://ko-fi.com/veeso)\n[![PayPal](https://img.shields.io/badge/PayPal-00457C?style=for-the-badge\u0026logo=paypal\u0026logoColor=white)](https://www.paypal.me/chrisintin)\n\n---\n\n## Contributing and issues 🤝🏻\n\nContributions, bug reports, new features and questions are welcome! 😉\nIf 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.\n\nPlease follow [our contributing guidelines](CONTRIBUTING.md)\n\n---\n\n## Changelog ⏳\n\nView tui-realm's changelog [HERE](CHANGELOG.md)\n\n---\n\n## License 📃\n\ntui-realm is licensed under the MIT license.\n\nYou can read the entire license [HERE](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fveeso%2Ftui-realm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fveeso%2Ftui-realm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fveeso%2Ftui-realm/lists"}