Skip to content

Get started

In this guide, you will create a feature flag in Flagship and evaluate it inside a Cloudflare Worker.

Create an app and a flag

In this example, you will create a boolean flag called new-checkout that controls whether users see a new checkout experience.

  1. Log in to the Cloudflare dashboard and select your account.
  2. Go to Compute > Flagship.
  3. Select Create app. Give the app a name that matches your project or service (for example, checkout-service).
  4. Inside the app, select Create flag.
  5. Create a boolean flag with the key new-checkout. Optionally, add targeting rules to control who sees the flag.
  6. Turn on the flag and select Save.

Add the Flagship binding to your Worker

Add the Flagship binding in your Wrangler configuration file so your Worker can evaluate flags through a binding.

JSONC
{
"flagship": {
"binding": "FLAGS",
"app_id": "<APP_ID>",
},
}

Replace <APP_ID> with the app ID shown in the Cloudflare dashboard. The binding field sets the name you use to access Flagship in your Worker code. In this example, the binding is available as env.FLAGS.

After updating the Wrangler configuration, run npx wrangler types to generate TypeScript types for the binding.

Evaluate the flag in your Worker

Use the env.FLAGS binding to evaluate the flag. The binding provides type-safe methods that return the flag value and fall back to the default you provide if evaluation fails.

JavaScript
export default {
async fetch(request, env) {
const url = new URL(request.url);
const userId = url.searchParams.get("userId") ?? "anonymous";
const showNewCheckout = await env.FLAGS.getBooleanValue(
"new-checkout",
false,
{ userId },
);
if (showNewCheckout) {
return new Response("Welcome to the new checkout experience!");
}
return new Response("Standard checkout.");
},
};

The third argument to getBooleanValue is the evaluation context. Flagship uses the context attributes to match targeting rules. In this example, the userId attribute is passed so that percentage rollouts and user-specific targeting work correctly.

Deploy and test

Deploy your Worker:

Terminal window
npx wrangler deploy

Test flag evaluation by sending a request:

Terminal window
curl "https://<YOUR_WORKER>.<YOUR_SUBDOMAIN>.workers.dev/?userId=user-42"

Change the flag value or targeting rules in the dashboard and observe the updated response. Flag changes propagate globally within seconds.

(Optional) Use the OpenFeature SDK

If you prefer the OpenFeature standard interface, or if you are running outside of a Cloudflare Worker, you can use the @cloudflare/flagship SDK instead of the binding.

Install the SDK:

npm i @cloudflare/flagship @openfeature/server-sdk

Evaluate flags using the OpenFeature client:

Pass the Flagship binding directly to the provider. This avoids additional HTTP requests and is the recommended approach inside a Worker. Authentication is handled automatically through the binding.

JavaScript
import { OpenFeature } from "@openfeature/server-sdk";
import { FlagshipServerProvider } from "@cloudflare/flagship";
export default {
async fetch(request, env) {
await OpenFeature.setProviderAndWait(
new FlagshipServerProvider({ binding: env.FLAGS }),
);
const client = OpenFeature.getClient();
const showNewCheckout = await client.getBooleanValue(
"new-checkout",
false,
{ targetingKey: "user-42" },
);
return new Response(
showNewCheckout ? "New checkout!" : "Standard checkout.",
);
},
};

Refer to the SDK documentation for detailed setup instructions.

Next steps