Skip to content

Introduction

Termina is a reactive terminal UI (TUI) framework for .NET that brings modern application development patterns to console applications.

What is Termina?

Termina provides:

  • Reactive MVVM Architecture - ViewModels with source-generated observable properties that automatically update the UI
  • Declarative Layout System - Build UIs by composing layout nodes in a tree structure
  • ASP.NET Core-Style Routing - Navigate between pages using familiar route templates
  • Direct ANSI Rendering - Custom terminal rendering engine with surgical region-based updates

Key Concepts

Pages and ViewModels

Termina uses the MVVM (Model-View-ViewModel) pattern:

  • Pages define the UI layout and bind to ViewModel properties
  • ViewModels contain the application logic and state
  • When ViewModel properties change, the UI automatically updates

Reactive Properties

The [Reactive] attribute generates observable properties via source generators:

csharp
public partial class MyViewModel : ReactiveViewModel
{
    [Reactive] private string _message = "Hello";

    // Source generator creates:
    // - public string Message { get; set; }
    // - public IObservable<string> MessageChanged
}

Layout Nodes

UIs are built by composing layout nodes:

csharp
protected override ILayoutNode BuildLayout()
{
    return Layouts.Vertical()
        .WithChild(new TextNode("Header").Bold())
        .WithChild(new PanelNode().WithContent(new TextNode("Content")))
        .WithChild(new TextNode("Footer"));
}

Routing

Navigate between pages using route templates:

csharp
// Register routes
termina.RegisterRoute<HomePage, HomeViewModel>("/");
termina.RegisterRoute<TaskPage, TaskViewModel>("/tasks/{id:int}");

// Navigate
Navigate("/tasks/42");

When to Use Termina

Termina is ideal for:

  • Interactive CLI tools that need rich user interfaces
  • Dashboard applications with multiple updating regions
  • Chat interfaces with streaming text
  • Data entry forms in terminal environments
  • Development tools that run in the terminal

Comparison with Alternatives

FeatureTerminaSpectre.ConsoleTerminal.Gui
ArchitectureReactive MVVMProceduralImperative widgets
UI UpdatesObservable-drivenManualEvent-based
LayoutDeclarative treeRender callsWidget hierarchy
RoutingBuilt-inNoneNone
AOT SupportFullFullLimited

Next Steps

Released under the Apache 2.0 License.