## 1. Project Overview & Quickstart (spectreconsole/README.fa)

# README.fa

Open-source repository spectreconsole/README.fa

### Repository Details
- **Repository:** [spectreconsole/README.fa](https://github.com/spectreconsole/README.fa)
- **Primary Language:** Code

*Note: High-volume repository documentation is actively indexed and synchronized by YakaAI.*

## 2. Official Technical Reference & Guides (spectreconsole/website)

## File: README.md

# Spectre.Docs - Documentation Site Guide

This is the documentation website for **Spectre.Console** (rich console UI library) and **Spectre.CLI** (command-line application framework). This guide will help you contribute documentation, add samples, and work with the site effectively.

## Technology Stack

- **.NET 11.0** - Blazor Server application
- **Pennington** - Markdown-based content engine for .NET
- **MonorailCss** - Utility-first CSS framework
- **Pennington.TreeSitter** - Tree-sitter code-fragment extraction for live code samples

## Getting Started

### Prerequisites

- [.NET 10.0 SDK](https://dotnet.microsoft.com/download/dotnet/10.0)
- For creating animated samples (optional):
    - [VCR#](https://github.com/phil-scott-78/vcr)
    - [ffmpeg](https://ffmpeg.org/download.html) - Media conversion tool
    - [ttyd](https://github.com/tsl0922/ttyd) - Terminal sharing over the web

### Running the Site Locally

Navigate to the `Spectre.Docs` directory and run:

```bash
dotnet watch
```

The application will be available at `https://localhost:5203` (or check console output for the exact port).

The project is configured with **hot reload** - changes to markdown files in `Content/**/*` will automatically refresh the site during development.

### Deploying

```bash
dotnet run -- build <outputfolder>
```

## Content Organization

The site uses a multi-service content architecture with three main sections:

```
Content/
├── console/          # Spectre.Console documentation
│   ├── how-to/
│   ├── tutorials/
│   ├── widgets/
│   ├── live/
│   ├── prompts/
│   ├── reference/
│   └── explanation/
├── cli/              # Spectre.CLI documentation
│   ├── how-to/
│   ├── tutorials/
│   ├── reference/
│   └── explanation/
├── blog/             # Blog posts and release notes
└── assets/           # Images, SVG animations, etc.
```

Each section has its own content service and front matter model, configured in `Program.cs`.

## Adding Documentation

### Console or CLI Documentation

Create a `.md` file in the appropriate subdirectory (e.g., `Content/console/how-to/my-guide.md`):

```markdown
---
title: "Your Page Title"
date: 2025-01-15
tags: ["tag1", "tag2"]
section: "Console"
uid: "console-unique-id"
order: 100
---

# Your Content Here

Start writing your documentation using standard markdown...
```

**Front Matter Fields:**

- `title` (required) - Page title shown in navigation and browser
- `description` (required) - Used for SEO and metadata
- `order` (required) - Sidebar navigation order (lower = higher in list)
- `uid` - Unique identifier for cross-referencing

The file path determines the URL:
- `Content/console/how-to/example.md` → `/console/how-to/example`

### Blog Posts

Create a `.md` file in `Content/blog/`:

```markdown
---
title: "Spectre.Console 0.51.0: Amazing New Features"
author: "Your Name"
date: 2025-01-15
tags: ["release", "features"]
series: "Release Notes"
isDraft: false
---

Your blog content here...
```

**Additional Blog Fields:**

- `author` - Author name
- `series` - Groups related posts together (optional)

Blog posts are automatically sorted by date (newest first) and appear at `/blog/your-file-name`.

## Linking to Code with `:symbol` fences

The site uses **Pennington.TreeSitter** to embed live code from your source files directly into documentation. This ensures code samples are always up-to-date with the actual implementation.

### Syntax

Use the special code fence `` ```csharp:symbol ``. The body is a source file path (relative to the repo root) optionally followed by `> Type.Member`:

````markdown
```csharp:symbol
Spectre.Docs.Examples/Showcase/ProgressSample.cs > ProgressSample.Run
Spectre.Docs.Examples/Showcase/ProgressSample.cs > ProgressSample.CreateTasks
```
````

### Reference format

Address code by **file path + name path** — a name path survives the line shifts that break hard-coded ranges:

| Target | Body shape | Example |
|--------|------------|---------|
| Whole file | `` | `Spectre.Docs.Examples/Showcase/ProgressSample.cs` |
| A type | ` > Type` | `... > ProgressSample` |
| A member | ` > Type.Member` | `... > ProgressSample.Run` |
| Nested member | ` > Outer.Inner.Member` | `... > DrawCommand.Settings` |

Modifiers (comma-separated, order-independent) follow the suffix:

| Modifier | Effect |
|----------|--------|
| `,bodyonly` | Render only the member body, stripping the declaration and braces |
| `,imports` | Prepend the file's top-of-file `using` statements |
| `,signatures` | Replace member bodies with `{ … }` for an outline view |
| `symbol-diff` | Emit a unified diff between two members (exactly two references) |

**Example from progress.md:**

````markdown
```csharp:symbol,bodyonly
Spectre.Docs.Examples/Showcase/ProgressSample.cs > ProgressSample.Run
```
````

This extracts the body of the `Run` method from `ProgressSample.cs` and renders it with syntax highlighting.

### How It Works

Tree-sitter is wired in `Program.cs`, reading source files directly — no MSBuild workspace, no compilation:

```csharp
builder.Services.AddTreeSitter(treeSitter =>
{
    treeSitter.ContentRoot = ".."; // repo root, so fence paths resolve against the sibling example projects
});
```

When Pennington encounters a `csharp:symbol` fence:
1. Resolves the file path relative to `ContentRoot`
2. Uses tree-sitter to locate the named member within the file
3. Extracts the source text (applying any modifiers)
4. Renders as syntax-highlighted HTML

This approach provides:
- **Always up-to-date code** - Changes in source automatically reflect in docs
- **Rename-safe references** - A name path tolerates line shifts; broken references surface in the build report
- **No duplication** - Single source of truth for code


## Creating SVG Animated Samples

Animated samples show your library features in action using VCR tape recordings. The project supports two types of samples: **Console samples** (widget demonstrations) and **CLI samples** (command-line application tutorials).

### Prerequisites

Install VCR from [GitHub](https://github.com/phil-scott-78/vcr).

### Console Samples

Console samples demonstrate Spectre.Console widgets and features. They run with no command-line arguments and assume the project has been built.

#### Step 1: Write a Sample Class

Create a new sample in `Spectre.Docs.Examples/Showcase/`:

```csharp
public class MyFeatureSample : BaseSample
{
    public override void Run(IAnsiConsole console)
    {
        console.Write(
            new Panel("[bold yellow]Hello, Spectre![/]")
                .BorderColor(Color.Blue));

        Thread.Sleep(2000);
    }
}
```

The class name determines the sample name (`MyFeatureSample` → `my-feature`).

#### Step 2: Create a VCR Tape

Create a `.tape` file in `Spectre.Docs.Examples/VCR/`:

```
Output "Spectre.Docs/Content/assets/my-feature.svg"

Set DisableCursor true
Set FontSize 22
Set Theme "one dark"
Set TransparentBackground "true"
Set Cols 82
Set Rows 12
Set EndBuffer 5s

Exec "dotnet run --project .\Spectre.Docs.Examples\ --no-build showcase my-feature"
```

**Key points:**
- Use `--no-build` because the build script compiles the project first
- The sample name in `showcase <name>` matches the kebab-case class name (minus "Sample")

### CLI Samples

CLI samples demonstrate Spectre.CLI command-line application patterns. They use an environment variable to select which demo to run from the compiled `example.exe`.

#### Step 1: Create a Demo App

Create a demo in `Spectre.Docs.Cli.Examples/DemoApps/[Tutorial]/[SubFolder]/`:

```csharp
namespace Spectre.Docs.Cli.Examples.DemoApps.MyTutorial.Complete;

public class Demo
{
    public static async Task RunAsync(string[] args)
    {
        var app = new CommandApp<MyCommand>();
        return await app.RunAsync(args);
    }
}
```

#### Step 2: Create a VCR Tape

Create a `.tape` file in `Spectre.Docs.Cli.Examples/VCR/`:

```
Output "Spectre.Docs/Content/assets/cli-my-tutorial.svg"

Set Shell "pwsh"
Set FontSize 22
Set Theme "one dark"
Set TransparentBackground "true"
Set Cols 70
Set Rows 12
Set EndBuffer 5s
Set WorkingDirectory "Spectre.Docs.Cli.Examples/bin/Debug/net10.0"
Env SPECTRE_APP "M:Spectre.Docs.Cli.Examples.DemoApps.MyTutorial.Complete.Demo.RunAsync(System.String[])"

Type "./example --help"
Sleep 400ms
Enter
Sleep 2s

Type "./example Alice"
Sleep 400ms
Enter
Sleep 1s
```

**Key points:**
- `SPECTRE_APP` is set to the XmlDocId of the demo's `RunAsync` method
- Use `Type` and `Enter` commands to simulate interactive terminal input
- The working directory points to the compiled binary location

### Generate SVG Files

Run the build script from the repository root:

```powershell
.\Generate-WidgetScreenshots.ps1
```

This script:
1. Builds both `Spectre.Docs.Examples` and `Spectre.Docs.Cli.Examples`
2. Finds all `.tape` files in both VCR directories
3. Executes each tape with VCR to generate SVG files
4. Outputs SVG files to `Spectre.Docs/Content/assets/`

### Reference in Documentation

Use the <Screenshot> razor component

```html
<Screenshot Src="/assets/my-image.svg" Alt="Alt Text" />
```

---

## File: Spectre.Docs/Content/blog/2021-07-11-hello-world.md

---
title: Hello, World
date: 2021-07-11
---

To help track new releases, updates and planning for Spectre.Console, we've added a new blog to the documentation.

Stay tuned for upcoming information related to the 0.41 release!

---

## File: Spectre.Docs/Content/blog/2021-07-19-spectre-console-0.41-released.md

---
title: Spectre.Console 0.41 released!
date: 2021-07-19
---

In this release, we (mostly [Phil](https://twitter.com/philco78)) have been focusing on getting the new fancy Roslyn Analyzers out the door.
If you want to try them out, add a reference to [Spectre.Console.Analyzer](https://www.nuget.org/packages/spectre.console.analyzer) in your project, and you should get some best practice tips in your favorite IDE!

It's summer in the northern hemisphere, so it will probably be a couple of weeks until the next release.

## Features

* [#417 - Support cancellation in prompts](https://github.com/spectreconsole/spectre.console/issues/417)
* [#324 - Remove AsciiTreeGuide as default tree guide](https://github.com/spectreconsole/spectre.console/issues/324)
* [#413 - Support custom characters at the end of a TextPrompt](https://github.com/spectreconsole/spectre.console/issues/413)
* [#447 - Alternative to the obsolete 'Select' function for selecting default items in SelectionPrompt](https://github.com/spectreconsole/spectre.console/issues/447)
* [#460 - Default values for Ask()](https://github.com/spectreconsole/spectre.console/issues/460)

## Bugs

* [#480 - IAnsiConsole.Confirm extension is missing default value parameter](https://github.com/spectreconsole/spectre.console/issues/480)
* [#442 - Allow dynamic Figlet hardblank](https://github.com/spectreconsole/spectre.console/pull/442)

---

## File: Spectre.Docs/Content/blog/2021-12-16-spectre-console-0.43-released.md

---
title: Spectre.Console 0.43 released!
date: 2021-12-16
---

We forgot (😅) to publish the release notes for `0.42`, so we've included them as well.
Noteworthy in this release is that `Spectre.Console` now ships with [.NET 6](https://dotnet.microsoft.com/en-us/download/dotnet/6.0) support.

## New Contributors
* [@mgnslndh](https://github.com/mgnslndh) made their first contribution in [#584](https://github.com/spectreconsole/spectre.console/pull/584)
* [@LiamSho](https://github.com/LiamSho) made their first contribution in [#509](https://github.com/spectreconsole/spectre.console/pull/509)
* [@kzu](https://github.com/kzu) made their first contribution in [#514](https://github.com/spectreconsole/spectre.console/pull/514)
* [@GitHubPang](https://github.com/GitHubPang) made their first contribution in [#535](https://github.com/spectreconsole/spectre.console/pull/535)
* [@RedEyedDog](https://github.com/RedEyedDog) made their first contribution in [#546](https://github.com/spectreconsole/spectre.console/pull/546)
* [@rifatx](https://github.com/rifatx) made their first contribution in [#545](https://github.com/spectreconsole/spectre.console/pull/545)

## What's Changed

* Update sponsors.md by [@mgnslndh](https://github.com/mgnslndh) in [#584](https://github.com/spectreconsole/spectre.console/pull/584)
* Upgrades Statiq and re-enables docs publishing by [@phil-scott-78](https://github.com/phil-scott-78) in [#591](https://github.com/spectreconsole/spectre.console/pull/591)
* Internalizes the `WcWidth` package by [@patriksvensson](https://github.com/patriksvensson) in [#593](https://github.com/spectreconsole/spectre.console/pull/593)
* Small typos in the `Getting Started` page by [@antoniovalentini](https://github.com/antoniovalentini) in [#597](https://github.com/spectreconsole/spectre.console/pull/597)
* Add net6.0 TFM by [@patriksvensson](https://github.com/patriksvensson) in [#603](https://github.com/spectreconsole/spectre.console/pull/603)
* Fix a typo in code comment by [@GitHubPang](https://github.com/GitHubPang) in [#579](https://github.com/spectreconsole/spectre.console/pull/579)
* Added `GetParent` and `GetParents` to `MultiSelectionPrompt` by [@nils-a](https://github.com/nils-a) in [#590](https://github.com/spectreconsole/spectre.console/pull/590)
* Added ExceptionHandler to `ICommandAppSettings` by [@nils-a](https://github.com/nils-a) in [#607](https://github.com/spectreconsole/spectre.console/pull/607)
* Fixed documentation for selection and multiselection (#499) by [@nils-a](https://github.com/nils-a) in [#589](https://github.com/spectreconsole/spectre.console/pull/589)
* Escape any Markup when displaying selected prompt items by [@nils-a](https://github.com/nils-a) in [#610](https://github.com/spectreconsole/spectre.console/pull/610)
* Upgrade .NET SDK to 6.0.100 by [@patriksvensson](https://github.com/patriksvensson) in [#616](https://github.com/spectreconsole/spectre.console/pull/616)
* Allow color numbers in markup expressions by [@patriksvensson](https://github.com/patriksvensson) in [#615](https://github.com/spectreconsole/spectre.console/pull/615)
* Remove `Render` from docs in favor of `Write` by [@patriksvensson](https://github.com/patriksvensson) in [#613](https://github.com/spectreconsole/spectre.console/pull/613)
* Clarify `ITypeResolver` returns `null` by [@nils-a](https://github.com/nils-a) in [#620](https://github.com/spectreconsole/spectre.console/pull/620)
* Fix typo in `PairDeconstructor` class name by [@0xced](https://github.com/0xced) in [#619](https://github.com/spectreconsole/spectre.console/pull/619)
* Fix type conversion in the default pair deconstructor implementation by [@0xced](https://github.com/0xced) in [#618](https://github.com/spectreconsole/spectre.console/pull/618)
* Update examples to net6.0 by [@patriksvensson](https://github.com/patriksvensson) in [#625](https://github.com/spectreconsole/spectre.console/pull/625)
* Fix exception formatting for generic methods by [@0xced](https://github.com/0xced) in [#639](https://github.com/spectreconsole/spectre.console/pull/639)
* Use browser context for social cards by [@phil-scott-78](https://github.com/phil-scott-78) in [#490](https://github.com/spectreconsole/spectre.console/pull/490)
* Adds additional check that analyzer is within a method by [@phil-scott-78](https://github.com/phil-scott-78) in [#488](https://github.com/spectreconsole/spectre.console/pull/488)
* Add support for manipulating individual table rows by [@patriksvensson](https://github.com/patriksvensson) in [#503](https://github.com/spectreconsole/spectre.console/pull/503)
* Do not share semaphore between consoles by [@patriksvensson](https://github.com/patriksvensson) in [#507](https://github.com/spectreconsole/spectre.console/pull/507)
* Fix `ArgumentOutOfRangeExceptio` when rendering a table by [@LiamSho](https://github.com/LiamSho) in [#507](https://github.com/spectreconsole/spectre.console/pull/509)
* Make building more flexible by allowing feature bands by [@kzu](https://github.com/kzu) in [#514](https://github.com/spectreconsole/spectre.console/pull/514)
* Fix parsing of exceptions on .NET Framework by [@0xced](https://github.com/0xced) in [#513](https://github.com/spectreconsole/spectre.console/pull/513)
* Fix the style parameter nullable annotation on `AnsiConsoleExtensions` by [@0xced](https://github.com/0xced) in [#527](https://github.com/spectreconsole/spectre.console/pull/527)
* Fix 404 in documentation by [@nils-a](https://github.com/nils-a) in [#530](https://github.com/spectreconsole/spectre.console/pull/530)
* Fix typos in code comments by [@GitHubPang](https://github.com/GitHubPang) in [#535](https://github.com/spectreconsole/spectre.console/pull/535)
* Remove additional registration of `ICommand` by [@nils-a](https://github.com/nils-a) in [#533](https://github.com/spectreconsole/spectre.console/pull/533)
* Add extension methods to get cell width of `char` and `string` by [@patriksvensson](https://github.com/patriksvensson) in [#523](https://github.com/spectreconsole/spectre.console/pull/523)
* Disable GH Action workflow for docs by [@patriksvensson](https://github.com/patriksvensson) in [#547](https://github.com/spectreconsole/spectre.console/pull/547)
* Fix typos in docs by [@GitHubPang](https://github.com/GitHubPang) in [#542](https://github.com/spectreconsole/spectre.console/pull/542)
* Add a segment builder for merging multiple segments by [@phil-scott-78](https://github.com/phil-scott-78) in [#552](https://github.com/spectreconsole/spectre.console/pull/552)
* Allow user to update table cell by [@RedEyedDog](https://github.com/RedEyedDog) in [#546](https://github.com/spectreconsole/spectre.console/pull/546)
* Fix a minor typo for `Spectre1021` by [@GitHubPang](https://github.com/GitHubPang) in [#557](https://github.com/spectreconsole/spectre.console/pull/557)
* Future-proof conditional compilation by [@0xced](https://github.com/0xced) in [#563](https://github.com/spectreconsole/spectre.console/pull/563)
* Add support custom max value for barcharts by [@rifatx](https://github.com/rifatx) in [#545](https://github.com/spectreconsole/spectre.console/pull/545)
* Improve the error message when acquiring the interactive semaphore fails by [@0xced](https://github.com/0xced) in [#569](https://github.com/spectreconsole/spectre.console/pull/569)
* Add `AnsiConsole.Write` method by [@patriksvensson](https://github.com/patriksvensson) in [#577](https://github.com/spectreconsole/spectre.console/pull/577)

---

## File: Spectre.Docs/Content/blog/2022-03-27-spectre-console-0.44-released.md

---
title: Spectre.Console 0.44 released!
date: 2022-03-27
---

Version 0.44 of Spectre.Console has been released!

There are a lot of fixes and improvements in this release, but the most noteworthy 
additions are better exception rendering, support for alternate screen buffers, 
and a new widget called [TextPath](xref:console-widget-text-path), which makes 
it easy to render paths in the console.

Check out the two new examples in our GitHub repository:

* [./examples/Console/AlternateScreen](https://github.com/spectreconsole/spectre.console/blob/main/examples/Console/AlternateScreen/Program.cs)
* [./examples/Console/Paths](https://github.com/spectreconsole/spectre.console/blob/main/examples/Console/Paths/Program.cs)

## New Contributors

* [@twaalewijn](https://github.com/twaalewijn) made their first contribution in [#642](https://github.com/spectreconsole/spectre.console/pull/642)
* [@zmrfzn](https://github.com/zmrfzn) made their first contribution in [#652](https://github.com/spectreconsole/spectre.console/pull/652)
* [@jouniheikniemi](https://github.com/jouniheikniemi) made their first contribution in [#689](https://github.com/spectreconsole/spectre.console/pull/689)
* [@Sir-Baconn](https://github.com/Sir-Baconn) made their first contribution in [#682](https://github.com/spectreconsole/spectre.console/pull/682)
* [@seclerp](https://github.com/seclerp) made their first contribution in [#665](https://github.com/spectreconsole/spectre.console/pull/665)
* [@Arcodiant](https://github.com/Arcodiant) made their first contribution in [#748](https://github.com/spectreconsole/spectre.console/pull/748)
* [@ap0llo](https://github.com/ap0llo) made their first contribution in [#681](https://github.com/spectreconsole/spectre.console/pull/681)

## What's Changed

* Added the ability to hide CommandOptions. by [@twaalewijn](https://github.com/twaalewijn) in [#642](https://github.com/spectreconsole/spectre.console/pull/642)
* Add support for alternate screen buffers by [@patriksvensson](https://github.com/patriksvensson) in [#647](https://github.com/spectreconsole/spectre.console/pull/647)
* Updates asciinema update by [@phil-scott-78](https://github.com/phil-scott-78) in [#648](https://github.com/spectreconsole/spectre.console/pull/648)
* Update Roslynator.Analyzers to version 3.3 by [@phil-scott-78](https://github.com/phil-scott-78) in [#650](https://github.com/spectreconsole/spectre.console/pull/650)
* Ordered CommandArguments by position by [@nils-a](https://github.com/nils-a) in [#646](https://github.com/spectreconsole/spectre.console/pull/646)
* Table title's first letter is getting capitalized by default by [@zmrfzn](https://github.com/zmrfzn) in [#652](https://github.com/spectreconsole/spectre.console/pull/652)
* Simplify stack frame parsing by [@0xced](https://github.com/0xced) in [#637](https://github.com/spectreconsole/spectre.console/pull/637)
* Trying to rework dotnet tools for docs and playwright by [@phil-scott-78](https://github.com/phil-scott-78) in [#667](https://github.com/spectreconsole/spectre.console/pull/667)
* Add release notes for 0.43.0 by [@patriksvensson](https://github.com/patriksvensson) in [#663](https://github.com/spectreconsole/spectre.console/pull/663)
* Use file scoped namespace declarations by [@patriksvensson](https://github.com/patriksvensson) in [#666](https://github.com/spectreconsole/spectre.console/pull/666)
* Add global usings by [@patriksvensson](https://github.com/patriksvensson) in [#668](https://github.com/spectreconsole/spectre.console/pull/668)
* Changed TypeResolver in Cli/logging by [@nils-a](https://github.com/nils-a) in [#675](https://github.com/spectreconsole/spectre.console/pull/675)
* Invalid WithExample call on the CommandApp doc page by [@jouniheikniemi](https://github.com/jouniheikniemi) in [#689](https://github.com/spectreconsole/spectre.console/pull/689)
* Add overload with params array for AddChoiceGroup() by [@Sir-Baconn](https://github.com/Sir-Baconn) in [#682](https://github.com/spectreconsole/spectre.console/pull/682)
* Simplify exception formatting by [@0xced](https://github.com/0xced) in [#695](https://github.com/spectreconsole/spectre.console/pull/695)
* Improves exception rendering for async methods in .NET 6 by [@phil-scott-78](https://github.com/phil-scott-78) in [#718](https://github.com/spectreconsole/spectre.console/pull/718)
* Adding better type names for return types and parameters by [@phil-scott-78](https://github.com/phil-scott-78) in [#719](https://github.com/spectreconsole/spectre.console/pull/719)
* Docs redesign by [@phil-scott-78](https://github.com/phil-scott-78) in [#728](https://github.com/spectreconsole/spectre.console/pull/728)
* Configures deployment to netlify by [@phil-scott-78](https://github.com/phil-scott-78) in [#729](https://github.com/spectreconsole/spectre.console/pull/729)
* Tweaking font-size and line-height for smaller screens by [@phil-scott-78](https://github.com/phil-scott-78) in [#730](https://github.com/spectreconsole/spectre.console/pull/730)
* Adding a best practices guide. by [@phil-scott-78](https://github.com/phil-scott-78) in [#744](https://github.com/spectreconsole/spectre.console/pull/744)
* Adds widget for displaying (pretty) paths by [@patriksvensson](https://github.com/patriksvensson) in [#734](https://github.com/spectreconsole/spectre.console/pull/734)
* Add missing inheritance and nullable types in settings.md by [@seclerp](https://github.com/seclerp) in [#665](https://github.com/spectreconsole/spectre.console/pull/665)
* Optimizing build by [@phil-scott-78](https://github.com/phil-scott-78) in [#747](https://github.com/spectreconsole/spectre.console/pull/747)
* Update SixLabors.ImageSharp reference by [@Arcodiant](https://github.com/Arcodiant) in [#748](https://github.com/spectreconsole/spectre.console/pull/748)
* Add support for styling and aligning paths by [@patriksvensson](https://github.com/patriksvensson) in [#746](https://github.com/spectreconsole/spectre.console/pull/746)
* Add documentation for `TextPath` widget by [@patriksvensson](https://github.com/patriksvensson) in [#757](https://github.com/spectreconsole/spectre.console/pull/757)
* Fix path and description for TextPath docs by [@patriksvensson](https://github.com/patriksvensson) in [#758](https://github.com/spectreconsole/spectre.console/pull/758)
* Adding a short template file for new documentation by [@phil-scott-78](https://github.com/phil-scott-78) in [#763](https://github.com/spectreconsole/spectre.console/pull/763)
* Introduce MarkupInterpolated and MarkupLineInterpolated extensions by [@phil-scott-78](https://github.com/phil-scott-78) in [#761](https://github.com/spectreconsole/spectre.console/pull/761)
* Obsolete the AnsiConsoleFactory class by [@0xced](https://github.com/0xced) in [#585](https://github.com/spectreconsole/spectre.console/pull/585)
* Add option to configure the style of the choices list and the default value in TextPrompt by [@ap0llo](https://github.com/ap0llo) in [#681](https://github.com/spectreconsole/spectre.console/pull/681)

---

## File: Spectre.Docs/Content/blog/2022-09-10-spectre-console-0.45-released.md

---
title: Spectre.Console 0.45 released!
date: 2022-09-10
---

Version 0.45 of Spectre.Console has been released!

There are some big changes with this release, which you can 
read all about below.

## Spectre.Console.Cli Moved

All CLI parsing-related functionality has been moved to its own NuGet 
package: [Spectre.Console.Cli](https://www.nuget.org/packages/spectre.console.cli).

The reasoning for this is that we want to play better with other CLI parsing libraries 
without the confusion of having two libraries for CLI handling intermixed.

We're sorry for breaking things like this, but we're sure it's the best
decision moving forward.

## .NET5 Support Dropped

This version has dropped `.NET5` support, which has reached EOL.  

## New Contributors

* [@drewnoakes](https://github.com/drewnoakes) made their first contribution in [#781](https://github.com/spectreconsole/spectre.console/pull/781)
* [@renovate](https://github.com/renovate) made their first contribution in [#785](https://github.com/spectreconsole/spectre.console/pull/785)
* [@leo](https://github.com/leo)-costa made their first contribution in [#782](https://github.com/spectreconsole/spectre.console/pull/782)
* [@wanglong126](https://github.com/wanglong126) made their first contribution in [#819](https://github.com/spectreconsole/spectre.console/pull/819)
* [@ivml](https://github.com/ivml) made their first contribution in [#834](https://github.com/spectreconsole/spectre.console/pull/834)
* [@dependabot](https://github.com/dependabot) made their first contribution in [#849](https://github.com/spectreconsole/spectre.console/pull/849)
* [@danielchalmers](https://github.com/danielchalmers) made their first contribution in [#850](https://github.com/spectreconsole/spectre.console/pull/850)
* [@nkochnev](https://github.com/nkochnev) made their first contribution in [#920](https://github.com/spectreconsole/spectre.console/pull/920)
* [@lonix1](https://github.com/lonix1) made their first contribution in [#938](https://github.com/spectreconsole/spectre.console/pull/938)

## What's Changed

* Move `Spectre.Console.Cli` to its own package by [@patriksvensson](https://github.com/patriksvensson) in [#827](https://github.com/spectreconsole/spectre.console/pull/827)
* Remove the 'net50' TFM by [@patriksvensson](https://github.com/patriksvensson) in [#877](https://github.com/spectreconsole/spectre.console/pull/877)
* Corrected section heading in `Status` by [@drewnoakes](https://github.com/drewnoakes) in [#781](https://github.com/spectreconsole/spectre.console/pull/781)
* Upgrade dotnet example tool to `1.6.0` by [@leo](https://github.com/leo)-costa in [#782](https://github.com/spectreconsole/spectre.console/pull/782)
* Fix documentation workflow by [@patriksvensson](https://github.com/patriksvensson) in [#799](https://github.com/spectreconsole/spectre.console/pull/799)
* Fix missing API reference pages for `Spectre.Console.Cli` by [@ivml](https://github.com/ivml) in [#834](https://github.com/spectreconsole/spectre.console/pull/834)
* Fix the "Escaping Interpolated Strings" documentation by [@0xced](https://github.com/0xced) in [#837](https://github.com/spectreconsole/spectre.console/pull/837)
* Check for null in `TextPrompt` by [@danielchalmers](https://github.com/danielchalmers) in [#850](https://github.com/spectreconsole/spectre.console/pull/850)
* Fix `ArgumentNullException` on .NET Framework by [@nils](https://github.com/nils)-a in [#923](https://github.com/spectreconsole/spectre.console/pull/923)
* Add command description to command help message by [@nkochnev](https://github.com/nkochnev) in [#920](https://github.com/spectreconsole/spectre.console/pull/920)
* Fix missing call to `Validate` when using `CommandConstructorBinde` by [@nils](https://github.com/nils)-a in [#924](https://github.com/spectreconsole/spectre.console/pull/924)
* Modified `MarkupTokenizer`, so that escaped markup inside markup is valid by [@nils](https://github.com/nils)-a in [#911](https://github.com/spectreconsole/spectre.console/pull/911)
* Detect non-interactive console via `Console.IsInputRedirected` instead of `Environment.UserInteractive` by [@bastianeicher](https://github.com/bastianeicher) in [#824](https://github.com/spectreconsole/spectre.console/pull/824)
* Set the `DevelopmentDependency` flag on the `Spectre.Console.Analyzer` project by [@0xced](https://github.com/0xced) in [#950](https://github.com/spectreconsole/spectre.console/pull/950)

---

## File: Spectre.Docs/Content/blog/2023-01-10-spectre-console-0.46-released.md

---
title: Spectre.Console 0.46 released!
date: 2023-01-10
---

Happy new year! 🎉  
Version 0.46 of Spectre.Console has been released!

A lot has happened since the last release, but the most notable additions 
and changes are support for [.NET 7](https://devblogs.microsoft.com/dotnet/announcing-dotnet-7/), 
the new [Layout](https://spectreconsole.net/widgets/layout) widget, and 
[rendering of JSON](https://spectreconsole.net/widgets/json). There has also been a lot of long overdue work
on the command line argument parser.

## New Contributors
* [@GaryMcD](https://github.com/GaryMcD) made their first contribution in [#961](https://github.com/spectreconsole/spectre.console/pull/961)
* [@eduherminio](https://github.com/eduherminio) made their first contribution in [#964](https://github.com/spectreconsole/spectre.console/pull/964)
* [@Saalvage](https://github.com/Saalvage) made their first contribution in [#976](https://github.com/spectreconsole/spectre.console/pull/976)
* [@BenjaminMichaelis](https://github.com/BenjaminMichaelis) made their first contribution in [#1000](https://github.com/spectreconsole/spectre.console/pull/1000)
* [@nilaoda](https://github.com/nilaoda) made their first contribution in [#1012](https://github.com/spectreconsole/spectre.console/pull/1012)
* [@picture](https://github.com/picture)-vision made their first contribution in [#1013](https://github.com/spectreconsole/spectre.console/pull/1013)
* [@patrickfreilinger](https://github.com/patrickfreilinger) made their first contribution in [#1016](https://github.com/spectreconsole/spectre.console/pull/1016)
* [@sowa](https://github.com/sowa)705 made their first contribution in [#1014](https://github.com/spectreconsole/spectre.console/pull/1014)
* [@ardalis](https://github.com/ardalis) made their first contribution in [#1021](https://github.com/spectreconsole/spectre.console/pull/1021)
* [@Elisha](https://github.com/Elisha)-Aguilera made their first contribution in [#1038](https://github.com/spectreconsole/spectre.console/pull/1038)
* [@wguner](https://github.com/wguner) made their first contribution in [#1044](https://github.com/spectreconsole/spectre.console/pull/1044)
* [@bcwood](https://github.com/bcwood) made their first contribution in [#1068](https://github.com/spectreconsole/spectre.console/pull/1068)
* [@FrankRay](https://github.com/FrankRay)78 made their first contribution in [#1073](https://github.com/spectreconsole/spectre.console/pull/1073)
* [@tomkerkhove](https://github.com/tomkerkhove) made their first contribution in [#1089](https://github.com/spectreconsole/spectre.console/pull/1089)
* [@ArveSystad](https://github.com/ArveSystad) made their first contribution in [#1090](https://github.com/spectreconsole/spectre.console/pull/1090)
* [@maije](https://github.com/maije) made their first contribution in [#1096](https://github.com/spectreconsole/spectre.console/pull/1096)
* [@krisrok](https://github.com/krisrok) made their first contribution in [#953](https://github.com/spectreconsole/spectre.console/pull/953)

## What's changed?
* Add support for .NET 7.0 by [@patriksvensson](https://github.com/patriksvensson) in [#1056](https://github.com/spectreconsole/spectre.console/pull/1056)
* Add `Layout` widget by [@patriksvensson](https://github.com/patriksvensson) in [#1041](https://github.com/spectreconsole/spectre.console/pull/1041)
* Add JSON text renderer by [@patriksvensson](https://github.com/patriksvensson) in [#1086](https://github.com/spectreconsole/spectre.console/pull/1086)
* Backward direction of text prompt autocomplete by [@nkochnev](https://github.com/nkochnev) in [#921](https://github.com/spectreconsole/spectre.console/pull/921)
* Custom mask for secret by [@GaryMcD](https://github.com/GaryMcD) in [#970](https://github.com/spectreconsole/spectre.console/pull/970)
* Allow selections to wrap around by [@Saalvage](https://github.com/Saalvage) in [#976](https://github.com/spectreconsole/spectre.console/pull/976)
* Join .NET Foundation by [@patriksvensson](https://github.com/patriksvensson) in [#978](https://github.com/spectreconsole/spectre.console/pull/978)
* Adding value: a single semi-colon! by [@johanlindfors](https://github.com/johanlindfors) in [#986](https://github.com/spectreconsole/spectre.console/pull/986)
* Fix `@` being used in Figlet font by [@Saalvage](https://github.com/Saalvage) in [#972](https://github.com/spectreconsole/spectre.console/pull/972)
* Add new and transferred issues to backlog project by [@patriksvensson](https://github.com/patriksvensson) in [#995](https://github.com/spectreconsole/spectre.console/pull/995)
* Pin SDK due to a bug in .NET 6.0.401 by [@patriksvensson](https://github.com/patriksvensson) in [#1011](https://github.com/spectreconsole/spectre.console/pull/1011)
* Remove period trimming by [@BenjaminMichaelis](https://github.com/BenjaminMichaelis) in [#1008](https://github.com/spectreconsole/spectre.console/pull/1008)
* Allow `PACKET` key on MultiSelectionPrompt by [@nilaoda](https://github.com/nilaoda) in [#1012](https://github.com/spectreconsole/spectre.console/pull/1012)
* Added Suckless Simple Terminal to list of ANSI terminals by [@picture](https://github.com/picture)-vision in [#1013](https://github.com/spectreconsole/spectre.console/pull/1013)
* Add culture option to `TypeConverterHelper`, `TextPrompt` and `AnsiConsole` by [@sowa](https://github.com/sowa)705 in [#1014](https://github.com/spectreconsole/spectre.console/pull/1014)
* Minor typo fixes by [@ardalis](https://github.com/ardalis) in [#1021](https://github.com/spectreconsole/spectre.console/pull/1021)
* Alignment fixes by [@patriksvensson](https://github.com/patriksvensson) in [#1066](https://github.com/spectreconsole/spectre.console/pull/1066)
* `IndexOf` replaced by Count at Add method - Performance issue #975 fixed by [@maije](https://github.com/maije) in [#1096](https://github.com/spectreconsole/spectre.console/pull/1096)
* Modified tokenizer not to break on on `]]]` at the end of a style by [@nils](https://github.com/nils)-a in [#1027](https://github.com/spectreconsole/spectre.console/pull/1027)
* Command line argument parsing improvements by [@FrankRay](https://github.com/FrankRay)78 in [#1048](https://github.com/spectreconsole/spectre.console/pull/1048)
* Show help for default command by [@krisrok](https://github.com/krisrok) in [#953](https://github.com/spectreconsole/spectre.console/pull/953)
* Automatically display default values of options in the help page by @0xced in [#1032](https://github.com/spectreconsole/spectre.console/pull/1032)

## Documentation updates
* Add link to documentation in README by [@ardalis](https://github.com/ardalis) in [#1030](https://github.com/spectreconsole/spectre.console/pull/1030)
* Update `.NET 5` references in docs by [@eduherminio](https://github.com/eduherminio) in [#964](https://github.com/spectreconsole/spectre.console/pull/964)
* Blog date fix by [@phil](https://github.com/phil)-scott-78 in [#963](https://github.com/spectreconsole/spectre.console/pull/963)
* Update sponsors by [@tomkerkhove](https://github.com/tomkerkhove) in [#1089](https://github.com/spectreconsole/spectre.console/pull/1089)
* Inline `CommandArgument` required/optional style in template parameter docs by [@ArveSystad](https://github.com/ArveSystad) in [#1090](https://github.com/spectreconsole/spectre.console/pull/1090)
* Add documentation for `BreakdownChart` by [@BenjaminMichaelis](https://github.com/BenjaminMichaelis) in [#1000](https://github.com/spectreconsole/spectre.console/pull/1000)
* Create `Panel` documentation by [@patrickfreilinger](https://github.com/patrickfreilinger) in [#1016](https://github.com/spectreconsole/spectre.console/pull/1016)
* Added details for using links within markup. by [@GaryMcD](https://github.com/GaryMcD) in [#961](https://github.com/spectreconsole/spectre.console/pull/961)
* Added documentation for `Rows` widget by [@Elisha](https://github.com/Elisha)-Aguilera in [#1038](https://github.com/spectreconsole/spectre.console/pull/1038)
* Added documentation guide for `Grid` widget  by [@Elisha](https://github.com/Elisha)-Aguilera in [#1043](https://github.com/spectreconsole/spectre.console/pull/1043)
* Added documentation guide for the `Padder` widget by [@Elisha](https://github.com/Elisha)-Aguilera in [#1046](https://github.com/spectreconsole/spectre.console/pull/1046)
* Created a `Columns` widget documentation by [@wguner](https://github.com/wguner) in [#1044](https://github.com/spectreconsole/spectre.console/pull/1044)
* Fixed typo in `Panel` documentation [@bcwood](https://github.com/bcwood) in [#1068](https://github.com/spectreconsole/spectre.console/pull/1068)
* Clarified the license for `SixLabors.ImageSharp` by [@FrankRay](https://github.com/FrankRay)78 in [#1073](https://github.com/spectreconsole/spectre.console/pull/1073)
* Add documentation for `Layout` by [@patriksvensson](https://github.com/patriksvensson) in [#1127](https://github.com/spectreconsole/spectre.console/pull/1127)

## Dependencies
* Update dependency `Wcwidth.Sources` to `v1` by [@renovate](https://github.com/renovate) in [#969](https://github.com/spectreconsole/spectre.console/pull/969)
* Update `actions/setup-dotnet` action to `v3` by [@renovate](https://github.com/renovate) in [#982](https://github.com/spectreconsole/spectre.console/pull/982)
* Update dependency `Microsoft.NET.Test.Sdk` to `v17.3.2` by [@renovate](https://github.com/renovate) in [#977](https://github.com/spectreconsole/spectre.console/pull/977)
* Update dependency `cake.tool` to `v2.3.0` by [@renovate](https://github.com/renovate) in [#1015](https://github.com/spectreconsole/spectre.console/pull/1015)

---

## File: Spectre.Docs/Content/blog/2023-05-19-spectre-console-0.47-released.md

---
title: Spectre.Console 0.47 released!
date: 2023-05-19
---

Version 0.47 of Spectre.Console has been released!

There are a lot of fixes and improvements in this release, the most noteworthy changes being support for the [Alacritty](https://github.com/alacritty/alacritty) terminal and continued improvements to command line parsing.

Thank you to all contributers.

## New Contributors
* [@wbaldoumas](https://github.com/wbaldoumas) made their first contribution in [#1143](https://github.com/spectreconsole/spectre.console/pull/1143)
* [@MartinZikmund](https://github.com/MartinZikmund) made their first contribution in [#1151](https://github.com/spectreconsole/spectre.console/pull/1151)
* [@ilyahryapko](https://github.com/ilyahryapko) made their first contribution in [#1131](https://github.com/spectreconsole/spectre.console/pull/1131)
* [@meziantou](https://github.com/meziantou) made their first contribution in [#1174](https://github.com/spectreconsole/spectre.console/pull/1174)
* [@MaxAtoms](https://github.com/MaxAtoms) made their first contribution in [#1211](https://github.com/spectreconsole/spectre.console/pull/1211)
* [@phillip-haydon](https://github.com/phillip-haydon) made their first contribution in [#1218](https://github.com/spectreconsole/spectre.console/pull/1218)

## What's Changed
* Add Alacritty to the supported terminals in AnsiDetector by [@MaxAtoms](https://github.com/MaxAtoms) in [#1211](https://github.com/spectreconsole/spectre.console/pull/1211)
* Add an implicit operator to convert from Color to Style by [@0xced](https://github.com/0xced) in [#1160](https://github.com/spectreconsole/spectre.console/pull/1160)
* Allow case-insensitive confirmation prompt by [@MartinZikmund](https://github.com/MartinZikmund) in [#1151](https://github.com/spectreconsole/spectre.console/pull/1151)
* Allow configuration of confirmation prompt comparison via `StringComparer` by [@MartinZikmund](https://github.com/MartinZikmund) in [#1161](https://github.com/spectreconsole/spectre.console/pull/1161)
* Do not register analyzer if SpectreConsole is not available in the current compilation by [@meziantou](https://github.com/meziantou) in [#1172](https://github.com/spectreconsole/spectre.console/pull/1172)
* Ensure correct comparer is used for `TextPrompt` by [@MartinZikmund](https://github.com/MartinZikmund) in [#1152](https://github.com/spectreconsole/spectre.console/pull/1152)
* Forward CancellationToken to GetOperation by [@meziantou](https://github.com/meziantou) in [#1173](https://github.com/spectreconsole/spectre.console/pull/1173)
* Fix minor typo in Prompt example by [@Frassle](https://github.com/Frassle) in [#1183](https://github.com/spectreconsole/spectre.console/pull/1183)
* Fix coconut spelling by [@phillip-haydon](https://github.com/phillip-haydon) in [#1218](https://github.com/spectreconsole/spectre.console/pull/1218)
* Improve conversion error messages by [@0xced](https://github.com/0xced) in [#1141](https://github.com/spectreconsole/spectre.console/pull/1141)
* Make the code fix more robust and detect more symbols of type IAnsiConsole by [@meziantou](https://github.com/meziantou) in [#1169](https://github.com/spectreconsole/spectre.console/pull/1169)
* Minor Refactorings by [@Elisha-Aguilera](https://github.com/Elisha-Aguilera) in [#1081](https://github.com/spectreconsole/spectre.console/pull/1081)
* Simplify access to the SemanticModel in analyzers by [@meziantou](https://github.com/meziantou) in [#1167](https://github.com/spectreconsole/spectre.console/pull/1167)
* Use SymbolEqualityComparer.Default when possible by [@meziantou](https://github.com/meziantou) in [#1171](https://github.com/spectreconsole/spectre.console/pull/1171)
* Use StringComparison.Ordinal instead of culture-sensitive comparisons by [@meziantou](https://github.com/meziantou) in [#1174](https://github.com/spectreconsole/spectre.console/pull/1174)

## Command line updates
* Add possibility to set description and/or data for the default command by [@0xced](https://github.com/0xced) in [#1091](https://github.com/spectreconsole/spectre.console/pull/1091)
* Add support for converting command parameters into FileInfo and DirectoryInfo by [@0xced](https://github.com/0xced) in [#1145](https://github.com/spectreconsole/spectre.console/pull/1145)
* Add support for arrays in \[DefaultValue\] attributes by [@0xced](https://github.com/0xced) in [#1164](https://github.com/spectreconsole/spectre.console/pull/1164)
* Add ability to pass example args using `params` syntax by [@seclerp](https://github.com/seclerp) in [#1166](https://github.com/spectreconsole/spectre.console/pull/1166)
* Alias for branches by [@ilyahryapko](https://github.com/ilyahryapko) in [#1131](https://github.com/spectreconsole/spectre.console/pull/1131)
* Command line improvements by [@FrankRay78](https://github.com/FrankRay78) in [#1103](https://github.com/spectreconsole/spectre.console/pull/1103)

## Documentation updates
* Alignment => Justification Docs Fixes by [@wbaldoumas](https://github.com/wbaldoumas) in [#1143](https://github.com/spectreconsole/spectre.console/pull/1143)

---

## File: Spectre.Docs/Content/blog/2023-11-22-spectre-console-0.48-released.md

---
title: Spectre.Console 0.48 released!
date: 2023-11-22
---

Version 0.48 of Spectre.Console has been released!

Several rendering issues have been addressed, such as fixing problems related to rendering inside status causing corrupt output, avoiding exceptions on Rows with no children, as well as addressing rendering bugs in TextPath.

New features have been added, such as the ability to show separators between table rows. Other notable additions include progress bar header and footer support, customizable (and localizable) help providers, and the option to style text and confirmation prompts.

# New Contributors

* [@icalvo](https://github.com/icalvo) made their first contribution in [#1215](https://github.com/spectreconsole/spectre.console/pull/1215)
* [@fredrikbentzen](https://github.com/fredrikbentzen) made their first contribution in [#1132](https://github.com/spectreconsole/spectre.console/pull/1132)
* [@jeppevammenkristensen](https://github.com/jeppevammenkristensen) made their first contribution in [#1241](https://github.com/spectreconsole/spectre.console/pull/1241)
* [@tomaszprasolek](https://github.com/tomaszprasolek) made their first contribution in [#1257](https://github.com/spectreconsole/spectre.console/pull/1257)
* [@olabacker](https://github.com/olabacker) made their first contribution in [#1302](https://github.com/spectreconsole/spectre.console/pull/1302)
* [@AndrewRathbun](https://github.com/AndrewRathbun) made their first contribution in [#1315](https://github.com/spectreconsole/spectre.console/pull/1315)


# What's Changed

## Rendering

* Add .NET 8 support by [@patriksvensson](https://github.com/patriksvensson) in [#1367](https://github.com/spectreconsole/spectre.console/pull/1367)
* Fixed render issue where writeline inside status caused corrupt output #415 #694 by [@fredrikbentzen](https://github.com/fredrikbentzen) in [#1132](https://github.com/spectreconsole/spectre.console/pull/1132)
* Relax the SDK requirements by rolling forward to the latest feature by [@0xced](https://github.com/0xced) in [#1237](https://github.com/spectreconsole/spectre.console/pull/1237)
* Add fix to avoid exception on rows with no children by [@jeppevammenkristensen](https://github.com/jeppevammenkristensen) in [#1241](https://github.com/spectreconsole/spectre.console/pull/1241)
* Set `end_of_line` to `LF` instead of `CRLF` by [@0xced](https://github.com/0xced) in [#1256](https://github.com/spectreconsole/spectre.console/pull/1256)
* Fix `Rule` widget docs by [@tomaszprasolek](https://github.com/tomaszprasolek) in [#1257](https://github.com/spectreconsole/spectre.console/pull/1257)
* Added the missing columns-cast by [@nils](https://github.com/nils)-a in [#1294](https://github.com/spectreconsole/spectre.console/pull/1294)
* Render tables with zero-width columns by [@Frassle](https://github.com/Frassle) in [#1197](https://github.com/spectreconsole/spectre.console/pull/1197)
* Fix figlet centering possibly throwing due to negative size by [@olabacker](https://github.com/olabacker) in [#1302](https://github.com/spectreconsole/spectre.console/pull/1302)
* Add option to show separator between table rows  by [@patriksvensson](https://github.com/patriksvensson) in [#1304](https://github.com/spectreconsole/spectre.console/pull/1304)
* Enable setting the color of the values in a `BreakdownChart` by [@nils](https://github.com/nils)-a in [#1303](https://github.com/spectreconsole/spectre.console/pull/1303)
* Progress bar header and footer by [@phil](https://github.com/phil)-scott-78 in [#1262](https://github.com/spectreconsole/spectre.console/pull/1262)
* Add an example showing the decorations off by [@Frassle](https://github.com/Frassle) in [#1191](https://github.com/spectreconsole/spectre.console/pull/1191)
* Fixes `TextPath` rendering bugs by [@patriksvensson](https://github.com/patriksvensson) in [#1308](https://github.com/spectreconsole/spectre.console/pull/1308)
* Fix greedy row measure by [@nils](https://github.com/nils)-a in [#1338](https://github.com/spectreconsole/spectre.console/pull/1338)
* Fix `AnsiConsoleOutput` safe height by [@0xced](https://github.com/0xced) in [#1358](https://github.com/spectreconsole/spectre.console/pull/1358)
* Allow passing a nullable style in `DefaultValueStyle()` and `ChoicesStyle()` by [@0xced](https://github.com/0xced) in [#1359](https://github.com/spectreconsole/spectre.console/pull/1359)
* Allow `ConfirmationPrompt` Styling by [@wbaldoumas](https://github.com/wbaldoumas) in [#1210](https://github.com/spectreconsole/spectre.console/pull/1210)

## CLI
* Add async command unit tests by [@FrankRay78](https://github.com/FrankRay78) in [#1228](https://github.com/spectreconsole/spectre.console/pull/1228)
* Add support for async delegate by [@icalvo](https://github.com/icalvo) in [#1215](https://github.com/spectreconsole/spectre.console/pull/1215)
* Remove unnecessary `[NotNull]` attributes by [@0xced](https://github.com/0xced) in [#1255](https://github.com/spectreconsole/spectre.console/pull/1255)
* Allow custom help providers by [@FrankRay78](https://github.com/FrankRay78) in [#1259](https://github.com/spectreconsole/spectre.console/pull/1259)
* Specified details for settings for the argument vector by [@nils](https://github.com/nils)-a in [#1301](https://github.com/spectreconsole/spectre.console/pull/1301)
* Add support for localisation in help provider by [@FrankRay78](https://github.com/FrankRay78) in [#1349](https://github.com/spectreconsole/spectre.console/pull/1349)
* Fix DefaultValue for `FileInfo` and `DirectoryInfo` by [@0xced](https://github.com/0xced) in [#1238](https://github.com/spectreconsole/spectre.console/pull/1238)

## Documentation & Samples
* Added a minimal PR template by [@nils](https://github.com/nils)-a in [#1318](https://github.com/spectreconsole/spectre.console/pull/1318)
* Fix typo in `showcase` sample by [@AndrewRathbun](https://github.com/AndrewRathbun) in [#1315](https://github.com/spectreconsole/spectre.console/pull/1315)
* Update `columns` sample to showcase nicer data by [@nils](https://github.com/nils)-a in [#1295](https://github.com/spectreconsole/spectre.console/pull/1295)
* Change all `SetErrorHandler` to `SetExceptionHandler` by [@nils](https://github.com/nils)-a in [#1298](https://github.com/spectreconsole/spectre.console/pull/1298)

## Other stuff
* Ensure the `Generator` project compiles by [@patriksvensson](https://github.com/patriksvensson) in [#1371](https://github.com/spectreconsole/spectre.console/pull/1371)

---

## File: Spectre.Docs/Content/blog/2024-04-23-spectre-console-0.49-released.md

---
title: Spectre.Console 0.49 released!
date: 2024-04-23
---

Version 0.49 of Spectre.Console has been released!

## New Contributors
* @baronfel made their first contribution in https://github.com/spectreconsole/spectre.console/pull/1425
* @DarqueWarrior made their first contribution in https://github.com/spectreconsole/spectre.console/pull/1431
* @tonycknight made their first contribution in https://github.com/spectreconsole/spectre.console/pull/1435
* @caesay made their first contribution in https://github.com/spectreconsole/spectre.console/pull/1439
* @jsheely made their first contribution in https://github.com/spectreconsole/spectre.console/pull/1414
* @danielcweber made their first contribution in https://github.com/spectreconsole/spectre.console/pull/1456
* @martincostello made their first contribution in https://github.com/spectreconsole/spectre.console/pull/1477
* @slang25 made their first contribution in https://github.com/spectreconsole/spectre.console/pull/1289
* @thomhurst made their first contribution in https://github.com/spectreconsole/spectre.console/pull/1250
* @gerardog made their first contribution in https://github.com/spectreconsole/spectre.console/pull/1489
* @yenneferofvengerberg made their first contribution in https://github.com/spectreconsole/spectre.console/pull/1503
* @BlazeFace made their first contribution in https://github.com/spectreconsole/spectre.console/pull/1509

## Changes

* Cleanup line endings by @nils-a in https://github.com/spectreconsole/spectre.console/pull/1381
* Added Spectre.Console.Cli to quick-start. by @nils-a in https://github.com/spectreconsole/spectre.console/pull/1413
* Fix rendering of ListPrompt for odd pageSizes by @nils-a in https://github.com/spectreconsole/spectre.console/pull/1365
* Remove mandelbrot example due to conflicting license by @patriksvensson in https://github.com/spectreconsole/spectre.console/pull/1426
* Allow specifying a property to ignore the use of build-time packages for versioning and analysis by @baronfel in https://github.com/spectreconsole/spectre.console/pull/1425
* Add the possibility to register multiple interceptors by @nils-a in https://github.com/spectreconsole/spectre.console/pull/1412
* Added the ITypeResolver to the ExceptionHandler by @nils-a in https://github.com/spectreconsole/spectre.console/pull/1411
* Updated typo in commandApp.md by @DarqueWarrior in https://github.com/spectreconsole/spectre.console/pull/1431
* Command with -v displays app version instead of executing the command by @FrankRay78 in https://github.com/spectreconsole/spectre.console/pull/1427
* HelpProvider colors should be configurable by @FrankRay78 in https://github.com/spectreconsole/spectre.console/pull/1408
* Direct contributors to the current CONTRIBUTING.md by @tonycknight in https://github.com/spectreconsole/spectre.console/pull/1435
* Fix deadlock when cancelling prompts by @caesay in https://github.com/spectreconsole/spectre.console/pull/1439
* Add progress bar value formatter by @jsheely in https://github.com/spectreconsole/spectre.console/pull/1414
* Update dependencies and do some clean-up by @patriksvensson in https://github.com/spectreconsole/spectre.console/pull/1440
* Delete [UsesVerify], which has become obsolete through the latest update. by @danielcweber in https://github.com/spectreconsole/spectre.console/pull/1456
* Don't erase secret prompt text upon backspace when mask is null by @danielcweber in https://github.com/spectreconsole/spectre.console/pull/1458
* Update dependencies to the latest version by @patriksvensson in https://github.com/spectreconsole/spectre.console/pull/1459
* Automatically register command settings by @patriksvensson in https://github.com/spectreconsole/spectre.console/pull/1463
* Remove [DebuggerDisplay] from Paragraph by @martincostello in https://github.com/spectreconsole/spectre.console/pull/1477
* Selection Prompt Search by @slang25 in https://github.com/spectreconsole/spectre.console/pull/1289
* Update dependency SixLabors.ImageSharp to v3.1.3 by @renovate in https://github.com/spectreconsole/spectre.console/pull/1486
* Positioned Progress Tasks - Before or After Other Tasks by @thomhurst in https://github.com/spectreconsole/spectre.console/pull/1250
* Added NoStackTrace to ExceptionFormats by @gerardog in https://github.com/spectreconsole/spectre.console/pull/1489
* Pipe character for listing options (issue 1434) by @FrankRay78 in https://github.com/spectreconsole/spectre.console/pull/1498
* Improve XmlDoc output by @yenneferofvengerberg in https://github.com/spectreconsole/spectre.console/pull/1503
* Revert 71a5d830 to undo flickering regression by @phil-scott-78 in https://github.com/spectreconsole/spectre.console/pull/1504
* AddDelegate uses an abstract type when used in a branch by @BlazeFace in https://github.com/spectreconsole/spectre.console/pull/1509
* Missing Separator When Headers are Hidden by @BlazeFace in https://github.com/spectreconsole/spectre.console/pull/1513
* Expose raw arguments on the command context by @patriksvensson in https://github.com/spectreconsole/spectre.console/pull/1523
* Add token representation to remaining arguments by @patriksvensson in https://github.com/spectreconsole/spectre.console/pull/1525