Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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

Awesome Lists containing this project

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).