Chisle
The coding-agent plugin that bills 52% of a bare model across 20 live tasks. Terse persona + tool-output compressor + context diet.
Build .NET terminal UIs with reusable Razor components, built-in mouse and keyboard events, and experimental NativeAOT support for native distribution.
Developer toolsC# · HTMLGitHub @RazorConsoleOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Build agentic TUI applications with .NET Razor and Spectre.Console
Loading the full README.
Read the full README ↗Build rich, interactive console applications using familiar Razor syntax and the power of Spectre.Console
RazorConsole bridges the gap between modern web UI development and console applications. It lets you create sophisticated terminal interfaces using Razor components, complete with interactive elements, rich styling, and familiar development patterns.
dotnet add package RazorConsole.Core
RazorConsole requires the Microsoft.NET.Sdk.Razor SDK to compile Razor components. Update your project file (.csproj) to use the Razor SDK:
<Project Sdk="Microsoft.NET.Sdk.Razor">
<!-- other settings -->
</Project>
Here's a simple counter component to get you started:
@using Microsoft.AspNetCore.Components
@using Microsoft.AspNetCore.Components.Web
@using RazorConsole.Components
<Columns>
<p>Current count</p>
<Markup Content="@currentCount.ToString()" Foreground="@Spectre.Console.Color.Green" />
</Columns>
<TextButton Content="Click me"
OnClick="IncrementCount"
BackgroundColor="@Spectre.Console.Color.Grey"
FocusedColor="@Spectre.Console.Color.Blue" />
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
using Microsoft.Extensions.Hosting;
using RazorConsole.Core;
IHostBuilder hostBuilder = Host.CreateDefaultBuilder(args)
.UseRazorConsole<Counter>();
IHost host = hostBuilder.Build();
await host.RunAsync();
For more complete sample applications, check out the Examples section below.
RazorConsole renders every frame through WidgetLayout: components become widgets that are measured, arranged and painted into terminal cells, which gives every element known bounds for focus, layout queries and coordinate-aware mouse events. Spectre.Console-backed content such as charts, Figlet text and syntax highlighting is painted as widget leaves.
The legacy Spectre.Console layout pipeline was removed in 1.0 (earlier warnings
said 1.1.0). If you upgrade from 0.x, remove any ConsoleAppOptions.RenderingPipeline
assignment and the RAZORCONSOLE_RENDERING_PIPELINE environment variable, which
no longer has any effect, and move custom ITranslationMiddleware translators to
IWidgetTranslator. ConsoleAppOptions.AfterRenderAsync was also removed; use the
root component's OnAfterRenderAsync, IHostApplicationLifetime.ApplicationStarted
or an IHostedService instead. ConsoleViewResult, ConsoleLiveDisplayContext and
FocusManager.BeginSession are now internal. See the
Widget Layout guide and the
custom translator guide for details.
Animated applications can opt into synchronized frame presentation with
options.ConsoleLiveDisplayOptions.EnableSynchronizedUpdates = true.
On terminals supporting DEC private mode 2026, all changed rows are presented
together instead of showing partially drawn frames. This option is off by default;
terminals without synchronized-output support may still show tearing.
Build your console UI using familiar Razor components with full support for data binding, event handling, and component lifecycle methods.
Create engaging user experiences with interactive elements like buttons, text inputs, selectors, and keyboard navigation - all with focus management handled automatically.
Get started quickly with 25+ pre-built components covering layout, input, display, and navigation needs:
Align, Columns, FlexBox, Rows, Grid, Padder, Scrollable, ViewHeightScrollableTextInput, TextButton, SelectBarChart, BreakdownChart, StepChart, Border, Figlet, Markdown, Markup, ModalWindow, Panel, SpectreCanvas, SyntaxHighlighter, TableSpinner, NewlineFor a full list of components and usage details, see the Built-in Components section below.
This is the beginning of the README. Read the rest at the original. Read the full README ↗