All skills
vercel-labs avatar

/flags-sdk

@ce31fdf official

Set up and use feature flags and A/B tests with the Flags SDK (`flags` npm package) and Vercel Flags. Use when installing or configuring the SDK, adding a new or existing flag, wiring `vercelAdapter` (OIDC or SDK keys), declaring flags with `flag()`, using the `vercel flags` CLI (create, inspect, list, enable, disable, set, update, split, rollout, rules, segments, use-targeting, evaluations, versions, open, archive, unarchive, rm, sdk-keys, override, prepare), setting up providers/adapters (Vercel, Statsig, LaunchDarkly, PostHog, GrowthBook, Global Config, OpenFeature, Split, Flagsmith, Reflag, Optimizely, or custom), precompute, `identify`/`dedupe`, Flags Explorer/Toolbar, Next.js or SvelteKit, or encrypting flag values. Triggers: feature flags, feature gates, A/B testing, experimentation, gradual rollout, traffic split, targeting rules, flag overrides, precompute, Flags Explorer, Vercel Flags, vercel flags CLI, `flags/next`, `flags/sveltekit`, `flags/react`, `@flags-sdk/*`.

  • 11 files
  • 168.6 KB
  • Updated 14 hours ago
  • GitHub

Use this Skill: https://skilld.dev/gh/vercel-labs/vercel-plugin/flags-sdk

This session only. Nothing lands on disk.

referencesapi.md

≈2.6k tokens on demand. Your agent reads this file only when SKILL.md points to it.

API Reference

Table of Contents


flags (core)

verifyAccess

Verify access to the flags discovery endpoint. Returns Promise<boolean>.

Parameter Type Description
authorization string Authorization token
import { verifyAccess } from 'flags';

const access = await verifyAccess(request.headers.get('Authorization'));
if (!access) return NextResponse.json(null, { status: 401 });

mergeProviderData

Merge provider data from multiple sources for the Flags Explorer.

Parameter Type Description
data (ProviderData | Promise<ProviderData>)[] Provider data to merge
import { mergeProviderData } from 'flags';

return mergeProviderData([
  getProviderData(flags),
  getStatsigProviderData({ /* ... */ }),
]);

reportValue

Report flag value to Vercel for Runtime Logs and Web Analytics.

Parameter Type Description
key string Flag key
value any Resolved value
import { reportValue } from 'flags';
reportValue('summer-sale', true);

Encryption Functions

All default to process.env.FLAGS_SECRET.

Function Input Type Purpose
encryptFlagValues FlagValuesType Encrypt resolved values
decryptFlagValues string Decrypt values
encryptFlagDefinitions FlagDefinitionsType Encrypt definitions
decryptFlagDefinitions string Decrypt definitions
encryptOverrides FlagOverridesType Encrypt toolbar overrides
decryptOverrides string Decrypt overrides

Optional secret and expirationTime (default '1y') params on encrypt functions.

verifyAccessProof

Verify an access proof token. Returns Promise<boolean>.

safeJsonStringify

XSS-safe JSON.stringify. Escapes < and other dangerous chars.

import { safeJsonStringify } from 'flags';
safeJsonStringify({ markup: '<html></html>' });
// '{"markup":"\\u003chtml>\\u003c/html>"}'

flags/react

FlagValues

Renders a <script data-flag-values> tag for the Flags Explorer.

Prop Type Description
values FlagValuesType Flag values
import { FlagValues } from 'flags/react';
<FlagValues values={{ myFlag: true }} />

For confidential flags, encrypt first:

import { encryptFlagValues } from 'flags';
import { FlagValues } from 'flags/react';

async function ConfidentialFlags({ values }) {
  const encrypted = await encryptFlagValues(values);
  return <FlagValues values={encrypted} />;
}

FlagDefinitions

Renders a <script data-flag-definitions> tag with flag metadata.

Prop Type Description
definitions FlagDefinitionsType Flag definitions
import { FlagDefinitions } from 'flags/react';

<FlagDefinitions definitions={{
  myFlag: {
    options: [{ value: false }, { value: true }],
    origin: 'https://example.com/flag/myFlag',
    description: 'Example flag',
  },
}} />

flags/next

flag

Declare a feature flag for Next.js.

Parameter Type Description
key string Flag identifier
decide function Resolves the flag value
defaultValue any Fallback value
description string Shown in Flags Explorer
origin string URL to manage flag
options { label?: string, value: any }[] Possible values
adapter Adapter Provider adapter
identify function Returns evaluation context

createFlagsDiscoveryEndpoint

Creates an App Router route handler for /.well-known/vercel/flags. Auto-verifies access and adds version header.

Parameter Type Description
getApiData Function Returns flag metadata
options.secret string Defaults to FLAGS_SECRET

getProviderData

Turn flag() declarations into Flags Explorer-compatible definitions.

Parameter Type Description
flags Record<string, Flag> Your flags

precompute

Evaluate multiple flags, return encoded string.

Parameter Type Description
flags function[] Flag group

evaluate

Evaluate multiple flags in a single call. Prefer this over Promise.all([flagA(), flagB()]) — it pre-reads headers, cookies, and overrides once for the whole batch and lets adapters resolve a group through one bulkDecide call, reducing parallel promises and microtask overhead.

Parameter Type Description
flags Flag[] | Record<string, Flag> Array (positional results) or object (keyed results) of flags
request (Optional) IncomingMessage | Request Required outside App Router (Pages Router or routing middleware)
import { evaluate } from 'flags/next';

const [a, b] = await evaluate([flagA, flagB]); // positional
const { a, b } = await evaluate({ a: flagA, b: flagB }); // keyed

serialize

Turn evaluated flags into serialized representation.

Parameter Type Description
flags function[] Flags
values unknown[] Resolved values
secret string Signing secret

getPrecomputed

Retrieve flag values from precomputation code.

Parameter Type Description
flag function | function[] Flag(s) to extract
precomputeFlags function[] Group used in precompute
code string Precomputation code

deserialize

Retrieve all flag values as a record from code.

generatePermutations

Generate all possible precomputation codes for flag options.

Parameter Type Description
flags function[] Flags with options declared
filter function Optional filter for permutations
secret string Defaults to FLAGS_SECRET

dedupe

Deduplicate function calls per request.

Parameter Type Description
fn function Function to dedupe

Not available in Pages Router.


flags/sveltekit

flag

Declare a feature flag for SvelteKit.

Parameter Type Description
key string Flag identifier
decide function Resolves value
description string Shown in Flags Explorer
origin string URL to manage flag
options { label?: string, value: any }[] Possible values
identify function Returns evaluation context

createHandle

Server hook that establishes context for flags and handles /.well-known/vercel/flags.

Parameter Type Description
options.secret string FLAGS_SECRET
options.flags Record<string, Flag> Your flags

Must come first when composed with sequence.

getProviderData

Turn flag declarations into Flags Explorer-compatible definitions.

precompute

Evaluate multiple flags, return encoded string.

Parameter Type Description
flags function[] Flag group
request Request Current request

generatePermutations

Generate all precomputation codes for prerendering.

Parameter Type Description
flags function[] Flags with options
filter function Optional filter
secret string Defaults to FLAGS_SECRET

Source: SKILL.md on GitHub

No third-party reports yet.

Signed by skilld at ce31fdf. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 10 hours ago.

Activeupdated 14 hours ago
Other metadata
summary
Flags SDK guidance — declare flags with flag(), connect provider adapters, manage Vercel Flags via the vercel flags CLI, precompute static variants, and set up the Flags Explorer.
metadata
{
  "priority": 6,
  "docs": [
    "https://vercel.com/docs/flags",
    "https://flags-sdk.dev"
  ],
  "sitemap": "https://vercel.com/sitemap.xml",
  "pathPatterns": [
    "flags.ts",
    "flags.tsx",
    "lib/flags.ts",
    "src/flags.ts",
    "lib/flags/**",
    "src/flags/**",
    ".well-known/vercel/flags/**"
  ],
  "importPatterns": [
    "flags/next",
    "flags/sveltekit",
    "flags/react",
    "flags",
    "@flags-sdk/*",
    "@vercel/flags"
  ],
  "bashPatterns": [
    "\\bvercel\\s+flags\\b",
    "\\bvc\\s+flags\\b",
    "\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bflags\\b",
    "\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bflags\\b",
    "\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bflags\\b",
    "\\byarn\\s+add\\s+[^\\n]*\\bflags\\b",
    "\\bnpm\\s+(install|i|add)\\s+[^\\n]*@flags-sdk/",
    "\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@flags-sdk/",
    "\\bbun\\s+(install|i|add)\\s+[^\\n]*@flags-sdk/",
    "\\byarn\\s+add\\s+[^\\n]*@flags-sdk/"
  ],
  "promptSignals": {
    "phrases": [
      "feature flag",
      "feature flags",
      "flags sdk",
      "vercel flags",
      "flags explorer",
      "feature gate",
      "feature gating",
      "a/b test",
      "a/b testing",
      "ab test",
      "ab testing",
      "flag rollout",
      "gradual rollout",
      "percentage rollout",
      "kill switch",
      "flag variant",
      "flag adapter",
      "precompute flags",
      "traffic split",
      "targeting rules",
      "flag rules",
      "flag segments",
      "flag targeting",
      "flag evaluations",
      "flag overrides",
      "existing flag"
    ],
    "allOf": [
      [
        "flag",
        "rollout"
      ],
      [
        "flag",
        "variant"
      ],
      [
        "flag",
        "toggle"
      ],
      [
        "flag",
        "experiment"
      ],
      [
        "experiment",
        "variant"
      ],
      [
        "split",
        "test"
      ]
    ],
    "anyOf": [
      "flag",
      "experiment",
      "experimentation",
      "rollout",
      "variant"
    ],
    "noneOf": [
      "command-line flag",
      "command line flag",
      "cli flag",
      "compiler flag",
      "flag emoji",
      "rolling release"
    ],
    "minScore": 6
  }
}
retrieval
{
  "aliases": [
    "feature flags",
    "feature toggles",
    "vercel flags",
    "flags sdk",
    "a/b testing"
  ],
  "intents": [
    "add a feature flag",
    "run an a/b test",
    "gate a feature",
    "roll out gradually",
    "manage flags from cli"
  ],
  "entities": [
    "Flags SDK",
    "Vercel Flags",
    "Flags Explorer",
    "vercelAdapter",
    "precompute",
    "FLAGS_SECRET"
  ]
}
chainTo
[
  {
    "pattern": "precompute\\s*\\(|generatePermutations|flags/next.*precompute",
    "targetSkill": "routing-middleware",
    "message": "Precompute pattern detected — loading Routing Middleware guidance for the middleware rewrites that serve static flag variants."
  },
  {
    "pattern": "@flags-sdk/(edge|global)-config|create(Edge|Global)ConfigAdapter",
    "targetSkill": "vercel-storage",
    "message": "Global Config flag adapter detected — loading Vercel storage guidance for Global Config setup and limits."
  }
]

README badge

README badge for vercel-labs/vercel-plugin/flags-sdk