Verify and consolidate feature flags across BCD
Nobody has claimed this yet.
- Dominant language
- JSON
- Stars
- 5.8k
- Forks
- 2.6k
- Avg merge
- 1d 21h
- Merged PRs (30d)
- 186
Description
Verify and consolidate feature flags across BCD
Summary
A per-browser inventory of every flags entry in BCD shows that some flag statements diverge only in casing, value_to_set, or name spelling while pointing at the same underlying flag. The inventory also surfaces flags that may no longer exist in current browser builds.
This issue tracks two things:
- Verify that each flag is still valid in the browser it's attributed to (flags get renamed or removed between releases).
- Consolidate statements that refer to the same flag but were entered inconsistently, so a single flag has a single canonical
name+value_to_set.
Each item below lists the earliest observed version_added and the number of features using the flag (blast radius). Check off a flag once it has been verified and, where applicable, consolidated.
Motivation
Ensure flag data is accurate and internally consistent, so that tools consuming BCD (and readers of MDN's "requires a flag" notes) get one unambiguous instruction per flag instead of several spellings of the same one.
Chrome
-
#enable-experimental-web-platform-features(from 37, ~90 features) — see note below -
#enable-generic-sensor-extra-classes = Enabled(from 56, 12 features) -
#enable-jxl-image-format = Enabled(from 145, 1 feature) — JPEG XL flag was removed from Chromium; verify -
#extension-apis = Enabled(from 67, 1 feature) -
#local-network-access-check = Enabled(from 138, 1 feature) -
#web-machine-learning-neural-network = Enabled(from 112, 125 features) -
WebAuth(from 67, 1 feature) — no#prefix and an unusual name; verify the real flag name -
--enable-blink-features=ExperimentalProductivityFeatures(runtime_flag, from 64, 2 features)
[!NOTE]
Only one Chrome flag actually diverges:enable-experimental-web-platform-featuresappears in ~4 variants spanning ~90 features, differing on the#prefix, presence of a value, and casing (Enabled/enabled/true). Pick one canonicalname+value_to_setand apply it everywhere.
Deno
-
--location [url](runtime_flag, from 1.7, 15 features) -
--unstable-net(runtime_flag, from 2.2, 38 features) -
--unstable-webgpu(runtime_flag, from 1.39, 203 features)
Edge
-
#edge-llm-prompt-api-for-phi-mini = Enabled(from 138, 12 features) -
enable-experimental-web-platform-features = enabled(from 79, 31 features) — missing#and lowercase value; align with the canonical Chrome form
Firefox
-
browser.dom.window.dump.enabled = true(from 1.5, 1 feature) -
dom.compression_streams.zstd.enabled = true(from 138, 2 features) -
dom.css_pseudo_element.enabled(from 75, 3 features) — blank value; should be= true -
dom.headingoffset.enabled = true(preview, 4 features) -
dom.imagecapture.enabled = true(from 35, 4 features) -
dom.indexedDB.experimental = true(from 40, 3 features) -
dom.multiple_import_maps.enabled = true(from 150, 1 feature) -
dom.payments.request.enabled = true(from 55, 33 features) -
dom.payments.request.supportedRegions(from 55, ~24 features) — see note below -
dom.permissions.revoke.enable = true(from 51, 1 feature) -
dom.scoped-custom-element-registries.enabled = true(from 150, 3 features) -
dom.screenBrightnessProperty.enabled = true(from 12, 1 feature) -
dom.screenEnabledProperty.enabled = true(from 12, 1 feature) -
dom.security.featurePolicy.webidl.enabled = true(from 65, 7 features) -
dom.select.customizable_select.enabled = true(from 149, 3 features) -
dom.serviceWorkers.navigationPreload.enabled = true(from 97, 1 feature) -
dom.shadowdom.referenceTarget.enabled = true(from 144, 4 features) -
dom.viewTransitions.enabled = true(from 140, 1 feature) -
dom.vr.enabled = true(from 98, 69 features) -
dom.vr*(from 39, 7 features) — wildcard placeholder, not a real flag name; reconcile withdom.vr.enabled -
dom.webnotifications.requireinteraction.enabled = true(from 117, 1 feature) -
dom.webshare.enabled = true(from 71, 4 features) -
layout.css.appearance-base.enabled = true(from 149, 3 features) -
layout.css.attr.enabled = true(from 149, 16 features) -
layout.css.custom-media.enabled = true(from 146, 2 features) -
layout.css.element-content-none.enabled(from 91, 1 feature) — blank value; should be= true -
layout.css.fit-content-function.enabled(from 91, 12 features) — blank value; should be= true -
layout.css.getBoxQuads.enabled = true(from 31, 3 features) -
layout.css.heading-selector.enabled = true(preview, 2 features) -
layout.css.inverted-colors.enabled = true(from 114, 1 feature) -
layout.css.moz-submit-invalid.enabled = true(from 88, 1 feature) -
layout.css.prefers-reduced-transparency.enabled = true(from 113, 1 feature) -
layout.css.scroll-driven-animations.enabled = true(from 152, 2 features) -
layout.css.text-box.enabled = true(from 149, 5 features) -
media.mediasource.experimental.enabled = true(from 62, 2 features) -
media.track.enabled = true(from 33, 27 features) -
media.webspeech.recognition.enable = true(from 142, 31 features) -
network.cookie.sameSite.laxByDefault = true(from 69, 1 feature) -
network.cookie.sameSite.schemeful = true(from 79, 1 feature) -
network.cors_preflight.authorization_covered_by_wildcard = false(from 115, 1 feature) -
network.http.idempotencyKey.enabled = true(from 135, 1 feature) -
security.integrity_policy.stylesheet.enabled = true(from 142, 2 features)
[!NOTE]
dom.payments.request.supportedRegionshas two near-identical long-form values, one a typo variant: "comma-delineated" with a missing closing)(preview, 5 features) vs. "comma-delimited" (from 55, 19 features). Consolidate to one canonical value.
Node.js
-
--inspect(runtime_flag, from 8.0.0, 4 features) — a debugging flag, not a feature flag; verify it correctly gates its features
Safari
-
<select> showPicker() method = Enabled(preview, 1 feature) -
Canvas Filters = true(from 18, 1 feature) -
Cookie Store API CookieStoreManager = Enabled(from 18.4, 6 features) -
CSS font-variant-emoji property = true(from 17.5, 1 feature) -
LinkPrefetch(from 13.1, 1 feature) — blank value -
referenceTarget = true(from 26, 4 features) -
referenceTarget support for aria-owns = true(from 26, 4 features) -
Shape Detection API = true(from 17, 4 features) -
SpeculationRules prefetch(from 26.2, 15 features) — blank value -
useTemporal = 1(runtime_flag, preview, 1 feature)
[!NOTE]
Safari names mix real pref keys with human-readable prose / Feature-menu labels, and values diverge (Enabled/true/1). Decide on a consistent convention (real WebKit pref/feature name + consistent value) and apply it across all Safari entries.
Safari on iOS
-
Contact Picker API(from 14.5, 4 features) — blank value and prose name; align with the Safari convention chosen above
Notes
- The flags linter auto-strips any flag statement carrying
version_removed, so removed flags should be deleted rather than annotated.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by locating the BCD flags entries and the flags linter that strips statements carrying version_removed. Verify each listed browser flag against current browser builds, then consolidate duplicate names and values, including the Chrome variants, Firefox supportedRegions values, and Safari conventions. Done means invalid entries are removed and each remaining flag has one verified canonical statement.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- deno, json, nodejs
- Domain
- data
- Issue type
- Refactor
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100