Featureflip.OpenFeature
0.3.1
dotnet add package Featureflip.OpenFeature --version 0.3.1
NuGet\Install-Package Featureflip.OpenFeature -Version 0.3.1
<PackageReference Include="Featureflip.OpenFeature" Version="0.3.1" />
<PackageVersion Include="Featureflip.OpenFeature" Version="0.3.1" />
<PackageReference Include="Featureflip.OpenFeature" />
paket add Featureflip.OpenFeature --version 0.3.1
#r "nuget: Featureflip.OpenFeature, 0.3.1"
#:package Featureflip.OpenFeature@0.3.1
#addin nuget:?package=Featureflip.OpenFeature&version=0.3.1
#tool nuget:?package=Featureflip.OpenFeature&version=0.3.1
Featureflip.OpenFeature
OpenFeature provider for
Featureflip, backed by the Featureflip.Client
.NET server SDK.
Installation
dotnet add package OpenFeature
dotnet add package Featureflip.Client
dotnet add package Featureflip.OpenFeature
Usage
using OpenFeature;
using Featureflip.OpenFeature;
await Api.Instance.SetProviderAsync(new FeatureflipProvider("your-server-sdk-key"));
var client = Api.Instance.GetClient();
var enabled = await client.GetBooleanValueAsync("new-checkout", false,
EvaluationContext.Builder().SetTargetingKey("user-42").Build());
The constructor accepts either a server SDK key (with optional
FeatureFlagOptions) or an existing IFeatureflipClient. When given a key, the
provider obtains a client via the SDK's singleton-by-construction factory, so it
shares one underlying client core with any direct SDK usage of the same key.
Lifecycle: the provider disposes its IFeatureflipClient on shutdown
(Api.Instance.ShutdownAsync() / provider replacement) only when it created
that client itself — i.e. when constructed from an SDK key. If you construct
the provider from your own IFeatureflipClient instance, the provider leaves
it running; disposing it (or not) is up to you.
targetingKeymaps to Featureflip'suser_id(used for rollout bucketing); an explicituser_id/userIdattribute takes precedence.- The matched variation key surfaces as
Variant;ruleId/prerequisiteKeysurface inFlagMetadata.
Reasons
| Featureflip outcome | OpenFeature reason | ErrorType |
|---|---|---|
| Targeting rule matched | TARGETING_MATCH |
— |
| Fallthrough serve | DEFAULT |
— |
| Flag disabled | DISABLED |
— |
| Prerequisite not met | PREREQUISITE_FAILED |
— |
| Flag not found | ERROR |
FLAG_NOT_FOUND |
| Wrong value type | ERROR |
TYPE_MISMATCH |
| Evaluation error | ERROR |
GENERAL |
Reacting to flag changes
The provider emits PROVIDER_CONFIGURATION_CHANGED whenever flag configuration
changes after startup, carrying the affected flag keys:
using OpenFeature;
using OpenFeature.Constant;
Api.Instance.AddHandler(ProviderEventTypes.ProviderConfigurationChanged, details =>
{
Console.WriteLine($"flags changed: {string.Join(", ", details.FlagsChanged ?? [])}");
});
A flag is reported when it is created, deleted, redefined, when a segment its
targeting rules reference changes, or when a flag it lists as a prerequisite
changes. The initial flag load does not fire the event — OpenFeature signals that
with PROVIDER_READY.
Limitations
- No tracking: the .NET SDK has no custom-event API, so
Track()is a no-op. - Object flags accept objects and arrays only: a Json flag holding a bare
primitive resolves as
TYPE_MISMATCH.
Full documentation: https://featureflip.io/docs/integrations/openfeature/
License
Apache-2.0
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. 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 was computed. 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 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. |
| .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 was computed. |
| .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. |
-
.NETStandard 2.0
- Featureflip.Client (>= 2.7.0)
- OpenFeature (>= 2.14.1)
- System.Text.Json (>= 8.0.6)
-
net8.0
- Featureflip.Client (>= 2.7.0)
- OpenFeature (>= 2.14.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.