Open standards
OpenFeature, in any language
Your applications depend on OpenFeature, the CNCF's vendor-neutral feature-flag API — not on FTF. FTF implements OpenFeature's Remote Evaluation Protocol (OFREP), so Java, .NET, Go, Python, Node and browser applications use OpenFeature's own SDKs, with no FTF library to adopt, version or patch.
environments · releases · attributes · audit
Guidewire InsuranceSuite has no OpenFeature SDK; FTF's design gives it its own integration, applying the same rules — FTF GW client.
What the open standard changes for your architecture
No client per platform
OpenFeature already maintains SDKs and OFREP providers for the mainstream languages. A new platform needs no work from us or from you — just configuration.
Switch vendor, keep your code
FTF can sit in front of LaunchDarkly or ConfigCat. Your applications only ever talk to FTF, so moving between them is a change inside FTF, not a project in every application.
Leaving is configuration
Your code calls OpenFeature, not FTF. Replacing FTF means configuring a different OpenFeature provider — the toggle checks in your code stay as they are.
One answer, everywhere
Every way of evaluating a toggle — FTF's service, OFREP and the offline evaluators — is held to one shared set of test cases, so a toggle never behaves differently by platform.
What FTF implements
OpenFeature Remote Evaluation Protocol 0.4.0. Tested end to end with OpenFeature's own Python, Node and browser providers.
- One flag —
POST /ofrep/v1/evaluate/flags/{key}, the context sent with each call; for server-side providers. - All of an application's flags —
POST /ofrep/v1/evaluate/flags, for browser providers. It returns anETag, and304 Not Modifiedwhen nothing has changed, so polling is cheap. - The key is the toggle's full name, e.g.
acme.web.new_checkout. - Authentication — the environment's client key, as
X-API-Keyor a bearer token. The application is named inX-FTF-Application, or fixed by an application-restricted key. - Context — strings, numbers and booleans. Numbers still compare as numbers
(
claimAmount > 10000).targetingKeyis an ordinary attribute, e.g. the key of a percentage rollout. - Reasons —
STATIC,TARGETING_MATCH,SPLIT(percentage rollout) andDISABLED, for your logs and analytics. - An unknown toggle is
FLAG_NOT_FOUND, so the SDK falls back to the default written in your code. - Browsers are answered across origins only for application-restricted keys, and only for evaluation.
What it doesn't do (yet)
- Boolean toggles only. FTF's toggles are on/off with attributes; string, number and object flags aren't part of FTF's model.
- Polling, not streaming. OFREP's optional event streams aren't offered yet; browser
providers poll, and the
ETagkeeps that light. - Releases aren't flags. Applications ask about features; a release switches its features on together inside FTF.
- Java offline evaluator is source code today, not yet a published library.
What an OpenFeature provider sends
In code, it's OpenFeature's usual one line, e.g. getBooleanValue("acme.quotes.new_rating",
false, context). A JavaScript example is on the
developers' page.
One set of test cases for every evaluator
A toggle that is on for a customer in one application must be on for them in every application. FTF keeps one shared file of evaluation cases, and every evaluator must give every expected answer: FTF's service, its OFREP endpoint, and the JavaScript, Python and Java evaluators. A change to how toggles evaluate starts with a new case, never with one implementation.
The cases pin down exactly the details implementations tend to disagree on:
- What counts as a number —
1e4yes;Infinity,1_000and hex no. - Lists are case-insensitive and ignore spaces; an empty list restricts nothing.
- A percentage rollout puts the same customer in the same bucket in every language.
- A feature in a release is on only when the release and the feature are both on.
- A misconfigured attribute is skipped the same way everywhere — never an error that takes other toggles down with it.
- Only a real
trueswitches anything on; the text"true"doesn't.
See it with your own stack
The trial gives you an environment and a key: point an OpenFeature SDK in the language you use at it and switch a toggle.