Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
ba977bc
Merge pull request #4 from splitio/development
ZamoraEmmanuel Oct 1, 2025
4ee3fe2
Update README.md
EmilianoSanchez Oct 27, 2025
45e9653
README: add OpenFeature client initialization and fix typo in context…
EmilianoSanchez Oct 29, 2025
92b2857
Merge pull request #12 from splitio/EmilianoSanchez-patch-1
EmilianoSanchez Oct 29, 2025
f0bae1a
Add angular and react snippets to readme
ZamoraEmmanuel Nov 5, 2025
2553c23
fix snippet
ZamoraEmmanuel Nov 5, 2025
bf09cbc
Update README.md
ZamoraEmmanuel Nov 5, 2025
1a92882
Add instal dependencies section
ZamoraEmmanuel Nov 5, 2025
6375b41
Merge pull request #14 from splitio/angular-react-readme
ZamoraEmmanuel Nov 5, 2025
ec5bfd9
Fix Angular title
ZamoraEmmanuel Nov 5, 2025
6ebc78b
Merge pull request #15 from splitio/fix-readme
NicoZelaya Nov 5, 2025
e98a6be
Create pipeline test
MartinCardozo-SDK Feb 6, 2026
59cc994
Update pipeline test
MartinCardozo-SDK Feb 6, 2026
a0291b8
Update pipeline test
MartinCardozo-SDK Feb 6, 2026
39e11a9
Update pipeline test
MartinCardozo-SDK Feb 6, 2026
702a242
Update pipeline test
MartinCardozo-SDK Feb 6, 2026
f37e214
Delete .harness/test.yml
MartinCardozo-SDK Feb 6, 2026
0605195
Create pipeline test
MartinCardozo-SDK Feb 6, 2026
dc6f45e
Update pipeline test
MartinCardozo-SDK Feb 6, 2026
d6c87a7
Update pipeline test
MartinCardozo-SDK Feb 6, 2026
f1c9e3c
Update pipeline test
MartinCardozo-SDK Feb 6, 2026
2e71880
Update pipeline test
MartinCardozo-SDK Feb 6, 2026
a03b37b
Update pipeline test
MartinCardozo-SDK Feb 6, 2026
cc00ae2
Update pipeline test
MartinCardozo-SDK Feb 6, 2026
4240ee6
Update pipeline test
MartinCardozo-SDK Feb 6, 2026
455ad43
Update pipeline test
MartinCardozo-SDK Feb 6, 2026
29babac
Delete .github/workflows directory
MartinCardozo-SDK Feb 6, 2026
1ca1ead
Create inputset DefaultInput
MartinCardozo-SDK Feb 6, 2026
6a373a0
Update DefaultInput.yaml
MartinCardozo-SDK Feb 6, 2026
b3507a9
Update pipeline FME-openFeature-JS-web
MartinCardozo-SDK Feb 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 0 additions & 32 deletions .github/workflows/test.yml

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
inputSet:
name: DefaultInput

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

rename the input set, file name, name, and identifier
add tags: {} line

identifier: DefaultInput
orgIdentifier: PROD
projectIdentifier: Harness_Split
pipeline:
identifier: test
properties:
ci:
codebase:
build:
type: PR
spec:
number: <+trigger.branch>
68 changes: 68 additions & 0 deletions .harness/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
pipeline:
name: FME-openFeature-JS-web
identifier: test

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please rename the identifier, it can be fmeopenFeaturejsweb

projectIdentifier: Harness_Split
orgIdentifier: PROD
properties:
ci:
codebase:
connectorRef: splitio

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please don't use this connector, it will fail soon, because it's not a github app. use fmegithubharnessgitops for now

repoName: split-openfeature-provider-web-js
build: <+input>
stages:
- stage:
name: CI Stage
identifier: ci_stagex
type: CI
spec:
cloneCodebase: true
runtime:
type: Cloud
spec:
size: small
imageSpec:
imageName: ubuntu-latest
platform:
os: Linux
arch: Amd64
execution:
steps:
- step:
type: Action
name: Setup NodeJS
identifier: setup_nodejs
spec:
uses: dcodeIO/setup-node-nvm@master
with:
node-version: 20
- step:
type: Run
name: Install Dependencies
identifier: install_dependencies
spec:
shell: Bash
command: npm ci
- step:
type: Run
name: Run Checks
identifier: run_checks
spec:
shell: Sh
command: npm run check
- step:
identifier: run_tests
name: Run Tests
type: Test
spec:
command: npm run test
shell: Sh
reports:
type: JUnit
spec:
paths:
- "**/test-results.xml"
- "**/junit-*.xml"
envVariables:
NODE_ENV: test
CI: "true"
tags: {}
179 changes: 163 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Split OpenFeature Provider for NodeJS
# Split OpenFeature Provider for Web JavaScript
[![Twitter Follow](https://img.shields.io/twitter/follow/splitsoftware.svg?style=social&label=Follow&maxAge=1529000)](https://twitter.com/intent/follow?screen_name=splitsoftware)

## Overview
Expand Down Expand Up @@ -27,11 +27,17 @@ import { OpenFeatureSplitProvider } from '@splitsoftware/openfeature-web-split-p

const splitFactory = SplitFactory({
core: {
authorizationKey: 'your auth key'
authorizationKey: 'CLIENT_SIDE_SDK_KEY',
key: 'TARGETING_KEY'
}
});

const provider = new OpenFeatureSplitProvider(splitFactory);
OpenFeature.setProvider(provider);

// Register provider and wait for the default SDK client for 'TARGETING_KEY' to be ready
await OpenFeature.setProviderAndWait(provider);

const client = OpenFeature.getClient();
```

## Use of OpenFeature with Split
Expand All @@ -43,7 +49,7 @@ const context: EvaluationContext = {
targetingKey: 'TARGETING_KEY',
trafficType: 'account'
};
OpenFeature.setContext(context)
await OpenFeature.setContext(context)
```

## Evaluate with details
Expand All @@ -62,10 +68,11 @@ Evaluation attributes must be set in context before evaluation
const context: EvaluationContext = {
targetingKey: 'TARGETING_KEY',
trafficType: 'account',
// Evaluation attributes:
plan: 'premium',
couppon: 'WELCOME10'
coupon: 'WELCOME10'
};
OpenFeature.setContext(context);
await OpenFeature.setContext(context);
const booleanTreatment = client.getBooleanDetails('boolFlag', false);
```

Expand All @@ -89,11 +96,152 @@ Example:
const context = { targetingKey: 'user-123', trafficType: 'account' }
const details = { value: 19.99, properties: { plan: 'pro', coupon: 'WELCOME10' }}

client.setEvaluationContext(context)
await OpenFeature.setContext(context)
client.track('checkout.completed', details)
```

## Angular Usage

### Install dependencies
```bash
npm i @openfeature/angular-sdk @splitsoftware/splitio-browserjs @splitsoftware/openfeature-web-split-provider
```

### Initialize the Angular SDK

#### Traditional (NgModule) setup
```js
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { OpenFeatureModule } from '@openfeature/angular-sdk';
import { SplitFactory } from '@splitsoftware/splitio-browserjs';
import { OpenFeatureSplitProvider } from '@splitsoftware/openfeature-web-split-provider';

const splitFactory = SplitFactory({
core: {
authorizationKey: 'CLIENT_SIDE_SDK_KEY',
key: 'TARGETING_KEY'
}
});
const openFeatureProvider = new OpenFeatureSplitProvider(splitFactory);

@NgModule({
imports: [
RouterModule.forRoot(routes),
OpenFeatureModule.forRoot({
provider: openFeatureProvider
})
],
bootstrap: [AppComponent]
})
export class AppModule {}
```

#### Standalone (Angular 16+) setup
```js
import { ApplicationConfig, provideBrowserGlobalErrorListeners, importProvidersFrom } from '@angular/core';
import { OpenFeatureModule } from '@openfeature/angular-sdk';
import { SplitFactory } from '@splitsoftware/splitio-browserjs';
import { OpenFeatureSplitProvider } from '@splitsoftware/openfeature-web-split-provider';

const splitFactory = SplitFactory({
core: {
authorizationKey: 'CLIENT_SIDE_SDK_KEY',
key: 'TARGETING_KEY'
}
});
const openFeatureProvider = new OpenFeatureSplitProvider(splitFactory);

export const appConfig: ApplicationConfig = {
providers: [
provideBrowserGlobalErrorListeners(),
importProvidersFrom(
OpenFeatureModule.forRoot({
provider: openFeatureProvider
})
)
]
};
```

#### Component injection and usage
```js
import { FeatureFlagService, EvaluationDetails } from '@openfeature/angular-sdk';

@Component({
selector: 'app-root',
imports: [RouterOutlet],
templateUrl: './app.html',
styleUrl: './app.css'
})
export class App {
constructor(private splitService: FeatureFlagService) {}

ngOnInit() {
this.splitService.getStringDetails('featureFlagName', 'default').subscribe((result: EvaluationDetails<string>) => {
console.log('Feature flag result:', result.value);
});
}
}
```
> 🔗 For more information on Angular integration, visit the [official OpenFeature Angular SDK documentation][angular-docs].

[angular-docs]: https://openfeature.dev/docs/reference/sdks/client/web/angular

## React usage

### Install dependencies
```bash
npm i @openfeature/react-sdk @splitsoftware/splitio-browserjs @splitsoftware/openfeature-web-split-provider
```

### Initialize the React SDK
```js
import { OpenFeature } from '@openfeature/react-sdk';
import { OpenFeatureSplitProvider } from '@splitsoftware/openfeature-web-split-provider';
import { DebugLogger, SplitFactory } from '@splitsoftware/splitio-browserjs';

const splitFactory = SplitFactory({
core: {
authorizationKey: 'CLIENT_SIDE_SDK_KEY',
key: 'TARGETING_KEY'
}
})
const openFeatureProvider = new OpenFeatureSplitProvider(splitFactory);

OpenFeature.setProvider(openFeatureProvider);

function App() {
return (
<OpenFeatureProvider>
<Page></Page>
</OpenFeatureProvider>
);
}
```

#### Evaluation hooks
```js
import { useFlag } from '@openfeature/react-sdk';

function Page() {
// Use the "query-style" flag evaluation hook, specifying a flag-key and a default value.
const { value: showNewMessage } = useFlag('new-message', true);
return (
<div className="App">
<header className="App-header">
{showNewMessage ? <p>Welcome to this OpenFeature-enabled React app!</p> : <p>Welcome to this React app.</p>}
</header>
</div>
)
}
```
> 🔗 For more information on React integration, visit the [official OpenFeature React SDK documentation][react-docs].

[react-docs]: https://openfeature.dev/docs/reference/sdks/client/web/react

## Submitting issues

The Split team monitors all issues submitted to this [issue tracker](https://github.com/splitio/split-openfeature-provider-web-js/issues). We encourage you to use this issue tracker to submit any bug reports, feedback, and feature enhancements. We'll do our best to respond in a timely manner.

## Contributing
Expand All @@ -103,13 +251,13 @@ Please see [Contributors Guide](CONTRIBUTORS-GUIDE.md) to find all you need to s
Licensed under the Apache License, Version 2.0. See: [Apache License](http://www.apache.org/licenses/).

## About Split

Split is the leading Feature Delivery Platform for engineering teams that want to confidently deploy features as fast as they can develop them. Split’s fine-grained management, real-time monitoring, and data-driven experimentation ensure that new features will improve the customer experience without breaking or degrading performance. Companies like Twilio, Salesforce, GoDaddy and WePay trust Split to power their feature delivery.

To learn more about Split, contact hello@split.io, or get started with feature flags for free at https://www.split.io/signup.

Split has built and maintains SDKs for:

* .NET [Github](https://github.com/splitio/dotnet-client) [Docs](https://help.split.io/hc/en-us/articles/360020240172--NET-SDK)
* Android [Github](https://github.com/splitio/android-client) [Docs](https://help.split.io/hc/en-us/articles/360020343291-Android-SDK)
* Angular [Github](https://github.com/splitio/angular-sdk-plugin) [Docs](https://help.split.io/hc/en-us/articles/6495326064397-Angular-utilities)
Expand All @@ -128,10 +276,9 @@ Split has built and maintains SDKs for:
* React Native [Github](https://github.com/splitio/react-native-client) [Docs](https://help.split.io/hc/en-us/articles/4406066357901-React-Native-SDK)
* Redux [Github](https://github.com/splitio/redux-client) [Docs](https://help.split.io/hc/en-us/articles/360038851551-Redux-SDK)
* Ruby [Github](https://github.com/splitio/ruby-client) [Docs](https://help.split.io/hc/en-us/articles/360020673251-Ruby-SDK)

For a comprehensive list of open source projects visit our [Github page](https://github.com/splitio?utf8=%E2%9C%93&query=%20only%3Apublic%20).

**Learn more about Split:**

Visit [split.io/product](https://www.split.io/product) for an overview of Split, or visit our documentation at [help.split.io](http://help.split.io) for more detailed information.

Visit [split.io/product](https://www.split.io/product) for an overview of Split, or visit our documentation at [help.split.io](http://help.split.io) for more detailed information.
Loading