diff --git a/docs/reference/sdks/client/kotlin.mdx b/docs/reference/sdks/client/kotlin.mdx index de0bf441b..3454beec6 100644 --- a/docs/reference/sdks/client/kotlin.mdx +++ b/docs/reference/sdks/client/kotlin.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from kotlin-sdk. Edits should be made here: https://github.com/open-feature/kotlin-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Thu Dec 04 2025 17:46:52 GMT+0000 (Coordinated Universal Time) +Last updated at Fri Dec 12 2025 08:11:53 GMT+0000 (Coordinated Universal Time) --> import MCPInstall from '@site/src/partials/mcp-install'; diff --git a/docs/reference/sdks/client/swift.mdx b/docs/reference/sdks/client/swift.mdx index a45c2b9f9..f9af0b8f3 100644 --- a/docs/reference/sdks/client/swift.mdx +++ b/docs/reference/sdks/client/swift.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from swift-sdk. Edits should be made here: https://github.com/open-feature/swift-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Thu Dec 04 2025 17:46:52 GMT+0000 (Coordinated Universal Time) +Last updated at Fri Dec 12 2025 08:11:53 GMT+0000 (Coordinated Universal Time) --> import MCPInstall from '@site/src/partials/mcp-install'; diff --git a/docs/reference/sdks/client/web/angular.mdx b/docs/reference/sdks/client/web/angular.mdx index 54bb572cf..afe2a2bab 100644 --- a/docs/reference/sdks/client/web/angular.mdx +++ b/docs/reference/sdks/client/web/angular.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Thu Dec 04 2025 17:46:52 GMT+0000 (Coordinated Universal Time) +Last updated at Fri Dec 12 2025 08:11:53 GMT+0000 (Coordinated Universal Time) -->
@@ -94,9 +94,9 @@ yarn add @openfeature/angular-sdk @openfeature/web-sdk @openfeature/core The following list contains the peer dependencies of `@openfeature/angular-sdk`. See the [package.json](https://github.com/open-feature/js-sdk/blob/main/packages/angular/projects/angular-sdk/package.json) for the required versions. -* `@openfeature/web-sdk` -* `@angular/common` -* `@angular/core` +- `@openfeature/web-sdk` +- `@angular/common` +- `@angular/core` ### Usage @@ -123,11 +123,10 @@ import { OpenFeatureModule } from '@openfeature/angular-sdk'; domain1: new YourOpenFeatureProvider(), domain2: new YourOtherOpenFeatureProvider(), }, - }) + }), ], }) -export class AppModule { -} +export class AppModule {} ``` ##### Minimal Example @@ -138,9 +137,7 @@ If `initializing` and `reconciling` are not given, the feature flag value that i determine what will be rendered. ```html -
Welcome to this OpenFeature-enabled React app!
:Welcome to this React app.
} - ) + ); } ``` @@ -165,12 +165,7 @@ const value = useBooleanFlagValue('new-message', false); import { useBooleanFlagDetails } from '@openfeature/react-sdk'; // "detailed" boolean flag evaluation -const { - value, - variant, - reason, - flagMetadata -} = useBooleanFlagDetails('new-message', false); +const { value, variant, reason, flagMetadata } = useBooleanFlagDetails('new-message', false); ``` #### Multiple Providers and Domains @@ -408,4 +403,4 @@ Avoid importing anything from `@openfeature/web-sdk` or `@openfeature/core`. ## Resources - - [Example repo](https://github.com/open-feature/react-test-app) +- [Example repo](https://github.com/open-feature/react-test-app) diff --git a/docs/reference/sdks/server/dart.mdx b/docs/reference/sdks/server/dart.mdx index cfec6f2a3..d66a4f4a3 100644 --- a/docs/reference/sdks/server/dart.mdx +++ b/docs/reference/sdks/server/dart.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from dart-server-sdk. Edits should be made here: https://github.com/open-feature/dart-server-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Thu Dec 04 2025 17:46:52 GMT+0000 (Coordinated Universal Time) +Last updated at Fri Dec 12 2025 08:11:53 GMT+0000 (Coordinated Universal Time) -->
diff --git a/docs/reference/sdks/server/dotnet.mdx b/docs/reference/sdks/server/dotnet.mdx
index b92a86207..60a4e1145 100644
--- a/docs/reference/sdks/server/dotnet.mdx
+++ b/docs/reference/sdks/server/dotnet.mdx
@@ -10,7 +10,7 @@ This content has been automatically generated from dotnet-sdk.
Edits should be made here: https://github.com/open-feature/dotnet-sdk
Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs
-Last updated at Thu Dec 04 2025 17:46:52 GMT+0000 (Coordinated Universal Time)
+Last updated at Fri Dec 12 2025 08:11:52 GMT+0000 (Coordinated Universal Time)
-->
import MCPInstall from '@site/src/partials/mcp-install';
diff --git a/docs/reference/sdks/server/go.mdx b/docs/reference/sdks/server/go.mdx
index 420ac6311..c44fc6781 100644
--- a/docs/reference/sdks/server/go.mdx
+++ b/docs/reference/sdks/server/go.mdx
@@ -9,7 +9,7 @@ This content has been automatically generated from go-sdk.
Edits should be made here: https://github.com/open-feature/go-sdk
Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs
-Last updated at Thu Dec 04 2025 17:46:52 GMT+0000 (Coordinated Universal Time)
+Last updated at Fri Dec 12 2025 08:11:52 GMT+0000 (Coordinated Universal Time)
-->
import MCPInstall from '@site/src/partials/mcp-install';
diff --git a/docs/reference/sdks/server/java.mdx b/docs/reference/sdks/server/java.mdx
index 113d21fb0..f44efc5e3 100644
--- a/docs/reference/sdks/server/java.mdx
+++ b/docs/reference/sdks/server/java.mdx
@@ -9,7 +9,7 @@ This content has been automatically generated from java-sdk.
Edits should be made here: https://github.com/open-feature/java-sdk
Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs
-Last updated at Thu Dec 04 2025 17:46:52 GMT+0000 (Coordinated Universal Time)
+Last updated at Fri Dec 12 2025 08:11:51 GMT+0000 (Coordinated Universal Time)
-->
import MCPInstall from '@site/src/partials/mcp-install';
@@ -20,8 +20,8 @@ import MCPInstall from '@site/src/partials/mcp-install';
-
-
diff --git a/src/datasets/sdks/sdk-compatibility.json b/src/datasets/sdks/sdk-compatibility.json
index 219edb694..ec041f021 100644
--- a/src/datasets/sdks/sdk-compatibility.json
+++ b/src/datasets/sdks/sdk-compatibility.json
@@ -4,8 +4,8 @@
"path": "/docs/reference/sdks/server/java",
"category": "Server",
"release": {
- "href": "https://github.com/open-feature/java-sdk/releases/tag/v1.19.0",
- "version": "1.19.0",
+ "href": "https://github.com/open-feature/java-sdk/releases/tag/v1.19.2",
+ "version": "1.19.2",
"stable": true
},
"spec": {
@@ -64,8 +64,8 @@
"path": "/docs/reference/sdks/server/javascript",
"category": "Server",
"release": {
- "href": "https://github.com/open-feature/js-sdk/releases/tag/server-sdk-v1.20.0",
- "version": "1.20.0",
+ "href": "https://github.com/open-feature/js-sdk/releases/tag/server-sdk-v1.20.1",
+ "version": "1.20.1",
"stable": true
},
"spec": {
@@ -244,8 +244,8 @@
"path": "/docs/reference/sdks/server/python",
"category": "Server",
"release": {
- "href": "https://github.com/open-feature/python-sdk/releases/tag/v0.8.3",
- "version": "0.8.3",
+ "href": "https://github.com/open-feature/python-sdk/releases/tag/v0.8.4",
+ "version": "0.8.4",
"stable": false
},
"spec": {
@@ -364,8 +364,8 @@
"path": "/docs/reference/sdks/client/web",
"category": "Client",
"release": {
- "href": "https://github.com/open-feature/js-sdk/releases/tag/web-sdk-v1.7.1",
- "version": "1.7.1",
+ "href": "https://github.com/open-feature/js-sdk/releases/tag/web-sdk-v1.7.2",
+ "version": "1.7.2",
"stable": true
},
"spec": {
+
+
@@ -59,7 +59,7 @@ Note that this library is intended to be used in server-side contexts and has no
-
-
+
+
@@ -90,7 +90,7 @@ const client = OpenFeature.getClient();
const v2Enabled = await client.getBooleanValue('v2_enabled', false);
if (v2Enabled) {
- console.log("v2 is enabled");
+ console.log('v2 is enabled');
}
```
@@ -100,19 +100,19 @@ See [here](https://open-feature.github.io/js-sdk/modules/_openfeature_server_sdk
## Features
-| Status | Features | Description |
-| ------ | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
-| ✅ | [Providers](#providers) | Integrate with a commercial, open source, or in-house feature management tool. |
-| ✅ | [Targeting](#targeting) | Contextually-aware flag evaluation using [evaluation context](/docs/reference/concepts/evaluation-context). |
-| ✅ | [Hooks](#hooks) | Add functionality to various stages of the flag evaluation life-cycle. |
-| ✅ | [Logging](#logging) | Integrate with popular logging packages. |
-| ✅ | [Domains](#domains) | Logically bind clients with providers. |
-| ✅ | [Eventing](#eventing) | React to state changes in the provider or flag management system. |
-| ✅ | [Transaction Context Propagation](#transaction-context-propagation) | Set a specific [evaluation context](/docs/reference/concepts/evaluation-context) for a transaction (e.g. an HTTP request or a thread) |
-| ✅ | [Tracking](#tracking) | Associate user actions with feature flag evaluations, particularly for A/B testing. |
-| ✅ | [Shutdown](#shutdown) | Gracefully clean up a provider during application shutdown. |
-| ✅ | [Extending](#extending) | Extend OpenFeature with custom providers and hooks. |
-| ✅ | [Multi-Provider](#multi-provider) | Combine multiple providers with configurable evaluation strategies. |
+| Status | Features | Description |
+| ------ | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| ✅ | [Providers](#providers) | Integrate with a commercial, open source, or in-house feature management tool. |
+| ✅ | [Targeting](#targeting) | Contextually-aware flag evaluation using [evaluation context](/docs/reference/concepts/evaluation-context). |
+| ✅ | [Hooks](#hooks) | Add functionality to various stages of the flag evaluation life-cycle. |
+| ✅ | [Logging](#logging) | Integrate with popular logging packages. |
+| ✅ | [Domains](#domains) | Logically bind clients with providers. |
+| ✅ | [Eventing](#eventing) | React to state changes in the provider or flag management system. |
+| ✅ | [Transaction Context Propagation](#transaction-context-propagation) | Set a specific [evaluation context](/docs/reference/concepts/evaluation-context) for a transaction (e.g. an HTTP request or a thread) |
+| ✅ | [Tracking](#tracking) | Associate user actions with feature flag evaluations, particularly for A/B testing. |
+| ✅ | [Shutdown](#shutdown) | Gracefully clean up a provider during application shutdown. |
+| ✅ | [Extending](#extending) | Extend OpenFeature with custom providers and hooks. |
+| ✅ | [Multi-Provider](#multi-provider) | Combine multiple providers with configurable evaluation strategies. |
Implemented: ✅ | In-progress: ⚠️ | Not implemented yet: ❌
@@ -164,10 +164,7 @@ const primaryProvider = new YourPrimaryProvider();
const backupProvider = new YourBackupProvider();
// Create multi-provider with a strategy
-const multiProvider = new MultiProvider(
- [primaryProvider, backupProvider],
- new FirstMatchStrategy()
-);
+const multiProvider = new MultiProvider([primaryProvider, backupProvider], new FirstMatchStrategy());
// Register the multi-provider
await OpenFeature.setProviderAndWait(multiProvider);
@@ -193,7 +190,7 @@ const oldProvider = new OldFlagProvider();
const multiProvider = new MultiProvider(
[newProvider, oldProvider], // New provider is consulted first
- new FirstMatchStrategy()
+ new FirstMatchStrategy(),
);
await OpenFeature.setProviderAndWait(multiProvider);
@@ -209,13 +206,10 @@ const providerA = new ProviderA();
const providerB = new ProviderB();
const multiProvider = new MultiProvider(
- [
- { provider: providerA },
- { provider: providerB }
- ],
+ [{ provider: providerA }, { provider: providerB }],
new ComparisonStrategy(providerA, (resolutions) => {
console.warn('Mismatch detected', resolutions);
- })
+ }),
);
await OpenFeature.setProviderAndWait(multiProvider);
@@ -229,7 +223,7 @@ If the flag management system you're using supports targeting, you can provide t
```ts
// set a value to the global context
-OpenFeature.setContext({ region: "us-east-1" });
+OpenFeature.setContext({ region: 'us-east-1' });
// set a value to the client context
const client = OpenFeature.getClient();
@@ -239,7 +233,7 @@ client.setContext({ version: process.env.APP_VERSION });
const requestContext = {
targetingKey: req.session.id,
email: req.session.email,
- product: req.productId
+ product: req.productId,
};
const boolValue = await client.getBooleanValue('some-flag', false, requestContext);
@@ -257,7 +251,7 @@ If the hook you're looking for hasn't been created yet, see the [develop a hook]
Once you've added a hook as a dependency, it can be registered at the global, client, or flag invocation level.
```ts
-import { OpenFeature } from "@openfeature/server-sdk";
+import { OpenFeature } from '@openfeature/server-sdk';
// add a hook globally, to run on all evaluations
OpenFeature.addHooks(new ExampleGlobalHook());
@@ -267,7 +261,7 @@ const client = OpenFeature.getClient();
client.addHooks(new ExampleClientHook());
// add a hook for this evaluation only
-const boolValue = await client.getBooleanValue("bool-flag", false, { hooks: [new ExampleHook()]});
+const boolValue = await client.getBooleanValue('bool-flag', false, { hooks: [new ExampleHook()] });
```
### Logging
@@ -277,7 +271,7 @@ This behavior can be overridden by passing a custom logger either globally or pe
A custom logger must implement the [Logger interface](https://github.com/open-feature/js-sdk/blob/main/packages/shared/src/logger/logger.ts).
```ts
-import type { Logger } from "@openfeature/server-sdk";
+import type { Logger } from '@openfeature/server-sdk';
// The logger can be anything that conforms with the Logger interface
const logger: Logger = console;
@@ -297,28 +291,28 @@ A domain is a logical identifier which can be used to associate clients with a p
If a domain has no associated provider, the default provider is used.
```ts
-import { OpenFeature, InMemoryProvider } from "@openfeature/server-sdk";
+import { OpenFeature, InMemoryProvider } from '@openfeature/server-sdk';
const myFlags = {
- 'v2_enabled': {
+ v2_enabled: {
variants: {
on: true,
- off: false
+ off: false,
},
disabled: false,
- defaultVariant: "on"
- }
+ defaultVariant: 'on',
+ },
};
// Registering the default provider
OpenFeature.setProvider(InMemoryProvider(myFlags));
// Registering a provider to a domain
-OpenFeature.setProvider("my-domain", new InMemoryProvider(someOtherFlags));
+OpenFeature.setProvider('my-domain', new InMemoryProvider(someOtherFlags));
// A Client bound to the default provider
const clientWithDefault = OpenFeature.getClient();
// A Client bound to the InMemoryProvider provider
-const domainScopedClient = OpenFeature.getClient("my-domain");
+const domainScopedClient = OpenFeature.getClient('my-domain');
```
Domains can be defined on a provider during registration.
@@ -355,22 +349,22 @@ Transaction context can be set where specific data is available (e.g. an auth se
The following example shows an Express middleware using transaction context propagation to propagate the request ip and user id into request scoped transaction context.
```ts
-import express, { Request, Response, NextFunction } from "express";
+import express, { Request, Response, NextFunction } from 'express';
import { OpenFeature, AsyncLocalStorageTransactionContextPropagator } from '@openfeature/server-sdk';
-OpenFeature.setTransactionContextPropagator(new AsyncLocalStorageTransactionContextPropagator())
+OpenFeature.setTransactionContextPropagator(new AsyncLocalStorageTransactionContextPropagator());
/**
* This example is based on an express middleware.
*/
const app = express();
app.use((req: Request, res: Response, next: NextFunction) => {
- const ip = res.headers.get("X-Forwarded-For")
+ const ip = res.headers.get('X-Forwarded-For');
OpenFeature.setTransactionContext({ targetingKey: req.user.id, ipAddress: ip }, () => {
// The transaction context is used in any flag evaluation throughout the whole call chain of next
next();
});
-})
+});
```
### Tracking
@@ -396,7 +390,7 @@ This should only be called when your application is in the process of shutting d
```ts
import { OpenFeature } from '@openfeature/server-sdk';
-await OpenFeature.close()
+await OpenFeature.close();
```
## Extending
@@ -416,7 +410,7 @@ import {
Logger,
Provider,
ProviderEventEmitter,
- ResolutionDetails
+ ResolutionDetails,
} from '@openfeature/server-sdk';
// implement the provider interface
@@ -428,16 +422,36 @@ class MyProvider implements Provider {
} as const;
// Optional provider managed hooks
hooks?: Hook[];
- resolveBooleanEvaluation(flagKey: string, defaultValue: boolean, context: EvaluationContext, logger: Logger): Promise
+
+
@@ -59,13 +59,13 @@ import MCPInstall from '@site/src/partials/mcp-install';
#### Pip install
```bash
-pip install openfeature-sdk==0.8.3
+pip install openfeature-sdk==0.8.4
```
#### requirements.txt
```bash
-openfeature-sdk==0.8.3
+openfeature-sdk==0.8.4
```
```python
diff --git a/docs/reference/sdks/server/ruby.mdx b/docs/reference/sdks/server/ruby.mdx
index 32bbe2edb..7c9b25f7c 100644
--- a/docs/reference/sdks/server/ruby.mdx
+++ b/docs/reference/sdks/server/ruby.mdx
@@ -10,7 +10,7 @@ This content has been automatically generated from ruby-sdk.
Edits should be made here: https://github.com/open-feature/ruby-sdk
Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs
-Last updated at Thu Dec 04 2025 17:46:52 GMT+0000 (Coordinated Universal Time)
+Last updated at Fri Dec 12 2025 08:11:53 GMT+0000 (Coordinated Universal Time)
-->
import MCPInstall from '@site/src/partials/mcp-install';
diff --git a/docs/reference/sdks/server/rust.mdx b/docs/reference/sdks/server/rust.mdx
index 7f199fb34..e9172232f 100644
--- a/docs/reference/sdks/server/rust.mdx
+++ b/docs/reference/sdks/server/rust.mdx
@@ -9,7 +9,7 @@ This content has been automatically generated from rust-sdk.
Edits should be made here: https://github.com/open-feature/rust-sdk
Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs
-Last updated at Thu Dec 04 2025 17:46:53 GMT+0000 (Coordinated Universal Time)
+Last updated at Fri Dec 12 2025 08:11:54 GMT+0000 (Coordinated Universal Time)
-->