Arlecchino.Core
2026.8.5
dotnet add package Arlecchino.Core --version 2026.8.5
NuGet\Install-Package Arlecchino.Core -Version 2026.8.5
<PackageReference Include="Arlecchino.Core" Version="2026.8.5" />
<PackageVersion Include="Arlecchino.Core" Version="2026.8.5" />
<PackageReference Include="Arlecchino.Core" />
paket add Arlecchino.Core --version 2026.8.5
#r "nuget: Arlecchino.Core, 2026.8.5"
#:package Arlecchino.Core@2026.8.5
#addin nuget:?package=Arlecchino.Core&version=2026.8.5
#tool nuget:?package=Arlecchino.Core&version=2026.8.5

The cell grid the Arlecchino terminal UI framework draws
on, packaged on its own: a double-buffered surface, ANSI styling, flow and canvas layout, text
measured in grapheme clusters, and the atoms that hold state with an undo history. No dependency
injection, no hosting, no views — those are the Arlecchino package, and it brings this one with it.
Writing an application? Install Arlecchino
instead. This package is for code that wants the renderer and nothing else: a tool that draws one
screen, a widget library, a host of its own.
Quick start
dotnet add package Arlecchino.Core
A Surface composes a frame in memory and sends it to a terminal:
using Arlecchino;
using Arlecchino.Rendering;
var surface = new Surface(new SystemTerminal());
surface.StartFrame();
surface.AppendLine("hello", Theme.Header, Align.Center);
surface.Build();
StartFrame reads the terminal size and clears every cell; nothing reaches the terminal until
Build, which writes only what changed since the last frame — an idle frame writes nothing at all.
SetFixedSize pins the size instead of asking the terminal, which is what makes headless rendering
possible.
Anything larger than a stack of lines is drawn into a region:
var (left, right) = surface.Content.SplitLeft(surface.FrameWidth / 2);
var pane = left.Border(Theme.Accent, "files").Flow();
pane.AppendLine("README.md", Theme.Default);
pane.AppendLine("CHANGELOG.md", Theme.Muted);
right.Fill(Theme.Default);
A SurfaceRegion splits, insets, borders and clips; Flow() turns one into a cursor that appends
lines and knows how many it has left. The region is a struct over the same grid — carving a layout up
allocates nothing.
What is in it
Surface,SurfaceRegion,PaneFlow— the double-buffered grid, region arithmetic and the flow cursor, plusWriteTableRowandListWindowfor lists that scroll.Theme,ThemePalette,TermColor,Rgb— one look per process, either of the two built-in palettes or one of your own; colours are written once and degrade to what the terminal has.TerminalCapabilities— truecolor, 256 colours or none, detected fromNO_COLOR,TERMandCOLORTERM, and overridable.TextWidth— width, truncation, padding and wrapping measured in grapheme clusters, so emoji, combining marks and East Asian characters do not tear the grid.- Atoms —
Atom<T>,AtomsList<T>andAtomsMap<TKey, TValue>in a tracked and a local flavour,Computed<T>that follows what it reads, andAtomHistorywithUndo,RedoandGroup. Writing an atom notifies whatever reads it and marks the frame stale. IArlecchinoTerminalandSystemTerminal— the seam the surface writes through, and the implementation overSystem.Console. A terminal of your own is fourteen members.FrameThread— the single thread every write is checked against, so background work that touches state is caught rather than tolerated.
Every type is trimming- and Native AOT-compatible, and the framework's own build publishes a native binary each run and asks it for a frame.
Packages
| Package | Contents |
|---|---|
Arlecchino.Core |
this one — the renderer, no DI, and atoms with their undo history |
Arlecchino |
views, navigation, modals, commands, hosting, DI, async stores, and the generator |
Arlecchino.Pictures |
PNG, JPEG, BMP, Netpbm, QOI and Targa read into pixels |
Arlecchino.Testing |
ArlecchinoTestHost — the headless host applications write their tests against |
They ship together and always carry the same version.
Links
Documentation · Rendering · Changelog · Source and issues
MIT.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- No dependencies.
-
net8.0
- No dependencies.
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Arlecchino.Core:
| Package | Downloads |
|---|---|
|
Arlecchino
Terminal UI framework for .NET: view navigation with history, modals, a command palette and a file picker, wired through Microsoft.Extensions.DependencyInjection and IHostedService. |
|
|
Arlecchino.Pictures
Image decoders for Arlecchino: PNG, JPEG, BMP, PNM, QOI and TGA read into the pixels the Picture widget draws. Managed, with no dependency beyond the renderer. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2026.8.5 | 105 | 8/19/2026 |
| 2026.8.4 | 138 | 8/16/2026 |
| 2026.8.3 | 133 | 8/16/2026 |
| 2026.8.2 | 133 | 8/16/2026 |
| 2026.8.1 | 145 | 8/14/2026 |
| 5.0.0 | 157 | 8/8/2026 |
| 4.0.0 | 190 | 8/3/2026 |
| 3.1.0 | 150 | 8/2/2026 |
| 3.0.0 | 166 | 8/1/2026 |
| 2.13.0 | 134 | 7/29/2026 |
| 2.12.0 | 145 | 7/29/2026 |
| 2.11.0 | 135 | 7/29/2026 |
| 2.10.0 | 137 | 7/29/2026 |
| 2.9.0 | 137 | 7/29/2026 |
| 2.8.0 | 149 | 7/29/2026 |
| 2.7.0 | 130 | 7/29/2026 |
| 2.6.1 | 154 | 7/29/2026 |
| 2.6.0 | 136 | 7/28/2026 |
| 2.5.0 | 135 | 7/28/2026 |
| 2.4.1 | 127 | 7/28/2026 |
What changed in this version: https://github.com/The1fEst/Arlecchino/blob/master/CHANGELOG.md#202685