← All migration guides
Medium 1-2 hours

Migrate from Optimizely Feature Flags

Move your feature flags from Optimizely Feature Experimentation (formerly Rollout) to ShipSilently. Developer-first SDK, no complex decision service, and a simpler API.

Overview

Optimizely Feature Experimentation (formerly Optimizely Feature Flags / Rollout) is a powerful platform with a more complex API centered around experiments, variations, and a decision service. ShipSilently focuses on developer experience — simpler initialization, in-memory evaluation, and a clean context-based API.

Before you begin

  • You have an existing Optimizely Feature Experimentation project with flags/experiments in production
  • You have a ShipSilently account (create one free)
  • Your application uses the Optimizely Node.js or JavaScript SDK

Step 1: Set up your ShipSilently project

  1. Sign in to ShipSilently and create a new project.
  2. Copy your API key from Settings → API Keys.

Step 2: Map Optimizely concepts to ShipSilently

OptimizelyShipSilently
Feature FlagFlag
Feature VariableFlag variant
ExperimentFlag with percentage rollout
AudienceTargeting rule
User IDuserId in context
User AttributesContext object fields
DatafileManaged automatically

Step 3: Recreate your flags

For each Optimizely feature flag:

  1. Create a flag in ShipSilently with the same key
  2. Recreate audience conditions as targeting rules (e.g., plan === 'enterprise', country === 'US')
  3. For feature variables, use ShipSilently variant flags

Step 4: Replace the SDK

# Remove Optimizely SDK
npm uninstall @optimizely/optimizely-sdk

# Install ShipSilently
npm install @shipsilently/node

Step 5: Update initialization

Before (Optimizely):

import { createInstance } from '@optimizely/optimizely-sdk';

const optimizely = createInstance({
  sdkKey: process.env.OPTIMIZELY_SDK_KEY,
});

await optimizely.onReady();

After (ShipSilently):

import { initialize } from '@shipsilently/node';

export const flags = initialize(process.env.SHIPSILENTLY_KEY);

Step 6: Update flag evaluations

Before (Optimizely):

const isEnabled = optimizely.isFeatureEnabled(
  'new-checkout',
  user.id,
  { plan: user.plan, country: user.country }
);

After (ShipSilently):

const isEnabled = await flags.getFlag('new-checkout', {
  userId: user.id,
  plan: user.plan,
  country: user.country,
});

API comparison

OptimizelyShipSilently
optimizely.isFeatureEnabled(key, userId, attrs)flags.getFlag(key, context)
optimizely.getFeatureVariable(key, varKey, userId, attrs)flags.getVariant(key, context)
optimizely.getEnabledFeatures(userId, attrs)flags.getAllFlags(context)
Requires datafile fetch + onReady()In-memory evaluation after initial sync

Step 7: Feature variables migration

Optimizely’s feature variables allow attaching configuration values to features. Use ShipSilently variant flags for the same capability.

Before (Optimizely):

const headerColor = optimizely.getFeatureVariable(
  'redesign',
  'header_color',
  user.id,
  { plan: user.plan }
); // '#00E5FF'

After (ShipSilently):

const headerColor = await flags.getVariant('redesign-header-color', {
  userId: user.id,
  plan: user.plan,
}); // '#00E5FF'

Step 8: Set your environment variable

# Remove
OPTIMIZELY_SDK_KEY=xxxx

# Add
SHIPSILENTLY_KEY=ss-live-xxxx

Step 9: Verify and cut over

  1. Deploy to staging with SHIPSILENTLY_KEY
  2. Verify all flags evaluate as expected in the ShipSilently Analytics view
  3. Run any A/B experiment segments through the new SDK to confirm targeting parity
  4. Deploy to production, remove the Optimizely SDK, and revoke your Optimizely credentials

What’s next

  • Read the ShipSilently SDK docs
  • Set up percentage rollouts and A/B targeting in the dashboard
  • Use the REST API to automate flag management in your deployment pipeline

Ready to start your migration?

Create a free ShipSilently account and have your first flag live in minutes.