Skip to content

Add Buck CLI override for feature flag defaults#56507

Open
motiz88 wants to merge 1 commit intofacebook:mainfrom
motiz88:export-D101484355
Open

Add Buck CLI override for feature flag defaults#56507
motiz88 wants to merge 1 commit intofacebook:mainfrom
motiz88:export-D101484355

Conversation

@motiz88
Copy link
Copy Markdown
Contributor

@motiz88 motiz88 commented Apr 20, 2026

Summary:
Adds a mechanism to override React Native feature flag default values via a Buck command line argument, without modifying source files.

A genrule in the featureflags BUCK target always interposes on ReactNativeFeatureFlagsDefaults.h before compilation. When react_native.feature_flag_defaults is set to a JSON object via --config, a Python script rewrites the return values in the matching method bodies. When unset, the header passes through unmodified.

The Python script matches each override against the full method signature shape (<returnType> <flagName>() override { ... return <value>; }) with lenient whitespace, and fails the build if any requested flag name is not found in the header.

Usage:

buck2 build --config 'react_native.feature_flag_defaults={"enableViewCulling":true}' //target
buck2 build --config 'react_native.feature_flag_defaults={"enableViewCulling":true,"preparedTextCacheSize":500}' //target

This modifies defaults only — app-level providers still take priority.

Changelog: [Internal]

Reviewed By: robhogan

Differential Revision: D101484355

Summary:
Adds a mechanism to override React Native feature flag default values via a Buck command line argument, without modifying source files.

A `genrule` in the featureflags BUCK target always interposes on `ReactNativeFeatureFlagsDefaults.h` before compilation. When `react_native.feature_flag_defaults` is set to a JSON object via `--config`, a Python script rewrites the return values in the matching method bodies. When unset, the header passes through unmodified.

The Python script matches each override against the full method signature shape (`<returnType> <flagName>() override { ... return <value>; }`) with lenient whitespace, and fails the build if any requested flag name is not found in the header.

Usage:
```
buck2 build --config 'react_native.feature_flag_defaults={"enableViewCulling":true}' //target
buck2 build --config 'react_native.feature_flag_defaults={"enableViewCulling":true,"preparedTextCacheSize":500}' //target
```

This modifies defaults only — app-level providers still take priority.

Changelog: [Internal]

Reviewed By: robhogan

Differential Revision: D101484355
@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Apr 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. fb-exported meta-exported p: Facebook Partner: Facebook Partner

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant