Skip to main content
Supported on: iOS SDK 1.0.70+ · Android SDK 1.0.42+ · React Native SDK 1.0.7+ (New Architecture only)
The experiments module assigns users to variants using a deterministic hash. No server call is needed — assignment is instant, works offline, and the same user always gets the same variant (as long as the user is in the experiment — see Who Is in an Experiment).

Get Variant

getVariant is asynchronous and returns the variant ID set in the Console or null if the experiment is not in the config the SDK holds, is not running (paused, completed or archived), does not target the current platform, or the user is outside its targeting rules or traffic allocation (SDK 1.0.19+, evaluated by the native SDK; see Who Is in an Experiment). experimentId is the experiment’s ID, not its name — copy it from the experiment’s page or the ID column of the experiments list in the Console; 'paywall-test' above is a placeholder.
Always handle the null / default case. Experiments can be archived or stopped at any time from the Console.

Check Membership

When you only need a boolean for a specific variant, isInVariant is a convenient shortcut:

Module Access

Module Methods

Exposure Tracking

The SDK automatically tracks an experiment_exposure event the first time it assigns a variant for a given experiment (on getVariant(), isInVariant() or a servable surface), and again only after an app restart or reset(). A user outside the experiment’s targeting or traffic allocation gets null and records no exposure. Exposure events power the metrics that the experimentation engine uses to compute results — you do not need to fire them yourself. To inspect what the SDK has already recorded for the current user, call getExposures():
This is useful for debugging, surfacing the active variant in a developer panel, or attaching the current bucket to your own analytics events.

Reacting to Assignment Changes

The SDK does not push assignment-change callbacks. Variant assignments are stable for a given user ID and experiment: variants and weights cannot change while an experiment runs. An assignment changes when the user ID changes (identify() or reset()), and getVariant returns null once the experiment is paused, completed or archived and the SDK has fetched config. If you need to refresh UI when the experiment configuration could have changed, re-read getVariant at natural moments in your app:
  • On app launch and on return from background
  • When you present the screen that depends on the variant
  • After a known config-refreshing action (e.g. login, environment switch)
Assignment changes are rare. They occur when the user ID changes or the experiment stops, not on every session start.

Experiment Lifecycle

A status change reaches the device with its next config fetch; until then the SDK keeps the definition it has. See Experiment Lifecycle.

Full Example

Experiments are created in the Console under Experiments. The SDK uses MurmurHash3 for deterministic assignment — the same user ID always gets the same variant across sessions, platforms, and offline.