Terminal.Gui Documentation

Welcome to the official documentation for Terminal.Gui, a cross-platform UI toolkit for creating console-based graphical user interfaces in .NET.

Key Resources

Terminal.Gui v2 - Cross Platform Terminal UI toolkit for .NET

A toolkit for building rich console apps for .NET that run on Windows, the Mac, and Linux.

Note

v2 is still in development (see the v2_develop branch). The current stable version of v1 is in the develop branch.

Sample

Note

This is the v2 API documentation. For v1 go here: https://gui-cs.github.io/Terminal.GuiV1Docs/

Features

  • Dozens of Built-in Views - The library provides a rich set of built-in views that can be used to build complex user interfaces.

  • Cross Platform - Windows, Mac, and Linux. Terminal drivers for Curses, Windows, and the .NET Console mean apps will work well on both color and monochrome terminals. Apps also work over SSH.

  • Templates - The dotnet new command can be used to create a new Terminal.Gui app.

  • Extensible UI - All visible UI elements are subclasses of the View class, and these in turn can contain an arbitrary number of sub-views. Dozens of Built-in Views are provided.

  • Keyboard and Mouse Input - The library handles all the details of input processing and provides a simple event-based API for applications to consume.

  • Powerful Layout Engine - The layout engine makes it easy to lay out controls relative to each other and enables dynamic terminal UIs.

  • Machine, User, and App-Level Configuration - Persistent configuration settings, including overriding default look & feel with Themes, keyboard bindings, and more via the ConfigurationManager class.

  • Clipboard support - Cut, Copy, and Paste is provided through the [Clipboard] class.

  • Multi-tasking - The Mainloop supports processing events, idle handlers, and timers. Most classes are safe for threading.

  • Reactive Extensions - Use reactive extensions and benefit from increased code readability, and the ability to apply the MVVM pattern and ReactiveUI data bindings. See the source code of a sample app.

See What's New in V2 For more.

Examples

The simplest application looks like this:

using Terminal.Gui;
Application.Init ();
var n = MessageBox.Query (50, 5, "Question", "Do you like TUI apps?", "Yes", "No");
Application.Shutdown ();
return n;

This example shows a prompt and returns an integer value depending on which value was selected by the user.

More interesting user interfaces can be created by composing some of the various View classes that are included.

In the example above, Init sets up the environment, initializes the color schemes, and clears the screen to start the application.

The Application class additionally creates an instance of the Toplevel View available in the Application.Top property, and can be used like this:

using Terminal.Gui;
Application.Init ();
var label = new Label () {
    Title = "Hello World",
    X = Pos.Center (),
    Y = Pos.Center (),
    Height = 1,
};
var app = new Toplevel ();
app.Add (label);
Application.Run (app);
app.Dispose ();
Application.Shutdown ();

This example includes a menu bar at the top of the screen and a button that shows a message box when clicked:

using Terminal.Gui;
Application.Init ();
var menu = new MenuBar (new MenuBarItem [] {
    new MenuBarItem ("_File", new MenuItem [] {
        new MenuItem ("_Quit", "", () => { 
            Application.RequestStop (); 
        })
    }),
});

var button = new Button () {
    Title = "_Hello",
    X = 0,
    Y = Pos.Bottom (menu),
    Width = Dim.Fill (),
    Height = Dim.Fill () - 1
};
button.Accepting += () => {
    MessageBox.Query (50, 5, "Hi", "Hello World! This is a message box", "Ok");
};

var app = new Toplevel ();
// Add both menu and win in a single call
top.Add (menu, button);
Application.Run (top);
top.Dispose ();
Application.Shutdown ();

UI Catalog

UI Catalog is a comprehensive sample library for Terminal.Gui. It provides a simple UI for adding to the catalog of scenarios.

More examples can be found in the Examples directory.

More Information

See the Deep Dives for deep dives into the various features of the library.