ktsu.FuzzySearch 1.2.2

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

ktsu.FuzzySearch

A lightweight .NET library that provides fuzzy string matching capabilities, allowing for approximate string matching with intelligent scoring.

License NuGet Version NuGet Version NuGet Downloads GitHub commit activity GitHub contributors GitHub Actions Workflow Status

Introduction

FuzzySearch is a .NET library that provides fuzzy string matching capabilities with intelligent scoring. It's perfect for implementing search-as-you-type features, command palettes, or any application requiring flexible string matching. This library offers both basic contains-style matching and more sophisticated algorithms that can rank multiple potential matches by relevance.

Features

  • Fuzzy String Matching: Match strings even when they contain typos or missing characters
  • Intelligent Scoring: Rank matches by quality with a smart scoring algorithm
  • Case Insensitivity: Optional case-insensitive matching
  • Filtering Collections: Filter lists of strings and rank results
  • Customizable Parameters: Adjust matching behavior to suit different needs
  • Lightweight: Minimal dependencies, focused on performance
  • Well-tested: Comprehensive test suite ensuring reliability

Installation

Package Manager Console

Install-Package ktsu.FuzzySearch

.NET CLI

dotnet add package ktsu.FuzzySearch

Package Reference

<PackageReference Include="ktsu.FuzzySearch" Version="x.y.z" />

Usage Examples

Basic Matching

The simplest way to check if a string contains characters from a pattern in sequence:

using ktsu.FuzzySearch;

class Program
{
    static void Main()
    {
        string text = "Hello World";
        string pattern = "hlo";
        
        bool isMatch = Fuzzy.Contains(text, pattern); // Returns true
    }
}

Matching with Scoring

To get both a match result and a score that indicates the quality of the match:

using ktsu.FuzzySearch;

class Program
{
    static void Main()
    {
        string text = "Hello World";
        string pattern = "hlo";
        
        var result = Fuzzy.Match(text, pattern);
        
        Console.WriteLine($"Is match: {result.IsMatch}");          // True
        Console.WriteLine($"Score: {result.Score}");               // A value between 0-1
        Console.WriteLine($"Character indices: {result.Indices}"); // Indices of matched characters
    }
}

Filtering a Collection

Filter a list of strings and sort them by match quality:

using ktsu.FuzzySearch;

class Program
{
    static void Main()
    {
        var items = new List<string>
        {
            "AppDataStorage",
            "Application Settings",
            "Data Store",
            "File System",
            "Storage Provider"
        };
        
        string pattern = "appstor";
        
        // Filter and rank by match quality
        var results = Fuzzy.Filter(items, pattern);
        
        foreach (var result in results)
        {
            Console.WriteLine($"{result.Item} (Score: {result.Score})");
        }
        
        // Output might be:
        // AppDataStorage (Score: 0.89)
        // Application Settings (Score: 0.65)
        // Storage Provider (Score: 0.52)
    }
}

Advanced Options

Customize the matching behavior with options:

using ktsu.FuzzySearch;

class Program
{
    static void Main()
    {
        var options = new FuzzyOptions
        {
            CaseSensitive = true,              // Default is false
            ScoreThreshold = 0.4,              // Minimum score to consider a match
            BonusConsecutiveChars = 1.5,       // Bonus for consecutive matched characters
            BonusStartOfWord = 2.0,            // Bonus for matches at word boundaries
            PenaltyUnmatched = 0.1,            // Penalty for unmatched characters
            MaxPatternLength = 64              // Maximum pattern length to consider
        };
        
        string text = "FileSystemWatcher";
        string pattern = "FSW";
        
        var result = Fuzzy.Match(text, pattern, options);
        Console.WriteLine($"Score with custom options: {result.Score}");
    }
}

Object Collections

Filter and match against object collections by providing a selector function:

using ktsu.FuzzySearch;

class Program
{
    class FileItem
    {
        public string Name { get; set; }
        public string Path { get; set; }
        public long Size { get; set; }
    }
    
    static void Main()
    {
        var files = new List<FileItem>
        {
            new FileItem { Name = "Document.pdf", Path = "/documents/", Size = 1024 },
            new FileItem { Name = "Presentation.pptx", Path = "/presentations/", Size = 2048 },
            new FileItem { Name = "Spreadsheet.xlsx", Path = "/spreadsheets/", Size = 512 }
        };
        
        string pattern = "doc";
        
        // Filter objects using a selector function
        var results = Fuzzy.Filter(files, pattern, item => item.Name);
        
        foreach (var result in results)
        {
            Console.WriteLine($"{result.Item.Name} (Score: {result.Score})");
        }
    }
}

API Reference

Fuzzy Static Class

The main class providing fuzzy matching functionality.

Methods
Name Parameters Return Type Description
Contains string text, string pattern, bool caseSensitive = false bool Checks if the text contains the pattern in sequence
Match string text, string pattern, FuzzyOptions options = null FuzzyResult Matches text against pattern with scoring
Filter IEnumerable<string> items, string pattern, FuzzyOptions options = null IEnumerable<FuzzyItem<string>> Filters and ranks a collection of strings
Filter<T> IEnumerable<T> items, string pattern, Func<T, string> selector, FuzzyOptions options = null IEnumerable<FuzzyItem<T>> Filters and ranks a collection of objects using a selector function

FuzzyResult Class

Represents the result of a fuzzy match operation.

Properties
Name Type Description
IsMatch bool Indicates if the pattern matches the text
Score double A value between 0 and 1 indicating match quality (1 is perfect)
Indices int[] The indices in the text where pattern characters were matched

FuzzyOptions Class

Configuration options for fuzzy matching.

Properties
Name Type Default Description
CaseSensitive bool false Whether matching should be case-sensitive
ScoreThreshold double 0.3 Minimum score required to consider a match valid
BonusConsecutiveChars double 1.0 Score bonus for consecutive matched characters
BonusStartOfWord double 1.5 Score bonus for matches at word boundaries
PenaltyUnmatched double 0.1 Score reduction for unmatched characters

Contributing

Contributions are welcome! Here's how you can help:

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Please make sure to update tests as appropriate and adhere to the existing coding style.

License

This project is licensed under the MIT License - see the LICENSE.md file for details.

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

NuGet packages (3)

Showing the top 3 NuGet packages that depend on ktsu.FuzzySearch:

Package Downloads
ktsu.ImGuiWidgets

A library of custom widgets using ImGui.NET and utilities to enhance ImGui-based applications.

ktsu.TextFilter

A library providing methods for matching and filtering text. It supports glob patterns, regular expressions, and fuzzy matching.

ktsu.Frontmatter

A .NET library for processing and manipulating YAML frontmatter in markdown files.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.2.3-pre.1 66 8/26/2025
1.2.2 127 8/26/2025
1.2.2-pre.17 124 5/20/2025
1.2.2-pre.15 83 5/17/2025
1.2.2-pre.14 137 5/16/2025
1.2.2-pre.13 204 5/15/2025
1.2.2-pre.12 201 5/14/2025
1.2.2-pre.11 205 5/13/2025
1.2.2-pre.10 236 5/12/2025
1.2.2-pre.9 166 5/11/2025
1.2.2-pre.8 109 5/10/2025
1.2.2-pre.7 57 5/9/2025
1.2.2-pre.6 125 5/8/2025
1.2.2-pre.5 124 5/7/2025
1.2.2-pre.4 123 5/6/2025
1.2.2-pre.3 122 5/5/2025
1.2.2-pre.2 121 5/4/2025
1.2.2-pre.1 126 5/4/2025
1.2.1 583 5/4/2025
1.2.1-pre.2 62 4/26/2025
1.2.1-pre.1 119 4/4/2025
1.2.0 1,188 3/30/2025
1.1.0 170 3/30/2025
1.0.14-pre.3 81 2/6/2025
1.0.14-pre.2 68 2/5/2025
1.0.14-pre.1 74 2/5/2025
1.0.13 1,963 1/2/2025
1.0.13-pre.29 74 2/3/2025
1.0.13-pre.28 71 2/3/2025
1.0.13-pre.27 77 2/1/2025
1.0.13-pre.26 70 1/30/2025
1.0.13-pre.25 70 1/28/2025
1.0.13-pre.24 70 1/26/2025
1.0.13-pre.23 64 1/24/2025
1.0.13-pre.22 71 1/22/2025
1.0.13-pre.21 68 1/20/2025
1.0.13-pre.20 60 1/18/2025
1.0.13-pre.19 61 1/16/2025
1.0.13-pre.18 48 1/14/2025
1.0.13-pre.17 59 1/13/2025
1.0.13-pre.16 65 1/11/2025
1.0.13-pre.15 56 1/10/2025
1.0.13-pre.14 68 1/10/2025
1.0.13-pre.13 63 1/8/2025
1.0.13-pre.12 69 1/7/2025
1.0.13-pre.11 75 1/6/2025
1.0.13-pre.10 88 1/4/2025
1.0.13-pre.9 70 1/3/2025
1.0.13-pre.8 73 1/3/2025
1.0.13-pre.7 84 1/3/2025
1.0.13-pre.6 79 1/2/2025
1.0.13-pre.5 94 12/31/2024
1.0.13-pre.4 71 12/29/2024
1.0.13-pre.3 69 12/28/2024
1.0.13-pre.2 75 12/27/2024
1.0.13-pre.1 70 12/27/2024
1.0.12-pre.1 67 12/27/2024
1.0.11 906 12/26/2024
1.0.10 109 12/26/2024
1.0.10-pre.1 68 12/27/2024
1.0.9 107 12/26/2024
1.0.8 106 12/26/2024
1.0.7 111 12/26/2024
1.0.6 115 12/26/2024
1.0.5 115 12/26/2024
1.0.4 989 12/23/2024
1.0.3 106 12/23/2024
1.0.2 192 12/22/2024
1.0.1 175 12/22/2024
1.0.0 677 12/4/2024
1.0.0-alpha.18 218 12/2/2024
1.0.0-alpha.17 133 11/30/2024
1.0.0-alpha.16 181 11/26/2024
1.0.0-alpha.15 220 11/20/2024
1.0.0-alpha.14 244 11/13/2024
1.0.0-alpha.13 442 11/1/2024
1.0.0-alpha.12 599 10/15/2024
1.0.0-alpha.11 356 10/4/2024
1.0.0-alpha.10 461 9/19/2024
1.0.0-alpha.9 120 9/19/2024
1.0.0-alpha.8 61 9/19/2024
1.0.0-alpha.7 92 9/19/2024
1.0.0-alpha.6 89 9/18/2024
1.0.0-alpha.5 72 9/18/2024
1.0.0-alpha.4 168 9/18/2024
1.0.0-alpha.3 111 9/18/2024
1.0.0-alpha.2 287 9/14/2024
1.0.0-alpha.1 73 9/14/2024

## v1.2.2 (patch)

Changes since v1.2.1:

- Update configuration files and scripts for improved build and test processes ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.2.2-pre.17 (prerelease)

Changes since v1.2.2-pre.16:

- Sync .editorconfig ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .gitattributes ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .mailmap ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .gitignore ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .runsettings ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.2.2-pre.16 (prerelease)

Changes since v1.2.2-pre.15:

- Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .runsettings ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .editorconfig ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .mailmap ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .gitignore ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .gitattributes ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.2.2-pre.15 (prerelease)

Changes since v1.2.2-pre.14:
## v1.2.2-pre.14 (prerelease)

Changes since v1.2.2-pre.13:
## v1.2.2-pre.13 (prerelease)

Changes since v1.2.2-pre.12:
## v1.2.2-pre.12 (prerelease)

Changes since v1.2.2-pre.11:
## v1.2.2-pre.11 (prerelease)

Changes since v1.2.2-pre.10:
## v1.2.2-pre.10 (prerelease)

Changes since v1.2.2-pre.9:
## v1.2.2-pre.9 (prerelease)

Changes since v1.2.2-pre.8:
## v1.2.2-pre.8 (prerelease)

Changes since v1.2.2-pre.7:
## v1.2.2-pre.7 (prerelease)

Changes since v1.2.2-pre.6:
## v1.2.2-pre.6 (prerelease)

Changes since v1.2.2-pre.5:
## v1.2.2-pre.5 (prerelease)

Changes since v1.2.2-pre.4:
## v1.2.2-pre.4 (prerelease)

Changes since v1.2.2-pre.3:
## v1.2.2-pre.3 (prerelease)

Changes since v1.2.2-pre.2:
## v1.2.2-pre.2 (prerelease)

Changes since v1.2.2-pre.1:
## v1.2.2-pre.1 (prerelease)

Changes since v1.2.1:

- Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.2.1 (patch)

Changes since v1.2.0:

- Update README and project files for improved clarity and SDK versioning ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove obsolete build configuration files and scripts ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.2.1-pre.2 (prerelease)

Changes since v1.2.1-pre.1:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .runsettings ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .editorconfig ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.2.1-pre.1 (prerelease)

Incremental prerelease update.
## v1.2.0 (minor)

Changes since v1.1.0:

- Refactor Fuzzy matching methods for performance ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.1.0 (minor)

Changes since v1.0.0:

- Replace LICENSE file with LICENSE.md and update copyright information ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance fuzzy search library and add unit tests ([@matt-edmondson](https://github.com/matt-edmondson))
- Renamed metadata files ([@matt-edmondson](https://github.com/matt-edmondson))
- Add automation scripts for metadata generation and project management ([@matt-edmondson](https://github.com/matt-edmondson))
- [minor] Fix typo in make-license.ps1 ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.14-pre.3 (prerelease)

Changes since v1.0.14-pre.2:

- Sync scripts\make-version.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\make-changelog.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.14-pre.2 (prerelease)

Changes since v1.0.14-pre.1:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.14-pre.1 (prerelease)

Changes since v1.0.13:

- Sync .mailmap ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Bump MSTest from 3.7.1 to 3.7.2 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump coverlet.collector from 6.0.3 to 6.0.4 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump MSTest from 3.7.2 to 3.7.3 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Bump MSTest from 3.7.0 to 3.7.1 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\make-version.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\make-version.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\make-changelog.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .mailmap ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\make-changelog.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\make-version.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\make-changelog.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.13 (patch)

No significant changes detected since v1.0.13-pre.29.
## v1.0.13-pre.29 (prerelease)

Changes since v1.0.13-pre.28:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.13-pre.28 (prerelease)

Changes since v1.0.13-pre.27:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.13-pre.27 (prerelease)

Changes since v1.0.13-pre.26:
## v1.0.13-pre.26 (prerelease)

Changes since v1.0.13-pre.25:
## v1.0.13-pre.25 (prerelease)

Changes since v1.0.13-pre.24:

- Bump MSTest from 3.7.2 to 3.7.3 ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.0.13-pre.24 (prerelease)

Changes since v1.0.13-pre.23:
## v1.0.13-pre.23 (prerelease)

Changes since v1.0.13-pre.22:
## v1.0.13-pre.22 (prerelease)

Changes since v1.0.13-pre.21:

- Bump MSTest from 3.7.1 to 3.7.2 ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.0.13-pre.21 (prerelease)

Changes since v1.0.13-pre.20:

- Bump coverlet.collector from 6.0.3 to 6.0.4 ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.0.13-pre.20 (prerelease)

Changes since v1.0.13-pre.19:
## v1.0.13-pre.19 (prerelease)

Changes since v1.0.13-pre.18:
## v1.0.13-pre.18 (prerelease)

Changes since v1.0.13-pre.17:

- Bump MSTest from 3.7.0 to 3.7.1 ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.0.13-pre.17 (prerelease)

Changes since v1.0.13-pre.16:
## v1.0.13-pre.16 (prerelease)

Changes since v1.0.13-pre.15:
## v1.0.13-pre.15 (prerelease)

Changes since v1.0.13-pre.14:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.13-pre.14 (prerelease)

Changes since v1.0.13-pre.13:

- Sync scripts\make-version.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\make-changelog.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.13-pre.13 (prerelease)

Changes since v1.0.13-pre.12:
## v1.0.13-pre.12 (prerelease)

Changes since v1.0.13-pre.11:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.13-pre.11 (prerelease)

Changes since v1.0.13-pre.10:
## v1.0.13-pre.10 (prerelease)

Changes since v1.0.13-pre.9:
## v1.0.13-pre.9 (prerelease)

Changes since v1.0.13-pre.8:

- Sync .mailmap ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\make-version.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.13-pre.8 (prerelease)

Changes since v1.0.13-pre.7:

- Sync scripts\make-changelog.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.13-pre.7 (prerelease)

Changes since v1.0.13-pre.6:

- Add automation scripts for metadata generation and project management ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.13-pre.6 (prerelease)

Changes since v1.0.13-pre.5:
## v1.0.13-pre.5 (prerelease)

Changes since v1.0.13-pre.4:

- Bump coverlet.collector from 6.0.2 to 6.0.3 ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.0.13-pre.4 (prerelease)

Changes since v1.0.13-pre.3:
## v1.0.13-pre.3 (prerelease)

Changes since v1.0.13-pre.2:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.13-pre.2 (prerelease)

Changes since v1.0.13-pre.1:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.13-pre.1 (prerelease)

Incremental prerelease update.
## v1.0.12-pre.1 (prerelease)

Changes since v1.0.11:

- Renamed metadata files ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.11 (patch)

Changes since v1.0.10:

- Sync icon.png ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.10 (patch)

Changes since v1.0.9:

- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.10-pre.1 (prerelease)

Changes since v1.0.10:

- Renamed metadata files ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.9 (patch)

Changes since v1.0.8:

- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.8 (patch)

Changes since v1.0.7:

- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.7 (patch)

Changes since v1.0.6:

- Replace LICENSE file with LICENSE.md and update copyright information ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.6 (patch)

Changes since v1.0.5:

- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.5 (patch)

Changes since v1.0.4:

- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync icon.png ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.4 (patch)

Changes since v1.0.3:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.3 (patch)

Changes since v1.0.2:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.2 (patch)

Changes since v1.0.1:

- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.1 (patch)

Changes since v1.0.0:

- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.0-alpha.18 (prerelease)

Changes since v1.0.0-alpha.17:

- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Update VERSION to 1.0.0-alpha.18 ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.0-alpha.17 (prerelease)

Changes since v1.0.0-alpha.16:

- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Update VERSION to 1.0.0-alpha.17 ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.0-alpha.16 (prerelease)

Changes since v1.0.0-alpha.15:

- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Update VERSION to 1.0.0-alpha.16 ([@matt-edmondson](https://github.com/matt-edmondson))
- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.0-alpha.15 (prerelease)

Changes since v1.0.0-alpha.14:

- Bump Microsoft.NET.Test.Sdk in the microsoft group ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump MSTest.TestFramework from 3.6.2 to 3.6.3 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Update VERSION to 1.0.0-alpha.15 ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.0-alpha.14 (prerelease)

Changes since v1.0.0-alpha.13:

- Bump MSTest.TestAdapter from 3.6.2 to 3.6.3 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Update VERSION to 1.0.0-alpha.14 ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.0-alpha.13 (prerelease)

Changes since v1.0.0-alpha.12:

- Bump MSTest.TestAdapter from 3.6.1 to 3.6.2 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump MSTest.TestFramework from 3.6.1 to 3.6.2 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Update VERSION to 1.0.0-alpha.13 ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.0-alpha.12 (prerelease)

Changes since v1.0.0-alpha.11:

- Update VERSION to 1.0.0-alpha.12 ([@matt-edmondson](https://github.com/matt-edmondson))
- Bump MSTest.TestAdapter from 3.6.0 to 3.6.1 ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.0.0-alpha.11 (prerelease)

Changes since v1.0.0-alpha.10:

- Update VERSION to 1.0.0-alpha.11 ([@matt-edmondson](https://github.com/matt-edmondson))
- Bump MSTest.TestFramework from 3.6.0 to 3.6.1 ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.0.0-alpha.10 (prerelease)

Changes since v1.0.0-alpha.9:

- Update VERSION to 1.0.0-alpha.10 ([@matt-edmondson](https://github.com/matt-edmondson))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.0-alpha.9 (prerelease)

Changes since v1.0.0-alpha.8:

- Update VERSION to 1.0.0-alpha.9 ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.0-alpha.8 (prerelease)

Changes since v1.0.0-alpha.7:

- Sync .github\dependabot.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\dependabot.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Update VERSION to 1.0.0-alpha.8 ([@matt-edmondson](https://github.com/matt-edmondson))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.0-alpha.7 (prerelease)

Changes since v1.0.0-alpha.6:

- Sync .github\workflows\dependabot-merge.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.0-alpha.6 (prerelease)

Changes since v1.0.0-alpha.5:

- Sync .github\workflows\dependabot-merge.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.0-alpha.5 (prerelease)

Changes since v1.0.0-alpha.4:

- Sync .github\workflows\dependabot-merge.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.0-alpha.4 (prerelease)

Changes since v1.0.0-alpha.3:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dependabot-merge.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dependabot-merge.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Bump MSTest.TestFramework from 3.5.2 to 3.6.0 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump MSTest.TestAdapter from 3.5.2 to 3.6.0 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.0-alpha.3 (prerelease)

Changes since v1.0.0-alpha.2:

- Sync .github\dependabot.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.0-alpha.2 (prerelease)

Changes since v1.0.0-alpha.1:

- Migrate ktsu.io to ktsu namespace ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.0-alpha.1 (prerelease)

Incremental prerelease update.
## v1.0.0 (major)

- Update dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- Migrate ktsu.io to ktsu namespace ([@matt-edmondson](https://github.com/matt-edmondson))
- Update nuget.config ([@matt-edmondson](https://github.com/matt-edmondson))
- Update build config ([@matt-edmondson](https://github.com/matt-edmondson))
- Update Directory.Build.targets ([@matt-edmondson](https://github.com/matt-edmondson))
- Update dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- Update nuget.config ([@matt-edmondson](https://github.com/matt-edmondson))
- Update LICENSE ([@matt-edmondson](https://github.com/matt-edmondson))
- Update Directory.Build.props ([@matt-edmondson](https://github.com/matt-edmondson))
- Initial commit ([@matt-edmondson](https://github.com/matt-edmondson))
- Update Directory.Build.targets ([@matt-edmondson](https://github.com/matt-edmondson))
- Update dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- Add github package support ([@matt-edmondson](https://github.com/matt-edmondson))