spectreconsole/spectre.console
61.9
Adequate · 23 September 2026
49.8k
lines of production code
C#
primary language
5
measurements over time
What this system is
Spectre.Console is a .NET library that provides a comprehensive toolkit for building rich, interactive terminal user interfaces. It enables developers to render complex layouts using tables, grids, and charts, while supporting live updates through progress bars, status indicators, and spinners. The system also facilitates user interaction via various prompt types and handles low-level ANSI/VT escape sequences to ensure consistent styling and behavior across different terminal environments.
How it got here
2020 — Initial release and infrastructure modernization
20 changes.
This period marks the initial release of the Spectre.Console library, introducing comprehensive terminal UI capabilities such as rich layouts, interactive prompts, and live rendering. Concurrently, the project underwent significant infrastructure modernization, migrating to .NET 10, adopting a new solution format, and establishing robust build and testing frameworks.
2021 — Live UI and interactive widgets expansion
19 changes.
This period focused on expanding the library's widget and live rendering capabilities, introducing complex components like Table, Charts, and LiveDisplay for structured, updatable console output. It also significantly enhanced interactive user experiences with new prompt types and refined the Progress API with detailed metrics and modern time handling. Underlying infrastructure improvements included a robust ANSI backend abstraction and CI/CD environment detection to ensure consistent rendering across diverse terminal environments.
2022–2026 — ANSI extraction and source generation
20 changes.
The project extracted core ANSI/VT handling into a standalone library and replaced hand-written asset files with source generators for colors, emojis, and spinners. This period also introduced significant rendering enhancements, including JSON AST-based styling, image support on the canvas, and a new style record struct, while expanding test coverage across widgets and the new ANSI components.
Features
Add BarChart and BreakdownChart widgets
New renderable chart widgets are now available in the Spectre.Console library. The BarChart widget displays horizontal bars with support for custom labels, colors, value formatting, and a fixed maximum value. The BreakdownChart widget visualizes proportional data segments in a single bar, featuring configurable tag display, value formatting via lambda expressions, and color customization for the value text.
src/Spectre.Console/Widgets/Charts · high confidence
Add HTML and plain-text console encoders
Users can now export console output to HTML and plain text formats. The new HtmlEncoder renders console content into a styled \<pre\> block with inline CSS for colors, bold, italic, underline, and strikethrough decorations, while the TextEncoder extracts raw text by stripping control codes and formatting. Both encoders support rendering IRenderable objects and respect the console profile's width and color system.
src/Spectre.Console/Internal/Text/Encoding · high confidence
Add half-block support to Canvas
The Spectre.Console.ImageSharp extension now includes a new \CanvasImage\ renderable and associated extension methods, enabling users to render images directly into the console canvas. This implementation supports configurable maximum widths, allows mutation of the underlying image data, and provides options for different resampling strategies (bicubic, bilinear, and nearest-neighbor) to control image quality during scaling. The \PixelWidth\ property and its corresponding extension method are marked as obsolete, indicating a shift in how image resolution is handled within the canvas rendering pipeline.
src/Extensions/Spectre.Console.ImageSharp · high confidence
Added CI platform enrichers for AppVeyor, Azure Pipelines, Bamboo, Bitbucket, Bitrise, ContinuaCI, GitHub, GitLab, GoCD, Jenkins, MyGet, TeamCity, TFS, and Travis
New internal profile enrichers have been added for a wide range of continuous integration platforms. When the application detects the corresponding environment variables (such as APPVEYOR, TF\_BUILD, bamboo\_buildNumber, BITBUCKET\_REPO\_OWNER, BITRISE\_BUILD\_URL, ContinuaCI.Version, GITHUB\_ACTIONS, CI\_SERVER, GO\_SERVER\_URL, JENKINS\_URL, BuildRunner, TEAMCITY\_VERSION, TRAVIS, or TFS\_BUILD), it automatically disables interactive mode. Additionally, for Azure Pipelines and GitHub Actions, ANSI support is explicitly enabled while link capabilities are disabled, ensuring correct output formatting in these specific CI environments.
src/Spectre.Console/Enrichment/CI · high confidence
Added code generation scripts for colors, emojis, and spinners
New PowerShell scripts have been added to the resources/scripts directory to automate the generation of lookup tables and generated source files. Users can now run these scripts to regenerate Color, Emoji, and Spinner definitions, which are then copied into the main Spectre.Console source tree. This change also introduces a .gitignore file to exclude generated and temporary output directories from version control.
resources/scripts · high confidence
Added legacy console backend for environments without ANSI support
A new legacy rendering backend has been introduced to support console output in environments that do not handle ANSI escape sequences. This implementation, located in the Legacy backend folder, provides a fallback mechanism that utilizes standard .NET Console methods for cursor movement and color setting, ensuring that Spectre.Console applications can still render text and styles correctly on older or restricted terminal systems.
src/Spectre.Console/Internal/Backends/Legacy · high confidence
Initial implementation of the Table widget with column spanning and row manipulation
The Table widget in src/Spectre.Console/Widgets/Table is now available, introducing support for column spanning via the new TableCell class (allowing cells to span multiple columns using the Span method) and the ability to update individual table cells at runtime through the TableRowCollection.Update method. The implementation includes full rendering and measurement logic in TableRenderer and TableMeasurer, with validation that prevents column spanning in header and footer rows, and provides configuration options for borders, headers, footers, and row separators.
src/Spectre.Console/Widgets/Table · high confidence
Introduce Figlet text rendering with layout modes and font support
Users can now render ASCII art text using the Figlet format via the new FigletText widget. This change adds support for loading .flf font files (including a default Standard font), and provides three layout modes—FullSize, Fitted, and Smushed—to control how characters are spaced and merged. The widget also respects justification settings and includes a Pad property to control right-side padding.
src/Spectre.Console/Widgets/Figlet · high confidence
Introduce LiveDisplay for structured, updatable console output
A new LiveDisplay component is added to the Live rendering system, allowing applications to present a structured, updatable view that can be modified in real-time. This feature introduces configuration options for vertical overflow handling (Ellipsis or Crop) and cropping strategy (Top or Bottom), ensuring that content exceeding the terminal height is managed gracefully. It also provides an AutoClear setting to automatically remove the display upon completion, and supports dynamic target updates and manual refreshes via the LiveDisplayContext, enabling complex live UI patterns like status indicators or multi-panel dashboards.
src/Spectre.Console/Live · high confidence
Introduce dedicated Spectre.Console.Ansi library for low-level ANSI/VT handling
A new \Spectre.Console.Ansi\ project has been added to the solution, extracting core ANSI/VT capabilities into a standalone library. This includes an \AnsiWriter\ for emitting escape sequences, an \AnsiCapabilities\ model to detect terminal support for colors, links, and alternate buffers, and an \AnsiDetector\ that handles platform-specific detection (including Windows legacy console upgrades and TERM variable checks on Unix). The library also provides \AnsiMarkup\ for parsing and writing styled text with links, \AnsiMarkupHighlighter\ for search-result highlighting, and comprehensive color/decoration tables (\ColorPalette\, \ColorTable\, \DecorationTable\) to map styles to ANSI codes. Additionally, it includes a source-generated backport of \System.Threading.Lock\ to improve locking performance on .NET 9.0+ while maintaining compatibility with older frameworks.
src/Spectre.Console.Ansi · high confidence
Introduce profile enrichment for CI/CD environment detection
Users can now automatically configure console profiles based on the current CI/CD environment. A new ProfileEnricher applies settings from built-in enrichers for platforms such as Azure Pipelines, GitHub Actions, GitLab CI, Jenkins, and TeamCity, or allows custom enrichers to be registered via the ProfileEnrichment settings.
src/Spectre.Console/Enrichment · high confidence
Introduces a new rendering pipeline with hooks and lazy evaluation
The rendering engine in src/Spectre.Console/Rendering has been restructured to support a pluggable pipeline architecture. This change introduces IRenderable and Renderable as the core abstractions for console output, enabling a new RenderPipeline that processes renderables through IRenderHook implementations. This allows for global modifications to rendered content via RenderHookScope. Additionally, JustInTimeRenderable is added to support lazy, state-driven rendering, while IAnsiConsoleEncoder provides a mechanism to encode rendered segments into strings, facilitating features like console output recording.
src/Spectre.Console/Rendering · high confidence
Introduction of RenderOptions record for rendering context
A new \RenderOptions\ record class has been added to the \Spectre.Console.Rendering\ namespace to encapsulate rendering context details such as capabilities, console size, color system, and justification settings. This type provides a structured way to pass rendering configuration and includes a factory method to create instances from an \IAnsiConsole\, alongside extension methods for handling box borders safely based on unicode support.
Spectre.Console · high confidence
New BCL extension methods for common .NET types
This change introduces a new set of extension methods in the Spectre.Console library to simplify working with standard .NET types. Users can now use \GetRenderable\ on \Exception\ objects to get a formatted, renderable representation of errors, and \GetCellWidth\ on \string\ and \char\ to determine their display width in the console. Additional utility methods include \Clamp\ for \int\, \Mask\ for \string\, \PushRange\ for \Stack\, and various enumeration helpers like \None\, \Repeat\, \Enumerate\, and \ZipThree\ for \IEnumerable\. The update also adds \Deconstruct\ support for \KeyValuePair\ in dictionaries, \GetAbbreviatedDayName\ and \GetNextWeekDay\ for \DayOfWeek\, and \AppendWithStyle\ for \StringBuilder\. These extensions are internal or public helpers designed to reduce boilerplate when building console applications.
src/Spectre.Console/Extensions/Bcl · high confidence
New Status API for displaying spinner-based progress indicators
The library introduces a new \Status\ component and its associated \StatusContext\ in the \Spectre.Console.Live.Status\ namespace, providing a dedicated way to display animated spinner indicators alongside status messages. Users can now use the \Status.Start\ and \Status.StartAsync\ methods to run actions while showing a live-updating spinner, with the ability to customize the spinner type, style, and auto-refresh behavior via extension methods like \Spinner()\, \SpinnerStyle()\, and \AutoRefresh()\. The \StatusContext\ passed to the action allows updating the status text and spinner settings dynamically during execution, and the component automatically handles task management and console refreshing, falling back to a static renderer if the console does not support live updates.
src/Spectre.Console/Live/Status · high confidence
New Style record struct for ANSI color and decoration management
The Spectre.Console.Ansi package now includes a new \Style\ record struct that encapsulates foreground color, background color, and text decoration. This type provides methods to combine styles, parse style strings from markup, and convert styles back to markup format, along with extension methods for fluent style configuration.
Spectre.Console.Ansi · high confidence
New console extension methods for async spinners, markup interpolation, and input prompts
The \src/Spectre.Console/Extensions\ area now provides a comprehensive set of new extension methods on \IAnsiConsole\ to enhance interactivity and output capabilities. Users can now run background tasks with a visual spinner animation via \Spinner()\, write formatted markup strings safely using the new \MarkupInterpolated\ and \MarkupLineInterpolated\ methods, and handle user input with \Prompt\, \Ask\, and \Confirm\ methods that support culture-specific formatting and cancellation tokens. Additionally, the library introduces \WriteException\ for rendering exceptions, \Live\ for live display updates, \Progress\ and \Status\ for progress tracking, \RunExclusive\ for exclusive console access, \CreateRecorder\ for output recording, and \AlternateScreen\ for switching screen buffers.
src/Spectre.Console/Extensions · high confidence
New exception rendering system with formatting and styling options
The library now includes a new exception rendering system in the Widgets/Exceptions namespace. This introduces an ExceptionFormats enum allowing users to control output verbosity by shortening paths, types, and methods, or hiding the stack trace entirely. It also adds support for clickable file links in terminals and a customizable ExceptionStyle for coloring different parts of the exception output. The system includes an ExceptionInfoResolver to handle detailed type and parameter name resolution, including support for F\# types and tuple naming, and provides a fallback for AOT scenarios where reflection is limited.
src/Spectre.Console/Widgets/Exceptions · high confidence
New interactive prompt types and enhanced TextPrompt capabilities
This release introduces new prompt types to Spectre.Console, including ConfirmationPrompt for yes/no questions, SelectionPrompt for single-item lists, and MultiSelectionPrompt for multiple-item lists, all supporting features like search, wrapping, and cancellation. The existing TextPrompt has been significantly enhanced with support for editable default values, input clearing, custom string comparers, and validation chaining, providing more flexible and user-friendly console interactions.
src/Spectre.Console/Prompts · high confidence
New layout and rendering widgets
This release introduces several new widgets to the Spectre.Console library, including Align for precise horizontal and vertical content positioning, Calendar for displaying date grids with events, Canvas for pixel-art style rendering, Columns for multi-column layouts, Grid for flexible row/column structures, Padder for adding whitespace around content, and ControlCode for emitting raw ANSI control sequences. Additionally, the Markup widget now supports interpolated strings via FromInterpolated, and Panel headers can now accept markup text.
src/Spectre.Console/Widgets · high confidence
New progress bar columns for download size, elapsed/remaining time, and transfer speed
The \src/Spectre.Console/Live/Progress/Columns\ directory now includes new column implementations that allow users to display additional task metrics in live progress bars. \DownloadedColumn\ shows the amount of data downloaded with configurable binary/decimal prefixes and optional bit display. \TransferSpeedColumn\ displays the current transfer rate, also supporting bits and locale-aware formatting. \ElapsedTimeColumn\ and \RemainingTimeColumn\ show time durations in \hh:mm:ss\ format, handling indeterminate or long-running tasks gracefully. \PercentageColumn\ renders the completion percentage with distinct styles for active and completed states. \ProgressBarColumn\ provides the visual progress bar with customizable styles for completed, finished, remaining, and indeterminate states. \SpinnerColumn\ offers an animated spinner with configurable pending/completed text and styles. \TaskDescriptionColumn\ displays the task description with options to wrap or truncate text. These columns can be added to a \Progress\ instance to provide richer, more detailed feedback to users during long-running operations.
src/Spectre.Console/Live/Progress/Columns · high confidence
New test infrastructure for console applications
The Spectre.Console.Testing library now includes a new test framework featuring the TestConsole class, which provides a mockable console environment for unit testing. This includes TestConsoleInput for simulating user keystrokes and input queues, TestCapabilities for configuring fake terminal capabilities (such as ANSI support and color systems), and internal no-op implementations for cursor and exclusivity modes to ensure tests run without side effects. Users can now easily write deterministic tests for console-based applications by capturing output and injecting input.
src/Spectre.Console.Testing · high confidence
New testing extension methods for TestConsole and string manipulation
The Spectre.Console.Testing package now includes a set of new extension methods to simplify test setup and assertion. TestConsole can be configured fluently for color systems, ANSI/Unicode support, interactivity, and dimensions (width, height, size), and can be set to emit ANSI sequences. Additionally, new string helpers allow trimming trailing whitespace from all lines and normalizing line endings, while a Style extension provides a convenient way to set foreground or background colors. A new Shouldly-style 'And' extension is also available for chaining assertions.
src/Spectre.Console.Testing/Extensions · high confidence
Source generators for colors, emojis, and spinners
The Spectre.Console.SourceGenerator now automatically generates C\# source code for colors, emojis, and spinners from their respective JSON data files. This introduces new generated types—Color, ColorPalette, ColorTable, Emoji, and Spinner—along with a utility for deterministic, LF-normalized output. Emojis without a presentation variant are automatically suffixed with Variation Selector-16, and legacy emoji aliases are preserved for backward compatibility. Spinners are validated to ensure they have at least two distinct frames, and static or invalid spinners are ignored to prevent broken animations.
src/Spectre.Console.SourceGenerator · high confidence
Spectre.Console initial release with comprehensive terminal UI capabilities
This entry introduces the initial version of the Spectre.Console library, providing a rich set of tools for building terminal applications. Users can now render complex layouts using tables, grids, panels, and trees, with support for various box border styles (e.g., rounded, heavy, dashed). The library includes interactive features such as live displays for progress bars and status indicators, as well as prompt dialogs for user input (text, confirmation). It also supports markup-based styling for text, emoji replacement, and exception rendering. Additionally, it offers utilities for recording console output, managing cursor position, and handling alternate screen buffers, all while respecting terminal capabilities and encoding settings.
src/Spectre.Console · high confidence
Removals
Removal of Sample console application
The sample application located at src/Sample/Program.cs has been removed from the repository. This file previously demonstrated how to use the Spectre.Console library to write styled text to the console, including setting foreground colors, applying styles like bold and underline, and checking console capabilities and dimensions.
src/Sample · high confidence
Removal of internal ColorPalette class
The internal \ColorPalette\ class, which previously managed legacy, standard, and 8-bit color palettes and provided logic for finding exact or closest color matches, has been removed from the codebase.
src/Spectre.Console/Internal/Colors · high confidence
Removal of internal console color and style scope extensions
The internal \ConsoleExtensions\ class, which provided helper methods for pushing and restoring console foreground/background colors and styles via \IDisposable\ scopes, has been removed from the codebase. This change eliminates the internal implementation details for managing temporary console state changes, likely as part of a broader refactoring of how console styling and markup are handled.
src/Spectre.Console/Internal/Extensions · high confidence
Behavioural changes
Configure code signing scope for Spectre.Console assemblies
A new signing filter file has been added to restrict code signing operations specifically to assemblies matching the Spectre.Console pattern, ensuring that only the relevant library binaries are signed during the build process.
resources · high confidence
Improved compatibility for .NET Standard 2.0 and AOT scenarios
The library now includes polyfill implementations for \CancellationToken.CancelAsync\ and \Enum.GetValues\<T\>\ within the \Internal/Polyfill\ directory. These additions ensure that the library functions correctly on .NET Standard 2.0 targets and improves compatibility with Ahead-of-Time (AOT) compilation by providing fallback logic where modern .NET APIs are unavailable.
src/Spectre.Console/Internal/Polyfill · high confidence
Internal refactoring for alignment, cell width calculation, and exclusivity mode
This change introduces several internal components to support improved terminal rendering and interaction. The new Aligner class handles text and segment alignment (left, right, center) for widgets. Cell width calculations are optimized with a rune width cache in the Cell class, improving performance for Unicode character sizing. A DefaultExclusivityMode class is added to enforce single-threaded access for interactive operations (like prompts and progress bars) using a semaphore, preventing concurrent display conflicts. Additionally, the FileSize struct is enhanced to support both binary (KiB, MiB) and decimal (KB, MB) prefixes, as well as bit-based display, which affects how transfer speeds and file sizes are formatted in progress indicators. The Constants class is updated with new default terminal dimensions and an empty link placeholder.
src/Spectre.Console/Internal · high confidence
Introduce dedicated tree guide styles for ASCII and Unicode rendering
The library now includes specific implementations for tree line guides, including \AsciiTreeGuide\, \LineTreeGuide\, \BoldLineTreeGuide\, and \DoubleLineTreeGuide\. These classes define the visual characters used to draw tree structures, with the Unicode-based guides (\Line\, \BoldLine\, \DoubleLine\) explicitly falling back to the ASCII guide when unsafe, ensuring consistent rendering across different terminal environments.
src/Spectre.Console/Rendering/Tree · high confidence
Introduce global usings for standard libraries and core Spectre namespaces
A new global usings file has been added to the Spectre.Console project, automatically importing common .NET namespaces (such as System, System.Collections, System.IO, and System.Threading.Tasks) alongside core Spectre namespaces (Spectre.Console.Enrichment, Spectre.Console.Rendering) and the Wcwidth library. This reduces the need for explicit using directives in source files, simplifying code and ensuring consistent access to these types across the library.
src/Spectre.Console/Properties · high confidence
Introduce new ListPrompt implementation with search, wrap-around, and J/K navigation
The List prompt now supports searching through items as you type, wrapping selection around the list boundaries, and navigating with J/K keys in addition to arrow keys. The prompt also respects the SkipUnselectableItems setting when in Leaf selection mode, ensuring navigation skips group headers to land only on selectable items.
src/Spectre.Console/Prompts/List · high confidence
Introduce new default and fallback progress renderers
The library now includes new internal renderers for the live progress system: DefaultProgressRenderer, which handles the primary rendering of progress tasks with configurable columns, refresh rates, and options to hide completed tasks or exclude vertical padding; FallbackProgressRenderer, which provides a simplified milestone-based text output when the default renderer is not suitable; and FallbackStatusRenderer, which displays a single task's description as a status message. These changes modify how progress bars and status updates are rendered to the console.
src/Spectre.Console/Live/Progress/Renderers · high confidence
Introduces internal ANSI console backend abstraction
The library now uses an internal facade (AnsiConsoleFacade) to route console output to either an ANSI-capable backend or a legacy fallback based on the current profile's capabilities. This change introduces a new internal interface (IAnsiConsoleBackend) and ensures that rendering operations are thread-safe by locking access to the selected backend, allowing the library to automatically handle environments that do not support ANSI escape codes.
src/Spectre.Console/Internal/Backends · high confidence
Introduces internal text processing helpers for optimized string handling
The library adds two new internal classes, StringBuffer and WhiteSpaceSegmentEnumerator, to improve text processing performance. StringBuffer provides a lightweight wrapper around StringReader with position tracking and character validation, while WhiteSpaceSegmentEnumerator uses a ref struct to efficiently iterate over whitespace segments in strings without heap allocations.
src/Spectre.Console/Internal/Text · high confidence
Introduces new internal ANSI backend implementation
The library now uses a new internal ANSI backend located in src/Spectre.Console/Internal/Backends/Ansi, replacing the previous implementation. This change introduces AnsiConsoleBackend to handle output rendering and cursor management, AnsiConsoleCursor to manage cursor visibility and movement, and AnsiStringWriter to safely generate ANSI strings in a thread-safe manner. These components work together to provide a more robust and maintainable foundation for VT-100 sequence generation and console interaction.
src/Spectre.Console/Internal/Backends/Ansi · high confidence
JSON extension rewritten with custom parser and granular styling
The Spectre.Console.Json extension has been completely rewritten to use a custom, internal JSON tokenizer and parser instead of external dependencies, enabling a new abstract syntax tree (AST) structure. This change introduces granular control over the visual appearance of JSON output: users can now independently style braces, brackets, member names, colons, commas, strings, numbers, booleans, and null literals via dedicated properties and fluent extension methods on the \JsonText\ class. Additionally, the \JsonText\ class now supports configurable indentation (defaulting to three spaces) and allows swapping the underlying parser implementation via the \Parser\ property.
src/Extensions/Spectre.Console.Json · high confidence
Progress API refactored to use TimeProvider and support task positioning
The Progress subsystem has been refactored to use the modern \TimeProvider\ API for all time-related operations, replacing previous date/time handling. Additionally, the API now supports positioning progress tasks relative to one another, allowing users to insert new tasks before or after existing reference tasks in the display order.
src/Spectre.Console/Live/Progress · high confidence
Project infrastructure modernized and documentation expanded
The build system has been migrated from Cake to a C\#-based script (build.cs), and the .NET SDK requirement has been updated to version 10.0.401. Line endings are now enforced as LF across the repository via .gitattributes and .editorconfig changes. The project documentation has been significantly expanded with the addition of a CONTRIBUTING.md guide, a Code of Conduct, and README translations in Japanese, Brazilian Portuguese, Chinese, Farsi, and Turkish. Additionally, the .NET Foundation copyright has been updated to list the individual maintainers.
(repo-wide) · high confidence
Removal of internal ANSI code generation and detection classes
The internal classes responsible for generating ANSI escape codes and detecting terminal capabilities have been removed from the library. Specifically, \AnsiBuilder\, \AnsiColorBuilder\, \AnsiDetector\, and \AnsiStyleBuilder\ in \src/Spectre.Console/Internal/Ansi\ are deleted. This eliminates the internal logic that previously constructed ANSI sequences for styles and colors, and handled platform-specific ANSI support detection (including Windows console mode upgrades and terminal type regex matching).
src/Spectre.Console/Internal/Ansi · high confidence
Solution modernization and build infrastructure overhaul
The project has migrated from the legacy .sln format to the new .slnx XML solution format, reorganizing the build structure by moving configuration files into a dedicated /Build/ folder and removing the old Directory.Build.targets file. Build capabilities have been significantly upgraded: the C\# language version is raised to 14, nullable reference types are enabled, and assemblies are now strong-named with embedded symbols for improved debugging and package integrity. The codebase also adopts file-scoped namespace declarations and modern C\# language features via updated .editorconfig rules, while replacing older analyzers with Roslynator.Analyzers and updating versioning to MinVer v2.5.0.
src · high confidence
Source-generated library assets and .NET 9 lock backport
The library now uses source generators to produce the Color, Emoji, and Spinner definitions, replacing the previously hand-written static files. This migration introduces several behavioral changes: the Color struct no longer stores a name string, and new alias properties (Gray, Magenta, Cyan) are added alongside the existing ones (Grey, Fuchsia, Aqua). Additionally, a backport of the .NET 9 System.Threading.Lock class is generated for older frameworks, providing a modern locking API with improved performance characteristics on .NET 9+ while maintaining compatibility with earlier versions.
src/Spectre.Console/Generated · high confidence
Test coverage
Added public API regression tests; Added rendering and markup benchmarks; Added test data fixtures for exception rendering and Figlet fonts; Added test utilities for Figlet font validation and exception scrubbing; Added unit tests for FileSize formatting and WhiteSpaceSegmentEnumerator; Added unit tests for Live Progress and Status components; Added unit tests for Spectre.Console.Ansi components; Added unit tests for Table row management and column spanning; Added unit tests for box and table border rendering; Added unit tests for console rendering, markup, and legacy compatibility; Added unit tests for console widget rendering and behavior; Added unit tests for prompt components and behaviors; Added unit tests for rendering hooks and segment handling; Consolidate test project global usings.
Dependencies
Upgrade to .NET 10 and adopt central package management
The project now targets .NET 10.0 alongside .NET 9.0, 8.0, and netstandard2.0, replacing the legacy netcoreapp3.1 target. Build infrastructure has been modernized by introducing central package version management via Directory.Packages.props, which standardizes dependencies such as xUnit 2.9.3, Verify.Xunit 31.12.5, and SixLabors.ImageSharp 3.1.12. Additionally, the solution now includes new projects for ANSI support, JSON rendering, and source generation, while the sample project has been converted to a benchmark suite using BenchmarkDotNet.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 65 → 62 (-3.2)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 70 → 57 (-12.7)
- Architecture 98 → 98 (+0.0)
- Maturity 58 → 58 (+0.4)
- Readiness 94 → 77 (-17.0)
- Security 75 → 77 (+1.8)
- Performance 64 → 64 (+0.0)
Resolved (20)
- Bounded contexts not declared
- Change coupling: ListPromptState.cs ↔ SelectionPromptExtensions.cs (src/Spectre.Console/Prompts/List/ListPromptState.cs)
- Change coupling: MultiSelectionPrompt.cs ↔ SelectionPromptExtensions.cs (src/Spectre.Console/Prompts/MultiSelectionPrompt.cs)
- Change coupling: MultiSelectionPromptExtensions.cs ↔ SelectionPrompt.cs (src/Spectre.Console/Prompts/MultiSelectionPromptExtensions.cs)
- Change coupling: MultiSelectionPromptExtensions.cs ↔ SelectionPromptExtensions.cs (src/Spectre.Console/Prompts/MultiSelectionPromptExtensions.cs)
- Duplicated block (11 lines × 2) (src/Spectre.Console/Rendering/Borders/Tables/Ascii2TableBorder.cs)
- Duplicated block (11 lines × 2) (src/Spectre.Console/Rendering/Borders/Tables/HeavyHeadTableBorder.cs)
- Duplicated block (11 lines × 2) (src/Spectre.Console/Rendering/Borders/Tables/HorizontalTableBorder.cs)
- Duplicated block (11 lines × 2) (src/Spectre.Console/Rendering/Borders/Tables/RoundedTableBorder.cs)
- Duplicated block (11 lines × 2) (src/Spectre.Console/Rendering/Borders/Tables/SimpleHeavyTableBorder.cs)
- Duplicated block (11 lines × 3) (src/Spectre.Console/Rendering/Borders/Tables/MinimalDoubleHeadTableBorder.cs)
- Duplicated block (13 lines × 2) (src/Spectre.Console.Ansi/DecorationTable.cs)
- Duplicated block (14 lines × 2) (src/Spectre.Console/Prompts/MultiSelectionPrompt.cs)
- Duplicated block (33 lines × 2) (src/Spectre.Console.Ansi/DecorationTable.cs)
- Duplicated block (8 lines × 2) (src/Spectre.Console/Rendering/Borders/Tables/MarkdownTableBorder.cs)
- Duplicated block (9 lines × 2) (src/Spectre.Console.SourceGenerator/Emojis/EmojiModel.cs)
- Duplicated block (9 lines × 2) (src/Spectre.Console/Widgets/Rule.cs)
- Further sole-owners (lower concentration)
- Off-boarding risk: anonymized user #1
- XML-doc coverage: Spectre.Console.Testing(net10.0) (src/Spectre.Console.Testing/Spectre.Console.Testing.csproj)
New (58)
- AnalyzerSeverityNone (src/.editorconfig)
- AnalyzerSeverityNone (src/.editorconfig)
- AnalyzerSeverityNone (src/.editorconfig)
- AnalyzerSeverityNone (src/.editorconfig)
- AnalyzerSeverityNone (src/.editorconfig)
- AnalyzerSeverityNone (src/.editorconfig)
- AnalyzerSeverityNone (src/.editorconfig)
- AnalyzerSeverityNone (src/.editorconfig)
- AnalyzerSeverityNone (src/.editorconfig)
- AnalyzerSeverityNone (src/.editorconfig)
- AnalyzerSeverityNone (src/.editorconfig)
- AnalyzerSeverityNone (src/.editorconfig)
- AnalyzerSeverityNone (src/.editorconfig)
- AnalyzerSeverityNone (src/.editorconfig)
- AnalyzerSeverityNone (src/.editorconfig)
- AnalyzerSeverityNone (src/.editorconfig)
- AnalyzerSeverityNone (src/.editorconfig)
- AnalyzerSeverityNone (src/.editorconfig)
- AnalyzerSeverityNone (src/.editorconfig)
- AnalyzerSeverityNone (src/.editorconfig)
- …and 38 more
Changes since last survey
- 12 commits — 12 feature/other, 0 fixes
By area
- src/Directory.Packages.props — 8 commits
- (root) — 3 commits
- src/Spectre.Console — 1 commit
Notable commits
- change: Remove generic type from ListPromptRenderHook
- change: chore: Update dependency Microsoft.NET.Test.Sdk to 18.10.0
- change: chore: Update dependency Microsoft.NET.Test.Sdk to 18.9.0
- change: chore: Update dependency MinVer to v8
- change: chore: Update dependency Polyfill to 11.2.0
- change: chore: Update dependency Polyfill to 11.3.0
- change: chore: Update dependency Roslynator.Analyzers to v5
- change: chore: Update dependency dotnet-sdk to v10.0.401
- change: chore: Update dependency verify.tool to v0.9.1
- change: chore: Update dependency xunit.runner.visualstudio to v4
- change: chore: Update dotnet monorepo
- change: chore: Update dotnet monorepo
Architecture
- Unchanged — 0 containers · 2 contexts · 1 edges
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
spectreconsole/spectre.console was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 23 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit e2cf675ff8ac30db04e8e22a25de4ff27bf79702 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-955b9cee9818.