SvcSystems.UI.Terminal 2.3.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package SvcSystems.UI.Terminal --version 2.3.1
                    
NuGet\Install-Package SvcSystems.UI.Terminal -Version 2.3.1
                    
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="SvcSystems.UI.Terminal" Version="2.3.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="SvcSystems.UI.Terminal" Version="2.3.1" />
                    
Directory.Packages.props
<PackageReference Include="SvcSystems.UI.Terminal" />
                    
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 SvcSystems.UI.Terminal --version 2.3.1
                    
#r "nuget: SvcSystems.UI.Terminal, 2.3.1"
                    
#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 SvcSystems.UI.Terminal@2.3.1
                    
#: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=SvcSystems.UI.Terminal&version=2.3.1
                    
Install as a Cake Addin
#tool nuget:?package=SvcSystems.UI.Terminal&version=2.3.1
                    
Install as a Cake Tool

SvcSystems.UI.Terminal

NuGet NuGet downloads codecov

An Avalonia terminal control powered by XTerm.NET.

Terminal sample

Features

  • Terminal emulation, scrollback, selection, search, and caret rendering
  • Mouse reporting and Kitty keyboard protocol support
  • Sixel graphics
  • Clipboard hooks and configurable right-click behavior
  • Bindable terminal model and styling hooks
  • Desktop sample with shell, scrollback, and selection demos

Install

dotnet add package SvcSystems.UI.Terminal

Quick start

Add the control to a view:

<Window
    xmlns="https://github.com/avaloniaui"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:terminal="using:SvcSystems.UI.Terminal">
    <terminal:TerminalControl Name="TerminalView" />
</Window>

Create a model and connect it to a process or pseudo-terminal. Send process output to Feed and forward every UserInput payload—including keyboard, mouse, and protocol replies—to the process:

var model = new TerminalControlModel();
TerminalView.Model = model;

model.UserInput += (_, e) =>
{
    process.StandardInput.BaseStream.Write(e.Data.Span);
    process.StandardInput.BaseStream.Flush();
};

// For each chunk read from the process:
model.Feed(buffer, bytesRead);

The host owns process and PTY management. TerminalControlModel also supports standalone use, and TerminalOptions can configure the initial size, scrollback, cell metrics, resize reflow, and keyboard protocol.

Interaction

  • Selection: drag to select, double-click for a word or expression, and triple-click for a row. Selection extends while dragging outside the viewport.
  • Search: call Search(text), then SelectNextSearchResult() or SelectPreviousSearchResult().
  • Right-click: choose ContextMenu, CopyOrPaste, or None with RightClickAction.
  • Mouse reporting: pointer events go to the terminal application when it enables xterm mouse reporting; otherwise they remain available for selection.
  • Kitty keyboard: keys use the protocol only after the application enables it. Disable it with TerminalOptions.KittyKeyboardEnabled = false if needed.

Clipboard reads and terminal-initiated clipboard writes are disabled by default. Hosts handling untrusted terminal output should keep writes disabled unless they have an appropriate user-consent policy.

Styling

Add TerminalTheme to your application styles:

<Application
    xmlns="https://github.com/avaloniaui"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:terminal="using:SvcSystems.UI.Terminal">
    <Application.Styles>
        <terminal:TerminalTheme />
    </Application.Styles>
</Application>

The theme provides the 256-color palette as SvcSystems.UI.TerminalColor0 through SvcSystems.UI.TerminalColor255. Override those resources to customize the palette. Individual controls expose FontFamily, FontSize, CaretBrush, and SelectionBrush. Loading Styles/Colors.axaml with StyleInclude remains supported for compatibility, but TerminalTheme is preferred.

Run the sample

dotnet run --project src/SvcSystems.UI.Terminal.Desktop

The sample includes Shell, Scroll, and Selection tabs. On Windows, the shell prefers a WSL PTY, then falls back to ConPTY and a redirected process. WSL is preferred because ConPTY mediates terminal queries and can change reported capabilities and Unicode widths. A detector run inside Windows Terminal or a ConPTY-backed shell measures that host as well as the control.

Tests

The test project targets .NET 10 and .NET 11. To run the suite on both:

dotnet test --project tests/SvcSystems.UI.Terminal.Tests/SvcSystems.UI.Terminal.Tests.csproj -f net10.0
dotnet test --project tests/SvcSystems.UI.Terminal.Tests/SvcSystems.UI.Terminal.Tests.csproj -f net11.0

The ucs-detect integration tests run the pinned Python detector through a POSIX PTY connected directly to a TerminalControl in an Avalonia Headless window. They check named detector capabilities and Unicode measurements; report-schema checks catch uncovered detector fields. The JSON report, dependency versions, and raw PTY transcript are saved under TestResults/ucs-detect in the test output directory.

The fixture provisions and verifies the pinned dependencies in tests/requirements-ucs-detect.txt. On Linux, Python 3 with venv and pip is required. On Windows, the fixture uses the default Ubuntu WSL distribution and manages its Python environment. Set UCS_DETECT_PYTHON (Linux/macOS) or UCS_DETECT_WSL_PYTHON (Windows) to use an existing environment.

For a focused run, add a test filter, for example:

dotnet test --project tests/SvcSystems.UI.Terminal.Tests/SvcSystems.UI.Terminal.Tests.csproj -f net10.0 -- --filter-class '*UcsDetectIntegrationTests*'

On Windows, the optional UcsDetectConPtyComparisonTests diagnostic compares the direct-PTY baseline with the sample's ConPTY route. Enable it with UCS_DETECT_CONPTY_COMPARE=1; it requires Windows, WSL Ubuntu, and the pinned Python dependencies. The diagnostic is skipped by default.

Benchmarks

Run the Sixel and Kitty image benchmarks in Release mode:

dotnet run -c Release --project benchmarks/SvcSystems.UI.Terminal.Benchmarks -- --filter "*Sixel*" "*Kitty*"

See benchmarks/README.md for results and notes about the headless CPU measurements.

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.  net11.0 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on SvcSystems.UI.Terminal:

Repository Stars
IvanJosipovic/KubeUI
Kubernetes User Interface
Version Downloads Last Updated
2.3.2 0 11/3/2026
2.3.1 78 11/2/2026
2.3.0 861 10/16/2026
2.2.4 129 10/14/2026
2.2.3 286 10/13/2026
2.2.2 205 10/12/2026
2.2.1 255 10/10/2026
2.2.0 235 10/8/2026
2.1.2 106 10/7/2026
2.1.1 117 10/6/2026
2.1.0 5,170 9/29/2026
2.0.0 788 9/24/2026
1.1.4 4,951 9/3/2026
1.1.3 388 8/29/2026
1.1.2 445 8/25/2026
1.1.1 857 8/22/2026
1.1.0 675 8/16/2026
1.0.3 877 7/30/2026
1.0.2 363 7/16/2026
1.0.1 2,480 5/14/2026
Loading failed