Swevo.AutoFeatureFlag 1.0.1

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

Swevo.AutoFeatureFlag

NuGet CI

Compile-time feature flag stubs for .NET. Decorate an enum with [FeatureFlags] and get a strongly-typed interface and class — no reflection, no Microsoft.FeatureManagement overhead, AOT-safe.

[FeatureFlags]
public enum AppFeatures
{
    DarkMode,
    NewCheckout,
    BetaApi
}

// ↓ Generator produces ↓

public interface IAppFeaturesFlags
{
    bool IsDarkModeEnabled   { get; }
    bool IsNewCheckoutEnabled { get; }
    bool IsBetaApiEnabled    { get; }
}

public sealed class AppFeaturesFlags : IAppFeaturesFlags
{
    public AppFeaturesFlags(IFeatureFlagProvider provider) ...
    public bool IsDarkModeEnabled    => provider.IsEnabled("DarkMode");
    public bool IsNewCheckoutEnabled => provider.IsEnabled("NewCheckout");
    public bool IsBetaApiEnabled     => provider.IsEnabled("BetaApi");
}

Why not Microsoft.FeatureManagement?

Microsoft.FeatureManagement Swevo.AutoFeatureFlag
Flag access await featureManager.IsEnabledAsync("DarkMode") flags.IsDarkModeEnabled
Typos Runtime crash Compile error
Dependencies Microsoft.FeatureManagement + Microsoft.Extensions.* Zero
AOT ⚠️ reflection
Test override Configuration / snapshots provider.Enable("DarkMode")

Quick Start

dotnet add package Swevo.AutoFeatureFlag
// 1. Define your flags
[FeatureFlags]
public enum Features { DarkMode, BetaCheckout }

// 2. Wire up (choose your DI framework)
var provider = new InMemoryFeatureFlagProvider();
services.AddSingleton<IFeatureFlagProvider>(provider);
services.AddSingleton<IFeaturesFlags, FeaturesFlags>();

// 3. Inject and use
public class CheckoutService(IFeaturesFlags flags)
{
    public void Process()
    {
        if (flags.IsBetaCheckoutEnabled)
            RunBetaCheckout();
        else
            RunCheckout();
    }
}

InMemoryFeatureFlagProvider

The bundled in-memory provider is thread-safe and defaults all flags to disabled.

var provider = new InMemoryFeatureFlagProvider();

provider.Enable("DarkMode");           // → IsEnabled("DarkMode") == true
provider.Disable("DarkMode");          // → IsEnabled("DarkMode") == false
provider.SetEnabled("DarkMode", true); // same as Enable

Testing

public class CheckoutServiceTests
{
    private readonly InMemoryFeatureFlagProvider _provider = new();
    private readonly FeaturesFlags _flags;

    public CheckoutServiceTests() => _flags = new FeaturesFlags(_provider);

    [Fact]
    public void BetaCheckout_WhenEnabled_UsesBetaPath()
    {
        _provider.Enable("BetaCheckout");
        var sut = new CheckoutService(_flags);
        // assert beta path taken ...
    }
}

Custom Providers

Implement IFeatureFlagProvider to read from any source — configuration, database, LaunchDarkly, etc.:

public sealed class ConfigFeatureFlagProvider(IConfiguration config) : IFeatureFlagProvider
{
    public bool IsEnabled(string flagName)
        => config.GetValue<bool>($"FeatureFlags:{flagName}");

    public void Enable(string flagName)  => throw new NotSupportedException("Use appsettings.json");
    public void Disable(string flagName) => throw new NotSupportedException("Use appsettings.json");
    public void SetEnabled(string flagName, bool enabled) => throw new NotSupportedException();
}

Diagnostics

ID Severity Description
AFF001 Warning [FeatureFlags] enum has no members — no code is generated

Part of the Swevo ecosystem

Package Purpose
Swevo.AutoFeatureFlag This package
Swevo.AutoResult Result<T> + TryWrap wrappers
Swevo.AutoAudit Audit fields (CreatedAt, UpdatedAt)
Swevo.EFCore.SoftDelete Soft delete + global query filters
Swevo.EFCore.StronglyTyped Strongly-typed IDs for EF Core
Swevo.EFCore.Outbox Transactional outbox pattern

License

MIT © 2026 Justin Bannister

There are no supported framework assets in this package.

Learn more about Target Frameworks and .NET Standard.

  • .NETStandard 2.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.1 133 6/26/2026

1.0.0: [FeatureFlags] attribute, IFeatureFlagProvider, InMemoryFeatureFlagProvider, strongly-typed interface and class generation per enum.