OpenFeature provider for Cloudflare SDK
This topic documents how to get started with the LaunchDarkly OpenFeature provider for the Cloudflare SDK.
The LaunchDarkly OpenFeature providers are open source. In addition to this reference guide, we provide source, API reference documentation, and a sample application:
Get started
The LaunchDarkly OpenFeature provider for the Cloudflare SDK is intended for use in multi-user Cloudflare Workers. It follows the server-side LaunchDarkly model for multi-user contexts. It is not intended for use in desktop or embedded systems applications.
The provider wraps the Cloudflare SDK, which reads flag data from a Cloudflare KV namespace that LaunchDarkly keeps up to date. Before you begin, configure the Cloudflare integration for your project.
Follow these instructions to start using the LaunchDarkly OpenFeature provider for the Cloudflare SDK in your Cloudflare Worker.
Version compatibility
The LaunchDarkly OpenFeature provider for the Cloudflare SDK is compatible with the OpenFeature Node.js SDK v1.x, version 1.16.0 and later.
The provider requires version 2.7.0 or later of the Cloudflare SDK.
Install the provider
First, install the LaunchDarkly and OpenFeature packages:
Then turn on the Node.js compatibility flag in your wrangler.toml. This allows the underlying Cloudflare SDK to use node:events:
Next, import the OpenFeature and LaunchDarkly namespaces in your application code:
Initialize the provider
After you install and import the provider, create an instance of LaunchDarklyProvider and register it with OpenFeature. Specify your client-side ID and your Cloudflare KV namespace binding here. In this example, the binding is env.LD_KV. The provider only uses the client-side ID to read flag data for a particular environment from the KV namespace. It does not connect to LaunchDarkly servers.
Here’s how:
The KV namespace binding is only available inside your Worker’s fetch handler, but OpenFeature.setProviderAndWait registers the provider on a registry that every concurrent request in the Workers isolate shares. Do not run this initialization on every request. Instead, guard it so it runs once per isolate, and reuse the provider for every subsequent request. To learn more, read Usage in the provider GitHub repository, which includes a complete example of this pattern.
The LaunchDarkly Cloudflare provider uses a client-side ID. Client-side IDs are specific to each project and environment. They are not secret, and you can include them in code. Do not embed a server-side SDK key into an edge application. Client-side IDs are available on the SDK keys page under Settings. To learn more about key types, read Keys.
The Cloudflare SDK reads flag data from your KV namespace on each evaluation and does not maintain a connection to LaunchDarkly. As a result, the provider does not emit the OpenFeature ConfigurationChanged, Error, or Stale events. Because each request reads the latest flag data from the KV namespace, you do not need a change notification to receive up-to-date flag values. Re-evaluate the flag on the next request instead.
Construct a context
A context is a generalized way of referring to the people, services, machines, or other resources that encounter feature flags in your product. The OpenFeature specification calls these evaluation contexts.
In the LaunchDarkly provider:
- Contexts always have a particular context kind. If you do not specify a kind, the provider treats the context as having a “user” kind. To specify a different kind, including a multi-context, you must include a
kindattribute. - Contexts must have a targeting key. This is optional in the OpenFeature specification, but LaunchDarkly requires a key for evaluation. You can specify this using
targetingKey, as in the OpenFeature specification, orkey, which is the typical LaunchDarkly identifier for the targeting key.
Here are examples of a context:
For additional examples, read OpenFeature specific considerations in the provider GitHub repository.
Evaluate a context
To evaluate feature flags for a context, use the OpenFeature Evaluation API. For example:
Track metrics
To associate metrics with actions customers take in your application, use the OpenFeature Tracking API.
The Cloudflare SDK does not send events unless you enable them. To enable events, pass { sendEvents: true } as the third argument when you construct the LaunchDarklyProvider. Then, flush events inside ctx.waitUntil so they finish sending after the Worker returns its response. Because flushing only sends the events queued so far, it is safe to call on every request.
Here is an example:
To learn more, read track.
Access the LaunchDarkly client
You may need access to the LDClient from within the Cloudflare SDK if you are working on use cases not supported by OpenFeature, such as flushing events.
To access the LDClient, use getClient():