Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/joshka/bevy_ratatui
A rust crate to use Ratatui in a Bevy App
https://github.com/joshka/bevy_ratatui
bevy ratatui rust tui
Last synced: 5 days ago
JSON representation
A rust crate to use Ratatui in a Bevy App
- Host: GitHub
- URL: https://github.com/joshka/bevy_ratatui
- Owner: joshka
- License: apache-2.0
- Created: 2024-05-29T10:31:07.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2024-12-01T22:46:33.000Z (20 days ago)
- Last Synced: 2024-12-01T23:29:20.580Z (20 days ago)
- Topics: bevy, ratatui, rust, tui
- Language: Rust
- Homepage: https://crates.io/crates/bevy_ratatui
- Size: 212 KB
- Stars: 37
- Watchers: 4
- Forks: 3
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE-APACHE
Awesome Lists containing this project
- awesome-ratatui - bevy_ratatui - A rust crate to use Ratatui in a Bevy App. (📦 Libraries / 🔧 Utilities)
README
# Bevy_ratatui
An experiment using Ratatui from within a Bevy app. Note that this library is explicitly unstable
and will break compatibility between 0.x versions.The goal of this (at least to start) is not to do any rendering / 3D / etc. in the terminal, but
just to see how useful it is to use the bevy concepts for apps. This may change over time.## Example app
This app demonstrates:
- Using the `RatatuiContext` resource to draw widgets to the terminal
- ScheduleRunnerPlugin to run the app loop
- Using `Event`s to communicate
- Handling `State`s to add logic that runs on transition (e.g. changing the background color when
going from Negative to Positive in a simple counter app)```shell
cargo run --example demo
```Keys:
- Left / Right - modify the counter (look at what happens when you go negative)
- Q / Esc - quit
- P - simulate a panic (tests the color_eyre panic hooks)![Made with VHS](https://vhs.charm.sh/vhs-2g0S6RgGGQHseTCNItEQhg.gif)
## Compatible Bevy versions
| bevy | bevy_ratatui |
|-------|--------------|
| 0.15 | 0.7 |
| 0.14 | 0.6 |
| 0.13 | 0.5 |## Ideas on progressing this
- [ ] Rewrite Ratatui's `Terminal` as a Bevy SubApp. It's possible that this would allow rendering
to happen while the main app is continuing to run
- [ ] Consider how to handle layout. Bevy has a lot of code related to this which might be possible
to incorporate
- [ ] Convert Crossterm events into the bevy standard
- [ ] Collab with the other bevy/crossterm/ratatui libs
- - seems like the most recent / up to date crate with some
fairly similar ideas. Has some stuff for rendering images to the screen (e.g. spinning 3D cube).
- - Crossterm plugin for the bevy game engine
- - A bevy systems like widget system for ratatui and
crossterm. This is a bevy-like approach (not actual bevy) and has some neat ideas about Widgets
- - takes the approach of defining a
custom runner to handle the event loop to make a roguelike game
- - A bevy renderer for the terminal using crossterm that
does not use a custom runner like bevy_crossterm.
- - is sort of the opposite of this idea. It
runs a Ratatui app using bevy as the backend to draw to a graphical window / webpage target
- - continuation of the previous with a
egui backend to render ratatui apps to the web
- - tui-rs / bevy seems dead (last commit Jan 2023)## Previous bevy_ratatui crate
Previously there was another crate using this name which has since migrated to
[ratatui_egui_wasm](https://github.com/gold-silver-copper/ratatui_egui_wasm). A ratatui backend
that is also an egui widget. Deploy on web with WASM or ship natively with bevy, macroquad, or
eframe. Demo at## License
Copyright (c) Josh McKinney
This project is licensed under either of
- Apache License, Version 2.0
([LICENSE-APACHE](LICENSE-APACHE) or )
- MIT license
([LICENSE-MIT](LICENSE-MIT) or )at your option.
## Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be
dual licensed as above, without any additional terms or conditions.See [CONTRIBUTING.md](CONTRIBUTING.md).