Skip to main content

Step-by-step guide to migrating your feature flags from LaunchDarkly to Flaggr

Last updated March 15, 2026

Migrate from LaunchDarkly

This guide walks you through migrating feature flags from LaunchDarkly to Flaggr.

Concept Mapping

LaunchDarklyFlaggrNotes
ProjectProject1:1 mapping
EnvironmentEnvironmentSame concept
Feature flagFlagSame concept
Context kindTargeting contextFlaggr uses flat key-value context
SegmentCohortRule-based or static audience
Targeting ruleTargeting ruleSimilar operator set
Percentage rolloutPercentage rolloutDeterministic hashing
ExperimentExperimentBoth support A/B testing
Relay ProxySelf-hosted instanceRun Flaggr on your infra

Step 1: Export Flags from LaunchDarkly

Use the LaunchDarkly API to export your flag configurations:

curl -s -H "Authorization: YOUR_LD_API_KEY" \
  "https://app.launchdarkly.com/api/v2/flags/YOUR_PROJECT" | jq '.items'

Step 2: Create a Flaggr Project

  1. Sign in at flaggr.dev/console
  2. Create a new project matching your LaunchDarkly project
  3. Create services for each application that evaluates flags

Step 3: Map Flag Types

LaunchDarkly TypeFlaggr Type
Booleanboolean
Stringstring
Numbernumber
JSONobject
MultivariateUse variants on any type

Step 4: Import Flags

Use the Flaggr import API or the dashboard import feature:

# Export from Flaggr format
curl -s -H "Authorization: Bearer flg_your_token" \
  "https://flaggr.dev/api/flags/export?serviceId=YOUR_SERVICE" > flags.json
 
# Or create flags via API
curl -X POST https://flaggr.dev/api/flags \
  -H "Authorization: Bearer flg_your_token" \
  -H "Content-Type: application/json" \
  -d '{
    "key": "checkout-v2",
    "name": "Checkout V2",
    "type": "boolean",
    "defaultValue": false,
    "serviceId": "YOUR_SERVICE",
    "projectId": "YOUR_PROJECT"
  }'

Step 5: Migrate Targeting Rules

LaunchDarkly targeting rules map to Flaggr targeting rules:

// LaunchDarkly rule
{
  "clauses": [
    { "attribute": "plan", "op": "in", "values": ["enterprise", "pro"] }
  ],
  "variation": 0
}
 
// Flaggr equivalent
{
  "conditions": [
    { "attribute": "plan", "operator": "in", "value": ["enterprise", "pro"] }
  ],
  "value": true
}

Operator Mapping

LaunchDarklyFlaggr
inin
endsWithends_with
startsWithstarts_with
matchesregex
containscontains
lessThanless_than
greaterThangreater_than
beforebefore
afterafter
segmentMatchin_cohort

Step 6: Update SDK Integration

Before (LaunchDarkly)

import * as ld from 'launchdarkly-js-client-sdk'
 
const client = ld.initialize('YOUR_CLIENT_ID', { key: 'user-123' })
await client.waitForInitialization()
const value = client.variation('checkout-v2', false)

After (Flaggr)

import { createFlaggr } from '@flaggr/sdk'
 
const client = createFlaggr({
  serviceId: 'web-app',
  apiKey: 'flg_your_token',
})
const value = await client.getBooleanValue('checkout-v2', false, {
  targetingKey: 'user-123',
})

Step 7: Parallel Running

Run both systems in parallel during migration:

// Evaluate from both, log discrepancies
const ldValue = ldClient.variation('checkout-v2', false)
const flaggrValue = await flaggrClient.getBooleanValue('checkout-v2', false)
 
if (ldValue !== flaggrValue) {
  console.warn('Flag mismatch', { flag: 'checkout-v2', ld: ldValue, flaggr: flaggrValue })
}
 
// Use Flaggr value (or LD during transition)
return flaggrValue

Step 8: Decommission LaunchDarkly

Once all flags are migrated and verified:

  1. Remove LaunchDarkly SDK dependencies
  2. Delete LaunchDarkly environment variables
  3. Cancel LaunchDarkly subscription