XenoAtom.Terminal.UI 3.5.4

Prefix Reserved
There is a newer version of this package available.
See the version list below for details.
dotnet add package XenoAtom.Terminal.UI --version 3.5.4
                    
NuGet\Install-Package XenoAtom.Terminal.UI -Version 3.5.4
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="XenoAtom.Terminal.UI" Version="3.5.4" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="XenoAtom.Terminal.UI" Version="3.5.4" />
                    
Directory.Packages.props
<PackageReference Include="XenoAtom.Terminal.UI" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add XenoAtom.Terminal.UI --version 3.5.4
                    
#r "nuget: XenoAtom.Terminal.UI, 3.5.4"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package XenoAtom.Terminal.UI@3.5.4
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=XenoAtom.Terminal.UI&version=3.5.4
                    
Install as a Cake Addin
#tool nuget:?package=XenoAtom.Terminal.UI&version=3.5.4
                    
Install as a Cake Tool

XenoAtom.Terminal.UI ci NuGet

<img align="right" width="256px" height="256px" src="https://raw.githubusercontent.com/XenoAtom/XenoAtom.Terminal.UI/main/img/XenoAtom.Terminal.UI.png">

XenoAtom.Terminal.UI is a modern, reactive retained-mode terminal UI framework for .NET, built on top of XenoAtom.Terminal. It provides a rich set of controls (TextBox, TextArea, lists, tables, dialogs…), a consistent layout system, a styling/theming model, and a binding system designed for smooth live UIs.

✨ Features

  • Two hosting models:
    • Inline widgets via Terminal.Write(...) and Terminal.Live(...)
    • Fullscreen apps via Terminal.Run(...) (alternate screen + input loop)
  • Modern control library (60+ built-in controls):
    • Buttons, toggles, lists, tables, closable/scrollable/reorderable tabs, menus, dialogs/popups, toasts, charts, progress, spinners, tooltips…
    • Text editing: TextBox, TextArea, CodeEditor, PromptEditor, MaskedInput, NumberBox (undo/redo: Ctrl+Z / Ctrl+R, clipboard paste interception, auto-expanding editor height via TextEditorAutoSizeMode.Height, CodeEditor Find/Replace: Ctrl+F / Ctrl+H, Go To Line: Ctrl+G, configurable spaces/tabs indentation, PromptEditor Shift+Enter new-line shortcut with Ctrl+N fallback, and completion gestures that can be rebound to preserve Tab focus traversal)
    • Advanced widgets: LogControl, CommandPalette, BreakdownChart, ColorPicker
    • Mockup/empty-state widget: Placeholder (text + background surfaces, gradients)
    • Companion extension package: XenoAtom.Terminal.UI.Extensions.Markdown (MarkdownControl, MarkdownMarkupConverter with source-preserving highlight mode)
    • Companion extension package: XenoAtom.Terminal.UI.Extensions.CodeEditor.TextMateSharp (TextMateSharp-backed syntax highlighting for CodeEditor and fenced Markdown code blocks)
    • Companion extension package: XenoAtom.Terminal.UI.Extensions.Screenshot (SkiaSharp-powered PNG/JPEG/WebP export, clipboard screenshot commands, and an embedded Nerd Font-capable default font)
    • Companion extension package: XenoAtom.Terminal.UI.Graphics (Image control with Kitty, Sixel, and iTerm2 presenters, encoded image caching, and Sixel palette/dither options)
  • Binding-first UI:
    • Bindable properties, State<T>, automatic dependency tracking, minimal boilerplate
  • Layout system: consistent measure/arrange protocol (integer cell UI), panels and containers
  • Styling, themes, and color schemes:
    • Theme + per-control styles, ColorScheme palettes (terminal-native and RGB themes)
    • Brush gradients for controls such as TextBlock, TextBox, and TextFiglet
    • RootLoops-powered color scheme generator (https://rootloops.sh) with many built-in schemes
  • Input:
    • Keyboard, mouse, resize events; focus navigation with configurable tab stops; routed events where appropriate
  • Commands & key hints:
    • Context-aware commands with optional typed names, single-stroke gestures, and multi-stroke sequences
    • CommandBar control for discoverable shortcuts
    • App-defined shortcuts can activate controls such as MenuBar.OpenMenu() without built-in global menu bindings
  • Rendering:
    • Cell-buffer renderer + diffing, efficient batched output, synchronized output (DEC 2026)
    • Alpha-aware colors (RGBA) with blending support for modern UI effects
  • Generated glyph helpers:
    • NerdFont exposes the official Nerd Fonts catalog as Rune properties, plus lookup by original glyph name, for easy use in TextBlock, Markup, and string interpolation
  • Debug overlay:
    • Built-in performance overlay (toggle with F12) to inspect frame timings, invalidation, diff output, and graphics/image presentation metrics
  • Cross-platform + AOT-friendly: net10.0 and NativeAOT-oriented design (built on XenoAtom.Terminal)

XenoAtom.Terminal.UI Fullscreen Demo

XenoAtom.Terminal.UI depends on XenoAtom.Terminal. The two libraries are designed to be used together: Terminal handles safe ANSI/markup output and unified input events; Terminal.UI builds a widget/layout system on top.

Requirements (.NET 10 / C# 14)

XenoAtom.Terminal.UI targets net10.0 and requires the .NET 10 SDK (C# 14).

Rationale: the library integrates into XenoAtom.Terminal using C# 14 extension members, so you can write Terminal.Write(...), Terminal.Live(...), and Terminal.Run(...) even though Terminal is defined in the separate XenoAtom.Terminal package.

🚀 Quick start

using XenoAtom.Terminal;
using XenoAtom.Terminal.UI;
using XenoAtom.Terminal.UI.Controls;

Terminal.Write(new Group("Welcome")
    .Content(new VStack("Hello", "from", "Terminal.UI").Spacing(1))
);

Inline “live” widget (updates without clearing your output):

using XenoAtom.Terminal;
using XenoAtom.Terminal.UI;
using XenoAtom.Terminal.UI.Controls;

var work = new ProgressTask("Work");

Terminal.Live(
    new ProgressTaskGroup().Tasks([work]),
    onUpdate: () =>
    {
        work.Value = Math.Min(1, work.Value + 0.01);
        return work.Value < 1
            ? TerminalLoopResult.Continue
            : TerminalLoopResult.StopAndKeepVisual;
    });

Fullscreen app:

using XenoAtom.Terminal;
using XenoAtom.Terminal.UI;
using XenoAtom.Terminal.UI.Controls;

State<string?> text = new("Type here");
State<bool> exit = new(false);

Terminal.Run(
    new VStack(
        new TextBox(text),
        new TextBlock(() => $"The text typed is: {text.Value}"),
        new Button("Exit").Click(() => exit.Value = true)
    ),
    onUpdate: () => exit.Value
        ? TerminalLoopResult.StopAndKeepVisual 
        : TerminalLoopResult.Continue
    );

Brush gradient example:

using XenoAtom.Terminal.UI.Styling;

var brush = Brush.LinearGradient(
    new GradientPoint(0f, 0f),
    new GradientPoint(1f, 0f),
    [new GradientStop(0f, Colors.DeepSkyBlue), new GradientStop(1f, Colors.White)]);

Terminal.Write(
    new TextBlock("Gradient title")
        .Style(TextBlockStyle.Default with { ForegroundBrush = brush })
);

Nerd Font glyph example:

Terminal.Write(
    new Markup($"[accent]{NerdFont.MdHome}[/] Home  [primary]{NerdFont.PlBranch}[/] main  [success]{NerdFont.WeatherDaySunny}[/] Ready")
);

if (NerdFont.TryGetRune("cod-account", out var accountIcon))
{
    Terminal.Write(new TextBlock($"{accountIcon} Account"));
}

foreach (var name in NerdFont.Names)
{
    // Original Nerd Fonts glyph names such as "cod-account".
}

If your terminal/font combination renders Nerd Font glyphs as double-width, set WideRuneResolver = TerminalWideRuneResolvers.NerdFontDoubleWidth on TerminalRunOptions, TerminalLiveOptions, or TerminalAppOptions.

🧩 Controls included

The library ships with a large set of built-in controls. See Controls Reference for the full reference.

Highlights:

  • Text input: TextBox, TextArea, CodeEditor, PromptEditor, MaskedInput, NumberBox, ValidationPresenter
  • Lists: ListBox, OptionList, SelectionList, Select<T>, TreeView
  • Data: Table, DataGridControl (sorting, filtering, search, resizing, inline editing, direct cell activation)
  • Layout: VStack, HStack, Grid, DockLayout, Splitters, Border, Group, Padder
  • Overlays: Popup, resizable Dialog, TooltipHost, Backdrop
  • Toasts: Toast, ToastHost (overlay notifications)
  • Visualization: BarChart, LineChart, Sparkline, Canvas, BreakdownChart, TextFiglet, Placeholder
  • Progress: ProgressBar, ProgressTaskGroup, Spinner
  • Optional terminal graphics: XenoAtom.Terminal.UI.Graphics.Image with TerminalImageGraphicsPresenter for fullscreen/inline/static flow output (Terminal.Write(new Image(...))) and real-time frame sources.

📖 User guide

For details, see the dedicated website.

🧪 Samples

  • samples/ControlsDemo: catalog-style demo of controls and styles, including the Images & Graphics page for snow_photo.jpg and live SkiaSharp image frames via XenoAtom.Terminal.UI.Graphics.
  • samples/FullscreenDemo: fullscreen UI showcase.
  • samples/InlineLiveDemo: inline/live demo (interactive), including one-shot terminal image output.

🪪 License

This software is released under the BSD-2-Clause license.

🤗 Author

Alexandre Mutel aka xoofx.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (7)

Showing the top 5 NuGet packages that depend on XenoAtom.Terminal.UI:

Package Downloads
XenoAtom.Terminal.UI.Extensions.Markdown

Markdown rendering for XenoAtom.Terminal.UI (powered by Markdig)

XenoAtom.Terminal.UI.Extensions.Screenshot

Raster screenshot export for XenoAtom.Terminal.UI powered by SkiaSharp

XenoAtom.Terminal.UI.Extensions.CodeEditor.TextMateSharp

TextMateSharp-backed syntax highlighting for XenoAtom.Terminal.UI CodeEditor and Markdown fenced code blocks.

Pennington.Tui

Dev-time full-screen TUI dashboard for Pennington

XenoAtom.Terminal.UI.Graphics

Terminal image controls and presenters for XenoAtom.Terminal.UI

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
3.7.5 76 6/22/2026
3.7.4 125 6/19/2026
3.7.3 293 6/14/2026
3.7.2 307 6/3/2026
3.7.1 223 6/2/2026
3.7.0 168 6/1/2026
3.6.3 187 5/30/2026
3.6.2 211 5/27/2026
3.6.1 222 5/24/2026
3.6.0 163 5/24/2026
3.5.5 241 5/21/2026
3.5.4 204 5/19/2026
3.5.3 297 5/18/2026
3.5.2 395 5/17/2026
3.5.1 167 5/17/2026
3.5.0 169 5/16/2026
3.4.3 534 5/16/2026
3.4.2 563 5/14/2026
3.4.1 391 5/12/2026
3.4.0 199 5/10/2026
Loading failed