Thin abstraction layer for WeWork A/B testing.

Usage no npm install needed!

<script type="module">
  import weworkWeExperimentJs from 'https://cdn.skypack.dev/@wework/we-experiment-js';



A thin abstraction layer for A/B testing.

Currently built on top of Split.io's JavaScript SDK.

This package is complemented by we-experiment-react.


npm install --save @wework/we-experiment-js


import weExperiment from 'we-experiment';

const experiments = weExperiment('USER_ID', 'SPLIT_API_KEY', {
  userAttributes: {
    // Optional user attributes

  .then(experiment => {
    // experiment is a string equal to the user's experiment variant, or null.
  .catch(error => {
    // we-experiment handles SDK init issues transparently, but in the unlikely event another error arises, you should catch it here

experiments.getExperiments(['foo', 'bar'])
  .then(experiments => {
      experiments === {
                        foo: '...',
                        bar: '...'

Additional attributes

When getting experiments, it is possible to add additional attributes to the userAttributes supplied at initialization, or override existing attributes.

const experiments = weExperiment('USER_ID', 'SPLIT_API_KEY', {
  userAttributes: {
    foo: 'foo' // initial attributes

experiments.getExperiment('bar', { bar: 'bar' }) // passed attributes are now { foo: 'foo', bar: 'bar' }
  .then(experiment => {})
  .catch(error => {});


It is possible to override experiments by initializing the library like so:

weExperiment('USER_ID', 'SPLIT_API_KEY', {
  experimentOverrides: {
    foo: 'variant_1',
    bar: 'variant_2'

Additional Split.io options

It's possible to pass additional options to the Split.io library in the following way:

weExperiment('USER_ID', {
  // ...
  extraOptions: {
    // Split.io factory options here

For more information on the possible options, see: http://docs.split.io/docs/javascript-sdk-overview#section-advanced-configuration-of-the-sdk

Note that core.authorizationKey and core.key are already passed as apiKey and userId respectively.
Additionally, features are passed in as experimentOverrides.


npm run build
npm version [patch, minor, major]
npm publish