Hex1b MCP Server
Model Context Protocol (MCP) server for terminal session management using Hex1b. Provides tools for creating, controlling, and capturing terminal sessions.
Ask AI about Hex1b MCP Server
Powered by Claude Β· Grounded in docs
I know everything about Hex1b MCP Server. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
Hex1b
Hex1b is a .NET library for building rich, interactive terminal user interfaces (TUI) with a React-inspired declarative API. Create beautiful console applications with widgets, layouts, theming, and more.
β¨ Features
- Declarative UI - Build UIs using a widget tree pattern inspired by React and Flutter
- Widget Library - TextBlock, TextBox, Button, List, VStack, HStack, Splitter, and more
- Layout System - Flexible constraint-based layout with size hints (Fill, Content, Fixed)
- Theming - Built-in themes with customizable colors and styles
- Input Handling - Keyboard navigation, focus management, and shortcut bindings
- Reconciliation - Efficient diff-based updates to minimize terminal redraws
π¦ Installation
dotnet add package Hex1b
π Quick Start
Here's a simple "Hello World" application:
using Hex1b;
using Hex1b.Widgets;
using var cts = new CancellationTokenSource();
Console.CancelKeyPress += (_, e) => { e.Cancel = true; cts.Cancel(); };
using var app = new Hex1bApp(
ctx => Task.FromResult<Hex1bWidget>(
new VStackWidget([
new TextBlockWidget("Hello, Terminal!"),
new ButtonWidget("Exit", () => cts.Cancel())
])
)
);
await app.RunAsync(cts.Token);
π¨ Widgets
Hex1b provides a variety of built-in 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 |
VStackWidget | Vertical layout container |
HStackWidget | Horizontal layout container |
SplitterWidget | Resizable split pane layout |
π Layout System
Hex1b uses a constraint-based layout system with size hints:
// Children with size hints: first fills available space, second sizes to content
new VStackWidget(
[contentWidget, statusBarWidget],
[SizeHint.Fill, SizeHint.Content]
);
Size Hints:
SizeHint.Fill- Expand to fill available spaceSizeHint.Content- Size to fit contentSizeHint.Fixed(n)- Fixed size of n units
πΉ Input Bindings
Define keyboard bindings at any level of your widget tree:
var widget = new SplitterWidget(left, right, 25) with
{
InputBindings = [
InputBinding.Ctrl(Hex1bKey.S, Save, "Save"),
InputBinding.Ctrl(Hex1bKey.Q, Quit, "Quit"),
]
};
π¨ Theming
Apply built-in themes or create your own:
using var app = new Hex1bApp(builder, new Hex1bAppOptions { Theme = Hex1bThemes.Sunset });
ποΈ Architecture
Hex1b follows a widget/node separation pattern:
- Widgets - Immutable configuration objects describing what to render
- Nodes - Mutable render objects that manage state and layout
- Reconciliation - Efficient diffing to update nodes when widgets change
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Hex1bApp.RunAsync() β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 1. Build widget tree (your code) β
β 2. Reconcile β Update node tree β
β 3. Layout β Measure and arrange nodes β
β 4. Render β Draw to terminal β
β 5. Wait for input β Dispatch to focused node β
β 6. Repeat from step 1 β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π§ͺ Samples
The samples/ directory contains example applications demonstrating various features:
- Cancellation - Master-detail contact editor with save/cancel functionality
Running Samples with Aspire
This repository is set up with Aspire to make it easy to run and test sample applications:
dotnet run --project apphost.cs
Note: Aspire doesn't natively support interactive terminal applications, but this project explores techniques to make TUI app development and testing in Aspire possible.
π οΈ Development
Prerequisites
- .NET 10.0 SDK (preview)
- A terminal emulator with good ANSI support
Building
dotnet build
Running Tests
dotnet test
Project Structure
hex1b/
βββ src/
β βββ Hex1b/ # Main library
β βββ Layout/ # Constraint-based layout system
β βββ Nodes/ # Render nodes (mutable, stateful)
β βββ Widgets/ # Widget definitions (immutable config)
β βββ Theming/ # Theme system and built-in themes
β βββ Input/ # Keyboard input and bindings
βββ samples/ # Example applications
βββ tests/
β βββ Hex1b.Tests/ # Unit tests
βββ apphost.cs # Aspire app host for running samples
π€ Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
For AI coding agents, see AGENTS.md for context and conventions.
π License
This project is licensed under the MIT License - see the LICENSE file for details.
π Related Projects
- Spectre.Console - Beautiful console output
- Terminal.Gui - Cross-platform terminal UI toolkit
- Aspire - Cloud-ready stack for .NET
