Skip to main content

Overview

This page maps LaunchDarkly concepts to shipd and shows a manual migration path. shipd has no automated importer: you recreate flag definitions in TypeScript or Go, recreate targeting in the dashboard, and switch code over flag by flag.

Concept mapping

Contexts with several kinds (user, organization, device) become attributes on one evaluation context. To bucket a rollout by organization instead of user, set the percentage condition’s Of attribute to an attribute such as organizationId. Prerequisite flags have no equivalent. Express the dependency in code or in each flag’s rules.

Migrate a flag

1

Recreate the definition

Keep the same key so call sites are easy to find.
2

Push

3

Recreate targeting

For each environment, open the flag in the dashboard, add rules in the same order as in LaunchDarkly, set Fallthrough, and click Save environment. Recreate segments first under Audiences so rules can reference them. See Target users by attribute.
4

Send the same attributes

Pass the attributes your LaunchDarkly rules used (for example email, plan, country) in the evaluation context. See Identify users.
5

Dual-run behind a wrapper

Route evaluations through one function, compare both systems, then switch.
6

Cut over

Return the shipd value, remove the LaunchDarkly call, and archive the flag in LaunchDarkly.
Percentage rollouts hash differently in each tool, so a user in LaunchDarkly’s 20% isn’t necessarily in shipd’s 20%. Expect mismatches for rolled-out flags, and cut them over when the difference is acceptable. For Go definition snippets, add the entries to config.ShipdConfig in shipd.config.go before pushing. See Define flags in code.