ConsoleKit 1.0.1

dotnet add package ConsoleKit --version 1.0.1
                    
NuGet\Install-Package ConsoleKit -Version 1.0.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="ConsoleKit" Version="1.0.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="ConsoleKit" Version="1.0.1" />
                    
Directory.Packages.props
<PackageReference Include="ConsoleKit" />
                    
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 ConsoleKit --version 1.0.1
                    
#r "nuget: ConsoleKit, 1.0.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 ConsoleKit@1.0.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=ConsoleKit&version=1.0.1
                    
Install as a Cake Addin
#tool nuget:?package=ConsoleKit&version=1.0.1
                    
Install as a Cake Tool

<div align="center">

πŸ–₯️ ConsoleKit

Professionelle, theme-fΓ€hige Konsolenausgabe fΓΌr .NET β€” ohne Boilerplate.

NuGet NuGet Downloads .NET License: MIT Build

  ══════════════════════════════════════════════════════════════════════
                         MEINE ANWENDUNG  v1.0
                    Willkommen beim Deployment-Tool
  ══════════════════════════════════════════════════════════════════════

  βœ“  Server erfolgreich gestartet auf http://localhost:5000
  βœ—  Datenbankverbindung fehlgeschlagen: Timeout nach 30s
  ⚠  Konfigurationsdatei nicht gefunden β€” Standardwerte werden verwendet
  β„Ή  NΓ€chstes Backup: heute um 02:00 Uhr

  Downloading  [β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘]  40%  40/100  ETA 0m36s

</div>


Was ist ConsoleKit?

Jeder .NET-Entwickler hat irgendwann dieselbe Datei geschrieben: Eine ConsoleHelper.cs mit hartcodierten Farben, Copy-Paste-Trennlinien und einer WriteError-Methode. ConsoleKit ist die professionelle, fertige Version davon.

ConsoleKit ist eine Zero-Dependency-Bibliothek fΓΌr .NET 8+, die folgende Probleme lΓΆst:

  • Formatierung β€” Trennlinien, zentrierte Überschriften, EinrΓΌckungen konsistent ΓΌber die ganze App
  • Farb-Themes β€” alle Farben zentral definiert, austauschbar zur Laufzeit, keine hardcodierten ConsoleColor-Werte
  • Animierter Fortschritt β€” ProgressBar mit ETA und Throughput, animierter Spinner fΓΌr unbekannte Dauer
  • Pipelines visualisieren β€” StepTracker zeigt Deployment-Schritte mit Live-Statussymbolen
  • Tabellen β€” Box-Drawing-Zeichen, automatische Spaltenbreite, typsichere Zeilen per Lambda
  • User-Prompts β€” Texteingabe, PasswΓΆrter, Zahlen mit Bereichsvalidierung, MenΓΌs, Mehrfachauswahl

Die gesamte Bibliothek ist thread-safe β€” alle Ausgaben sind synchronisiert, Timer-Callbacks (ProgressBar, Spinner) kΓΆnnen gefahrlos parallel zum Hauptthread laufen.


πŸ“¦ Installation

dotnet add package ConsoleKit

<PackageReference Include="ConsoleKit" Version="1.0.0" />

Voraussetzungen: .NET 8.0 oder hΓΆher, keine weiteren AbhΓ€ngigkeiten.


⚑ Schnellstart

Der einfachste Einstieg ist die statische Facade-Klasse CK. Ein einzelnes using reicht aus:

using ConsoleKit;

// Bildschirm lΓΆschen + zentrierte Titelbox
CK.Header("Meine App", "Version 1.0.0");

// Farbige Statusmeldungen
CK.Ok("Verbindung hergestellt");
CK.Error("Fehler beim Laden der Konfiguration");
CK.Warn("Speicher niedrig: noch 200 MB verfΓΌgbar");
CK.Info("NΓ€chster Sync in 5 Minuten");

// SchlΓΌssel-Wert-Paare
CK.KeyValue("Umgebung", "Production");
CK.KeyValue("Datenbank", "PostgreSQL 16");

// Trennlinie
CK.Separator();

Wer mehr Kontrolle braucht, kann direkt auf ConsoleWriter, ProgressBar, ConsoleTable usw. zugreifen (siehe Abschnitte unten).


🎨 Themes

Alle Farben in ConsoleKit kommen aus einem einzigen ConsoleTheme-Objekt. Das Theme lΓ€sst sich jederzeit β€” auch mitten im Programmlauf β€” austauschen.

Eingebaute Themes

using ConsoleKit.Themes;

CK.Theme = ConsoleTheme.Default;       // Cyan/Blau β€” Standard fΓΌr dunkle Terminals
CK.Theme = ConsoleTheme.Retro;         // GrΓΌn-auf-Schwarz, klassisches Terminal-Feeling
CK.Theme = ConsoleTheme.HighContrast;  // Maximaler Kontrast fΓΌr Barrierefreiheit

Eigenes Theme

Alle 16 Farbrollen sind einzeln konfigurierbar:

CK.Theme = new ConsoleTheme
{
    Header       = ConsoleColor.White,
    Separator    = ConsoleColor.DarkGray,
    SectionTitle = ConsoleColor.Cyan,
    Success      = ConsoleColor.Green,
    Error        = ConsoleColor.Red,
    Warning      = ConsoleColor.Yellow,
    Info         = ConsoleColor.Cyan,
    Progress     = ConsoleColor.DarkCyan,
    ProgressFill = ConsoleColor.Cyan,
    Prompt       = ConsoleColor.White,
    MenuOption   = ConsoleColor.Yellow,
    TableHeader  = ConsoleColor.Cyan,
    TableRow     = ConsoleColor.Gray,
    TableAlt     = ConsoleColor.DarkGray,
    Muted        = ConsoleColor.DarkGray,
    Highlight    = ConsoleColor.Magenta,
};

πŸ“Š ProgressBar

Die ProgressBar lΓ€uft auf einem eigenen Hintergrundtimer (100ms) und aktualisiert sich auch ohne explizite Report()-Aufrufe. Sie implementiert IProgress<int> und IDisposable.

  Downloading  [β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘]  40%  40/100  ETA 0m36s
  Installing   β• β”β”β”β”β”β”β”β”β”β”β”β”β”β”β”β”β”β”β”β”β”β”β”β”β”β•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•£  77%  77/100  12.3/s

Grundlegende Verwendung

using ConsoleKit.Progress;

// Absoluten Wert melden (0 … total)
using var pb = new ProgressBar(total: 500, label: "Verarbeite Dateien");
for (int i = 0; i <= 500; i++)
{
    pb.Report(i);
    await ProcessFileAsync(i);
}
pb.Complete("Alle Dateien verarbeitet");

// Inkrementell
using var pb = new ProgressBar(100, "Upload");
foreach (var chunk in chunks)
{
    await UploadAsync(chunk);
    pb.Increment();
}
pb.Complete("Upload abgeschlossen");

Als IProgress<int> fΓΌr bestehende APIs

using var pb = new ProgressBar(100, "Konvertierung");
await converter.RunAsync(progress: pb);  // direkt an APIs ΓΌbergeben, die IProgress<int> erwarten
pb.Complete();

Visuell-Stile

ProgressBarStyle ist ein record und unterstΓΌtzt with-Expressions fΓΌr nicht-destruktive Anpassung:

// Eingebaute Stile
ProgressBarStyle.Default   // [β–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘]
ProgressBarStyle.Slim      // |▬▬▬─────|
ProgressBarStyle.Block     // β–β– β– β– β–‘β–‘β–‘β–‘β–Œ
ProgressBarStyle.Smooth    // β• β”β”β”β•Œβ•Œβ•Œβ•Œβ•£

// Anpassung per with-Expression
var myStyle = ProgressBarStyle.Default with
{
    Fill           = 'β–“',
    Empty          = 'β–‘',
    Width          = 50,
    ShowPercent    = true,
    ShowEta        = true,
    ShowThroughput = true   // zeigt z.B. "45.2/s" oder "1.5k/s"
};

Optionen

Eigenschaft Typ Standard Beschreibung
Fill char β–ˆ Zeichen fΓΌr den gefΓΌllten Bereich
Empty char β–‘ Zeichen fΓΌr den leeren Bereich
Left / Right char [ / ] Rahmenzeichen
Width int 40 Breite des Balkens in Zeichen
ShowPercent bool true Prozentzahl anzeigen
ShowEta bool true Verbleibende Zeit anzeigen
ShowThroughput bool false Durchsatz (Items/Sekunde) anzeigen

πŸ”„ Spinner

Der Spinner eignet sich fΓΌr Operationen mit unbekannter Dauer. Er animiert sich selbst ΓΌber einen Hintergrundtimer und erlaubt das Aktualisieren der Beschriftung wΓ€hrend der Laufzeit.

  β ‹  Verbinde mit Datenbank…
  βœ“  Verbunden! (PostgreSQL 16.2)
  βœ—  Schema-Validierung fehlgeschlagen

Verwendung

using ConsoleKit.Progress;

// Einfacher Spinner im using-Block
using var spin = new Spinner("Verbinde mit Datenbank…");
var conn = await ConnectAsync();
spin.Complete($"Verbunden! ({conn.ServerVersion})");

// Beschriftung live aktualisieren
using var spin = new Spinner("Initialisierung…");
spin.UpdateLabel("Lade Konfiguration…");
await LoadConfigAsync();
spin.UpdateLabel("Starte Dienste…");
await StartServicesAsync();
spin.Complete("Alle Dienste gestartet");

// Fehler oder Warnung signalisieren
spin.Fail("Verbindung abgelehnt");
spin.Warn("Timeout β€” Retry in 5s");

Hinweis: Bei Dispose() ohne vorheriges Complete()/Fail()/Warn() zeigt der Spinner ein neutrales –-Symbol statt eines Fehler-Icons.

Animations-Stile

Style Frames Beschreibung
SpinnerStyle.Dots ⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏ Braille-Punkte (Standard)
SpinnerStyle.Line - \ \| / Klassischer ASCII-Spinner
SpinnerStyle.Circle ◐◓◑◒ Halbkreise
SpinnerStyle.Arrows β†β†–β†‘β†—β†’β†˜β†“β†™ Richtungspfeile
SpinnerStyle.Triangle β—’β—£β—€β—₯ Dreiecke
SpinnerStyle.Pulse β–ˆβ–“β–’β–‘β–’β–“ Pulsierendes FΓΌllzeichen
SpinnerStyle.Clock πŸ•πŸ•‘πŸ•’β€¦πŸ•› Uhr-Emoji
// Eigene Frames und Geschwindigkeit
var spin = new Spinner("Arbeite…", frames: ["β—œ","β— ","◝","β—ž","β—‘","β—Ÿ"], intervalMs: 120);

πŸ“‹ StepTracker

Der StepTracker visualisiert mehrstufige Prozesse mit live aktualisierten Status-Icons. Jede Zeile wird direkt im Terminal ΓΌberschrieben β€” keine endlose Ausgabe, nur ein sauberer Block.

  ──────────────────────────────────────────────────
  Deployment Pipeline
  ──────────────────────────────────────────────────
   1. βœ“  Packages wiederherstellen  ← bin/packages
   2. βœ“  Quellcode kompilieren
   3. βœ—  Unit Tests ausfΓΌhren  ← 3 Tests fehlgeschlagen
   4. –  Artefakte publizieren  ← ΓΌbersprungen
   5. –  Benachrichtigung senden  ← ΓΌbersprungen

Verwendung

using ConsoleKit.Progress;

using var steps = new StepTracker("Deployment Pipeline",
    "Packages wiederherstellen",
    "Quellcode kompilieren",
    "Unit Tests ausfΓΌhren",
    "Artefakte publizieren",
    "Benachrichtigung senden");

steps.Start(0);
await RestoreAsync();
steps.Complete(0, "312 Pakete installiert");

steps.Start(1);
var build = await BuildAsync();
if (!build.Success)
{
    steps.Fail(1, build.ErrorMessage);
    steps.Skip(2, "ΓΌbersprungen wegen Fehler");
    steps.Skip(3);
    return;
}
steps.Complete(1);

Methoden im Überblick:

Methode Symbol Farbe Bedeutung
Start(i, note?) β–Ί Cyan Schritt lΓ€uft gerade
Complete(i, note?) βœ“ GrΓΌn Erfolgreich abgeschlossen
Fail(i, note?) βœ— Rot Fehlgeschlagen
Skip(i, note?) – Grau Übersprungen

Der optionale note-Parameter erscheint als ← Hinweistext neben dem Schrittnamen.


πŸ“ ConsoleTable

ConsoleTable rendert Tabellen mit Box-Drawing-Zeichen. Spaltenbreiten werden automatisch berechnet. Die API ist fluent β€” alle Konfigurationsmethoden geben this zurΓΌck.

  ╔════╦══════════════════╦═════════════════════╦══════════╦═══════╗
  β•‘ #  β•‘ Name             β•‘ Role                β•‘ City     β•‘ Score β•‘
  ╠════╬══════════════════╬═════════════════════╬══════════╬═══════╣
  β•‘  1 β•‘ Alice MΓΌller     β•‘ Backend Developer   β•‘ Berlin   β•‘ 98    β•‘
  β•Ÿβ”€β”€β”€β”€β•«β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β•«β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β•«β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β•«β”€β”€β”€β”€β”€β”€β”€β•’
  β•‘  2 β•‘ Bob Schneider    β•‘ Frontend Developer  β•‘ Hamburg  β•‘ 87    β•‘
  β•Ÿβ”€β”€β”€β”€β•«β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β•«β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β•«β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β•«β”€β”€β”€β”€β”€β”€β”€β•’
  β•‘  3 β•‘ Clara Fischer    β•‘ DevOps / Platform…  β•‘ Munich   β•‘ 93    β•‘
  β•šβ•β•β•β•β•©β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•©β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•©β•β•β•β•β•β•β•β•β•β•β•©β•β•β•β•β•β•β•β•

Grundlegende Verwendung

using ConsoleKit.Tables;

ConsoleTable.Create("Name", "Stadt", "Punkte")
    .WithTitle("Rangliste")
    .WithRowNumbers()
    .AddRow("Alice", "Berlin", "98")
    .AddRow("Bob",   "MΓΌnchen", "87")
    .Write();

Typsichere Zeilen mit Lambdas

var users = await db.Users.ToListAsync();

ConsoleTable.Create("ID", "Name", "E-Mail", "Registriert")
    .WithMaxColumnWidth(30)
    .AddRows(users,
        u => u.Id.ToString(),
        u => u.FullName,
        u => u.Email,
        u => u.CreatedAt.ToString("dd.MM.yyyy"))
    .Write();

Fluent-Konfiguration

Methode Beschreibung
.WithTitle(string) Überschrift über der Tabelle
.WithRowNumbers() Erste Spalte mit laufender Nummer #
.WithAlternateRows(bool) Abwechselnde Zeilenfarben (Standard: true)
.WithMaxColumnWidth(int) Max. Zeichenbreite; lΓ€ngere Werte werden mit … gekΓΌrzt
.AddRow(params string[]) Einzelne Zeile als String-Array
.AddRows(IEnumerable<string[]>) Mehrere Zeilen auf einmal
.AddRows<T>(items, selectors...) Typsichere Zeilen per Objekt + Lambda

πŸ’¬ Prompts

  β–Ά Dein Name [Welt]: Alice
  β–Ά Passwort: ******
  β–Ά Port (1–65535) [8080]:
  β–Ά Deployment starten? [Y/n]:

Texteingabe

// Optional β€” gibt null zurΓΌck wenn leer
string? name = CK.Ask("Dein Name");

// Mit Standardwert β€” Enter ΓΌbernimmt den Wert in []
string? host = CK.Ask("Hostname", defaultValue: "localhost");

// Pflichtfeld β€” wiederholt bis etwas eingegeben wird
string email = CK.AskRequired("E-Mail-Adresse");

// Passwort β€” Eingabe wird mit * maskiert
string pass = CK.AskPassword("Passwort");

Zahlen

// Integer mit Bereichsvalidierung
int port    = CK.AskInt("Port",    min: 1,   max: 65535, def: 8080);
int timeout = CK.AskInt("Timeout", min: 1,   max: 300,   def: 30);

// Dezimalzahl (InvariantCulture β€” Punkt als Dezimaltrenner)
double rate = CK.AskDouble("Prozentsatz", min: 0.0, max: 100.0, def: 50.0);

UngΓΌltige Eingaben werden automatisch abgewiesen und die Frage wiederholt.

BestΓ€tigung

bool ok = CK.Confirm("Alle Dateien lΓΆschen?");               // Standard: Nein
bool ok = CK.Confirm("Weiter?", defaultYes: true);           // Standard: Ja

AuswahlmenΓΌs

// Einfachauswahl β€” gibt 0-basierten Index zurΓΌck
int choice = CK.Select("Ziel-Umgebung", "Development", "Staging", "Production");

// Mehrfachauswahl β€” Eingabe: "1,3" oder "all"
int[] features = CK.MultiSelect("Aktiviere Features",
    "Authentifizierung", "Logging", "Caching", "Rate Limiting");

πŸ“’ Statusmeldungen & Ausgabe

CK.Ok("Backup erfolgreich abgeschlossen");       // βœ“  grΓΌn
CK.Error("Verbindung zum Server unterbrochen");  // βœ—  rot
CK.Warn("Zertifikat lÀuft in 7 Tagen ab");      // ⚠  gelb
CK.Info("Neues Update verfΓΌgbar: v2.1.0");      // β„Ή  cyan
CK.Muted("DEBUG: Config geladen aus app.json"); // β†’  grau
CK.Highlight("β˜… Premium-Feature aktiviert");    // β˜…  magenta

// Struktur
CK.Header("Mein Tool", "Deployment v2.0");      // Bildschirm lΓΆschen + Titelbox
CK.Section("Datenbankverbindung");               // Abschnittstitel mit Trennlinien
CK.Separator();                                  // Einfache Trennlinie (─)
CK.Separator('═');                               // Beliebiges Zeichen
CK.KeyValue("Host", "db.example.com");           // SchlΓΌssel: Wert
CK.Blank();                                      // Leerzeile

πŸ—οΈ Architektur

ConsoleKit/
β”œβ”€β”€ CK                     ← Statische Facade β€” empfohlener Einstiegspunkt
β”œβ”€β”€ Core/
β”‚   └── ConsoleWriter      ← Basis-Ausgabe, thread-safe, theme-bewusst
β”œβ”€β”€ Themes/
β”‚   └── ConsoleTheme       ← 16 Farbrollen, 3 eingebaute Themes
β”œβ”€β”€ Progress/
β”‚   β”œβ”€β”€ ProgressBar        ← IProgress<int> + IDisposable, Hintergrundtimer
β”‚   β”œβ”€β”€ ProgressBarStyle   ← record mit with-Expression-Support
β”‚   β”œβ”€β”€ Spinner            ← Indeterminater Spinner, IDisposable
β”‚   β”œβ”€β”€ SpinnerStyle       ← 8 eingebaute Animationssequenzen
β”‚   └── StepTracker        ← Pipeline-Visualisierung, IDisposable
β”œβ”€β”€ Tables/
β”‚   └── ConsoleTable       ← Fluent Builder, Box-Drawing, Generic-Support
└── Prompts/
    └── Prompt             ← Ask, AskInt, AskDouble, AskPassword, Confirm, Select, MultiSelect

Thread-Safety im Detail

  • Alle ConsoleWriter-Methoden sind mit einem gemeinsamen lock-Objekt synchronisiert
  • ProgressBar und Spinner rendern auf System.Threading.Timer-Callbacks β€” der Render-Pfad ist gelockt
  • _disposed / _completed / _stopped sind volatile β€” lesbar ΓΌber Thread-Grenzen ohne Lock-Overhead
  • Cursor-Positionen werden vor jedem Render gespeichert und im finally-Block wiederhergestellt
  • Mehrere parallele ProgressBar-Instanzen sind mΓΆglich, da jede ihre eigene Terminal-Zeile reserviert

πŸ“‹ VollstΓ€ndiges Beispiel

using ConsoleKit;
using ConsoleKit.Progress;
using ConsoleKit.Themes;

CK.Theme = ConsoleTheme.Default;
CK.Header("Deployment Tool", "Production Release v2.0.0");

CK.Section("Konfiguration");
CK.KeyValue("Umgebung", "Production");
CK.KeyValue("Server",   "prod-01.example.com");
CK.KeyValue("Branch",   "main @ a3f9c12");

CK.Blank();
bool proceed = CK.Confirm("Deployment starten?", defaultYes: false);
if (!proceed) { CK.Warn("Abgebrochen."); return; }

using var steps = CK.Steps("Deployment-Pipeline",
    "AbhΓ€ngigkeiten installieren",
    "Tests ausfΓΌhren",
    "Docker-Image bauen",
    "Image pushen",
    "Kubernetes aktualisieren",
    "Health Check");

steps.Start(0);
using (var pb = CK.Progress(100, "npm install", ProgressBarStyle.Slim))
{
    for (int i = 0; i <= 100; i++) { pb.Report(i); await Task.Delay(10); }
    pb.Complete();
}
steps.Complete(0, "312 Pakete");

steps.Start(1);
using (var spin = CK.Spin("Teste…", SpinnerStyle.Dots))
{
    await RunTestsAsync();
    spin.Complete("142 Tests bestanden");
}
steps.Complete(1);

// ... weitere Schritte

CK.Table("Schritt", "Dauer", "Status")
    .WithTitle("Zusammenfassung")
    .AddRow("npm install",   "8.2s",  "βœ“")
    .AddRow("Tests",         "23.1s", "βœ“")
    .AddRow("Docker build",  "45.7s", "βœ“")
    .Write();

CK.Ok("Deployment erfolgreich abgeschlossen!");
CK.PressAnyKey();

🀝 Beitragen

BeitrΓ€ge sind willkommen! Bitte lies zuerst CONTRIBUTING.md.

  1. Repository forken
  2. Feature-Branch erstellen: git checkout -b feature/mein-feature
  3. Γ„nderungen committen: git commit -m 'feat: mein neues Feature'
  4. Branch pushen: git push origin feature/mein-feature
  5. Pull Request ΓΆffnen

πŸ“œ Lizenz

VerΓΆffentlicht unter der MIT-Lizenz β€” siehe LICENSE fΓΌr Details.


<div align="center">

Mit ❀️ gebaut für .NET-Entwickler, die ihre CLI-Apps professionell aussehen lassen wollen.

NuGet Β· Dokumentation Β· Changelog Β· Issues

</div>

Product 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 was computed.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net8.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.1 96 2/27/2026
1.0.0 90 2/27/2026