ratatui-unity
TUI for Unity 3D : ratatui-unity is a Rust native plugin that brings Ratatui's TUI ecosystem to Unity 3D game engine — for all platforms.
Try WebGL Demo on your browser: 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
Or add to Packages/manifest.json:
See ratatui-unity.farukcan.dev for full documentation.
Sample Usage
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.
| Sample | Folder | What it shows |
|---|---|---|
| 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 for setup, build instructions, PR workflow, and issue templates.
License
MIT — see Packages/com.farukcan.ratatui.unity/LICENSE.
JetBrains Mono font: SIL Open Font License 1.1.