Migrate from Flagsmith
Move your feature flags from Flagsmith (self-hosted or cloud) to ShipSilently. Fewer moving parts, lower latency, and a simpler developer experience.
Overview
Flagsmith and ShipSilently are closely aligned in their feature set. Both support boolean flags, remote config, and user/segment targeting. This guide covers replacing the Flagsmith SDK with ShipSilently with minimal code changes.
Before you begin
- You have an existing Flagsmith project (Cloud, on-premises, or open source) with flags in use
- You have a ShipSilently account (create one free)
- Your application uses the Flagsmith Node.js or JavaScript SDK
Step 1: Set up your ShipSilently project
- Sign in to ShipSilently and create a new project.
- Copy your API key from Settings → API Keys.
Step 2: Map Flagsmith concepts to ShipSilently
| Flagsmith | ShipSilently |
|---|---|
| Feature Flag | Flag |
| Remote Config / Feature value | Flag variant |
| Identity | User context |
| Segment | Targeting rule |
| Environment API key | API key |
Step 3: Recreate your flags
For each Flagsmith feature:
- Create a flag in ShipSilently with the same feature name as the key
- Recreate segment rules as targeting rules in the ShipSilently dashboard
Flagsmith remote config: If you use Flagsmith’s remote config (feature value as a string/number), use ShipSilently’s variant flags to store the same configuration values.
Step 4: Replace the SDK
# Remove Flagsmith SDK
npm uninstall flagsmith-nodejs
# Install ShipSilently
npm install @shipsilently/node
Step 5: Update initialization
Before (Flagsmith):
import Flagsmith from 'flagsmith-nodejs';
const flagsmith = new Flagsmith({
environmentKey: process.env.FLAGSMITH_API_KEY,
});
After (ShipSilently):
import { initialize } from '@shipsilently/node';
export const flags = initialize(process.env.SHIPSILENTLY_KEY);
Step 6: Update flag evaluations
Before (Flagsmith):
// Get flags for an identity
const flags = await flagsmith.getIdentityFlags(user.id, {
email: user.email,
plan: user.plan,
});
const showNewDashboard = flags.isFeatureEnabled('new-dashboard');
After (ShipSilently):
const showNewDashboard = await flags.getFlag('new-dashboard', {
userId: user.id,
email: user.email,
plan: user.plan,
});
API comparison
| Flagsmith | ShipSilently |
|---|---|
flagsmith.getIdentityFlags(id, traits) | flags.getFlag(key, context) |
flags.isFeatureEnabled(name) | flags.getFlag(key, context) returns boolean |
flags.getFeatureValue(name) | flags.getVariant(key, context) |
| Per-identity network call | In-memory evaluation after initial fetch |
Step 7: Remote config migration
If you use Flagsmith’s remote config feature to store values like strings or numbers:
Before (Flagsmith):
const buttonColor = flags.getFeatureValue('button-color'); // '#00E5FF'
After (ShipSilently):
const buttonColor = await flags.getVariant('button-color', {
userId: user.id,
}); // '#00E5FF'
Step 8: Set your environment variable
# Remove
FLAGSMITH_API_KEY=xxxx
# Add
SHIPSILENTLY_KEY=ss-live-xxxx
Step 9: Verify and cut over
- Deploy to staging using
SHIPSILENTLY_KEY - Verify flag evaluations show up in the ShipSilently Analytics dashboard
- Deploy to production and remove the Flagsmith SDK and credentials
What’s next
- Read the ShipSilently SDK docs
- Configure targeting rules and percentage rollouts in the dashboard
- Invite your team in Settings → Team
Ready to start your migration?
Create a free ShipSilently account and have your first flag live in minutes.