XenoAtom.Terminal.UI 1.0.0

Prefix Reserved
dotnet add package XenoAtom.Terminal.UI --version 1.0.0
                    
NuGet\Install-Package XenoAtom.Terminal.UI -Version 1.0.0
                    
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="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="XenoAtom.Terminal.UI" Version="1.0.0" />
                    
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 1.0.0
                    
#r "nuget: XenoAtom.Terminal.UI, 1.0.0"
                    
#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@1.0.0
                    
#: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=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=XenoAtom.Terminal.UI&version=1.0.0
                    
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, tabs, menus, dialogs/popups, toasts, charts, progress, spinners, tooltips…
    • Text editing: TextBox, TextArea, MaskedInput, NumberBox (undo/redo: Ctrl+Z / Ctrl+R)
    • Advanced widgets: LogControl, CommandPalette, BreakdownChart, ColorPicker
    • Mockup/empty-state widget: Placeholder (text + background surfaces, gradients)
  • 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; routed events where appropriate
  • Commands & key hints:
    • Context-aware commands with single-stroke gestures and multi-stroke sequences
    • CommandBar control for discoverable shortcuts
  • Rendering:
    • Cell-buffer renderer + diffing, efficient batched output, synchronized output (DEC 2026)
    • Alpha-aware colors (RGBA) with blending support for modern UI effects
  • Debug overlay:
    • Built-in performance overlay (toggle with F12) to inspect frame timings, invalidation, and diff output
  • 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 })
);

🧩 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, MaskedInput, NumberBox, ValidationPresenter
  • Lists: ListBox, OptionList, SelectionList, Select<T>, TreeView
  • Data: Table, DataGridControl
  • Layout: VStack, HStack, Grid, DockLayout, Splitters, Border, Group, Padder
  • Overlays: Popup, Dialog, TooltipHost, Backdrop
  • Toasts: Toast, ToastHost (overlay notifications)
  • Visualization: BarChart, LineChart, Sparkline, Canvas, BreakdownChart, TextFiglet, Placeholder
  • Progress: ProgressBar, ProgressTaskGroup, Spinner

📖 User guide

For details, see the dedicated website.

🧪 Samples

  • samples/ControlsDemo: catalog-style demo of controls and styles.
  • samples/FullscreenDemo: fullscreen UI showcase.
  • samples/InlineLiveDemo: inline/live demo (interactive).

🪪 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 (2)

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

Package Downloads
XenoAtom.Logging.Terminal

Terminal sink for XenoAtom.Logging powered by XenoAtom.Terminal.UI.

XenoAtom.CommandLine.Terminal

Terminal and Terminal.UI output renderers for XenoAtom.CommandLine.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0 85 2/10/2026
1.0.0-preview.6 154 2/7/2026
1.0.0-preview.5 32 2/7/2026
1.0.0-preview.4 57 2/7/2026
1.0.0-preview.3 38 2/6/2026
1.0.0-preview.2 43 2/6/2026
1.0.0-preview.1 40 2/5/2026