# ratatui-unity
[](https://crates.io/crates/ratatui-unity)
[](https://docs.rs/ratatui-unity)
[](https://github.com/farukcan/ratatui-unity/actions/workflows/build.yml)
[](Packages/com.farukcan.ratatui.unity/LICENSE)
[](https://www.rust-lang.org/)
[](https://ratatui.rs)
[](https://unity.com)
[](https://github.com/farukcan/ratatui-unity.git#latest)
[](https://github.com/farukcan/ratatui-unity/stargazers)
[](https://github.com/farukcan/ratatui-unity/network/members)
[](https://github.com/farukcan/ratatui-unity/commits/main)
[](https://github.com/farukcan/ratatui-unity/issues)






**TUI for Unity 3D** : ratatui-unity is a Rust native plugin that brings [Ratatui](https://ratatui.rs)'s TUI ecosystem to Unity 3D game engine — for all platforms.
<img width="958" height="598" alt="2026-06-10 at 22 51 59" src="https://github.com/user-attachments/assets/fe1dcbcc-ff08-43da-b380-72f3dc912968" />
Try WebGL **Demo** on your browser: [ratatui-unity-demo.farukcan.dev](https://ratatui-unity-demo.farukcan.dev/)
## UPM Installation
Open **Window → Package Manager → + → Add package from git URL** and paste:
```
https://github.com/farukcan/ratatui-unity.git#latest
```
<img width="557" height="199" alt="Screenshot 2026-06-10 at 23 21 02" src="https://github.com/user-attachments/assets/0b8dc545-8e07-414e-8315-a0359b0e7036" />
Or add to `Packages/manifest.json`:
```json
{
"dependencies": {
"com.farukcan.ratatui.unity": "https://github.com/farukcan/ratatui-unity.git#latest"
}
}
```
See [`ratatui-unity.farukcan.dev`](https://ratatui-unity.farukcan.dev/) for full documentation.
## Sample Usage
```csharp
private void RenderHelpArea(RatatuiTerminal term, uint area)
{
term.Block(area, "About Ratatui + Unity", Borders.All);
uint inner = term.Inner(area);
term.BeginStyledParagraph(inner, Alignment.Left, true)
.Span("ratatui-unity", fg: Color.cyan, modifiers: Modifier.Bold)
.Span(" — a Rust ")
.Span("ratatui", fg: Color.yellow, modifiers: Modifier.Italic)
.Span(" rendering backend for Unity via FFI.").Line().Line()
.Span("• All widget ", modifiers: Modifier.Bold).Span("data is owned in C#").Line()
.Span("• Rust acts as a ").Span("pure rendering engine", fg: Color.green).Line()
.Span("• Zero-copy pixel buffer via raw pointer").Line() .Line()
.Span("Keyboard", modifiers: Modifier.Bold | Modifier.Underlined).Line()
.Span(" A / D ", fg: Color.cyan).Span("switch tabs").Line()
.Span(" W / S ", fg: Color.cyan).Span("navigate lists").Line()
.Span(" Arrows ", fg: Color.cyan).Span("same as W/S/A/D").Line().Line()
.Span("Mouse", modifiers: Modifier.Bold | Modifier.Underlined).Line()
.Span(" Click tab ", fg: Color.cyan).Span("switch tabs").Line()
.Span(" Click item ", fg: Color.cyan).Span("select list item").Line()
.Span(" Hover item ", fg: Color.cyan).Span("highlight list item").Line()
.Span(" Scroll ", fg: Color.cyan).Span("navigate lists / cycle tabs").Line()
.Render();
}
private void RenderForecastArea(RatatuiTerminal term, uint area)
{
var cols = term.Split(area, Direction.Horizontal,
Constraint.Percentage(50),
Constraint.Percentage(50)
);
// High temps bar chart
term.Block(cols[0], "Highs °C", Borders.All);
uint highInner = term.Inner(cols[0]);
var highSb = new StringBuilder();
foreach (var f in Forecast) highSb.AppendLine($"{f.Day}\t{f.High}");
term.SetStyle(new Color(1f, 0.6f, 0f), Color.clear);
term.BarChart(highInner, highSb.ToString().TrimEnd(), barWidth: 3, barGap: 1);
// Low temps bar chart
term.Block(cols[1], "Lows °C", Borders.All);
uint lowInner = term.Inner(cols[1]);
var lowSb = new StringBuilder();
foreach (var f in Forecast) lowSb.AppendLine($"{f.Day}\t{f.Low}");
term.SetStyle(new Color(0.4f, 0.7f, 1f), Color.clear);
term.BarChart(lowInner, lowSb.ToString().TrimEnd(), barWidth: 3, barGap: 1);
}
```
## Import built-in samples
The UPM package ships four runnable samples under `Packages/com.farukcan.ratatui.unity/Samples~/`. Import them via **Window → Package Manager → ratatui-unity → Samples → Import**.
<img width="494" height="535" alt="image" src="https://github.com/user-attachments/assets/d5d1831f-8bf7-4b69-b28d-c07a9036e57c" />
| BasicUsage | `Samples~/BasicUsage/` | Full tabbed demo: 9 tabs covering every widget, layout, input, hover, animation. |
| Developer Console | `Samples~/Console/` | Drop-in runtime console (logs + command registry) auto-bootstrapped before scene load. |
| Notepad | `Samples~/Notepad/` | Persistent notepad terminal app (`TerminalInput` title + `TerminalTextArea` body, F9 toggle). |
| Profiler | `Samples~/Profiler/` | Read-only telemetry overlay (FPS, GC, rendering, memory) with sparklines; F10 toggle. |
## Contributing
Contributions are welcome — bug reports, docs, samples, and pull requests. See [`CONTRIBUTING.md`](CONTRIBUTING.md) for setup, build instructions, PR workflow, and issue templates.
## License
MIT — see [`Packages/com.farukcan.ratatui.unity/LICENSE`](Packages/com.farukcan.ratatui.unity/LICENSE).
JetBrains Mono font: SIL Open Font License 1.1.