All skills
facebook avatar

/feature-flags

@a056625 official
by Metafacebook/react251k stars
51,417

Use when feature flag tests fail, flags need updating, understanding @gate pragmas, debugging channel-specific test failures, or adding new flags to React.

Requires /flags

Use this Skill: https://skilld.dev/gh/facebook/react/feature-flags

This session only. Nothing lands on disk.

SKILL.md

≈43 tokens always: the name and description. ≈605 when used: this file.

React Feature Flags

Flag Files

File Purpose
packages/shared/ReactFeatureFlags.js Default flags (canary), __EXPERIMENTAL__ overrides
packages/shared/forks/ReactFeatureFlags.www.js www channel, __VARIANT__ overrides
packages/shared/forks/ReactFeatureFlags.native-fb.js React Native, __VARIANT__ overrides
packages/shared/forks/ReactFeatureFlags.test-renderer.js Test renderer

Gating Tests

@gate pragma (test-level)

Use when the feature is completely unavailable without the flag:

// @gate enableViewTransition
it('supports view transitions', () => {
  // This test only runs when enableViewTransition is true
  // and is SKIPPED (not failed) when false
});

gate() inline (assertion-level)

Use when the feature exists but behavior differs based on flag:

it('renders component', async () => {
  await act(() => root.render(<App />));

  if (gate(flags => flags.enableNewBehavior)) {
    expect(container.textContent).toBe('new output');
  } else {
    expect(container.textContent).toBe('legacy output');
  }
});

Adding a New Flag

  1. Add to ReactFeatureFlags.js with default value
  2. Add to each fork file (*.www.js, *.native-fb.js, etc.)
  3. If it should vary in www/RN, set to __VARIANT__ in the fork file
  4. Gate tests with @gate flagName or inline gate()

Checking Flag States

Use /flags to view states across channels. See the flags skill for full command options.

__VARIANT__ Flags (GKs)

Flags set to __VARIANT__ simulate gatekeepers - tested twice (true and false):

/test www <pattern>              # __VARIANT__ = true
/test www variant false <pattern> # __VARIANT__ = false

Debugging Channel-Specific Failures

  1. Run /flags --diff <channel1> <channel2> to compare values
  2. Check @gate conditions - test may be gated to specific channels
  3. Run /test <channel> <pattern> to isolate the failure
  4. Verify flag exists in all fork files if newly added

Common Mistakes

  • Forgetting both variants - Always test www AND www variant false for __VARIANT__ flags
  • Using @gate for behavior differences - Use inline gate() if both paths should run
  • Missing fork files - New flags must be added to ALL fork files, not just the main one
  • Wrong gate syntax - It's gate(flags => flags.name), not gate('name')

Source: SKILL.md on GitHub

1 warning3mo5 checks · Risk SAFE
  • Gen Agent Trust Hub3mo

    The skill provides instructions and documentation for managing feature flags and gating tests within the React codebase. It contains no executable code, remote downloads, or malicious patterns.

  • Socket3mo

    No alerts

  • Snyk3mo

    Risk: LOW · No issues

  • Runlayer7mo

    1/1 file flagged

  • ZeroLeaks5mo

    Score: 93/100 · 2 sections analyzed

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

Last checked against GitHub yesterday.

Activeupdated 8 months ago
  • React
  • Testing
  • feature-flags
  • gating
  • pragmas
  • test-renderer
  • channels
  • gatekeepers

README badge

README badge for facebook/react/feature-flags

Manages React's feature flags across channels (www, React Native, test renderer) using @gate pragmas and __VARIANT__ overrides to gate tests and control experimental features. Handles flag setup, channel-specific testing, and debugging flag-related test failures in the React monorepo.

Generated from the current SKILL.md.

What is the difference between @gate and gate() for testing?
Use @gate pragma at the test level when a feature is completely unavailable without the flag (test skips when false). Use gate() inline within a test when the feature exists but behavior differs based on the flag (both paths run).
Do I need to add a new flag to every fork file?
Yes. New flags must be added to ReactFeatureFlags.js and all fork files (*.www.js, *.native-fb.js, test-renderer.js). If the flag should vary by channel, set it to __VARIANT__ in the fork file.
What does __VARIANT__ mean and how do I test it?
__VARIANT__ flags simulate gatekeepers and are tested twice (true and false). Test them with /test www <pattern> for true and /test www variant false <pattern> for false.
How do I debug a test failure that only happens in one channel?
Run /flags --diff to compare flag values across channels, check if the test has @gate conditions limiting it to specific channels, and run /test <channel> <pattern> to isolate the failure.

Generated from the current SKILL.md. These answers refresh after source changes.