Changelog
What shipped, when it shipped, and where to read the docs for it. Newest first. Each release links to the packages and pages it added, so you can check the claim rather than take our word for it.
-
Integration
GitHub Action that removes dead flags from your source
Detecting a dead flag was always the easy half. The flag cleanup Action does the other one: it reads removal candidates from the public API, deletes the flag branch in your repository, and opens one pull request per flag for you to review. Merge it and the flag can archive itself, so the code and the dashboard stop disagreeing. It runs inside your CI holding your token, and no model writes the diff. The rewrites are AST transforms, so the same input always produces the same patch.
- Thirteen languages: TypeScript, TSX, JavaScript, PHP, Ruby, ERB, Dart, Java, Go, Python, Kotlin, C# and Swift
- One reviewable pull request per flag, with max-prs to bound a first run and dry-run to change nothing at all
- Two safety gates parse every rewritten file and discard the whole transform if it introduced breakage, so a rewrite it cannot verify never reaches a pull request
- Opt into mode: archive-on-merge and the flag is archived when its removal pull request merges
- Every released tag names one exact image digest, so a run stays reproducible even though @v1 moves
- Source and issues at canopy-labs/featureflip-flag-cleanup-action
-
Integration
OpenFeature provider for Java
Java joins Node.js, .NET, Python and Go behind the OpenFeature API. The artifact is io.featureflip:featureflip-openfeature on Maven Central, and it wraps the Featureflip Java SDK, so your call sites talk to the standard OpenFeature client and swapping vendors becomes a provider registration rather than a rewrite. Register it with setProviderAndWait rather than setProvider, for the same reason as every other runtime: the plain form returns before flags have loaded, and the evaluations on the lines after it can hand back their defaults.
- Boolean, string, integer, double and object resolution through the standard OpenFeature Java client
- The targeting key maps to the user id that percentage rollouts bucket on, unless you supplied one explicitly
- A wrong-typed flag is reported as TYPE_MISMATCH, distinctly from a genuine evaluation failure
- An unmet prerequisite surfaces as the custom reason PREREQUISITE_FAILED, because no standard OpenFeature reason models one
- PROVIDER_CONFIGURATION_CHANGED fires when flag configuration changes, naming the keys that moved
- The Featureflip flag cleanup Action recognises OpenFeature Java reads, so a removed flag is cleaned up at those call sites too
- Apache 2.0, the same license as every Featureflip SDK
-
Integration
OpenFeature provider for Go
Go joins Node.js, .NET and Python behind the OpenFeature API. The module is github.com/canopy-labs/featureflip-go-openfeature, and it wraps the Featureflip Go SDK, so your call sites talk to the standard OpenFeature client and swapping vendors becomes a provider registration rather than a rewrite. Register it with SetProviderAndWait rather than SetProvider, for the same reason as in Node and Python: the plain form initializes on a background goroutine and returns before flags have loaded.
- Boolean, string, integer, float and object resolution through the standard OpenFeature Go client
- The targeting key maps to the user id that percentage rollouts bucket on, unless you supplied one explicitly
- An unmet prerequisite surfaces as the custom reason PREREQUISITE_FAILED, because no standard OpenFeature reason models one
- PROVIDER_CONFIGURATION_CHANGED fires when flag configuration changes, naming the keys that moved. Needs the Go SDK 2.8.0 or newer
- The Featureflip flag cleanup Action recognises OpenFeature Go reads, so a removed flag is cleaned up at those call sites too
- Apache 2.0, the same license as every Featureflip SDK
-
Integration
OpenFeature provider for Python
Python joins Node.js and .NET behind the OpenFeature API. The provider is on PyPI as featureflip-openfeature-provider, and it wraps the Featureflip Python SDK, so your call sites talk to the standard OpenFeature client and swapping vendors becomes a provider registration rather than a rewrite. Register it with set_provider_and_wait rather than set_provider. The second one returns before the first flag load has finished, and the evaluations on the lines after it can hand back their defaults.
- Boolean, string, integer, float and object resolution through the standard OpenFeature Python client
- targeting_key maps to the user_id field that percentage rollouts bucket on, unless you already supplied one
- An unmet prerequisite surfaces as the custom reason PREREQUISITE_FAILED, because no standard OpenFeature reason models one
- PROVIDER_CONFIGURATION_CHANGED fires when flag configuration changes, naming the keys that moved. Needs featureflip 2.7.0 or newer
- Apache 2.0, the same license as every Featureflip SDK
-
SDKs
One date grammar across every SDK
A Before or After targeting rule now reads its date the same way in every SDK. Until this release each one leaned on its own language date parser, so a single saved rule could serve one variation to a service written in C# and a different one to a service written in Go. Every SDK now accepts ISO-8601 or a Unix timestamp in seconds, and rejects everything else, including the US-style and slash-separated formats the .NET SDK used to allow. The same run of releases also fixed analytics delivery: a batch the events endpoint refuses now goes back on the queue instead of being discarded.
- The JavaScript, Node.js, Python, Go, Java, Ruby, PHP and .NET SDKs share one date grammar: ISO-8601, or a Unix timestamp in seconds
- A date that names no real calendar day, such as 2024-02-30 or 2023-02-29, matches nothing instead of rolling into the following month
- The Management API rejects a non-conforming operand on write, so a rule saved from this release onward cannot carry one. Rewrite any older rule that uses another format
- Analytics events go back on the queue after a failed send rather than being dropped, in every SDK including Android, Swift and Flutter
-
SDKs
Evaluation inspectors across the server SDKs
Inspectors let you watch every flag evaluation from inside your own process. Register a callback and it fires on each variation call with the flag key, the context you passed, the value the caller received, the variation key, the reason, and whichever rule or prerequisite decided it. This is the piece you need to send exposure data to an analytics tool without hand-wrapping every call site.
- onEvaluation inspectors in the JavaScript, Node.js, Python, Go, Java, Ruby and PHP SDKs
- Flag-change notifications in the JavaScript and Node.js SDKs (client.on('update')) and the .NET SDK (FlagsChanged), batched into one call and resolved back through prerequisites
- A served variation key the flag does not define now reports an error reason and hands back your default, instead of a success reason that was quietly wrong
-
Integration
Terraform provider on the Registry
The Featureflip provider is published on the Terraform Registry at v0.1.0. Projects, environments, flags, variations, targeting rules, segments and SDK keys are all resources, so your flag configuration goes through the same version control and review that the rest of your infrastructure already does. The provider is open source in its own repository and talks to the public API, which means it runs against the free plan too.
- Resources for projects, environments, feature flags, per-environment flag config, segments and SDK keys
- Data sources for reading an organization, project, environment, flag or segment that Terraform does not manage
- terraform import for flags and projects that already exist, so adoption does not start with a teardown
- Source and issues at canopy-labs/terraform-provider-featureflip
-
Integration
OpenFeature providers for Node.js and .NET
OpenFeature is the CNCF vendor-neutral API for feature flags. Two providers now sit behind it, @featureflip/openfeature-node on npm and Featureflip.OpenFeature on NuGet. Your call sites talk to the OpenFeature client instead of ours, which turns swapping vendors into a provider registration rather than a rewrite. That cuts both ways and we ship it anyway, because a team weighing a small vendor is right to want a cheap exit.
- Boolean, string, number and object resolution through the standard OpenFeature client
- Context mapping from OpenFeature targetingKey to the Featureflip user key, with reason and error mapping preserved
- Tracking forwards through to the OpenFeature track() API
- Apache 2.0, the same license as every Featureflip SDK
-
Integration
Manage flags from Claude Code and Cursor
The @featureflip/mcp server puts flag management inside any editor or agent that speaks the Model Context Protocol. You say what you want in English and the agent calls the Management API for you: create a flag, check where it is enabled, add a targeting rule, archive the dead ones. Most established vendors ship an MCP server now. Ours works on the free plan.
- One npx command and a config block, authenticated with a Personal Access Token
- Works in Claude Code, Cursor, and every other MCP client
- Tools for creating, toggling, targeting, archiving and auditing flags, plus finding the stale ones
- Included on the free Solo plan, not held back for paid tiers
-
API
Management API, on every plan
Everything the dashboard does is available over REST at api.featureflip.io. Projects, environments, flags, variations, toggles, targeting rules, segments and SDK keys each have endpoints under /api/v1, authenticated with a bearer token. It is on every plan, the free one included, on the view that a configuration you cannot read out programmatically is a configuration you do not really own.
- Personal Access Tokens for people, organization-scoped Service Tokens for CI
- Idempotency-Key on creates, so a retried request cannot double-write
- X-RateLimit headers on every response and a frozen, machine-readable error envelope
- Cursor pagination and a generated OpenAPI reference for every endpoint
Per-version detail for each SDK, including patch releases, lives in that package's CHANGELOG on GitHub. Longer write-ups of the bigger releases are on the blog.
Try what shipped
The API, the MCP server, and the Terraform provider are all on the free Solo plan. No card.