Hex1b 0.19.0

Hex1b

Hex1b is a .NET library for building TUI apps using an approachable code-first API.

NuGet License: MIT

Installation

dotnet add package Hex1b

Quick Start

Hello World

A minimal application that displays text and a quit button:

using Hex1b;

using var app = new Hex1bApp(ctx =>
    ctx.VStack(b => [
        b.Text("Hello, Terminal!"),
        b.Button("Quit").OnClick(e => e.Context.RequestStop())
    ])
);

await app.RunAsync();

Counter with State

An interactive counter demonstrating mutable state across renders:

using Hex1b;

// State persists outside the builder function
var count = 0;

using var app = new Hex1bApp(ctx =>
    ctx.VStack(b => [
        b.Text($"Count: {count}"),
        b.Button("Increment").OnClick(_ => count++),
        b.Button("Decrement").OnClick(_ => count--),
        b.Text(""),
        b.Button("Quit").OnClick(e => e.Context.RequestStop())
    ])
);

await app.RunAsync();

Counter with Custom Key Bindings

A counter controlled with custom keyboard shortcuts (Ctrl+A to increment, Ctrl+D to decrement):

using Hex1b;
using Hex1b.Input;

var count = 0;

using var app = new Hex1bApp(ctx =>
    ctx.VStack(b => [
        b.Text($"Count: {count}"),
        b.Text(""),
        b.Text("Ctrl+A: Increment"),
        b.Text("Ctrl+D: Decrement"),
        b.Text("Ctrl+Q: Quit")
    ]).WithInputBindings(bindings =>
    {
        bindings.Ctrl().Key(Hex1bKey.A).Action(() => count++, "Increment counter");
        bindings.Ctrl().Key(Hex1bKey.D).Action(() => count--, "Decrement counter");
        bindings.Ctrl().Key(Hex1bKey.Q).Action(ctx => ctx.RequestStop(), "Quit");
    })
);

await app.RunAsync();

Layout System

Hex1b uses a constraint-based layout system with size hints:

// Vertical stack with flexible sizing
new VStackWidget(
    children: [contentWidget, statusBarWidget],
    sizeHints: [SizeHint.Fill, SizeHint.Content]
);

Size Hints:

  • SizeHint.Fill – Expand to fill available space
  • SizeHint.Content – Size to fit content
  • SizeHint.Fixed(n) – Fixed size of n units
  • SizeHint.Weighted(n) – Proportional sizing with weight n

Widgets

Widget Description
TextBlockWidget Display static or dynamic text
TextBoxWidget Editable text input with cursor and selection
ButtonWidget Clickable button with label and action
ListWidget Scrollable list with selection support
VStackWidget Vertical layout container
HStackWidget Horizontal layout container
SplitterWidget Resizable split pane layout
BorderWidget Container with border and optional title
ScrollWidget Scrollable content area

Input Bindings

Define keyboard shortcuts using the fluent builder API:

widget.WithInputBindings(bindings =>
{
    // Simple key
    bindings.Key(Hex1bKey.Delete).Action(() => DeleteItem());
    
    // Modifier keys (Ctrl or Shift, but not both)
    bindings.Ctrl().Key(Hex1bKey.S).Action(() => Save(), "Save");
    bindings.Shift().Key(Hex1bKey.Tab).Action(() => FocusPrevious(), "Previous");
    
    // Multi-step chords
    bindings.Ctrl().Key(Hex1bKey.K)
        .Then().Key(Hex1bKey.C)
        .Action(() => CommentLine(), "Comment line");
});

Theming

Apply built-in themes or create your own:

using Hex1b.Theming;

using var app = new Hex1bApp(
    builder,
    new Hex1bAppOptions { Theme = Hex1bThemes.Sunset }
);

Documentation

License

Hex1b is licensed under the MIT License.

Showing the top 20 packages that depend on Hex1b.

Packages Downloads
Aspire.Hosting.AppHost
Core library and MSBuild logic for Aspire AppHost projects.
17
Aspire.Hosting.AppHost
Core library and MSBuild logic for Aspire AppHost projects.
15
Aspire.Hosting
Core abstractions for the Aspire application model.
13
Aspire.Hosting
Core abstractions for the Aspire application model.
12
Aspire.Hosting.AppHost
Core library and MSBuild logic for Aspire AppHost projects.
11
Aspire.Hosting.AppHost
Core library and MSBuild logic for Aspire AppHost projects.
10
Aspire.Hosting.AppHost
Core library and MSBuild logic for Aspire AppHost projects.
9

.NET 10.0

  • No dependencies.

Version Downloads Last updated
0.175.0 8 10/16/2026
0.175.0-alpha.1963.1.e84f086 7 10/15/2026
0.175.0-alpha.1905.1.34394d2 7 10/18/2026
0.175.0-alpha.1898.1.9dc034e 6 10/16/2026
0.174.0 6 10/16/2026
0.174.0-beta.1899.1.9dc034e 8 10/16/2026
0.174.0-alpha.1835.1.1856406 5 10/17/2026
0.173.0 9 10/11/2026
0.173.0-alpha.1824.1.98d8766 13 10/5/2026
0.173.0-alpha.1801.1.3dc2d9b 12 10/6/2026
0.172.0 16 9/30/2026
0.172.0-beta.1788.1.f01b043 20 9/30/2026
0.172.0-alpha.1787.1.f01b043 24 9/30/2026
0.172.0-alpha.1785.1.d253961 16 9/30/2026
0.172.0-alpha.1654.1.f826137 13 9/30/2026
0.172.0-alpha.1652.1.6a01c54 24 9/30/2026
0.172.0-alpha.1650.1.2df4512 17 9/30/2026
0.171.0 15 9/30/2026
0.170.0 23 9/30/2026
0.170.0-alpha.1620.1.85e091a 20 9/30/2026
0.170.0-alpha.1616.1.6221fe4 18 9/30/2026
0.169.1 25 9/30/2026
0.169.1-beta.1619.1.ce890db 17 9/30/2026
0.169.0 22 9/30/2026
0.169.0-beta.1611.1.c1a7c2d 17 9/30/2026
0.169.0-alpha.1608.1.d6a20d4 19 9/30/2026
0.169.0-alpha.1597.1.365795a 21 9/30/2026
0.168.0 20 9/30/2026
0.168.0-beta.1592.1.d87cce1 15 9/30/2026
0.168.0-alpha.1588.1.cb3cf27 14 9/30/2026
0.168.0-alpha.1585.1.1de7974 21 9/30/2026
0.168.0-alpha.1583.1.f78698d 23 9/30/2026
0.168.0-alpha.1579.1.1561964 21 9/30/2026
0.168.0-alpha.1573.1.2917e83 20 9/30/2026
0.168.0-alpha.1571.1.18731da 23 9/30/2026
0.167.1-beta.1570.1.7675a6d 22 9/30/2026
0.167.0 14 9/30/2026
0.167.0-beta.1566.1.6eea363 21 9/30/2026
0.167.0-alpha.1565.1.6eea363 15 9/30/2026
0.167.0-alpha.1564.1.ebc298d 17 9/30/2026
0.167.0-alpha.1561.1.093b67b 23 9/30/2026
0.167.0-alpha.1559.1.448450d 16 9/30/2026
0.167.0-alpha.1551.1.34adbdd 14 9/30/2026
0.167.0-alpha.1549.1.496ccf5 18 9/30/2026
0.167.0-alpha.1547.1.798b26c 14 9/30/2026
0.167.0-alpha.1538.1.991370f 16 9/30/2026
0.167.0-alpha.1536.1.6b20787 13 9/30/2026
0.167.0-alpha.1534.1.2783ae7 21 9/30/2026
0.167.0-alpha.1528.1.50cc76e 21 9/30/2026
0.167.0-alpha.1522.1.3085d8b 25 9/30/2026
0.167.0-alpha.1519.1.b8be265 24 9/30/2026
0.167.0-alpha.1517.1.81d1e3d 22 9/30/2026
0.167.0-alpha.1512.1.d6b2173 15 9/30/2026
0.167.0-alpha.1509.1.1f47fd9 22 9/30/2026
0.167.0-alpha.1465.1.d8af16a 24 9/30/2026
0.167.0-alpha.1414.1.b68865c 18 9/30/2026
0.166.1-beta.1558.1.5e98f7f 27 9/30/2026
0.166.0 17 9/30/2026
0.166.0-beta.1554.1.4652df1 16 9/30/2026
0.166.0-beta.1424.1.6566aac 17 9/30/2026
0.166.0-beta.1420.1.25aa164 19 9/30/2026
0.166.0-beta.1416.1.1e1d57b 14 9/30/2026
0.166.0-beta.1412.1.815f257 17 9/30/2026
0.166.0-alpha.1366.1.3ea400e 14 9/30/2026
0.166.0-alpha.1361.1.468c1e6 16 9/30/2026
0.165.0 17 9/30/2026
0.165.0-beta.1343.1.39947cb 14 9/30/2026
0.165.0-alpha.1337.1.4f44be7 21 9/30/2026
0.165.0-alpha.1331.1.b11d534 16 9/30/2026
0.165.0-alpha.1325.1.e6f8a29 22 9/30/2026
0.165.0-alpha.1322.1.62b3bb3 24 9/30/2026
0.165.0-alpha.1316.1.5401318 15 9/30/2026
0.165.0-alpha.1314.1.33573c1 13 9/30/2026
0.164.2-beta.1321.1.7522404 17 9/30/2026
0.164.1 14 9/30/2026
0.164.0 18 9/30/2026
0.164.0-beta.1308.1.3837d3a 24 9/30/2026
0.164.0-alpha.1304.1.ddc2032 14 9/30/2026
0.163.0 21 9/30/2026
0.162.0 14 9/30/2026
0.161.0 22 9/30/2026
0.160.0 17 9/30/2026
0.159.0 17 9/30/2026
0.158.0 20 9/30/2026
0.157.0 23 9/30/2026
0.156.0 25 9/30/2026
0.155.0 16 9/30/2026
0.154.0 22 9/30/2026
0.153.0 18 9/30/2026
0.152.0 18 9/30/2026
0.151.0 14 9/30/2026
0.150.0 24 9/30/2026
0.149.0 14 9/30/2026
0.148.0 21 9/30/2026
0.147.0 23 9/30/2026
0.146.0 24 9/30/2026
0.145.0 16 9/30/2026
0.144.0 15 9/30/2026
0.143.0 23 9/30/2026
0.142.0 16 9/30/2026
0.141.0 20 9/30/2026
0.140.0 14 9/30/2026
0.139.0 22 9/30/2026
0.138.0 15 9/30/2026
0.137.0 23 9/30/2026
0.136.0 12 9/30/2026
0.135.0 22 9/30/2026
0.134.0 25 9/30/2026
0.133.0 18 9/30/2026
0.132.0 16 9/30/2026
0.131.0 14 9/30/2026
0.130.0 16 9/30/2026
0.129.0 13 9/30/2026
0.128.0 21 9/30/2026
0.127.0 23 9/30/2026
0.126.0 16 9/30/2026
0.125.0 16 9/30/2026
0.124.0 17 9/30/2026
0.123.0 13 9/30/2026
0.122.0 18 9/30/2026
0.121.0 16 9/30/2026
0.120.0 15 9/30/2026
0.119.0 17 9/30/2026
0.118.0 13 9/30/2026
0.117.0 19 9/30/2026
0.116.0 14 9/30/2026
0.115.0 17 9/30/2026
0.114.0 16 9/30/2026
0.113.0 14 9/30/2026
0.112.0 20 9/30/2026
0.111.0 16 9/30/2026
0.110.0 16 9/30/2026
0.109.0 16 9/30/2026
0.108.0 16 9/30/2026
0.107.0 17 9/30/2026
0.106.0 16 9/30/2026
0.105.0 16 9/30/2026
0.104.0 17 9/30/2026
0.103.0 13 9/30/2026
0.102.0 12 9/30/2026
0.101.0 15 9/30/2026
0.100.0 15 9/30/2026
0.99.0 15 9/30/2026
0.98.0 15 9/30/2026
0.97.0 16 9/30/2026
0.96.0 16 9/30/2026
0.95.0 19 9/30/2026
0.94.0 17 9/30/2026
0.93.0 16 9/30/2026
0.92.0 14 10/4/2026
0.91.0 14 9/30/2026
0.90.0 19 9/30/2026
0.89.0 16 9/30/2026
0.88.0 16 9/30/2026
0.87.0 16 10/4/2026
0.86.0 16 9/30/2026
0.85.0 17 9/30/2026
0.84.0 17 9/30/2026
0.83.0 18 9/30/2026
0.82.0 15 9/30/2026
0.81.0 16 9/30/2026
0.80.0 14 9/30/2026
0.79.0 17 9/30/2026
0.78.0 15 9/30/2026
0.77.0 10 9/30/2026
0.76.0 15 9/30/2026
0.75.0 16 9/30/2026
0.74.0 15 9/30/2026
0.73.0 14 9/30/2026
0.72.0 15 9/30/2026
0.71.0 15 9/30/2026
0.70.0 16 9/30/2026
0.69.0 15 9/30/2026
0.68.0 18 9/30/2026
0.67.0 15 9/30/2026
0.66.0 13 9/30/2026
0.65.0 16 9/30/2026
0.64.0 15 9/30/2026
0.63.0 14 9/30/2026
0.62.0 12 9/30/2026
0.61.0 14 9/30/2026
0.60.0 17 9/30/2026
0.59.0 15 9/30/2026
0.58.0 15 9/30/2026
0.57.0 15 9/30/2026
0.56.0 16 9/30/2026
0.55.0 16 9/30/2026
0.54.0 17 9/30/2026
0.53.0 16 9/30/2026
0.52.0 15 9/30/2026
0.51.0 15 9/30/2026
0.50.0 17 9/30/2026
0.49.0 15 9/30/2026
0.48.0 15 9/30/2026
0.47.0 16 9/30/2026
0.46.0 9 10/4/2026
0.45.0 15 9/30/2026
0.44.0 17 9/30/2026
0.43.0 15 9/30/2026
0.42.0 16 9/30/2026
0.41.0 16 9/30/2026
0.40.0 14 9/30/2026
0.39.0 17 9/30/2026
0.38.0 16 9/30/2026
0.37.0 15 9/30/2026
0.36.0 15 9/30/2026
0.35.0 17 9/30/2026
0.34.0 14 9/30/2026
0.33.0 16 9/30/2026
0.32.0 16 9/30/2026
0.31.0 14 9/30/2026
0.30.0 11 9/30/2026
0.29.0 14 9/30/2026
0.28.0 13 9/30/2026
0.27.0 17 9/30/2026
0.26.0 18 9/30/2026
0.25.0 17 9/30/2026
0.24.0 16 10/4/2026
0.23.0 11 9/30/2026
0.22.0 15 9/30/2026
0.21.0 15 9/30/2026
0.20.0 14 9/30/2026
0.19.0 19 9/30/2026
0.18.0 17 9/30/2026
0.17.0 15 9/30/2026
0.16.0 16 9/30/2026
0.15.0 17 9/30/2026
0.14.0 16 9/30/2026
0.13.0 15 9/30/2026
0.12.0 15 9/30/2026
0.11.0 16 9/30/2026
0.10.0 15 9/30/2026
0.9.0 15 9/30/2026
0.8.0 16 9/30/2026
0.7.0 16 9/30/2026
0.6.0 17 9/30/2026
0.5.0 15 9/30/2026
0.4.0 16 9/30/2026
0.3.0 16 9/30/2026
0.2.0 13 9/30/2026
0.1.0 14 9/30/2026