Migrate from Flagsmith
Follow this step-by-step guide to migrate your feature flags from Flagsmith to FeatureSignals. The process mirrors the standard migration workflow — export, transform, import, validate, and cut over.
Before you start
Make sure you have an active FeatureSignals account, a project and environment set up, and a Flagsmith API key with read access. See Quickstart if you haven't created your first project yet.
1. Export flags from Flagsmith
Use the FeatureSignals migration CLI to export all flags, segments, and environments from Flagsmith. The CLI uses the Flagsmith REST API to pull a complete snapshot.
bash# Install the FeatureSignals migration CLI npm install -g @featuresignals/migration-cli # Export all flags from Flagsmith fs-migrate export flagsmith \ --api-key "$FLAGSMITH_API_KEY" \ --base-url "https://api.flagsmith.com" \ --output ./flagsmith-export.jsonThe export includes standard flags, multivariate flags, segments, identities, and environment-specific overrides. Traits and identity overrides are preserved for mapping during the transform step.
2. Transform flags to FeatureSignals format
Transform the Flagsmith export to the FeatureSignals flag model. The migration engine handles:
- Standard flags →
booleanflag type - Multivariate flags →
abflag type with variants - Segments → FeatureSignals segments with rule conditions
- Identity overrides → Individual targeting rules
- Environment-specific values → Per-environment flag state
- Feature-specific values →
string,number, orjsonflags
bash# Transform the Flagsmith export to FeatureSignals format fs-migrate transform flagsmith \ --input ./flagsmith-export.json \ --output ./fs-import.json \ --project-id "$FS_PROJECT_ID" \ --environment-mapping "production:prod,development:dev"Review the preview report. Pay special attention to flags that map to non-boolean types — Flagsmith's feature-specific values become separate configuration flags in FeatureSignals.
- Standard flags →
3. Import flags to FeatureSignals
Import the transformed flags into your FeatureSignals project. Import to a staging or development environment first to validate without affecting production traffic.
bash# Import to FeatureSignals (staging environment first) fs-migrate import \ --input ./fs-import.json \ --api-key "$FS_API_KEY" \ --base-url "https://api.featuresignals.com" \ --target-environment "staging"Tip: Flagsmith remote config values (non-boolean flags) are imported as string, number, or JSON flag types. Verify the type mapping in the preview report before importing.
4. Validate parity between platforms
Run parity checks to ensure flag evaluations produce consistent results. The validator evaluates each flag in both Flagsmith and FeatureSignals across a sample of user contexts.
bash# Validate evaluation parity fs-migrate validate \ --source flagsmith \ --source-api-key "$FLAGSMITH_API_KEY" \ --target featuresignals \ --target-api-key "$FS_API_KEY" \ --sample-size 100Any discrepancies are reported with the specific flag, user context, and expected vs. actual value. Resolve mismatches before proceeding to cutover.
5. Cut over your SDKs
Switch your SDK initialization from Flagsmith to FeatureSignals. If your application uses the Flagsmith JavaScript or React SDK directly:
typescript// Before: Flagsmith client import flagsmith from 'flagsmith'; await flagsmith.init({ environmentID: 'env_flagsmith_key', }); const isEnabled = flagsmith.hasFeature('my-feature'); // After: FeatureSignals OpenFeature provider import { FeatureSignalsProvider } from '@featuresignals/openfeature-web'; await OpenFeature.setProviderAndWait(new FeatureSignalsProvider({ environmentKey: 'env_your_key_here', })); const client = OpenFeature.getClient(); const isEnabled = await client.getBooleanValue('my-feature', false, { targetKey: user.id, });For server-side Flagsmith SDKs (Python, Node.js, Java, Go, etc.), see the SDK documentation for language-specific migration examples. Keep Flagsmith as read-only for a week after cutover, then decommission.