Thinktecture.Runtime.Extensions 10.2.0-beta03

This is a prerelease version of Thinktecture.Runtime.Extensions.
There is a newer version of this package available.
See the version list below for details.
dotnet add package Thinktecture.Runtime.Extensions --version 10.2.0-beta03
                    
NuGet\Install-Package Thinktecture.Runtime.Extensions -Version 10.2.0-beta03
                    
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="Thinktecture.Runtime.Extensions" Version="10.2.0-beta03" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Thinktecture.Runtime.Extensions" Version="10.2.0-beta03" />
                    
Directory.Packages.props
<PackageReference Include="Thinktecture.Runtime.Extensions" />
                    
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 Thinktecture.Runtime.Extensions --version 10.2.0-beta03
                    
#r "nuget: Thinktecture.Runtime.Extensions, 10.2.0-beta03"
                    
#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 Thinktecture.Runtime.Extensions@10.2.0-beta03
                    
#: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=Thinktecture.Runtime.Extensions&version=10.2.0-beta03&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Thinktecture.Runtime.Extensions&version=10.2.0-beta03&prerelease
                    
Install as a Cake Tool

Build TestResults NuGet Downloads

Thinktecture.Runtime.Extensions

A .NET library that uses Roslyn Source Generators, Analyzers, and CodeFixes to give you Smart Enums, Value Objects, and Discriminated Unions with built-in validation, exhaustive pattern matching, and first-class framework integration -- so you write the declaration and the generator handles the boilerplate.

Quick Start

Install-Package Thinktecture.Runtime.Extensions

Smart Enums

Type-safe enumerations that go beyond plain enum. Each item can carry its own data and behavior, the generator produces equality, parsing, Switch/Map, and serializer integration automatically.

[SmartEnum<string>]
public partial class ShippingMethod
{
   public static readonly ShippingMethod Standard = new("STANDARD", basePrice: 5.99m, estimatedDays: 5);
   public static readonly ShippingMethod Express = new("EXPRESS", basePrice: 15.99m, estimatedDays: 2);

   public decimal CalculatePrice(decimal weight) => _basePrice + weight;
}

Full documentation -- customization, real-world examples, performance tips, framework integration.

Value Objects

Immutable domain primitives that eliminate primitive obsession. Wrap a single value or multiple properties, add validation, and get factory methods, equality, conversion operators, and serialization for free.

Simple value object

[ValueObject<decimal>]
public partial struct Amount
{
    static partial void ValidateFactoryArguments(ref ValidationError? validationError, ref decimal value)
    {
        if (value < 0)
            validationError = new ValidationError("Amount cannot be negative");
    }
}

Complex value object

[ComplexValueObject]
public partial class Boundary
{
    public decimal Lower { get; }
    public decimal Upper { get; }

    static partial void ValidateFactoryArguments(ref ValidationError? validationError, ref decimal lower, ref decimal upper)
    {
        if (lower > upper)
            validationError = new ValidationError("Lower must be less than or equal to Upper");
    }
}

Full documentation -- simple & complex value objects, customization, framework integration.

Discriminated Unions

Model "one of" types with full type safety. Choose ad-hoc unions for quick combinations (Union<T1, T2>) or regular unions (Union) for rich domain modeling with exhaustive Switch/Map.

Ad-hoc union

[Union<string, int>]
public partial struct TextOrNumber;

Regular union

[Union]
public partial record Result<T>
{
    public sealed record Success(T Value) : Result<T>;
    public sealed record Failure(string Error) : Result<T>;
}

Full documentation -- ad-hoc unions, regular unions, customization, framework integration.

Framework Integration

All generated types integrate with the .NET ecosystem out of the box:

  • System.Text.Json -- zero-allocation span-based serialization on .NET 9+
  • Entity Framework Core -- value converters for EF Core 8, 9, and 10
  • ASP.NET Core -- model binding and Minimal API parameter binding via IParsable<T>
  • MessagePack -- binary serialization support
  • Newtonsoft.Json -- JsonConverter support
  • Swashbuckle / OpenAPI -- schema and operation filters

Packages

Package NuGet
Thinktecture.Runtime.Extensions NuGet
Thinktecture.Runtime.Extensions.Json NuGet
Thinktecture.Runtime.Extensions.Newtonsoft.Json NuGet
Thinktecture.Runtime.Extensions.MessagePack NuGet
Thinktecture.Runtime.Extensions.EntityFrameworkCore8 NuGet
Thinktecture.Runtime.Extensions.EntityFrameworkCore9 NuGet
Thinktecture.Runtime.Extensions.EntityFrameworkCore10 NuGet
Thinktecture.Runtime.Extensions.AspNetCore NuGet
Thinktecture.Runtime.Extensions.Swashbuckle NuGet

Requirements

  • C# 11 (or higher) for generated code
  • SDK 8.0.416 (or higher) for building projects

Documentation

Articles

Smart Enums:

Value Objects:

Discriminated Unions:

Migrations

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (14)

Showing the top 5 NuGet packages that depend on Thinktecture.Runtime.Extensions:

Package Downloads
Thinktecture.Runtime.Extensions.Json

Adds JSON support to components from Thinktecture.Runtime.Extensions when using System.Text.Json.

Thinktecture.Runtime.Extensions.AspNetCore

Adds ASP.NET Core support to components from Thinktecture.Runtime.Extensions.

Thinktecture.Runtime.Extensions.EntityFrameworkCore

Extends Entity Framework Core to support some components from Thinktecture.Runtime.Extensions.

Thinktecture.Runtime.Extensions.EntityFrameworkCore8

Extends Entity Framework Core to support some components from Thinktecture.Runtime.Extensions.

Thinktecture.Runtime.Extensions.EntityFrameworkCore10

Extends Entity Framework Core to support some components from Thinktecture.Runtime.Extensions.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
10.5.0-beta01 258 6/30/2026
10.4.0 17,153 6/25/2026
10.3.0 7,667 6/14/2026
10.3.0-beta02 396 5/15/2026
10.3.0-beta01 247 5/14/2026
10.2.0 44,809 4/10/2026
10.2.0-beta03 236 4/7/2026
10.2.0-beta02 261 3/27/2026
10.2.0-beta01 237 3/26/2026
10.1.2 7,160 3/26/2026
10.1.1 927 3/24/2026
10.1.0 3,467 3/12/2026
10.1.0-beta03 234 3/9/2026
10.1.0-beta02 286 3/2/2026
10.1.0-beta01 238 3/1/2026
10.0.0 7,278 2/12/2026
10.0.0-beta04 761 2/9/2026
10.0.0-beta03 3,888 1/13/2026
10.0.0-beta02 6,429 11/30/2025
9.7.1 18,924 11/19/2025
Loading failed