← All comparisons

dif vs LaunchDarkly

Checked Oct 7, 2026

LaunchDarkly is a hosted service: you change a flag in LaunchDarkly and its server-side SDKs receive the update over a streaming connection, with no deploy. dif is a file format and a compiler: each flag is a Markdown file in your repo, dif build compiles it into a TypeScript client, and a change reaches users with your next deploy. LaunchDarkly is the better tool when a flag must turn off in seconds, when your services are not JavaScript, or when you want statistics built in. dif fits a TypeScript codebase where a flag change should be a reviewed pull request and evaluating a flag should need no network.

Side by side

RowdifLaunchDarkly
Where flags liveOne Markdown file per flag or experiment under dif/experiments/, in your git repo.In the LaunchDarkly service. You create and change flags there, through its app, API or MCP server. [6]
How a change shipsEdit the file, merge the pull request, run dif build, deploy the app. There is no runtime toggle.Change the flag in LaunchDarkly. Server-side SDKs hold a streaming connection and receive the new value without a deploy. [2]
Runtime dependencyNone. dif build compiles the active files into dif/generated/client.ts and @dif.sh/sdk hashes the user ID with SHA-256 in-process. No request to evaluate a flag.A connection to LaunchDarkly. Server-side SDKs download the ruleset for an SDK key and evaluate in-process. Client-side SDKs delegate evaluation to LaunchDarkly and get results over streaming or polling. [2]
SDK languagesJavaScript and TypeScript only. Adapters for React, Svelte, the Vercel Flags SDK and an OpenFeature server provider.Server-side SDKs include .NET, Go, Java, Node.js, PHP, Python, Ruby and Rust. Client and mobile SDKs include JavaScript, React, Vue, Android, iOS and Flutter. Edge SDKs cover Akamai, Cloudflare, Fastly and Vercel. [3]
Experiment analysisNot in the open-source core. Exposures and dif.track() calls go to two handler functions you own, or to Dif Cloud, which reports lift with a 95% confidence interval.Built in. Experimentation reports frequentist confidence intervals or Bayesian credible intervals, and can read metric events from a warehouse such as Snowflake. [4]
Pricing modelThe CLI and SDK are free. Dif Cloud is optional: $50 per month per workspace with 1,000,000 events and unlimited seats, then $0.02 per 1,000 events. Cloud has no free tier.Usage-based, no seat fees. The Developer plan is $0 per month with 5 service connections and 1K client-side MAU. Foundation lists $10 per service connection per month and from $8.33 per 1K client-side MAU per month, billed yearly. Enterprise is a custom quote. [1]
LicenceMIT for the CLI, the SDK and every adapter.Proprietary service. The Relay Proxy is open source. [5]
Self-hostingNothing to host. There is no flag server; the flags run from your repo and your build. Dif Cloud is a hosted product.Hosted by LaunchDarkly. You can run the Relay Proxy on your own infrastructure; it proxies the streaming connection to LaunchDarkly. [5]
Agent and context supportdif init writes guidance into CLAUDE.md, AGENTS.md, .cursor/rules/dif.mdc and .github/copilot-instructions.md and installs four skills. dif build writes dif/context.json, a summary of active experiments. Dif Cloud serves experiment verdicts to agents over a read-only MCP server at cloud.dif.sh/mcp.A hosted MCP server lets an agent create a flag, turn it on and update targeting rules. Agent skills install with npx skills add launchdarkly/agent-skills. [6]

The dif column is checked against the dif repository at v0.7.0. The LaunchDarkly column comes from the pages listed under Sources. If a row is out of date, open an issue.

Which one to choose

Choose LaunchDarkly if

  • A flag has to turn off in seconds without a deploy. LaunchDarkly streams the change to connected SDKs. In dif, turning a flag off is a merge, a dif build and a deploy.
  • Your services are written in Go, Java, Python, Ruby, .NET or PHP, or you ship native mobile apps. dif has a JavaScript and TypeScript SDK and nothing else.
  • People who do not open pull requests need to change targeting. LaunchDarkly has an app for that. dif has files.
  • You want experiment statistics from the same vendor, including metrics read from your warehouse. The dif open-source core computes no statistics.
  • You need targeting rules beyond equality and list membership. dif audiences match declared attributes by equality or list membership only.

Choose dif if

  • Your app is TypeScript and a flag change can wait for the next deploy.
  • You want every flag change reviewed in the same pull request as the code it gates, with git history as the record.
  • You want flag evaluation with no network request and no SDK key. @dif.sh/sdk has no dependencies and assigns by hashing the user ID.
  • You want the hypothesis, owner, metrics and decision stored in the flag file, and dif conclude to append the learning to dif/surfaces/<name>.md.
  • You want CI to fail when two active experiments target one surface without a shared exclusion_group. dif validate exits 1 with error E007.
  • You want a flat line item for hosted results: $50 per month for 1,000,000 events with unlimited seats, or no hosted product at all.

Moving from LaunchDarkly to dif

dif has no LaunchDarkly importer. Migration is by hand, one flag at a time, and the two can run side by side while you move.

  1. List the flags your code still reads. Flags that need a no-deploy off switch should stay in LaunchDarkly.
  2. For each flag you move, run dif new <id> --surface <name>. Copy the variations into variants and the rollout percentages into weight. Weights must sum to 100. Set status: active.
  3. Rewrite targeting as audience.include and audience.exclude on attributes declared in dif/config.yaml. A rule dif cannot express (a range, a regex, a semver check) has to be computed in dif/audiences/<name>.ts and declared as a boolean or enum attribute.
  4. Replace the variation call with dif("<id>", { ... }) and one branch per variant. Variants are string ids; a flag that returns a number or a JSON object has to become branches in code.
  5. Run dif validate, then dif build. Add "prebuild": "dif build" to package.json, because dif/generated/ is gitignored.
  6. If you already evaluate through the OpenFeature server SDK, @dif.sh/openfeature is a server provider you can swap in for string and boolean flags.
$ npm install -g @dif.sh/cli

Sources

Every LaunchDarkly claim on this page comes from one of these pages. Pricing and features change; the date is when we read each one.

  1. LaunchDarkly pricing page read Oct 7, 2026
  2. LaunchDarkly docs: client-side, server-side and edge SDKs read Oct 7, 2026
  3. LaunchDarkly docs: SDKs read Oct 7, 2026
  4. LaunchDarkly docs: Experimentation read Oct 7, 2026
  5. LaunchDarkly docs: Relay Proxy read Oct 7, 2026
  6. LaunchDarkly docs: MCP server and agent skills read Oct 7, 2026