ConsoleMonster 2.2.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package ConsoleMonster --version 2.2.1
                    
NuGet\Install-Package ConsoleMonster -Version 2.2.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="ConsoleMonster" Version="2.2.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="ConsoleMonster" Version="2.2.1" />
                    
Directory.Packages.props
<PackageReference Include="ConsoleMonster" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add ConsoleMonster --version 2.2.1
                    
#r "nuget: ConsoleMonster, 2.2.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package ConsoleMonster@2.2.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=ConsoleMonster&version=2.2.1
                    
Install as a Cake Addin
#tool nuget:?package=ConsoleMonster&version=2.2.1
                    
Install as a Cake Tool

ConsoleMonster

Everyday output in one line. The monster when you need it.

ConsoleMonster makes the output of the commands you already run readable, and draws tables, trees, charts, live runs, dashboards, menus and forms when you need more. It is one engine for Windows PowerShell 5.1, PowerShell 7 and .NET, with no package dependencies. A setting has one name everywhere (-Title in PowerShell, Title = and .Title() in C#), and when the output goes to a file, a log or CI, it writes plain lines instead of escape codes.

A live assessment dashboard: progress per target, a results summary, charts, failures by category and the log

Website · Documentation · Demos · Widgets · .NET API · PowerShell commands

Start in PowerShell

Install-Module ConsoleMonster -Scope CurrentUser
Import-Module ConsoleMonster
Get-Process | Sort-Object CPU -Descending | Select-Object -First 8 | Show-ConsoleTable

Show-ConsoleDemo lists the gallery's demos, grouped by what they are for, and runs the one you pick. Get-Command -Module ConsoleMonster lists every command, and Get-Help <command> -Examples shows how to use it.

Start in C#

dotnet new console -n FirstTable
cd FirstTable
dotnet add package ConsoleMonster

Replace Program.cs, then dotnet run:

using ConsoleMonster;
using ConsoleMonster.Widgets;

var files = new DirectoryInfo(".").GetFiles().Select(f => new { f.Name, f.Length });
Table.For(files).Title("Files").Show();

Install · Three ways to write it in C# · The dotnet new template, which starts a project from any gallery demo

Nicer default output in one line

Files, processes, services, hashtables and more read as tables and records; the objects, pipelines, files and transcripts stay PowerShell's.

Enable-ConsoleFormatting

A service inventory, a version and a dictionary after Enable-ConsoleFormatting

To keep it in every session, add the lines -ProfileSnippet prints to your profile:

if (-not (Test-Path -Path $PROFILE)) {
    $null = New-Item -ItemType File -Path $PROFILE -Force
}
Enable-ConsoleFormatting -ProfileSnippet | Add-Content -Path $PROFILE

Everyday PowerShell output

Tables, lists and trees

Show-ConsoleTable, Show-Console -View List and Show-Console -View Tree take pipeline input and fit the window. Enable-ConsoleFormatting styles direct console output from Format-Table, Format-List and Format-Wide by default, while keeping PowerShell's column choices. Use -Exclude FormatCommands to leave their output native.

Import-Module ConsoleMonster

# Invented package artifacts with fixed sizes and UTC timestamps.
$recordedAt = [datetimeoffset] '2026-10-21T12:00:00Z'
$files = @(
    [pscustomobject] @{
        Name = 'ConsoleMonster.dll'; Length = 1048576
        LastWriteTime = $recordedAt; Extension = '.dll'
    }
    [pscustomobject] @{
        Name = 'ConsoleMonster.deps.json'; Length = 4096
        LastWriteTime = $recordedAt; Extension = '.json'
    }
    [pscustomobject] @{
        Name = 'start.ps1'; Length = 512
        LastWriteTime = $recordedAt; Extension = '.ps1'
    }
)
$files | Show-ConsoleTable -Property Name, Length, LastWriteTime `
    -GroupBy Extension -Presentation @{ TimeZone = [TimeZoneInfo]::Utc }

Sample package artifacts grouped by extension, with fixed sizes and dates

Coming from Format-Table · Tables at six widths

Widgets

Every widget is a New-Console* command: panels, trees, charts, logs, lanes and more. Containers take a script block of children, and items share -Status, -Detail and -Role.

Import-Module ConsoleMonster

New-ConsoleChart -Role Fail -InputObject ([ordered] @{
    'Domain controllers' = 14
    'Group Policy'       = 9
    'Kerberos'           = 6
    'DNS'                = 4
    'PKI'                = 2
}) -Type Bar | Show-Console

A bar chart of failures by category

The widget gallery: every widget at every colour and glyph tier, in PowerShell and C#.

Diagrams

Describe networks, application flows and team hierarchies with the core Diagram model: nodes, links, groups and use cases. Object initializers, Ui.Diagram("Title") and New-ConsoleDiagram configure the same model. The dependency-free core draws a grouped tree with connection labels and status text:

using ConsoleMonster;
using ConsoleMonster.Widgets;

var diagram = Ui.Diagram("Home network")
    .Node("Laptop", n => n.Kind(DiagramNodeKind.Workstation))
    .Node("Router", n => n.Kind(DiagramNodeKind.Gateway)
        .Subtitle("192.168.1.1").Value("1 ms"))
    .Link("Laptop", "Router", l => l.Label("Wi-Fi"));
Terminal.Write(diagram);

For boxes, routed connections, keyboard navigation and use case playback, add the optional ConsoleMonster.Graphics package and call DiagramRendererProvider.Register() once at startup, before creating diagrams. Registration is required on every target framework, including net472 and netstandard2.0 consumers; a package reference alone does not load the assembly or register the renderer. Then diagram.Run() opens the keyboard view, and Diagram.Load(path, diagramId) imports files through the registered provider. For a ChartForgeX TopologyChart, use chart.ToDiagram() with using ConsoleMonster.Graphics;. The typed extension belongs to Graphics; core does not reference ChartForgeX.

The PowerShell module bundles Graphics and registers it for diagram commands:

Import-Module ConsoleMonster

New-ConsoleDiagram -Title 'Home network' {
    New-ConsoleDiagramNode 'Laptop' -Kind Workstation
    New-ConsoleDiagramNode 'Router' -Kind Gateway -Subtitle '192.168.1.1' -Value '1 ms'
    New-ConsoleDiagramLink 'Laptop' 'Router' -Label 'Wi-Fi'
} | Show-ConsoleDiagram -StaticSnapshot

Subtitles and live values occupy separate lines. Needs attention lists every non-Pass node and link by default; hide it with ShowSummary = false, fluent .Summary(false) or PowerShell -NoSummary. Configure the model before sharing it with a session, then use diagram.Handle(session) for thread-safe live updates.

Eight examples in initializer, fluent and PowerShell forms · Graphics registration, file loading and playback

Apps, documents and charts you can explore

Show-ConsoleApp builds full-screen tools from grids, forms, tabs, trees and log viewports, and the mouse works wherever the keyboard does: footer hints, scroll bars, double-click to open and a right-click context menu. New-ConsoleCollapsible, New-ConsoleAccordion and New-ConsoleSplitter fold long content and resize panes, and a find bar searches logs, text areas and documents. Markdown and Show-ConsoleHelp open in a document viewer with an outline, folding headings and links you can follow back and forth. New-ConsoleChartView adds a crosshair, zoom and pan to a chart, and -LinkKey links its selection to a data grid through app state.

Interactive applications · Help and defaults

Live progress for long-running work

Import-Module ConsoleMonster

# Forty servers, eight at a time: three fail and one hangs past the four-second limit.
$servers = 1..40 | ForEach-Object { 'web{0:d2}' -f $_ }
$run = @{ Parallel = $true; ThrottleLimit = 8; TimeoutSeconds = 4; Title = 'Patching' }
$results = $servers | Invoke-ConsoleRun @run -ErrorAction SilentlyContinue {
    Start-Sleep -Milliseconds (500 + ([int] $_.Substring(3) * 137) % 900)
    if ($_ -in 'web13', 'web26', 'web39') { throw "$_ did not come back" }
    if ($_ -eq 'web22') { Start-Sleep -Seconds 10 }
    "$_ patched"
}

A parallel run of forty servers: the summary bar, a cell per server and the failures

Live runs · Live dashboards

C# and the fluent API

The same engine as a .NET library. Every widget takes an object initializer or fluent calls named after its properties (.Title("Build")), and Ui.Panel(), Ui.Table() and the other Ui factories start a fluent chain. All three draw the same cells.

using ConsoleMonster;
using ConsoleMonster.Styling;
using ConsoleMonster.Widgets;

Terminal.Write(new StatusList()
    .Add("Restore NuGet packages", StatusKind.Pass, "1.6 s")
    .Add("Compile ConsoleMonster", StatusKind.Pass, "4.7 s")
    .Add("Run Pester on PowerShell 7", StatusKind.Warn, "1 skipped")
    .Add("Sign module files", StatusKind.Skip, "skipped")
    .Add("Pack ConsoleMonster.2.0.0.nupkg", StatusKind.Running)
    .Add("Publish to PowerShell Gallery", StatusKind.Pending));

A status list of build steps: passed, warning, skipped, running and pending

Three ways to write it in C# · Logging · Hosting dashboard · dotnet new template

Save, replay and test

Views export to Markdown, HTML, SVG and text, live runs record and replay, and Assert-ConsoleOutput checks output in tests.

Import-Module ConsoleMonster

# Invented package artifacts, exported as a Markdown table for a report.
$recordedAt = [datetimeoffset] '2026-10-21T12:00:00Z'
$files = @(
    [pscustomobject] @{
        Name = 'ConsoleMonster.dll'; Length = 1048576; LastWriteTime = $recordedAt
    }
    [pscustomobject] @{
        Name = 'ConsoleMonster.deps.json'; Length = 4096; LastWriteTime = $recordedAt
    }
    [pscustomobject] @{
        Name = 'start.ps1'; Length = 512; LastWriteTime = $recordedAt
    }
)
$files | New-ConsoleTable -Property Name, Length, LastWriteTime `
    -Presentation @{ TimeZone = [TimeZoneInfo]::Utc }  |
    Export-ConsoleFrame -Format Markdown

The Markdown table the script printed

Recording and replay · Testing your output

Thread safety

Any thread can update the screen and one thread draws it, so parallel work never tears the view.

Import-Module ConsoleMonster

$dashboard = New-ConsoleDashboard -Title 'Workers' -Content {
    New-ConsolePanel -Title 'Log' -Fill -Content { New-ConsoleLogRegion }
}
1..8 | Invoke-ConsoleDashboard $dashboard -Parallel -ThrottleLimit 8 {
    param($Number)
    Start-Sleep -Milliseconds (Get-Random -Maximum 800)
    Write-Host "worker $Number finished"
}

Threads and concurrency: what is safe from which thread, and the stress test.

Compatibility

  • PowerShell 5.1 and 7, with net472 and net8.0 payloads. On 5.1 one ConsoleMonster version loads per session; restart it after an upgrade.
  • .NET netstandard2.0, net472, net8.0 and net10.0, no package dependencies, AOT compatible on net8.0 and net10.0 (trimming notes).
  • Consoles are detected (colour, glyphs, size, CI, redirection); NO_COLOR and CONSOLEMONSTER_* override it (hosts and CI).

Benchmarks · Changelog · Contributing · MIT license · Maintained by Evotec.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  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. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 is compatible.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETFramework 4.7.2

    • No dependencies.
  • .NETStandard 2.0

    • No dependencies.
  • net10.0

    • No dependencies.
  • net8.0

    • No dependencies.

NuGet packages (5)

Showing the top 5 NuGet packages that depend on ConsoleMonster:

Package Downloads
ConsoleMonster.PowerShell.Display

Optional type-scoped, runspace-owned default display adapter for ConsoleMonster.

ConsoleMonster.Hosting

A live ConsoleMonster dashboard for .NET generic host applications: services.AddConsoleDashboard() shows the hosted services' state (starting, running, stopped, failed), your own statuses and the log, and stays out of the way when the output is redirected or the app runs as a service.

ConsoleMonster.Extensions.Logging

A Microsoft.Extensions.Logging provider for ConsoleMonster: log lines with ConsoleMonster's level tags, colours and timestamps, scopes and categories, written into a running dashboard's log region when there is one and as plain lines when the output is redirected.

ConsoleMonster.Graphics

Portable PNG, GIF and APNG exports and terminal topology diagrams for ConsoleMonster, powered by ChartForgeX.

ConsoleMonster.Markdown

Markdown display and widget, frame and recording export for ConsoleMonster, powered by OfficeIMO.Markdown.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2.3.0 74 11/6/2026
2.2.1 87 11/6/2026
2.2.0 86 11/6/2026
2.1.3 137 11/4/2026
2.1.2 403 10/29/2026
2.1.1 397 10/29/2026
2.1.0 420 10/28/2026
2.0.1 297 10/19/2026
2.0.0 123 10/19/2026