Komento.OpenFeature 0.3.0-alpha

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

Komento

A storage-agnostic experimentation and feature flag engine for .NET. Its primary operation is the experiment check: given a flag key and a subject, deterministically return which variant they belong to.

var result = await client.GetVariantAsync("checkout-flow", userId, ctx);
if (result == "treatment")
    return NewCheckout();

Design goals

  • Zero I/O in the hot path: all evaluation is in-memory.
  • Near-zero allocations: ValueTask, Span<T>, FrozenDictionary, ArrayPool<T>.
  • Pluggable at every seam: swap in your own config source, segment store, subject resolver, or context enricher.
  • Exposure and conversion data you can send anywhere, plus metrics and traces out of the box.
  • OpenFeature support via the Komento.OpenFeature provider package.

Packages

Package Purpose NuGet
Komento Core engine, all interfaces, DI registration NuGet
Komento.AspNetCore ASP.NET Core integration (filters, subject provider, enrichers) NuGet
Komento.Http Load experiment configs from an HTTP endpoint NuGet
Komento.Sinks Batched, isolated sinks for exposures and conversions (R3) NuGet
Komento.OpenFeature OpenFeature provider adapter NuGet
Komento.OpenFeature.AspNetCore Per-request OpenFeature context built from Komento's ASP.NET Core enrichers NuGet
Komento.Generators Source generator: compile-time constants for experiment ids NuGet

Quick start

1. Define an experiment in appsettings.json:

{
  "Komento": {
    "Experiments": [
      {
        "id": "checkout-flow",
        "subjectType": "user",
        "variants": [
          { "name": "control",   "allocation": 0.5 },
          { "name": "treatment", "allocation": 0.5 }
        ]
      }
    ]
  }
}

2. Register Komento and load the configs before accepting traffic:

builder.Services
    .AddKomento()
    .AddSource<AppSettingsExperimentSource>();     // reads the "Komento" section

var app = builder.Build();

await app.Services.InitializeKomentoAsync();
await app.RunAsync();

3. Evaluate. Inject IExperimentClient anywhere:

public class CheckoutService(IExperimentClient experiments)
{
    public async Task<string> Checkout(string userId)
    {
        var ctx     = EvaluationContext.Create().Set("platform", "web").Build();
        var variant = await experiments.GetVariantAsync("checkout-flow", userId, ctx);

        return variant == "treatment" ? "new flow" : "legacy flow";
    }
}

The same subject always gets the same variant. From here, add what you need:

Documentation

Page Covers
Concepts How assignment works, the result type, evaluation context, static context
Configuration Experiment format, sources, hot reload, segments, typed ids
ASP.NET Core [RequireVariant], subject providers, enrichers
OpenFeature The provider: lifecycle, context, details, change events, tracking
Exposures and conversions The data an experiment produces and how to measure results
Sinks Delivering exposures and conversions to a destination
Metrics and traces The Komento meter and feature_flag.evaluation events
Extension points Reference for every public interface
Performance Allocation behavior and benchmarks
Sample A runnable e-commerce API using all of the above
Contributing Build, test, benchmark
Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Komento.OpenFeature:

Package Downloads
Komento.OpenFeature.AspNetCore

Per-request OpenFeature transaction context built from Komento's ASP.NET Core enrichers.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.3.0-alpha 40 10/7/2026
0.2.0-alpha 88 6/10/2026
0.1.1-alpha 70 5/7/2026
0.1.0-alpha 68 5/1/2026

## Highlights
- **Exposures and conversions you can send anywhere.** Exposures (who saw which variant) and conversions (what they did next) flow through opt-in streams into batched, isolated sinks (), with drop counters for every stage.
- **Metrics and traces out of the box.** A  meter ( by experiment, variant and outcome) and  events on the active trace, following the OpenTelemetry convention.
- **A complete OpenFeature provider.** Lifecycle,  events, accurate resolution details (, , , , error messages, flag metadata), , and a new  package that builds the evaluation context once per request.
- **Analysis-ready exposures.** Each exposure carries  (a fingerprint of the experiment's definition) and, per experiment, the context attributes listed under .
- **Restructured documentation.** The README is a front page; the detail lives in topic pages under .

## New
- , , , and  for conversions, natively and through OpenFeature.
- , ,  (with , , ).
- : one notification per update with the ids that really changed.
-  and ; .
-  is public.
-  is public; .
-  ( in JSON and appsettings).

## Breaking changes
-  is now ; the sink pipeline is generic over the event type.
-  and  are gone; use  and the  overloads.
- OpenFeature reasons: hashed assignment is  (was ) and a wrong value type is  (was ).
-  has new optional constructor arguments.
- ,  and  have new members.

## Fixes
-  is now applied to every evaluation.
- Exposure timestamps come from the registered .

## Maintenance
- Aspire samples and tests upgraded to 13.6.1, which no longer pulls the vulnerable  2.5.192.