this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add Firefox use-counter telemetry as fourth data source

Collect Firefox desktop and Fenix (Android) use-counter data from
Mozilla's public telemetry API, map metrics to BCD keys and web-feature
IDs, and include as supplementary data alongside Chrome-ecosystem sources.

- New collector: data/collect-firefox.mjs (streams 765MB+ Fenix files)
- 83 BWA features with Firefox data (64 CSS properties, 19 APIs)
- Firefox usage shown in report table and JSON output
- Not yet in priority waterfall — serves as cross-validation signal

+13457
+4
.gitignore
··· 1 1 node_modules/ 2 2 *.pdf 3 + .claude/ 4 + CLAUDE.md 5 + data/firefox-results/desktop-raw.json 6 + data/firefox-results/fenix-raw.json
+191
WEB-FEATURE-USAGE-README.md
··· 1 + # Web Feature Usage & Prioritization Report 2 + 3 + A standalone, engine-agnostic dataset and report that prioritizes web platform features by real-world usage. Useful for any browser engine project deciding what to implement next. 4 + 5 + ## Quick start 6 + 7 + ```bash 8 + npm run usage-json # → data/web-feature-usage.json 9 + npm run usage-report # → web-feature-usage.html 10 + ``` 11 + 12 + ## Data sources 13 + 14 + The report combines four data sources. The first three are used in priority order for the main usage ranking; Firefox data is included as supplementary cross-validation. 15 + 16 + | Publication source | What it measures | How | Denominator | Features covered | 17 + |---|---|---|---|---| 18 + | **HTTP Archive** | CSS properties, HTML elements, selectors, at-rules | Static analysis of actual page content from ~10.9M crawled pages | Fraction of crawled pages | 107 | 19 + | **web.dev** | Blink UseCounter data | Published by Google, queried via HTTP Archive's BigQuery mirror (`httparchive.blink_features.usage`) | Fraction of crawled pages | 46 | 20 + | **ChromeStatus** | Usage percentages (`day_percentage`) | Aggregated across all Chrome page loads globally (chromestatus.com) | All Chrome page loads | 230 | 21 + | **Firefox** | CSS property and API use-counter telemetry | Public Mozilla telemetry (desktop + Fenix/Android) | All Firefox page loads | ~82 | 22 + 23 + **Total:** 383 of 415 Baseline Widely Available (BWA) features have usage data from Chrome-ecosystem sources (92.3%). Firefox provides an independent signal for ~82 features. 24 + 25 + **Note:** web.dev and ChromeStatus both report Blink UseCounter data, but with different denominators. HTTP Archive page scanning is an independent measurement — direct content analysis, not UseCounters. Firefox use-counters provide a fully independent non-Chrome signal. 26 + 27 + ## How Firefox use-counter data is collected 28 + 29 + **API endpoints (public, no auth required):** 30 + - Desktop: `https://public-data.telemetry.mozilla.org/api/v1/tables/firefox_desktop_derived/firefox_desktop_use_counters/v2/files` 31 + - Fenix (Android): `https://public-data.telemetry.mozilla.org/api/v1/tables/fenix_derived/fenix_use_counters/v2/files` 32 + 33 + Each endpoint returns a list of JSON file URLs (one per day). Each file contains records keyed by `(submission_date, version_major, country, metric)` with pre-computed `rate` and raw `cnt` fields. 34 + 35 + **Metric naming conventions:** 36 + - CSS: `use.counter.css.page.css_grid_template_columns` → strip prefix → strip `css_` → replace `_` with `-` → `grid-template-columns` → BCD `css.properties.grid-template-columns` 37 + - API: `use.counter.page.window_intersectionobserver` → strip prefix → strip `window_` → case-match to known BCD interface → `IntersectionObserver` → BCD `api.IntersectionObserver` 38 + 39 + **Aggregation:** Records are per-(country, version). Global rate = `sum(cnt)` / `sum(use_counter_top_level_content_documents_destroyed)` across all countries and versions. 40 + 41 + **Coverage:** ~682 CSS metrics and ~367 API metrics in Firefox telemetry. After mapping to web-features BCD keys, ~82 BWA features have data. CSS mapping is mechanical and reliable. API mapping requires case normalization (lowercase → PascalCase) which is lossy — some APIs don't match. 42 + 43 + **Limitations:** 44 + - Firefox-only user base (~3-4% global market share) 45 + - Traffic-weighted like ChromeStatus (not site-weighted like HTTP Archive) 46 + - No HTML element counters, no CSS selectors, no CSS at-rules 47 + - Fenix files are very large (~765MB uncompressed) — collected via streaming 48 + 49 + ```bash 50 + node data/collect-firefox.mjs # collect latest data 51 + node data/collect-firefox.mjs --dry-run # show file info, no download 52 + node data/collect-firefox.mjs --reprocess # reprocess cached desktop data 53 + node data/collect-firefox.mjs --desktop-only # skip Fenix data 54 + ``` 55 + 56 + ## How chromestatus data maps to web-features 57 + 58 + The mapping pipeline: 59 + 60 + ``` 61 + chromestatus.com/data/webfeaturepopularity 62 + → [{property_name: "Flexbox", day_percentage: 0.826, ...}] 63 + 64 + 65 + AreWeBrowserYet/servo-bcd-scripts/feature-tag.ts 66 + 1. Converts property_name to kebab-case (e.g. "Canvas2d" → "canvas-2d") 67 + 2. Matches against the `web-features` npm package, which defines 68 + canonical feature-id → BCD key mappings 69 + 3. Attaches BCD collector results (Servo pass/fail per BCD key) 70 + 4. Writes popularityBcdMap.json 71 + 72 + ▼ (copied into this repo) 73 + data/collector-results/popularityBcdMap.json 74 + { "flexbox": { day_percentage: 0.826, bcd_entries: [...] }, 75 + "avif": null, ← no chromestatus BCD association 76 + ... } 77 + 78 + ├──▶ data/build-httparchive-mapping.mjs 79 + │ Maps BCD keys → HTTP Archive observable paths 80 + │ Generates BigQuery SQL for the HA crawl queries 81 + │ Writes: httparchive-mapping.json 82 + │ │ 83 + │ ▼ 84 + │ data/collect-httparchive.mjs (npm run collect → BigQuery) 85 + │ │ 86 + │ ▼ 87 + │ data/httparchive-results/combined-usage.json 88 + 89 + └──▶ [merge step: day_percentage used as fallback] 90 + 91 + 92 + data/build-usage-json.mjs → data/web-feature-usage.json 93 + data/build-usage-report.mjs → web-feature-usage.html 94 + data/integrate-usage.mjs → patches index.html 95 + 96 + Firefox use-counter pipeline (independent): 97 + 98 + Mozilla public telemetry API 99 + → data/collect-firefox.mjs (node data/collect-firefox.mjs) 100 + Downloads desktop + Fenix JSON files 101 + Streams large files, aggregates per-metric rates 102 + Maps metric names → BCD keys → web-feature IDs 103 + 104 + 105 + data/firefox-results/combined-usage.json 106 + 107 + ▼ (loaded by build-usage-json.mjs and build-usage-report.mjs) 108 + Included as firefox_usage field (supplementary, not in priority waterfall) 109 + ``` 110 + 111 + The join is **name-based**: chromestatus `property_name` → kebab-case normalization → lookup against `web-features` package IDs. When a web-feature ID exists in `web-features` but chromestatus has no BCD entries for it, the result is `null` in `popularityBcdMap.json`. 112 + 113 + ## Mapping quality & coverage gaps 114 + 115 + ### 32 features with no usage data from any source 116 + 117 + **Draft features (7)** — not yet shipped, expected gap: 118 + - `draft_crash-report-storage-apiinitialize`, `draft_meta-text-scale`, `draft_reference-target`, `draft_wasm-branch-hinting`, `draft_wasm-custom-descriptors`, `draft_web-app-manifest-update`, `draft_web-install-api` 119 + 120 + **Obsolete features (13)** — retired chromestatus groupings, expected gap: 121 + - `obsolete_canvas-2d`, `obsolete_canvas-alpha`, `obsolete_canvas-color-management`, `obsolete_canvas-desynchronized`, `obsolete_canvas-element`, `obsolete_canvas-fill-text`, `obsolete_canvas-measure-text`, `obsolete_canvas-text-baselines`, `obsolete_element-check-visibility`, `obsolete_hidden-until-found-attribute`, `obsolete_locale-info-obsoleted-getters`, `obsolete_popover`, `obsolete_will-read-frequently` 122 + 123 + **Regular features with no match (12)** — the substantive gap: 124 + - **`avif`**, **`webp`**, **`http3`** — high-usage features; chromestatus likely tracks these under different IDs or has no BCD associations for them 125 + - **`jpegxl`** — removed from Chrome; chromestatus entry may lack BCD 126 + - **`intersection-observer-v2`** — v1 matched; v2 may not have a distinct chromestatus entry 127 + - **`view-transitions-element-scoped`**, **`uint8-array-base64-hex`**, **`float16-array`** — newer features, may not have BCD associations in chromestatus yet 128 + - **`function`** — ambiguous name, unlikely to map to any single chromestatus feature 129 + - **`prompt`** — generic name; `beforeinstallprompt` matched separately 130 + - **`text-detect`**, **`translation-api`** — experimental/new APIs 131 + 132 + ### Notable low-confidence entries 133 + 134 + - **`ric`** (requestIdleCallback) has `day_percentage: 1e-8` — suspiciously low. A separate `requestidlecallback` entry has a much higher value. Possible kebab normalization issue upstream. 135 + - **56 features** have `day_percentage < 0.0001` — mostly WebXR variants, WASM extensions, and hardware-access APIs (Web Bluetooth, WebHID, etc.). These are real but reflect genuinely low adoption. 136 + 137 + ### Overall confidence 138 + 139 + - **92.3%** of BWA features have at least one usage signal 140 + - The 20 draft/obsolete gaps are expected and harmless 141 + - The 12 real gaps are mostly image formats and protocols (not JS APIs), which chromestatus doesn't track via BCD, plus a few very new features 142 + - The name-based join works well for the web-features that chromestatus does track — the `web-features` package is the canonical source for both sides 143 + 144 + ## Normalization decisions 145 + 146 + - **Observable selection:** For features with multiple BCD keys / HTTP Archive observables, the highest-percentage observable is chosen as representative. This is an upper bound for feature usage. 147 + - **Source priority:** `custom_metrics > blink_features > chrome_popularity`. Custom metrics scan actual page content (ground truth). Blink features are Chromium use counters. Chrome popularity is aggregate across all Chrome traffic (different denominator). 148 + - **Specific vs generic filtering:** When multiple observables map to the same HA path, only the most specific match is kept (e.g. `css.properties.display.flex` over `css.properties.display`). 149 + - **Scale:** All values normalized to 0–1 in output. HA values = fraction of crawled pages. Chrome popularity = fraction of Chrome page loads. Firefox = fraction of Firefox page loads. These are not directly comparable but all reflect real-world usage. 150 + - **Firefox data:** Included as a supplementary `firefox_usage` field on each feature. Not yet integrated into the priority waterfall — serves as an independent cross-validation signal. For features where both Chrome and Firefox data exist, agreement strengthens confidence in the usage estimate. 151 + 152 + ## Output format 153 + 154 + `data/web-feature-usage.json`: 155 + 156 + ```json 157 + { 158 + "generated": "2026-02-21T...", 159 + "description": "...", 160 + "sources": { ... }, 161 + "methodology": { ... }, 162 + "summary": { 163 + "total_features": 415, 164 + "with_usage_data": 383, 165 + "tiers": { "above_50_pct": 26, "10_to_50_pct": 62, "1_to_10_pct": 83, "below_1_pct": 212 } 166 + }, 167 + "features": [ 168 + { 169 + "name": "flexbox", 170 + "usage": 0.951, 171 + "source": "custom_metrics", 172 + "observable": "css.properties.display.flex", 173 + "observable_type": "css_property", 174 + "bcd_key_count": 15, 175 + "bcd_keys": ["css.properties.flex", "css.properties.flex-basis", ...], 176 + "firefox_usage": 0.584, 177 + "firefox_observable": "css.properties.align-items" 178 + }, 179 + ... 180 + ] 181 + } 182 + ``` 183 + 184 + ## Regenerating 185 + 186 + To update the data: 187 + 188 + 1. Get fresh `popularityBcdMap.json` from the [AreWeBrowserYet](https://github.com/AreWeBrowserYet) collector pipeline 189 + 2. Run HTTP Archive queries: `npm run collect` (requires BigQuery credentials) 190 + 3. Collect Firefox data: `npm run collect:firefox` (no credentials needed, downloads ~870MB) 191 + 4. Rebuild outputs: `npm run usage-json && npm run usage-report`
+193
data/build-usage-json.mjs
··· 1 + #!/usr/bin/env node 2 + 3 + /** 4 + * build-usage-json.mjs 5 + * 6 + * Exports the merged web feature prioritization data as a standalone JSON file. 7 + * Uses the same three data sources and priority logic as build-usage-report.mjs: 8 + * HA custom_metrics > HA blink_features > Chrome popularity 9 + * 10 + * Usage: npm run usage-json 11 + */ 12 + 13 + import { readFileSync, writeFileSync } from 'fs'; 14 + import { join } from 'path'; 15 + 16 + const DATA_DIR = new URL('.', import.meta.url).pathname; 17 + const ROOT = join(DATA_DIR, '..'); 18 + 19 + // ── Load data sources ────────────────────────────────────────────────── 20 + 21 + const haData = JSON.parse(readFileSync(join(DATA_DIR, 'httparchive-results', 'combined-usage.json'), 'utf8')); 22 + const haFeatures = haData.features; 23 + 24 + const popData = JSON.parse(readFileSync(join(DATA_DIR, 'collector-results', 'popularityBcdMap.json'), 'utf8')); 25 + 26 + const mappingData = JSON.parse(readFileSync(join(DATA_DIR, 'httparchive-mapping.json'), 'utf8')); 27 + const mappingFeatures = mappingData.features; 28 + 29 + // Firefox use-counter data (optional — skip gracefully if not collected yet) 30 + let firefoxFeatures = {}; 31 + let firefoxDate = null; 32 + try { 33 + const ffData = JSON.parse(readFileSync(join(DATA_DIR, 'firefox-results', 'combined-usage.json'), 'utf8')); 34 + firefoxFeatures = ffData.features; 35 + firefoxDate = ffData.date; 36 + console.log(`Firefox use-counters: ${Object.keys(firefoxFeatures).length} features (${firefoxDate})`); 37 + } catch { 38 + console.log('Firefox use-counters: not available (run: node data/collect-firefox.mjs)'); 39 + } 40 + 41 + console.log(`HTTP Archive combined: ${Object.keys(haFeatures).length} features`); 42 + console.log(`Chrome popularity: ${Object.keys(popData).length} features`); 43 + console.log(`Mapping (all BWA): ${Object.keys(mappingFeatures).length} features`); 44 + 45 + // ── Merge with priority logic ────────────────────────────────────────── 46 + // Priority: HA custom_metrics > HA blink_features > Chrome popularity 47 + 48 + const allFeatureNames = Object.keys(mappingFeatures); 49 + const mergedFeatures = []; 50 + 51 + let countHA_custom = 0; 52 + let countHA_blink = 0; 53 + let countChrome = 0; 54 + let countNoData = 0; 55 + 56 + for (const name of allFeatureNames) { 57 + const mapping = mappingFeatures[name]; 58 + const haEntry = haFeatures[name]; 59 + const chromeEntry = popData[name]; 60 + 61 + let usage = null; 62 + let source = null; 63 + let observable = null; 64 + let observableType = null; 65 + 66 + if (haEntry) { 67 + usage = haEntry.pct; 68 + source = haEntry.source; // "custom_metrics" or "blink_features" 69 + observable = haEntry.observable; 70 + observableType = haEntry.type; 71 + if (haEntry.source === 'custom_metrics') countHA_custom++; 72 + else countHA_blink++; 73 + } else if (chromeEntry && chromeEntry.day_percentage != null) { 74 + usage = chromeEntry.day_percentage; 75 + source = 'chrome_popularity'; 76 + countChrome++; 77 + } else { 78 + countNoData++; 79 + } 80 + 81 + const bcdKeys = mapping.bcd_keys || []; 82 + const bcdKeyCount = bcdKeys.length; 83 + 84 + // Firefox data (included as additional fields, not in priority waterfall) 85 + const ffEntry = firefoxFeatures[name]; 86 + const firefoxUsage = ffEntry ? ffEntry.pct : null; 87 + const firefoxObservable = ffEntry ? ffEntry.observable : null; 88 + 89 + mergedFeatures.push({ 90 + name, 91 + usage, 92 + source, 93 + observable: observable || null, 94 + observable_type: observableType || mapping.primary_type || null, 95 + bcd_key_count: bcdKeyCount, 96 + bcd_keys: bcdKeys, 97 + firefox_usage: firefoxUsage, 98 + firefox_observable: firefoxObservable, 99 + }); 100 + } 101 + 102 + // Sort by usage descending, no-data at the end (then alphabetical) 103 + mergedFeatures.sort((a, b) => { 104 + if (a.usage == null && b.usage == null) return a.name.localeCompare(b.name); 105 + if (a.usage == null) return 1; 106 + if (b.usage == null) return -1; 107 + return b.usage - a.usage; 108 + }); 109 + 110 + // ── Compute summary statistics ───────────────────────────────────────── 111 + 112 + const withUsage = mergedFeatures.filter(f => f.usage != null); 113 + const withoutUsage = mergedFeatures.filter(f => f.usage == null); 114 + 115 + const tierOver50 = withUsage.filter(f => f.usage > 0.5); 116 + const tier10to50 = withUsage.filter(f => f.usage >= 0.1 && f.usage <= 0.5); 117 + const tier1to10 = withUsage.filter(f => f.usage >= 0.01 && f.usage < 0.1); 118 + const tierUnder1 = withUsage.filter(f => f.usage < 0.01); 119 + 120 + // ── Build output JSON ────────────────────────────────────────────────── 121 + 122 + const output = { 123 + generated: new Date().toISOString(), 124 + description: 'Web feature prioritization by real-world usage. Combines Chrome-ecosystem sources (HTTP Archive page scanning, web.dev Blink UseCounters, ChromeStatus) and Firefox use-counter telemetry, mapped to Baseline Widely Available (BWA) web-features.', 125 + sources: { 126 + httparchive: { 127 + description: 'HTTP Archive custom_metrics — static analysis of CSS properties, HTML elements, selectors, at-rules in ~10.9M crawled pages', 128 + internal_key: 'custom_metrics', 129 + feature_count: countHA_custom, 130 + }, 131 + webdev: { 132 + description: 'web.dev — Blink UseCounter data published by Google, queried via HTTP Archive BigQuery mirror (httparchive.blink_features.usage)', 133 + internal_key: 'blink_features', 134 + feature_count: countHA_blink, 135 + }, 136 + chromestatus: { 137 + description: 'ChromeStatus — usage percentages (day_percentage) aggregated across all Chrome page loads globally (chromestatus.com)', 138 + internal_key: 'chrome_popularity', 139 + feature_count: countChrome, 140 + }, 141 + firefox: { 142 + description: 'Firefox use-counter telemetry — fraction of Firefox page loads triggering CSS property or API use-counters (public Mozilla telemetry)', 143 + internal_key: 'firefox_use_counters', 144 + feature_count: Object.keys(firefoxFeatures).length, 145 + date: firefoxDate, 146 + }, 147 + }, 148 + methodology: { 149 + priority: 'httparchive > webdev > chromestatus', 150 + priority_rationale: 'HTTP Archive page scanning is ground truth (direct content analysis). web.dev UseCounters cover JS APIs not detectable by static analysis. ChromeStatus is fallback with a different denominator (all Chrome traffic vs. crawled pages).', 151 + observable_selection: 'Highest-percentage observable chosen as representative per feature', 152 + scale: 'All usage values normalized to 0-1. HTTP Archive and web.dev = fraction of crawled pages. ChromeStatus = fraction of all Chrome page loads. Firefox = fraction of Firefox page loads. Values across sources are not directly comparable.', 153 + firefox_note: 'Firefox usage is included as supplementary data (firefox_usage field) but not yet integrated into the priority waterfall. It provides an independent, non-Chrome signal for cross-validation.', 154 + }, 155 + summary: { 156 + total_features: allFeatureNames.length, 157 + with_usage_data: withUsage.length, 158 + without_usage_data: withoutUsage.length, 159 + tiers: { 160 + above_50_pct: tierOver50.length, 161 + '10_to_50_pct': tier10to50.length, 162 + '1_to_10_pct': tier1to10.length, 163 + below_1_pct: tierUnder1.length, 164 + }, 165 + }, 166 + features: mergedFeatures, 167 + }; 168 + 169 + // ── Write output ─────────────────────────────────────────────────────── 170 + 171 + const outPath = join(DATA_DIR, 'web-feature-usage.json'); 172 + writeFileSync(outPath, JSON.stringify(output, null, 2)); 173 + 174 + // ── Console summary ──────────────────────────────────────────────────── 175 + 176 + const countFirefox = mergedFeatures.filter(f => f.firefox_usage != null).length; 177 + 178 + console.log(`\n=== Coverage ===`); 179 + console.log(`HA custom_metrics: ${countHA_custom}`); 180 + console.log(`HA blink_features: ${countHA_blink}`); 181 + console.log(`Chrome popularity only: ${countChrome}`); 182 + console.log(`Firefox use-counters: ${countFirefox} (supplementary)`); 183 + console.log(`No usage data: ${countNoData}`); 184 + console.log(`Total: ${allFeatureNames.length}`); 185 + 186 + console.log(`\nUsage tiers:`); 187 + console.log(` >50%: ${tierOver50.length}`); 188 + console.log(` 10-50%: ${tier10to50.length}`); 189 + console.log(` 1-10%: ${tier1to10.length}`); 190 + console.log(` <1%: ${tierUnder1.length}`); 191 + 192 + console.log(`\nGenerated ${outPath}`); 193 + console.log(` ${allFeatureNames.length} total features, ${withUsage.length} with usage data`);
+667
data/build-usage-report.mjs
··· 1 + #!/usr/bin/env node 2 + 3 + /** 4 + * build-usage-report.mjs 5 + * 6 + * Generates a standalone HTML report of web feature usage/prioritization. 7 + * Merges three data sources with priority: HA custom_metrics > HA blink_features > Chrome popularity. 8 + * 9 + * Usage: npm run usage-report 10 + */ 11 + 12 + import { readFileSync, writeFileSync } from 'fs'; 13 + import { join } from 'path'; 14 + 15 + const DATA_DIR = new URL('.', import.meta.url).pathname; 16 + const ROOT = join(DATA_DIR, '..'); 17 + 18 + // ── Load data sources ────────────────────────────────────────────────── 19 + 20 + const haData = JSON.parse(readFileSync(join(DATA_DIR, 'httparchive-results', 'combined-usage.json'), 'utf8')); 21 + const haFeatures = haData.features; 22 + 23 + const popData = JSON.parse(readFileSync(join(DATA_DIR, 'collector-results', 'popularityBcdMap.json'), 'utf8')); 24 + 25 + const mappingData = JSON.parse(readFileSync(join(DATA_DIR, 'httparchive-mapping.json'), 'utf8')); 26 + const mappingFeatures = mappingData.features; 27 + 28 + // Firefox use-counter data (optional) 29 + let firefoxFeatures = {}; 30 + let firefoxDate = null; 31 + try { 32 + const ffData = JSON.parse(readFileSync(join(DATA_DIR, 'firefox-results', 'combined-usage.json'), 'utf8')); 33 + firefoxFeatures = ffData.features; 34 + firefoxDate = ffData.date; 35 + console.log(`Firefox use-counters: ${Object.keys(firefoxFeatures).length} features (${firefoxDate})`); 36 + } catch { 37 + console.log('Firefox use-counters: not available'); 38 + } 39 + 40 + console.log(`HTTP Archive combined: ${Object.keys(haFeatures).length} features`); 41 + console.log(`Chrome popularity: ${Object.keys(popData).length} features`); 42 + console.log(`Mapping (all BWA): ${Object.keys(mappingFeatures).length} features`); 43 + 44 + // ── Merge with priority logic (reused from integrate-usage.mjs) ──────── 45 + // Priority: HA custom_metrics > HA blink_features > Chrome popularity 46 + // HA data is already the best observable per feature (highest pct chosen). 47 + // Chrome popularity uses a different denominator (all Chrome page loads vs crawled pages). 48 + 49 + const allFeatureNames = Object.keys(mappingFeatures); 50 + const mergedFeatures = []; 51 + 52 + let countHA_custom = 0; 53 + let countHA_blink = 0; 54 + let countChrome = 0; 55 + let countNoData = 0; 56 + 57 + for (const name of allFeatureNames) { 58 + const mapping = mappingFeatures[name]; 59 + const haEntry = haFeatures[name]; 60 + const chromeEntry = popData[name]; 61 + 62 + let usage = null; 63 + let source = null; 64 + let observable = null; 65 + let observableType = null; 66 + 67 + if (haEntry) { 68 + usage = haEntry.pct; 69 + source = haEntry.source; // "custom_metrics" or "blink_features" 70 + observable = haEntry.observable; 71 + observableType = haEntry.type; 72 + if (haEntry.source === 'custom_metrics') countHA_custom++; 73 + else countHA_blink++; 74 + } else if (chromeEntry && chromeEntry.day_percentage != null) { 75 + usage = chromeEntry.day_percentage; 76 + source = 'chrome_popularity'; 77 + countChrome++; 78 + } else { 79 + countNoData++; 80 + } 81 + 82 + const bcdKeyCount = mapping.bcd_keys ? mapping.bcd_keys.length : 0; 83 + const primaryType = mapping.primary_type || null; 84 + 85 + const ffEntry = firefoxFeatures[name]; 86 + const firefoxUsage = ffEntry ? ffEntry.pct : null; 87 + 88 + mergedFeatures.push({ 89 + name, 90 + usage, 91 + source, 92 + observable, 93 + observableType: observableType || primaryType, 94 + bcdKeyCount, 95 + popularity: mapping.popularity ?? null, 96 + firefoxUsage, 97 + }); 98 + } 99 + 100 + // Sort by usage descending, no-data at the end 101 + mergedFeatures.sort((a, b) => { 102 + if (a.usage == null && b.usage == null) return a.name.localeCompare(b.name); 103 + if (a.usage == null) return 1; 104 + if (b.usage == null) return -1; 105 + return b.usage - a.usage; 106 + }); 107 + 108 + const countFirefox = mergedFeatures.filter(f => f.firefoxUsage != null).length; 109 + 110 + console.log(`\n=== Coverage ===`); 111 + console.log(`HA custom_metrics: ${countHA_custom}`); 112 + console.log(`HA blink_features: ${countHA_blink}`); 113 + console.log(`Chrome popularity only: ${countChrome}`); 114 + console.log(`Firefox use-counters: ${countFirefox} (supplementary)`); 115 + console.log(`No usage data: ${countNoData}`); 116 + console.log(`Total: ${allFeatureNames.length}`); 117 + 118 + // ── Compute summary statistics ───────────────────────────────────────── 119 + 120 + const withUsage = mergedFeatures.filter(f => f.usage != null); 121 + const withoutUsage = mergedFeatures.filter(f => f.usage == null); 122 + 123 + const tierOver50 = withUsage.filter(f => f.usage > 0.5); 124 + const tier10to50 = withUsage.filter(f => f.usage >= 0.1 && f.usage <= 0.5); 125 + const tier1to10 = withUsage.filter(f => f.usage >= 0.01 && f.usage < 0.1); 126 + const tierUnder1 = withUsage.filter(f => f.usage < 0.01); 127 + 128 + console.log(`\nUsage tiers:`); 129 + console.log(` >50%: ${tierOver50.length}`); 130 + console.log(` 10-50%: ${tier10to50.length}`); 131 + console.log(` 1-10%: ${tier1to10.length}`); 132 + console.log(` <1%: ${tierUnder1.length}`); 133 + 134 + // ── Build histogram buckets ──────────────────────────────────────────── 135 + 136 + const histogramBuckets = [ 137 + { label: '0-1%', min: 0, max: 0.01 }, 138 + { label: '1-5%', min: 0.01, max: 0.05 }, 139 + { label: '5-10%', min: 0.05, max: 0.10 }, 140 + { label: '10-20%', min: 0.10, max: 0.20 }, 141 + { label: '20-30%', min: 0.20, max: 0.30 }, 142 + { label: '30-40%', min: 0.30, max: 0.40 }, 143 + { label: '40-50%', min: 0.40, max: 0.50 }, 144 + { label: '50-60%', min: 0.50, max: 0.60 }, 145 + { label: '60-70%', min: 0.60, max: 0.70 }, 146 + { label: '70-80%', min: 0.70, max: 0.80 }, 147 + { label: '80-90%', min: 0.80, max: 0.90 }, 148 + { label: '90-100%', min: 0.90, max: 1.01 }, 149 + ]; 150 + 151 + for (const bucket of histogramBuckets) { 152 + bucket.count = withUsage.filter(f => f.usage >= bucket.min && f.usage < bucket.max).length; 153 + } 154 + 155 + // ── Top-N for bar chart ──────────────────────────────────────────────── 156 + 157 + const topN = 30; 158 + const topFeatures = withUsage.slice(0, topN); 159 + 160 + // ── Generate HTML ────────────────────────────────────────────────────── 161 + 162 + const featuresJSON = JSON.stringify(mergedFeatures); 163 + 164 + const html = `<!DOCTYPE html> 165 + <html lang="en"> 166 + <head> 167 + <meta charset="UTF-8"> 168 + <meta name="viewport" content="width=device-width, initial-scale=1.0"> 169 + <title>Servo BWA Feature Usage &amp; Prioritization Report</title> 170 + <link rel="preconnect" href="https://fonts.googleapis.com"> 171 + <link href="https://fonts.googleapis.com/css2?family=Pragati+Narrow:wght@400;700&display=swap" rel="stylesheet"> 172 + <script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.7/dist/chart.umd.min.js"><\/script> 173 + <style> 174 + * { margin: 0; padding: 0; box-sizing: border-box; } 175 + body { 176 + font-family: "Pragati Narrow", sans-serif; 177 + background: rgb(247, 226, 231); color: #1d1d1d; 178 + padding: 24px; font-size: 1.1rem; line-height: 1.3; 179 + } 180 + h1 { font-size: 28px; margin-bottom: 8px; color: rgb(71, 11, 0); } 181 + h2 { font-size: 20px; margin-bottom: 12px; color: rgb(71, 11, 0); font-weight: 700; } 182 + .byline { font-size: 13px; color: #1d1d1d; } 183 + .byline a { color: rgb(71, 11, 0); } 184 + .subtitle { color: #666; margin-bottom: 24px; font-size: 14px; } 185 + a { color: rgb(71, 11, 0); } 186 + 187 + .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; margin-bottom: 24px; } 188 + .card { background: #fff; border-radius: 12px; padding: 20px; border: 1px solid rgba(71, 11, 0, 0.15); } 189 + .card.full { grid-column: 1 / -1; } 190 + .card h3 { 191 + font-size: 15px; color: rgb(71, 11, 0); margin-bottom: 16px; 192 + font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; 193 + } 194 + 195 + .metric { display: flex; gap: 32px; margin-bottom: 20px; flex-wrap: wrap; } 196 + .metric-item { text-align: center; } 197 + .metric-value { font-size: 36px; font-weight: 700; color: rgb(71, 11, 0); } 198 + .metric-label { font-size: 12px; color: #666; margin-top: 4px; } 199 + 200 + .chart-container { position: relative; height: 300px; } 201 + .chart-container.tall { height: 500px; } 202 + canvas { max-width: 100%; } 203 + 204 + .notes { 205 + background: #fff; border-radius: 12px; padding: 20px; 206 + border: 1px solid rgba(71, 11, 0, 0.15); margin-bottom: 24px; 207 + border-left: 3px solid rgb(71, 11, 0); 208 + } 209 + .notes h3 { 210 + font-size: 15px; color: rgb(71, 11, 0); margin-bottom: 12px; 211 + font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; 212 + } 213 + .notes p, .notes li { 214 + font-size: 13px; line-height: 1.6; color: #1d1d1d; margin-bottom: 8px; 215 + } 216 + .notes ul { margin-left: 20px; } 217 + .notes strong { color: rgb(71, 11, 0); } 218 + .notes code { 219 + background: rgba(71, 11, 0, 0.06); padding: 1px 5px; border-radius: 3px; 220 + font-family: monospace; font-size: 12px; 221 + } 222 + 223 + /* Table styles */ 224 + .feature-table-wrap { 225 + max-height: 800px; overflow-y: auto; border: 1px solid rgba(71, 11, 0, 0.15); 226 + border-radius: 8px; background: #fff; 227 + } 228 + table.ftable { width: 100%; border-collapse: collapse; font-size: 13px; } 229 + table.ftable thead { position: sticky; top: 0; z-index: 1; } 230 + table.ftable th { 231 + text-align: left; padding: 8px 10px; background: rgba(71, 11, 0, 0.05); 232 + border-bottom: 2px solid rgba(71, 11, 0, 0.2); color: rgb(71, 11, 0); 233 + font-weight: 700; cursor: pointer; user-select: none; white-space: nowrap; 234 + } 235 + table.ftable th:hover { background: rgba(71, 11, 0, 0.1); } 236 + table.ftable th .sort-arrow { font-size: 10px; margin-left: 4px; color: #999; } 237 + table.ftable td { 238 + padding: 5px 10px; border-bottom: 1px solid rgba(71, 11, 0, 0.08); 239 + } 240 + table.ftable tr:hover td { background: rgba(71, 11, 0, 0.03); } 241 + 242 + .tier-high { color: #1f6e1f; font-weight: 700; } 243 + .tier-med { color: #8a5a00; font-weight: 700; } 244 + .tier-low { color: #666; } 245 + .tier-vlow { color: #999; } 246 + .tier-none { color: #ccc; font-style: italic; } 247 + 248 + .source-tag { 249 + display: inline-block; padding: 1px 6px; border-radius: 4px; 250 + font-size: 11px; font-weight: 600; 251 + } 252 + .source-tag.custom_metrics { background: rgba(31, 110, 31, 0.12); color: #1f6e1f; } 253 + .source-tag.blink_features { background: rgba(138, 90, 0, 0.12); color: #8a5a00; } 254 + .source-tag.chrome_popularity { background: rgba(100, 100, 180, 0.12); color: #4a4a8a; } 255 + .source-tag.firefox_use_counters { background: rgba(184, 110, 0, 0.12); color: #b86e00; } 256 + .source-tag.none { background: rgba(0,0,0,0.05); color: #999; } 257 + 258 + .filter-bar { 259 + display: flex; gap: 12px; align-items: center; margin-bottom: 16px; flex-wrap: wrap; 260 + } 261 + .filter-bar input[type="text"] { 262 + padding: 6px 12px; border: 1px solid rgba(71, 11, 0, 0.2); border-radius: 6px; 263 + font-family: inherit; font-size: 13px; flex: 1; min-width: 200px; 264 + } 265 + .filter-bar select { 266 + padding: 6px 8px; border: 1px solid rgba(71, 11, 0, 0.2); border-radius: 6px; 267 + font-family: inherit; font-size: 13px; background: #fff; 268 + } 269 + .filter-bar .count { font-size: 12px; color: #666; } 270 + 271 + @media (max-width: 900px) { .grid { grid-template-columns: 1fr; } } 272 + 273 + .footer { 274 + font-size: 11px; color: #686868; text-align: center; margin-top: 24px; 275 + padding-top: 12px; border-top: 1px solid rgba(71, 11, 0, 0.15); 276 + } 277 + </style> 278 + </head> 279 + <body> 280 + 281 + <div style="background:#a33;color:#fff;text-align:center;padding:6px;font-size:13px;font-weight:700;letter-spacing:0.1em;text-transform:uppercase;margin-bottom:10px;">DRAFT &mdash; Do not circulate without permission</div> 282 + 283 + <h1>Web Feature Usage &amp; Prioritization</h1> 284 + <div class="byline">Servo Baseline Readiness Project &mdash; <a href="https://webtransitions.org">webtransitions.org</a></div> 285 + <p class="subtitle">Data as of ${haData.crawl_date} (HTTP Archive) &mdash; ${allFeatureNames.length} Baseline "Widely Available" features analyzed</p> 286 + 287 + <!-- Summary metrics --> 288 + <div class="metric"> 289 + <div class="metric-item"> 290 + <div class="metric-value">${allFeatureNames.length}</div> 291 + <div class="metric-label">Total BWA Features</div> 292 + </div> 293 + <div class="metric-item"> 294 + <div class="metric-value" style="color:#1f6e1f">${withUsage.length}</div> 295 + <div class="metric-label">With Usage Data<br>(${(withUsage.length / allFeatureNames.length * 100).toFixed(1)}%)</div> 296 + </div> 297 + <div class="metric-item"> 298 + <div class="metric-value" style="color:#1f6e1f">${countHA_custom}</div> 299 + <div class="metric-label">HTTP Archive<br>(page content scanning)</div> 300 + </div> 301 + <div class="metric-item"> 302 + <div class="metric-value" style="color:#8a5a00">${countHA_blink}</div> 303 + <div class="metric-label">web.dev<br>(UseCounters via HA)</div> 304 + </div> 305 + <div class="metric-item"> 306 + <div class="metric-value" style="color:#4a4a8a">${countChrome}</div> 307 + <div class="metric-label">ChromeStatus<br>(UseCounters, all Chrome traffic)</div> 308 + </div> 309 + <div class="metric-item"> 310 + <div class="metric-value" style="color:#b86e00">${countFirefox}</div> 311 + <div class="metric-label">Firefox<br>(use-counter telemetry)</div> 312 + </div> 313 + <div class="metric-item"> 314 + <div class="metric-value" style="color:#999">${countNoData}</div> 315 + <div class="metric-label">No Usage Data</div> 316 + </div> 317 + </div> 318 + 319 + <!-- Usage tier summary --> 320 + <div class="grid"> 321 + <div class="card"> 322 + <h3>Usage Tier Distribution</h3> 323 + <table style="width:100%;border-collapse:collapse;font-size:14px;"> 324 + <tr style="border-bottom:1px solid rgba(71,11,0,0.15);"> 325 + <td style="padding:6px 0;"><span class="tier-high">&gt;50%</span></td> 326 + <td style="text-align:right;font-weight:700;">${tierOver50.length} features</td> 327 + <td style="text-align:right;color:#666;">${(tierOver50.length / allFeatureNames.length * 100).toFixed(1)}%</td> 328 + </tr> 329 + <tr style="border-bottom:1px solid rgba(71,11,0,0.15);"> 330 + <td style="padding:6px 0;"><span class="tier-med">10&ndash;50%</span></td> 331 + <td style="text-align:right;font-weight:700;">${tier10to50.length} features</td> 332 + <td style="text-align:right;color:#666;">${(tier10to50.length / allFeatureNames.length * 100).toFixed(1)}%</td> 333 + </tr> 334 + <tr style="border-bottom:1px solid rgba(71,11,0,0.15);"> 335 + <td style="padding:6px 0;"><span class="tier-low">1&ndash;10%</span></td> 336 + <td style="text-align:right;font-weight:700;">${tier1to10.length} features</td> 337 + <td style="text-align:right;color:#666;">${(tier1to10.length / allFeatureNames.length * 100).toFixed(1)}%</td> 338 + </tr> 339 + <tr style="border-bottom:1px solid rgba(71,11,0,0.15);"> 340 + <td style="padding:6px 0;"><span class="tier-vlow">&lt;1%</span></td> 341 + <td style="text-align:right;font-weight:700;">${tierUnder1.length} features</td> 342 + <td style="text-align:right;color:#666;">${(tierUnder1.length / allFeatureNames.length * 100).toFixed(1)}%</td> 343 + </tr> 344 + <tr> 345 + <td style="padding:6px 0;"><span class="tier-none">No data</span></td> 346 + <td style="text-align:right;font-weight:700;">${withoutUsage.length} features</td> 347 + <td style="text-align:right;color:#666;">${(withoutUsage.length / allFeatureNames.length * 100).toFixed(1)}%</td> 348 + </tr> 349 + </table> 350 + </div> 351 + 352 + <div class="card"> 353 + <h3>Data Source Coverage</h3> 354 + <table style="width:100%;border-collapse:collapse;font-size:14px;"> 355 + <tr style="border-bottom:1px solid rgba(71,11,0,0.15);"> 356 + <td style="padding:6px 0;"><span class="source-tag custom_metrics">HTTP Archive</span></td> 357 + <td style="text-align:right;font-weight:700;">${countHA_custom}</td> 358 + <td style="color:#666;">Static analysis of CSS properties, HTML elements, selectors, at-rules in ~10.9M crawled pages</td> 359 + </tr> 360 + <tr style="border-bottom:1px solid rgba(71,11,0,0.15);"> 361 + <td style="padding:6px 0;"><span class="source-tag blink_features">web.dev</span></td> 362 + <td style="text-align:right;font-weight:700;">${countHA_blink}</td> 363 + <td style="color:#666;">Blink UseCounter data published by Google, queried via HTTP Archive&rsquo;s BigQuery mirror (<code>httparchive.blink_features.usage</code>)</td> 364 + </tr> 365 + <tr style="border-bottom:1px solid rgba(71,11,0,0.15);"> 366 + <td style="padding:6px 0;"><span class="source-tag chrome_popularity">ChromeStatus</span></td> 367 + <td style="text-align:right;font-weight:700;">${countChrome}</td> 368 + <td style="color:#666;">Usage percentages from chromestatus.com (<code>day_percentage</code>) &mdash; aggregated across all Chrome page loads globally</td> 369 + </tr> 370 + <tr style="border-bottom:1px solid rgba(71,11,0,0.15);"> 371 + <td style="padding:6px 0;"><span class="source-tag firefox_use_counters">Firefox</span></td> 372 + <td style="text-align:right;font-weight:700;">${countFirefox}</td> 373 + <td style="color:#666;">Firefox use-counter telemetry &mdash; fraction of Firefox page loads triggering CSS/API use-counters (public Mozilla data)</td> 374 + </tr> 375 + <tr> 376 + <td style="padding:6px 0;"><span class="source-tag none">none</span></td> 377 + <td style="text-align:right;font-weight:700;">${countNoData}</td> 378 + <td style="color:#666;">No usage signal available</td> 379 + </tr> 380 + </table> 381 + <p style="font-size:12px;color:#888;margin-top:12px;line-height:1.5;"> 382 + <strong>Note:</strong> web.dev and ChromeStatus both report Blink UseCounter data, but with different denominators. 383 + web.dev data is queried via HTTP Archive&rsquo;s BigQuery tables (denominator = ~10.9M crawled pages). 384 + ChromeStatus aggregates across all real Chrome user traffic globally (denominator = all Chrome page loads). 385 + HTTP Archive page scanning is an independent measurement &mdash; direct content analysis, not UseCounters. 386 + Firefox use-counters provide an independent non-Chrome signal (denominator = all Firefox page loads). 387 + Values across sources are <em>not directly comparable</em>. 388 + </p> 389 + </div> 390 + </div> 391 + 392 + <!-- Charts --> 393 + <div class="grid"> 394 + <div class="card"> 395 + <h3>Usage Distribution Histogram</h3> 396 + <div class="chart-container"><canvas id="histogram"></canvas></div> 397 + </div> 398 + <div class="card"> 399 + <h3>Top ${topN} Features by Usage</h3> 400 + <div style="font-size:11px;margin-bottom:8px;display:flex;gap:16px;"> 401 + <span><span style="display:inline-block;width:12px;height:12px;border-radius:2px;background:rgba(31,110,31,0.7);vertical-align:middle;margin-right:4px;"></span>HTTP Archive</span> 402 + <span><span style="display:inline-block;width:12px;height:12px;border-radius:2px;background:rgba(138,90,0,0.7);vertical-align:middle;margin-right:4px;"></span>web.dev</span> 403 + <span><span style="display:inline-block;width:12px;height:12px;border-radius:2px;background:rgba(74,74,138,0.7);vertical-align:middle;margin-right:4px;"></span>ChromeStatus</span> 404 + </div> 405 + <div class="chart-container tall"><canvas id="topChart"></canvas></div> 406 + </div> 407 + </div> 408 + 409 + <!-- Normalization notes --> 410 + <div class="notes"> 411 + <h3>Data Quality &amp; Normalization Notes</h3> 412 + <ul> 413 + <li><strong>Observable selection:</strong> Each BWA feature maps to multiple BCD keys and HTTP Archive observables. The representative observable is chosen as the one with the <strong>highest usage percentage</strong> among all queryable observables for that feature. This means the reported usage is an upper bound for the feature.</li> 414 + <li><strong>Source priority:</strong> HTTP Archive &gt; web.dev &gt; ChromeStatus. 415 + <strong>HTTP Archive</strong> is preferred because it directly analyzes page content (CSS properties, selectors, at-rules, HTML elements) &mdash; ground truth for what&rsquo;s on the page. 416 + <strong>web.dev</strong> provides Blink UseCounter data published by Google and queryable via HTTP Archive&rsquo;s BigQuery mirror. Covers JS API features that can&rsquo;t be detected by static page analysis. 417 + <strong>ChromeStatus</strong> provides usage percentages aggregated across all real Chrome user traffic globally (chromestatus.com <code>day_percentage</code>). This is the fallback source, with a different denominator (all Chrome page loads vs. crawled pages).</li> 418 + <li><strong>Scale normalization:</strong> All usage values are on a 0&ndash;1 scale. HTTP Archive and web.dev values = fraction of ~10.9M crawled pages. ChromeStatus = fraction of all Chrome page loads globally. The different denominators mean values across sources are <em>not directly comparable</em>.</li> 419 + <li><strong>Specific vs generic filtering:</strong> When multiple observables map to the same HTTP Archive path, only the most specific match is kept. For example, <code>css.properties.display.flex</code> is preferred over <code>css.properties.display</code> when measuring flexbox usage.</li> 420 + <li><strong>ChromeStatus integration:</strong> Chrome popularity data is already integrated as a fallback. It covers features that HTTP Archive cannot directly observe (e.g., JS APIs not detectable via static analysis). The different denominator means these values are not directly comparable to HA values, but both reflect real-world usage signals.</li> 421 + <li><strong>Firefox use-counters:</strong> ${countFirefox} features have Firefox telemetry data, shown in the &ldquo;Firefox %&rdquo; column. This is an independent, non-Chrome signal from public Mozilla telemetry. The denominator is all Firefox page loads (traffic-weighted, like ChromeStatus). Firefox data is supplementary &mdash; it does not affect the primary usage ranking but enables cross-browser validation.</li> 422 + <li><strong>Coverage gap:</strong> ${countNoData} BWA features (${(countNoData / allFeatureNames.length * 100).toFixed(1)}%) have no usage data from any source. Many of these are fundamental features (e.g., core HTML elements, basic CSS) that are universally used but not tracked by use counters, or JS built-ins provided by SpiderMonkey.</li> 423 + </ul> 424 + </div> 425 + 426 + <!-- Feature table --> 427 + <div class="card full" style="grid-column:auto;"> 428 + <h3>Full Prioritized Feature Table</h3> 429 + <div class="filter-bar"> 430 + <input type="text" id="searchBox" placeholder="Filter by feature name..."> 431 + <select id="sourceFilter"> 432 + <option value="all">All sources</option> 433 + <option value="custom_metrics">HTTP Archive</option> 434 + <option value="blink_features">web.dev</option> 435 + <option value="chrome_popularity">ChromeStatus</option> 436 + <option value="none">No data</option> 437 + </select> 438 + <select id="tierFilter"> 439 + <option value="all">All tiers</option> 440 + <option value="high">&gt;50%</option> 441 + <option value="med">10-50%</option> 442 + <option value="low">1-10%</option> 443 + <option value="vlow">&lt;1%</option> 444 + <option value="none">No data</option> 445 + </select> 446 + <span class="count" id="rowCount"></span> 447 + </div> 448 + <div class="feature-table-wrap"> 449 + <table class="ftable" id="featureTable"> 450 + <thead> 451 + <tr> 452 + <th data-col="rank"># <span class="sort-arrow"></span></th> 453 + <th data-col="name">Feature <span class="sort-arrow"></span></th> 454 + <th data-col="usage">Usage % <span class="sort-arrow"></span></th> 455 + <th data-col="firefox">Firefox % <span class="sort-arrow"></span></th> 456 + <th data-col="source">Source <span class="sort-arrow"></span></th> 457 + <th data-col="type">Observable Type <span class="sort-arrow"></span></th> 458 + <th data-col="bcd">BCD Keys <span class="sort-arrow"></span></th> 459 + </tr> 460 + </thead> 461 + <tbody id="featureBody"></tbody> 462 + </table> 463 + </div> 464 + </div> 465 + 466 + <div class="footer"> 467 + Servo Baseline Readiness &mdash; Web Feature Usage Report &mdash; Generated ${new Date().toISOString().slice(0, 10)} &mdash; <a href="https://webtransitions.org">webtransitions.org</a> 468 + </div> 469 + 470 + <script> 471 + // Embedded data 472 + const features = ${featuresJSON}; 473 + 474 + // ── Histogram chart ────────────────────────────────────────────────── 475 + const histLabels = ${JSON.stringify(histogramBuckets.map(b => b.label))}; 476 + const histCounts = ${JSON.stringify(histogramBuckets.map(b => b.count))}; 477 + 478 + new Chart(document.getElementById('histogram'), { 479 + type: 'bar', 480 + data: { 481 + labels: histLabels, 482 + datasets: [{ 483 + label: 'Features', 484 + data: histCounts, 485 + backgroundColor: histLabels.map((_, i) => { 486 + const t = i / (histLabels.length - 1); 487 + if (t > 0.7) return 'rgba(31, 110, 31, 0.7)'; 488 + if (t > 0.3) return 'rgba(138, 90, 0, 0.7)'; 489 + return 'rgba(71, 11, 0, 0.4)'; 490 + }), 491 + borderRadius: 4, 492 + }] 493 + }, 494 + options: { 495 + responsive: true, maintainAspectRatio: false, 496 + plugins: { legend: { display: false } }, 497 + scales: { 498 + y: { beginAtZero: true, title: { display: true, text: 'Number of features' } }, 499 + x: { title: { display: true, text: 'Usage range' } } 500 + } 501 + } 502 + }); 503 + 504 + // ── Top-N bar chart ────────────────────────────────────────────────── 505 + const topData = ${JSON.stringify(topFeatures.map(f => ({ name: f.name, usage: f.usage, source: f.source })))}; 506 + 507 + new Chart(document.getElementById('topChart'), { 508 + type: 'bar', 509 + data: { 510 + labels: topData.map(d => d.name), 511 + datasets: [{ 512 + label: 'Usage %', 513 + data: topData.map(d => +(d.usage * 100).toFixed(2)), 514 + backgroundColor: topData.map(d => { 515 + if (d.source === 'custom_metrics') return 'rgba(31, 110, 31, 0.7)'; 516 + if (d.source === 'blink_features') return 'rgba(138, 90, 0, 0.7)'; 517 + return 'rgba(74, 74, 138, 0.7)'; 518 + }), 519 + borderRadius: 3, 520 + }] 521 + }, 522 + options: { 523 + indexAxis: 'y', 524 + responsive: true, maintainAspectRatio: false, 525 + plugins: { legend: { display: false } }, 526 + scales: { 527 + x: { beginAtZero: true, max: 100, title: { display: true, text: 'Usage %' } }, 528 + y: { ticks: { font: { size: 11 } } } 529 + } 530 + } 531 + }); 532 + 533 + // ── Sortable, filterable table ─────────────────────────────────────── 534 + const tbody = document.getElementById('featureBody'); 535 + const searchBox = document.getElementById('searchBox'); 536 + const sourceFilter = document.getElementById('sourceFilter'); 537 + const tierFilter = document.getElementById('tierFilter'); 538 + const rowCountEl = document.getElementById('rowCount'); 539 + 540 + let sortCol = 'usage'; 541 + let sortAsc = false; 542 + 543 + function usageTier(u) { 544 + if (u == null) return 'none'; 545 + if (u > 0.5) return 'high'; 546 + if (u >= 0.1) return 'med'; 547 + if (u >= 0.01) return 'low'; 548 + return 'vlow'; 549 + } 550 + 551 + function tierClass(t) { 552 + return { high: 'tier-high', med: 'tier-med', low: 'tier-low', vlow: 'tier-vlow', none: 'tier-none' }[t] || ''; 553 + } 554 + 555 + function fmtUsage(u) { 556 + if (u == null) return '<span class="tier-none">--</span>'; 557 + const pct = (u * 100); 558 + const cls = tierClass(usageTier(u)); 559 + if (pct < 0.01) return '<span class="' + cls + '">' + pct.toFixed(4) + '%</span>'; 560 + if (pct < 1) return '<span class="' + cls + '">' + pct.toFixed(3) + '%</span>'; 561 + return '<span class="' + cls + '">' + pct.toFixed(2) + '%</span>'; 562 + } 563 + 564 + const sourceLabels = { 565 + custom_metrics: 'HTTP Archive', 566 + blink_features: 'web.dev', 567 + chrome_popularity: 'ChromeStatus' 568 + }; 569 + 570 + function sourceTag(s) { 571 + if (!s) return '<span class="source-tag none">none</span>'; 572 + return '<span class="source-tag ' + s + '">' + (sourceLabels[s] || s) + '</span>'; 573 + } 574 + 575 + function sortFeatures(arr) { 576 + const dir = sortAsc ? 1 : -1; 577 + return [...arr].sort((a, b) => { 578 + if (sortCol === 'name') return dir * a.name.localeCompare(b.name); 579 + if (sortCol === 'usage') { 580 + if (a.usage == null && b.usage == null) return a.name.localeCompare(b.name); 581 + if (a.usage == null) return 1; 582 + if (b.usage == null) return -1; 583 + return dir * (a.usage - b.usage); 584 + } 585 + if (sortCol === 'firefox') { 586 + if (a.firefoxUsage == null && b.firefoxUsage == null) return a.name.localeCompare(b.name); 587 + if (a.firefoxUsage == null) return 1; 588 + if (b.firefoxUsage == null) return -1; 589 + return dir * (a.firefoxUsage - b.firefoxUsage); 590 + } 591 + if (sortCol === 'source') return dir * (a.source || 'zzz').localeCompare(b.source || 'zzz'); 592 + if (sortCol === 'type') return dir * (a.observableType || 'zzz').localeCompare(b.observableType || 'zzz'); 593 + if (sortCol === 'bcd') return dir * (a.bcdKeyCount - b.bcdKeyCount); 594 + if (sortCol === 'rank') return dir * (features.indexOf(a) - features.indexOf(b)); 595 + return 0; 596 + }); 597 + } 598 + 599 + function render() { 600 + const search = searchBox.value.toLowerCase(); 601 + const srcVal = sourceFilter.value; 602 + const tierVal = tierFilter.value; 603 + 604 + let filtered = features.filter(f => { 605 + if (search && !f.name.toLowerCase().includes(search)) return false; 606 + if (srcVal !== 'all') { 607 + if (srcVal === 'none' && f.source != null) return false; 608 + if (srcVal !== 'none' && f.source !== srcVal) return false; 609 + } 610 + if (tierVal !== 'all' && usageTier(f.usage) !== tierVal) return false; 611 + return true; 612 + }); 613 + 614 + filtered = sortFeatures(filtered); 615 + 616 + rowCountEl.textContent = filtered.length + ' of ' + features.length + ' features'; 617 + 618 + const rows = filtered.map((f, i) => { 619 + return '<tr>' 620 + + '<td>' + (i + 1) + '</td>' 621 + + '<td><strong>' + f.name + '</strong>' + (f.observable ? ' <span style="color:#999;font-size:11px;">(' + f.observable + ')</span>' : '') + '</td>' 622 + + '<td>' + fmtUsage(f.usage) + '</td>' 623 + + '<td>' + fmtUsage(f.firefoxUsage) + '</td>' 624 + + '<td>' + sourceTag(f.source) + '</td>' 625 + + '<td style="color:#666;font-size:12px;">' + (f.observableType || '--') + '</td>' 626 + + '<td style="text-align:center;">' + f.bcdKeyCount + '</td>' 627 + + '</tr>'; 628 + }); 629 + 630 + tbody.innerHTML = rows.join(''); 631 + } 632 + 633 + // Sort click handler 634 + document.querySelectorAll('th[data-col]').forEach(th => { 635 + th.addEventListener('click', () => { 636 + const col = th.dataset.col; 637 + if (sortCol === col) { sortAsc = !sortAsc; } 638 + else { sortCol = col; sortAsc = col === 'name'; } 639 + 640 + // Update arrows 641 + document.querySelectorAll('th[data-col] .sort-arrow').forEach(el => el.textContent = ''); 642 + th.querySelector('.sort-arrow').textContent = sortAsc ? ' \\u25B2' : ' \\u25BC'; 643 + 644 + render(); 645 + }); 646 + }); 647 + 648 + searchBox.addEventListener('input', render); 649 + sourceFilter.addEventListener('change', render); 650 + tierFilter.addEventListener('change', render); 651 + 652 + // Initial render 653 + render(); 654 + 655 + // Set initial sort arrow 656 + document.querySelector('th[data-col="usage"] .sort-arrow').textContent = ' \\u25BC'; 657 + <\/script> 658 + 659 + </body> 660 + </html>`; 661 + 662 + // ── Write output ─────────────────────────────────────────────────────── 663 + 664 + const outPath = join(ROOT, 'web-feature-usage.html'); 665 + writeFileSync(outPath, html); 666 + console.log(`\nGenerated ${outPath}`); 667 + console.log(` ${allFeatureNames.length} total features, ${withUsage.length} with usage data`);
+599
data/collect-firefox.mjs
··· 1 + #!/usr/bin/env node 2 + 3 + /** 4 + * collect-firefox.mjs 5 + * 6 + * Collects Firefox use-counter telemetry from Mozilla's public data API. 7 + * Downloads desktop and Fenix (Android) data, aggregates across countries 8 + * and versions, maps metrics to BCD keys and web-feature IDs. 9 + * 10 + * No authentication required — uses public Mozilla telemetry endpoints. 11 + * 12 + * Usage: 13 + * node data/collect-firefox.mjs # collect latest data 14 + * node data/collect-firefox.mjs --dry-run # show file info, no download 15 + * node data/collect-firefox.mjs --reprocess # reprocess cached raw data 16 + * node data/collect-firefox.mjs --date=2025-06-11 # specific date (match file content) 17 + * node data/collect-firefox.mjs --desktop-only # skip Fenix data 18 + */ 19 + 20 + import { readFileSync, writeFileSync, mkdirSync } from 'fs'; 21 + import { join, dirname } from 'path'; 22 + import { fileURLToPath } from 'url'; 23 + 24 + const __dirname = dirname(fileURLToPath(import.meta.url)); 25 + const RESULTS_DIR = join(__dirname, 'firefox-results'); 26 + 27 + const DESKTOP_FILES_URL = 'https://public-data.telemetry.mozilla.org/api/v1/tables/firefox_desktop_derived/firefox_desktop_use_counters/v2/files'; 28 + const FENIX_FILES_URL = 'https://public-data.telemetry.mozilla.org/api/v1/tables/fenix_derived/fenix_use_counters/v2/files'; 29 + 30 + // --------------------------------------------------------------------------- 31 + // Parse CLI args 32 + // --------------------------------------------------------------------------- 33 + const args = process.argv.slice(2); 34 + 35 + function hasFlag(name) { 36 + return args.some(a => a === `--${name}`); 37 + } 38 + 39 + function getFlagValue(name) { 40 + const arg = args.find(a => a.startsWith(`--${name}=`)); 41 + return arg ? arg.split('=').slice(1).join('=') : null; 42 + } 43 + 44 + const DRY_RUN = hasFlag('dry-run'); 45 + const REPROCESS = hasFlag('reprocess'); 46 + const DESKTOP_ONLY = hasFlag('desktop-only'); 47 + const TARGET_DATE = getFlagValue('date'); 48 + 49 + // --------------------------------------------------------------------------- 50 + // Load mapping for BCD key → web-feature ID resolution 51 + // --------------------------------------------------------------------------- 52 + const mapping = JSON.parse(readFileSync(join(__dirname, 'httparchive-mapping.json'), 'utf8')); 53 + 54 + // Build reverse maps: BCD key → [featureId, ...] 55 + const bcdKeyToFeatureIds = new Map(); 56 + for (const [featureId, info] of Object.entries(mapping.features)) { 57 + if (!info.bcd_keys) continue; 58 + for (const bcdKey of info.bcd_keys) { 59 + if (!bcdKeyToFeatureIds.has(bcdKey)) bcdKeyToFeatureIds.set(bcdKey, []); 60 + bcdKeyToFeatureIds.get(bcdKey).push(featureId); 61 + } 62 + } 63 + 64 + // Build a set of known BCD API interface names (lowercase → original case) 65 + // from the mapping's bcd_keys that start with "api." 66 + const bcdApiInterfaces = new Map(); // lowercase → PascalCase 67 + for (const [, info] of Object.entries(mapping.features)) { 68 + if (!info.bcd_keys) continue; 69 + for (const bcdKey of info.bcd_keys) { 70 + const parts = bcdKey.split('.'); 71 + if (parts[0] === 'api' && parts.length >= 2) { 72 + bcdApiInterfaces.set(parts[1].toLowerCase(), parts[1]); 73 + } 74 + } 75 + } 76 + 77 + // --------------------------------------------------------------------------- 78 + // Metric name → BCD key mapping 79 + // --------------------------------------------------------------------------- 80 + 81 + /** 82 + * Map a Firefox use-counter metric name to a BCD key. 83 + * 84 + * CSS metrics: use.counter.css.page.css_grid_template_columns 85 + * → strip prefix → css_grid_template_columns 86 + * → strip css_ → grid_template_columns 87 + * → replace _ with - → grid-template-columns 88 + * → BCD: css.properties.grid-template-columns 89 + * 90 + * API metrics: use.counter.page.window_intersectionobserver 91 + * → strip prefix → window_intersectionobserver 92 + * → strip window_ → intersectionobserver 93 + * → case-match to known BCD interface → IntersectionObserver 94 + * → BCD: api.IntersectionObserver 95 + * 96 + * Returns { bcdKey, type } or null if unmappable. 97 + */ 98 + function metricToBcdKey(metric) { 99 + // CSS page-scope metrics 100 + if (metric.startsWith('use.counter.css.page.')) { 101 + const raw = metric.slice('use.counter.css.page.'.length); 102 + // Most CSS metrics have a css_ prefix, but some (SVG properties) don't 103 + const stripped = raw.startsWith('css_') ? raw.slice(4) : raw; 104 + const propName = stripped.replace(/_/g, '-'); 105 + return { bcdKey: `css.properties.${propName}`, type: 'css_property' }; 106 + } 107 + 108 + // API page-scope metrics 109 + if (metric.startsWith('use.counter.page.')) { 110 + const raw = metric.slice('use.counter.page.'.length); 111 + // Most API metrics have a window_ prefix 112 + const stripped = raw.startsWith('window_') ? raw.slice(7) : raw; 113 + 114 + // Try to match against known BCD API interface names (case-insensitive) 115 + const lc = stripped.toLowerCase(); 116 + const pascalCase = bcdApiInterfaces.get(lc); 117 + if (pascalCase) { 118 + return { bcdKey: `api.${pascalCase}`, type: 'blink_api' }; 119 + } 120 + 121 + // Try matching as a method/property on an interface: e.g., "document_execcommand" 122 + // Split on first underscore: prefix might be an interface 123 + const underIdx = stripped.indexOf('_'); 124 + if (underIdx > 0) { 125 + const ifacePart = stripped.slice(0, underIdx).toLowerCase(); 126 + const pascalIface = bcdApiInterfaces.get(ifacePart); 127 + if (pascalIface) { 128 + return { bcdKey: `api.${pascalIface}`, type: 'blink_api' }; 129 + } 130 + } 131 + 132 + return null; // unmappable API metric 133 + } 134 + 135 + return null; // not a page-scope metric we handle 136 + } 137 + 138 + /** 139 + * Resolve a BCD key to web-feature IDs. 140 + * Returns array of feature IDs, or empty array. 141 + */ 142 + function bcdKeyToFeatures(bcdKey) { 143 + // Direct lookup 144 + const direct = bcdKeyToFeatureIds.get(bcdKey); 145 + if (direct) return direct; 146 + 147 + // For CSS properties, try looking up just the top-level property 148 + // (the mapping may have sub-feature keys like css.properties.grid-template-columns.fit-content) 149 + const parts = bcdKey.split('.'); 150 + if (parts[0] === 'css' && parts[1] === 'properties' && parts.length === 3) { 151 + // Already at top level, no match 152 + return []; 153 + } 154 + 155 + // For API keys, try just the interface 156 + if (parts[0] === 'api' && parts.length >= 2) { 157 + const ifaceKey = `api.${parts[1]}`; 158 + return bcdKeyToFeatureIds.get(ifaceKey) || []; 159 + } 160 + 161 + return []; 162 + } 163 + 164 + // --------------------------------------------------------------------------- 165 + // Fetch and parse data 166 + // --------------------------------------------------------------------------- 167 + 168 + async function fetchFileList(url, label) { 169 + console.log(`[${label}] Fetching file list...`); 170 + const resp = await fetch(url); 171 + if (!resp.ok) throw new Error(`HTTP ${resp.status} fetching ${url}`); 172 + const files = await resp.json(); 173 + console.log(`[${label}] ${files.length} files available`); 174 + return files; 175 + } 176 + 177 + /** 178 + * Download and parse a JSON array file. 179 + * Always streams and aggregates on-the-fly to handle arbitrarily large files 180 + * (Fenix data can be 765MB+ uncompressed even though content-length shows ~42MB gzipped). 181 + */ 182 + async function fetchAndParse(url, label) { 183 + console.log(`[${label}] Downloading and streaming...`); 184 + const start = Date.now(); 185 + const resp = await fetch(url); 186 + if (!resp.ok) throw new Error(`HTTP ${resp.status} fetching ${url}`); 187 + return streamAndAggregate(resp, label, start); 188 + } 189 + 190 + /** 191 + * Stream a large JSON array response and aggregate page-scope metrics 192 + * on-the-fly to avoid holding the entire file in memory. 193 + * 194 + * Uses a fast approach: the Mozilla data is a flat JSON array of simple objects 195 + * (no nested objects), so we can split on `},{` boundaries efficiently. 196 + * 197 + * Returns an object with pre-aggregated metrics instead of raw records. 198 + * The caller detects this via the `_streamed` flag. 199 + */ 200 + async function streamAndAggregate(resp, label, start) { 201 + const reader = resp.body.getReader(); 202 + const decoder = new TextDecoder(); 203 + let buffer = ''; 204 + let recordCount = 0; 205 + let bytesRead = 0; 206 + 207 + // Aggregate directly: metric → { totalCnt, totalDenom } 208 + const metricAgg = new Map(); 209 + let dateFound = null; 210 + 211 + function processRecord(jsonStr) { 212 + let record; 213 + try { 214 + record = JSON.parse(jsonStr); 215 + } catch { return; } 216 + 217 + recordCount++; 218 + if (!dateFound) dateFound = record.submission_date; 219 + 220 + const metric = record.metric; 221 + if (!metric.startsWith('use.counter.css.page.') && 222 + !metric.startsWith('use.counter.page.')) { 223 + return; 224 + } 225 + 226 + const cnt = parseInt(record.cnt, 10); 227 + const denom = parseInt(record.use_counter_top_level_content_documents_destroyed, 10); 228 + if (isNaN(cnt) || isNaN(denom) || denom === 0) return; 229 + 230 + const agg = metricAgg.get(metric); 231 + if (agg) { 232 + agg.totalCnt += cnt; 233 + agg.totalDenom += denom; 234 + } else { 235 + metricAgg.set(metric, { totalCnt: cnt, totalDenom: denom }); 236 + } 237 + } 238 + 239 + while (true) { 240 + const { done, value } = await reader.read(); 241 + if (done) break; 242 + 243 + bytesRead += value.length; 244 + buffer += decoder.decode(value, { stream: true }); 245 + 246 + // Split on `},{` to find complete JSON objects 247 + // The data is a flat array: [{...},{...},{...}] 248 + // We split on `},{` and reconstruct each object with braces 249 + let splitIdx; 250 + while ((splitIdx = buffer.indexOf('},{')) !== -1) { 251 + const chunk = buffer.slice(0, splitIdx + 1); // up to and including first `}` 252 + buffer = buffer.slice(splitIdx + 2); // skip `},{`, keep from next `{` content 253 + 254 + // Strip leading `[` or `,` from first chunk 255 + let objStr = chunk; 256 + if (objStr.startsWith('[')) objStr = objStr.slice(1); 257 + 258 + // Ensure it starts with `{` 259 + const braceIdx = objStr.indexOf('{'); 260 + if (braceIdx >= 0) { 261 + objStr = objStr.slice(braceIdx); 262 + processRecord(objStr); 263 + } 264 + } 265 + 266 + if (recordCount % 500000 === 0 && recordCount > 0) { 267 + const mb = (bytesRead / (1024 * 1024)).toFixed(0); 268 + console.log(`[${label}] ...${recordCount} records processed (${mb} MB)`); 269 + } 270 + } 271 + 272 + // Process the last record (ends with `}]` instead of `},{`) 273 + if (buffer.length > 0) { 274 + let objStr = buffer.trim(); 275 + if (objStr.startsWith('[')) objStr = objStr.slice(1); 276 + if (objStr.endsWith(']')) objStr = objStr.slice(0, -1); 277 + const braceIdx = objStr.indexOf('{'); 278 + if (braceIdx >= 0) { 279 + objStr = objStr.slice(braceIdx); 280 + if (objStr.endsWith('}')) processRecord(objStr); 281 + } 282 + } 283 + 284 + const elapsed = ((Date.now() - start) / 1000).toFixed(1); 285 + const mb = (bytesRead / (1024 * 1024)).toFixed(1); 286 + console.log(`[${label}] Streamed ${mb} MB in ${elapsed}s, ${recordCount} records, ${metricAgg.size} page-scope metrics`); 287 + 288 + // Compute global rate per metric (same format as aggregateRecords output) 289 + const result = new Map(); 290 + for (const [metric, agg] of metricAgg) { 291 + result.set(metric, { 292 + rate: agg.totalCnt / agg.totalDenom, 293 + cnt: agg.totalCnt, 294 + denom: agg.totalDenom, 295 + }); 296 + } 297 + 298 + return { 299 + _streamed: true, 300 + date: dateFound, 301 + metrics: result, 302 + recordCount, 303 + }; 304 + } 305 + 306 + // --------------------------------------------------------------------------- 307 + // Aggregate records across countries and versions 308 + // --------------------------------------------------------------------------- 309 + 310 + /** 311 + * Aggregate raw records into per-metric global rates. 312 + * 313 + * For page-scope metrics, the rate = sum(cnt) / sum(top_level_documents). 314 + * But we must be careful: each (country, version) combination has its own 315 + * denominator. The pre-computed rate is per-(country, version) cell. 316 + * 317 + * To get a proper global rate, we sum cnt and sum the denominator. 318 + */ 319 + function aggregateRecords(records, targetDate) { 320 + // Group by metric, summing cnt and denominator 321 + const metricAgg = new Map(); // metric → { totalCnt, totalDenom } 322 + 323 + let dateFound = null; 324 + let recordsUsed = 0; 325 + 326 + for (const record of records) { 327 + // Filter to target date if specified 328 + if (targetDate && record.submission_date !== targetDate) continue; 329 + 330 + // Track what date we're using 331 + if (!dateFound) dateFound = record.submission_date; 332 + 333 + // Only process page-scope metrics (most comparable to other sources) 334 + const metric = record.metric; 335 + if (!metric.startsWith('use.counter.css.page.') && 336 + !metric.startsWith('use.counter.page.')) { 337 + continue; 338 + } 339 + 340 + const cnt = parseInt(record.cnt, 10); 341 + const denom = parseInt(record.use_counter_top_level_content_documents_destroyed, 10); 342 + 343 + if (isNaN(cnt) || isNaN(denom) || denom === 0) continue; 344 + 345 + recordsUsed++; 346 + const agg = metricAgg.get(metric); 347 + if (agg) { 348 + agg.totalCnt += cnt; 349 + agg.totalDenom += denom; 350 + } else { 351 + metricAgg.set(metric, { totalCnt: cnt, totalDenom: denom }); 352 + } 353 + } 354 + 355 + console.log(` Date: ${dateFound || '(none)'}, ${recordsUsed} page-scope records aggregated into ${metricAgg.size} unique metrics`); 356 + 357 + // Compute global rate per metric 358 + const result = new Map(); 359 + for (const [metric, agg] of metricAgg) { 360 + result.set(metric, { 361 + rate: agg.totalCnt / agg.totalDenom, 362 + cnt: agg.totalCnt, 363 + denom: agg.totalDenom, 364 + }); 365 + } 366 + 367 + return { metrics: result, date: dateFound }; 368 + } 369 + 370 + // --------------------------------------------------------------------------- 371 + // Map aggregated metrics to web-feature IDs 372 + // --------------------------------------------------------------------------- 373 + 374 + function mapToFeatures(metrics) { 375 + // metric → { bcdKey, featureIds, rate, type } 376 + const featureUsage = {}; // featureId → { pct, source, observable, type } 377 + 378 + let mapped = 0; 379 + let unmapped = 0; 380 + 381 + for (const [metric, data] of metrics) { 382 + const mapping = metricToBcdKey(metric); 383 + if (!mapping) { 384 + unmapped++; 385 + continue; 386 + } 387 + 388 + const featureIds = bcdKeyToFeatures(mapping.bcdKey); 389 + if (featureIds.length === 0) { 390 + unmapped++; 391 + continue; 392 + } 393 + 394 + mapped++; 395 + for (const fid of featureIds) { 396 + // Keep highest rate per feature 397 + if (!featureUsage[fid] || featureUsage[fid].pct < data.rate) { 398 + featureUsage[fid] = { 399 + pct: data.rate, 400 + source: 'firefox_use_counters', 401 + observable: mapping.bcdKey, 402 + type: mapping.type, 403 + }; 404 + } 405 + } 406 + } 407 + 408 + console.log(` Mapped ${mapped} metrics to features, ${unmapped} unmapped`); 409 + console.log(` ${Object.keys(featureUsage).length} unique web-features with data`); 410 + 411 + return featureUsage; 412 + } 413 + 414 + // --------------------------------------------------------------------------- 415 + // Combine desktop and Fenix data 416 + // --------------------------------------------------------------------------- 417 + 418 + function combineDesktopAndFenix(desktop, fenix) { 419 + const combined = {}; 420 + 421 + // Start with desktop 422 + if (desktop) { 423 + for (const [fid, data] of Object.entries(desktop)) { 424 + combined[fid] = { ...data, platforms: { desktop: data.pct } }; 425 + } 426 + } 427 + 428 + // Merge Fenix — take the max rate across platforms 429 + if (fenix) { 430 + for (const [fid, data] of Object.entries(fenix)) { 431 + if (!combined[fid]) { 432 + combined[fid] = { ...data, platforms: { fenix: data.pct } }; 433 + } else { 434 + combined[fid].platforms.fenix = data.pct; 435 + if (data.pct > combined[fid].pct) { 436 + combined[fid].pct = data.pct; 437 + combined[fid].observable = data.observable; 438 + combined[fid].type = data.type; 439 + } 440 + } 441 + } 442 + } 443 + 444 + return combined; 445 + } 446 + 447 + // --------------------------------------------------------------------------- 448 + // Summary output 449 + // --------------------------------------------------------------------------- 450 + function printSummary(combined) { 451 + const entries = Object.entries(combined); 452 + const total = entries.length; 453 + 454 + if (total === 0) { 455 + console.log('\nNo features with data.'); 456 + return; 457 + } 458 + 459 + const byType = {}; 460 + for (const [, data] of entries) { 461 + byType[data.type] = (byType[data.type] || 0) + 1; 462 + } 463 + 464 + console.log(`\n${'='.repeat(60)}`); 465 + console.log(`SUMMARY: ${total} features with Firefox usage data`); 466 + console.log('='.repeat(60)); 467 + 468 + console.log('\nBreakdown by type:'); 469 + for (const [type, count] of Object.entries(byType).sort((a, b) => b[1] - a[1])) { 470 + console.log(` ${type}: ${count}`); 471 + } 472 + 473 + // Top 20 by usage 474 + const sorted = entries.sort((a, b) => b[1].pct - a[1].pct); 475 + const top20 = sorted.slice(0, 20); 476 + 477 + console.log('\nTop 20 features by Firefox usage:'); 478 + console.log(` ${'Feature'.padEnd(40)} ${'%'.padStart(8)} Type`); 479 + console.log(` ${'-'.repeat(40)} ${'-'.repeat(8)} ${'-'.repeat(15)}`); 480 + for (const [fid, data] of top20) { 481 + const pctStr = (data.pct * 100).toFixed(2) + '%'; 482 + console.log(` ${fid.padEnd(40)} ${pctStr.padStart(8)} ${data.type}`); 483 + } 484 + 485 + console.log(''); 486 + } 487 + 488 + // --------------------------------------------------------------------------- 489 + // Main 490 + // --------------------------------------------------------------------------- 491 + async function main() { 492 + console.log('Firefox use-counter data collection'); 493 + console.log(` Mode: ${REPROCESS ? 'REPROCESS' : DRY_RUN ? 'DRY RUN' : 'EXECUTE'}`); 494 + if (TARGET_DATE) console.log(` Target date: ${TARGET_DATE}`); 495 + if (DESKTOP_ONLY) console.log(` Desktop only (skipping Fenix)`); 496 + console.log(''); 497 + 498 + mkdirSync(RESULTS_DIR, { recursive: true }); 499 + 500 + // Result can be either raw records (array) or pre-aggregated streamed result (object with _streamed flag) 501 + let desktopResult = null; 502 + let fenixResult = null; 503 + 504 + if (REPROCESS) { 505 + // Load cached raw data 506 + try { 507 + desktopResult = JSON.parse(readFileSync(join(RESULTS_DIR, 'desktop-raw.json'), 'utf8')); 508 + console.log(`[desktop] Loaded ${desktopResult.length} records from cache`); 509 + } catch { console.log('[desktop] No cached data found'); } 510 + 511 + if (!DESKTOP_ONLY) { 512 + try { 513 + fenixResult = JSON.parse(readFileSync(join(RESULTS_DIR, 'fenix-raw.json'), 'utf8')); 514 + console.log(`[fenix] Loaded ${fenixResult.length} records from cache`); 515 + } catch { console.log('[fenix] No cached data found (fenix data is streamed, not cached)'); } 516 + } 517 + } else { 518 + // Fetch file lists 519 + const desktopFiles = await fetchFileList(DESKTOP_FILES_URL, 'desktop'); 520 + 521 + if (DRY_RUN) { 522 + console.log(`\n[desktop] Latest file: ${desktopFiles[desktopFiles.length - 1]}`); 523 + console.log(`[desktop] Would download ~108 MB`); 524 + 525 + if (!DESKTOP_ONLY) { 526 + const fenixFiles = await fetchFileList(FENIX_FILES_URL, 'fenix'); 527 + console.log(`[fenix] Latest file: ${fenixFiles[fenixFiles.length - 1]}`); 528 + console.log(`[fenix] Would download ~108 MB`); 529 + } 530 + return; 531 + } 532 + 533 + // Download latest file for each platform (streamed and aggregated on-the-fly) 534 + const latestDesktopUrl = desktopFiles[desktopFiles.length - 1]; 535 + desktopResult = await fetchAndParse(latestDesktopUrl, 'desktop'); 536 + 537 + if (!DESKTOP_ONLY) { 538 + const fenixFiles = await fetchFileList(FENIX_FILES_URL, 'fenix'); 539 + const latestFenixUrl = fenixFiles[fenixFiles.length - 1]; 540 + fenixResult = await fetchAndParse(latestFenixUrl, 'fenix'); 541 + } 542 + } 543 + 544 + // Aggregate and map 545 + // Results are either: raw records (array from --reprocess cache) or pre-aggregated (streamed) 546 + function getAggregated(result, label) { 547 + if (!result) return null; 548 + if (result._streamed) { 549 + console.log(`\n${label} (pre-aggregated during streaming)...`); 550 + return result; 551 + } 552 + console.log(`\nAggregating ${label}...`); 553 + return aggregateRecords(result, TARGET_DATE); 554 + } 555 + 556 + const desktopAgg = getAggregated(desktopResult, 'desktop'); 557 + const desktopFeatures = desktopAgg ? mapToFeatures(desktopAgg.metrics) : null; 558 + 559 + const fenixAgg = getAggregated(fenixResult, 'fenix'); 560 + const fenixFeatures = fenixAgg ? mapToFeatures(fenixAgg.metrics) : null; 561 + 562 + // Combine 563 + console.log('\nCombining platforms...'); 564 + const combined = combineDesktopAndFenix(desktopFeatures, fenixFeatures); 565 + 566 + // Build output in same format as httparchive-results/combined-usage.json 567 + const date = desktopAgg?.date || fenixAgg?.date || TARGET_DATE || 'unknown'; 568 + const combinedOutput = { 569 + date, 570 + source: 'firefox_use_counters', 571 + platforms: DESKTOP_ONLY ? ['desktop'] : ['desktop', 'fenix'], 572 + features: combined, 573 + }; 574 + 575 + const combinedPath = join(RESULTS_DIR, 'combined-usage.json'); 576 + writeFileSync(combinedPath, JSON.stringify(combinedOutput, null, 2)); 577 + console.log(`Saved combined usage (${Object.keys(combined).length} features) to ${combinedPath}`); 578 + 579 + // Also save per-platform mapped data 580 + if (desktopFeatures) { 581 + writeFileSync( 582 + join(RESULTS_DIR, 'desktop-mapped.json'), 583 + JSON.stringify({ date, features: desktopFeatures }, null, 2) 584 + ); 585 + } 586 + if (fenixFeatures) { 587 + writeFileSync( 588 + join(RESULTS_DIR, 'fenix-mapped.json'), 589 + JSON.stringify({ date, features: fenixFeatures }, null, 2) 590 + ); 591 + } 592 + 593 + printSummary(combined); 594 + } 595 + 596 + main().catch(err => { 597 + console.error('Fatal error:', err.message); 598 + process.exit(1); 599 + });
+837
data/firefox-results/combined-usage.json
··· 1 + { 2 + "date": "2025-06-11", 3 + "source": "firefox_use_counters", 4 + "platforms": [ 5 + "desktop", 6 + "fenix" 7 + ], 8 + "features": { 9 + "web-bluetooth": { 10 + "pct": 0.005845832514362171, 11 + "source": "firefox_use_counters", 12 + "observable": "api.BluetoothRemoteGATTDescriptor", 13 + "type": "blink_api", 14 + "platforms": { 15 + "desktop": 0.003978003042683833, 16 + "fenix": 0.005845832514362171 17 + } 18 + }, 19 + "keyboard-lock": { 20 + "pct": 0.0019317707845346104, 21 + "source": "firefox_use_counters", 22 + "observable": "api.Keyboard", 23 + "type": "blink_api", 24 + "platforms": { 25 + "desktop": 0.0011261298073384914, 26 + "fenix": 0.0019317707845346104 27 + } 28 + }, 29 + "logical-properties": { 30 + "pct": 0.31312940289211894, 31 + "source": "firefox_use_counters", 32 + "observable": "css.properties.inset", 33 + "type": "css_property", 34 + "platforms": { 35 + "desktop": 0.2898545503601178, 36 + "fenix": 0.31312940289211894 37 + } 38 + }, 39 + "font-palette": { 40 + "pct": 0.00007914660776523708, 41 + "source": "firefox_use_counters", 42 + "observable": "css.properties.font-palette", 43 + "type": "css_property", 44 + "platforms": { 45 + "desktop": 0.00007914660776523708, 46 + "fenix": 0.00004621435847698203 47 + } 48 + }, 49 + "font-synthesis-weight": { 50 + "pct": 0.0006092822176012978, 51 + "source": "firefox_use_counters", 52 + "observable": "css.properties.font-synthesis-weight", 53 + "type": "css_property", 54 + "platforms": { 55 + "desktop": 0.0006092822176012978, 56 + "fenix": 0.00045472470138482505 57 + } 58 + }, 59 + "scroll-snap": { 60 + "pct": 0.19465274034125996, 61 + "source": "firefox_use_counters", 62 + "observable": "css.properties.scroll-snap-type", 63 + "type": "css_property", 64 + "platforms": { 65 + "desktop": 0.16055114390584213, 66 + "fenix": 0.19465274034125996 67 + } 68 + }, 69 + "individual-transforms": { 70 + "pct": 0.06621634085738833, 71 + "source": "firefox_use_counters", 72 + "observable": "css.properties.rotate", 73 + "type": "css_property", 74 + "platforms": { 75 + "desktop": 0.06126938703540517, 76 + "fenix": 0.06621634085738833 77 + } 78 + }, 79 + "motion-path": { 80 + "pct": 0.005585450401624134, 81 + "source": "firefox_use_counters", 82 + "observable": "css.properties.offset-distance", 83 + "type": "css_property", 84 + "platforms": { 85 + "desktop": 0.0042516482536737055, 86 + "fenix": 0.005585450401624134 87 + } 88 + }, 89 + "outline": { 90 + "pct": 0.7837416631916435, 91 + "source": "firefox_use_counters", 92 + "observable": "css.properties.outline", 93 + "type": "css_property", 94 + "platforms": { 95 + "desktop": 0.6550282160213018, 96 + "fenix": 0.7837416631916435 97 + } 98 + }, 99 + "scroll-driven-animations": { 100 + "pct": 0.000023635832864202826, 101 + "source": "firefox_use_counters", 102 + "observable": "css.properties.animation-timeline", 103 + "type": "css_property", 104 + "platforms": { 105 + "desktop": 0.0000016635610936159353, 106 + "fenix": 0.000023635832864202826 107 + } 108 + }, 109 + "backdrop-filter": { 110 + "pct": 0.3011676122707288, 111 + "source": "firefox_use_counters", 112 + "observable": "css.properties.backdrop-filter", 113 + "type": "css_property", 114 + "platforms": { 115 + "desktop": 0.23592200704438981, 116 + "fenix": 0.3011676122707288 117 + } 118 + }, 119 + "flexbox": { 120 + "pct": 0.7430886553448814, 121 + "source": "firefox_use_counters", 122 + "observable": "css.properties.justify-content", 123 + "type": "css_property", 124 + "platforms": { 125 + "desktop": 0.5837310237480966, 126 + "fenix": 0.7430886553448814 127 + } 128 + }, 129 + "grid": { 130 + "pct": 0.538874478177919, 131 + "source": "firefox_use_counters", 132 + "observable": "css.properties.gap", 133 + "type": "css_property", 134 + "platforms": { 135 + "desktop": 0.4102703295570574, 136 + "fenix": 0.538874478177919 137 + } 138 + }, 139 + "animation-composition": { 140 + "pct": 0.005657318566947336, 141 + "source": "firefox_use_counters", 142 + "observable": "css.properties.animation-composition", 143 + "type": "css_property", 144 + "platforms": { 145 + "desktop": 0.003136399158139463, 146 + "fenix": 0.005657318566947336 147 + } 148 + }, 149 + "text-emphasis": { 150 + "pct": 0.0021205177010981927, 151 + "source": "firefox_use_counters", 152 + "observable": "css.properties.text-emphasis-position", 153 + "type": "css_property", 154 + "platforms": { 155 + "desktop": 0.0021205177010981927, 156 + "fenix": 0.0018861678846550506 157 + } 158 + }, 159 + "webcodecs": { 160 + "pct": 0.04085757684838708, 161 + "source": "firefox_use_counters", 162 + "observable": "api.VideoFrame", 163 + "type": "blink_api", 164 + "platforms": { 165 + "desktop": 0.04085757684838708, 166 + "fenix": 0.024543293016878565 167 + } 168 + }, 169 + "web-midi": { 170 + "pct": 0.04876490460930782, 171 + "source": "firefox_use_counters", 172 + "observable": "api.MIDIPort", 173 + "type": "blink_api", 174 + "platforms": { 175 + "desktop": 0.04876490460930782, 176 + "fenix": 0.006835827469477474 177 + } 178 + }, 179 + "scrollbar-gutter": { 180 + "pct": 0.10131216827806148, 181 + "source": "firefox_use_counters", 182 + "observable": "css.properties.scrollbar-gutter", 183 + "type": "css_property", 184 + "platforms": { 185 + "desktop": 0.10131216827806148, 186 + "fenix": 0.06076085603105934 187 + } 188 + }, 189 + "overflow-shorthand": { 190 + "pct": 0.8063506878784442, 191 + "source": "firefox_use_counters", 192 + "observable": "css.properties.overflow", 193 + "type": "css_property", 194 + "platforms": { 195 + "desktop": 0.6782751091909076, 196 + "fenix": 0.8063506878784442 197 + } 198 + }, 199 + "cookie-store": { 200 + "pct": 0.01066651608106001, 201 + "source": "firefox_use_counters", 202 + "observable": "api.CookieStore", 203 + "type": "blink_api", 204 + "platforms": { 205 + "desktop": 0.00005350571022246091, 206 + "fenix": 0.01066651608106001 207 + } 208 + }, 209 + "hyphens": { 210 + "pct": 0.16177519202724724, 211 + "source": "firefox_use_counters", 212 + "observable": "css.properties.hyphens", 213 + "type": "css_property", 214 + "platforms": { 215 + "desktop": 0.1444387383964318, 216 + "fenix": 0.16177519202724724 217 + } 218 + }, 219 + "text-justify": { 220 + "pct": 0.006176128100129998, 221 + "source": "firefox_use_counters", 222 + "observable": "css.properties.text-justify", 223 + "type": "css_property", 224 + "platforms": { 225 + "desktop": 0.006176128100129998, 226 + "fenix": 0.0058565772386665145 227 + } 228 + }, 229 + "text-underline-offset": { 230 + "pct": 0.09599819827777563, 231 + "source": "firefox_use_counters", 232 + "observable": "css.properties.text-underline-offset", 233 + "type": "css_property", 234 + "platforms": { 235 + "desktop": 0.08575788613796845, 236 + "fenix": 0.09599819827777563 237 + } 238 + }, 239 + "masks": { 240 + "pct": 0.20986158177318934, 241 + "source": "firefox_use_counters", 242 + "observable": "css.properties.mask-image", 243 + "type": "css_property", 244 + "platforms": { 245 + "desktop": 0.19288559588002668, 246 + "fenix": 0.20986158177318934 247 + } 248 + }, 249 + "text-wrap": { 250 + "pct": 0.20867073416959023, 251 + "source": "firefox_use_counters", 252 + "observable": "css.properties.text-wrap", 253 + "type": "css_property", 254 + "platforms": { 255 + "desktop": 0.20867073416959023, 256 + "fenix": 0.17039683852541843 257 + } 258 + }, 259 + "device-orientation-events": { 260 + "pct": 0.0010748491130807137, 261 + "source": "firefox_use_counters", 262 + "observable": "api.DeviceMotionEventRotationRate", 263 + "type": "blink_api", 264 + "platforms": { 265 + "desktop": 0.0000019085466142008374, 266 + "fenix": 0.0010748491130807137 267 + } 268 + }, 269 + "reporting": { 270 + "pct": 0.03560495218443147, 271 + "source": "firefox_use_counters", 272 + "observable": "api.ReportingObserver", 273 + "type": "blink_api", 274 + "platforms": { 275 + "desktop": 0.03560495218443147, 276 + "fenix": 0.035370641046869336 277 + } 278 + }, 279 + "webusb": { 280 + "pct": 0.008336814375660667, 281 + "source": "firefox_use_counters", 282 + "observable": "api.USBDevice", 283 + "type": "blink_api", 284 + "platforms": { 285 + "desktop": 0.0018863163634452267, 286 + "fenix": 0.008336814375660667 287 + } 288 + }, 289 + "font-synthesis": { 290 + "pct": 0.009887290558682694, 291 + "source": "firefox_use_counters", 292 + "observable": "css.properties.font-synthesis", 293 + "type": "css_property", 294 + "platforms": { 295 + "desktop": 0.009887290558682694, 296 + "fenix": 0.009539549985708712 297 + } 298 + }, 299 + "quotes": { 300 + "pct": 0.18226455119275337, 301 + "source": "firefox_use_counters", 302 + "observable": "css.properties.quotes", 303 + "type": "css_property", 304 + "platforms": { 305 + "desktop": 0.14507151194722137, 306 + "fenix": 0.18226455119275337 307 + } 308 + }, 309 + "contain-intrinsic-size": { 310 + "pct": 0.038033493872670625, 311 + "source": "firefox_use_counters", 312 + "observable": "css.properties.contain-intrinsic-size", 313 + "type": "css_property", 314 + "platforms": { 315 + "desktop": 0.024783309040277913, 316 + "fenix": 0.038033493872670625 317 + } 318 + }, 319 + "text-wrap-style": { 320 + "pct": 0.00038005773274383636, 321 + "source": "firefox_use_counters", 322 + "observable": "css.properties.text-wrap-style", 323 + "type": "css_property", 324 + "platforms": { 325 + "desktop": 0.0003383270015230673, 326 + "fenix": 0.00038005773274383636 327 + } 328 + }, 329 + "print-color-adjust": { 330 + "pct": 0.05068898745354016, 331 + "source": "firefox_use_counters", 332 + "observable": "css.properties.print-color-adjust", 333 + "type": "css_property", 334 + "platforms": { 335 + "desktop": 0.05068898745354016, 336 + "fenix": 0.03650688733198375 337 + } 338 + }, 339 + "transform-box": { 340 + "pct": 0.01890592920934985, 341 + "source": "firefox_use_counters", 342 + "observable": "css.properties.transform-box", 343 + "type": "css_property", 344 + "platforms": { 345 + "desktop": 0.01890592920934985, 346 + "fenix": 0.011443409032672628 347 + } 348 + }, 349 + "font-synthesis-style": { 350 + "pct": 0.00012184293996603901, 351 + "source": "firefox_use_counters", 352 + "observable": "css.properties.font-synthesis-style", 353 + "type": "css_property", 354 + "platforms": { 355 + "desktop": 0.00012184293996603901, 356 + "fenix": 0.00008915601047246561 357 + } 358 + }, 359 + "hyphenate-character": { 360 + "pct": 0.0013077285671131114, 361 + "source": "firefox_use_counters", 362 + "observable": "css.properties.hyphenate-character", 363 + "type": "css_property", 364 + "platforms": { 365 + "desktop": 0.0005401292159609279, 366 + "fenix": 0.0013077285671131114 367 + } 368 + }, 369 + "accent-color": { 370 + "pct": 0.02441068629599739, 371 + "source": "firefox_use_counters", 372 + "observable": "css.properties.accent-color", 373 + "type": "css_property", 374 + "platforms": { 375 + "desktop": 0.02441068629599739, 376 + "fenix": 0.021306973759056203 377 + } 378 + }, 379 + "scrollbar-color": { 380 + "pct": 0.15183089845968892, 381 + "source": "firefox_use_counters", 382 + "observable": "css.properties.scrollbar-color", 383 + "type": "css_property", 384 + "platforms": { 385 + "desktop": 0.15183089845968892, 386 + "fenix": 0.12390811678374766 387 + } 388 + }, 389 + "speech-recognition": { 390 + "pct": 0.0001717835242398396, 391 + "source": "firefox_use_counters", 392 + "observable": "api.SpeechRecognitionAlternative", 393 + "type": "blink_api", 394 + "platforms": { 395 + "desktop": 0.0001717835242398396, 396 + "fenix": 0.00010500108220068829 397 + } 398 + }, 399 + "screen-wake-lock": { 400 + "pct": 0.03391379975720428, 401 + "source": "firefox_use_counters", 402 + "observable": "api.WakeLockSentinel", 403 + "type": "blink_api", 404 + "platforms": { 405 + "desktop": 0.03391379975720428, 406 + "fenix": 0.027623593031436224 407 + } 408 + }, 409 + "paint-order": { 410 + "pct": 0.0076230531599109485, 411 + "source": "firefox_use_counters", 412 + "observable": "css.properties.paint-order", 413 + "type": "css_property", 414 + "platforms": { 415 + "desktop": 0.0076230531599109485, 416 + "fenix": 0.00578791551685629 417 + } 418 + }, 419 + "async-clipboard": { 420 + "pct": 0.03183925212180658, 421 + "source": "firefox_use_counters", 422 + "observable": "api.ClipboardItem", 423 + "type": "blink_api", 424 + "platforms": { 425 + "desktop": 0.03183925212180658, 426 + "fenix": 0.024087875645593015 427 + } 428 + }, 429 + "accelerometer": { 430 + "pct": 0.006750321441889268, 431 + "source": "firefox_use_counters", 432 + "observable": "api.Accelerometer", 433 + "type": "blink_api", 434 + "platforms": { 435 + "desktop": 0.002607767308778071, 436 + "fenix": 0.006750321441889268 437 + } 438 + }, 439 + "baseline-source": { 440 + "pct": 0.00011938224347137631, 441 + "source": "firefox_use_counters", 442 + "observable": "css.properties.baseline-source", 443 + "type": "css_property", 444 + "platforms": { 445 + "desktop": 0.00008319253622493894, 446 + "fenix": 0.00011938224347137631 447 + } 448 + }, 449 + "mathml": { 450 + "pct": 0.000168060776396631, 451 + "source": "firefox_use_counters", 452 + "observable": "css.properties.math-style", 453 + "type": "css_property", 454 + "platforms": { 455 + "desktop": 0.00007446305880783341, 456 + "fenix": 0.000168060776396631 457 + } 458 + }, 459 + "container-queries": { 460 + "pct": 0.06717193484928506, 461 + "source": "firefox_use_counters", 462 + "observable": "css.properties.container-type", 463 + "type": "css_property", 464 + "platforms": { 465 + "desktop": 0.06717193484928506, 466 + "fenix": 0.06070830034585386 467 + } 468 + }, 469 + "font-variant-alternates": { 470 + "pct": 0.0020768539574350466, 471 + "source": "firefox_use_counters", 472 + "observable": "css.properties.font-variant-alternates", 473 + "type": "css_property", 474 + "platforms": { 475 + "desktop": 0.0020768539574350466, 476 + "fenix": 0.0019942973615529242 477 + } 478 + }, 479 + "ruby-position": { 480 + "pct": 0.0018783516929650789, 481 + "source": "firefox_use_counters", 482 + "observable": "css.properties.ruby-position", 483 + "type": "css_property", 484 + "platforms": { 485 + "desktop": 0.0012130445275420313, 486 + "fenix": 0.0018783516929650789 487 + } 488 + }, 489 + "font-size-adjust": { 490 + "pct": 0.015357887722063339, 491 + "source": "firefox_use_counters", 492 + "observable": "css.properties.font-size-adjust", 493 + "type": "css_property", 494 + "platforms": { 495 + "desktop": 0.015357887722063339, 496 + "fenix": 0.012567032821951598 497 + } 498 + }, 499 + "aspect-ratio": { 500 + "pct": 0.30242028597984927, 501 + "source": "firefox_use_counters", 502 + "observable": "css.properties.aspect-ratio", 503 + "type": "css_property", 504 + "platforms": { 505 + "desktop": 0.20065378943004558, 506 + "fenix": 0.30242028597984927 507 + } 508 + }, 509 + "counter-set": { 510 + "pct": 0.0030680933134647, 511 + "source": "firefox_use_counters", 512 + "observable": "css.properties.counter-set", 513 + "type": "css_property", 514 + "platforms": { 515 + "desktop": 0.0030680933134647, 516 + "fenix": 0.0009370064381677687 517 + } 518 + }, 519 + "clip-path": { 520 + "pct": 0.42532172060029144, 521 + "source": "firefox_use_counters", 522 + "observable": "css.properties.clip-path", 523 + "type": "css_property", 524 + "platforms": { 525 + "desktop": 0.37105459502997096, 526 + "fenix": 0.42532172060029144 527 + } 528 + }, 529 + "forced-colors": { 530 + "pct": 0.12474127531701686, 531 + "source": "firefox_use_counters", 532 + "observable": "css.properties.forced-color-adjust", 533 + "type": "css_property", 534 + "platforms": { 535 + "desktop": 0.1056445360039836, 536 + "fenix": 0.12474127531701686 537 + } 538 + }, 539 + "picture-in-picture": { 540 + "pct": 0.0020374242416180406, 541 + "source": "firefox_use_counters", 542 + "observable": "api.PictureInPictureWindow", 543 + "type": "blink_api", 544 + "platforms": { 545 + "desktop": 0.0017174575416112822, 546 + "fenix": 0.0020374242416180406 547 + } 548 + }, 549 + "border-image": { 550 + "pct": 0.09215214482209379, 551 + "source": "firefox_use_counters", 552 + "observable": "css.properties.border-image", 553 + "type": "css_property", 554 + "platforms": { 555 + "desktop": 0.07328494395007147, 556 + "fenix": 0.09215214482209379 557 + } 558 + }, 559 + "font-variant-emoji": { 560 + "pct": 0.00018562524716405192, 561 + "source": "firefox_use_counters", 562 + "observable": "css.properties.font-variant-emoji", 563 + "type": "css_property", 564 + "platforms": { 565 + "desktop": 2.8047376513523426e-8, 566 + "fenix": 0.00018562524716405192 567 + } 568 + }, 569 + "dialog": { 570 + "pct": 0.0002049191930551606, 571 + "source": "firefox_use_counters", 572 + "observable": "api.HTMLDialogElement", 573 + "type": "blink_api", 574 + "platforms": { 575 + "desktop": 0.00012785147380100232, 576 + "fenix": 0.0002049191930551606 577 + } 578 + }, 579 + "ruby-align": { 580 + "pct": 0.0019857776600019895, 581 + "source": "firefox_use_counters", 582 + "observable": "css.properties.ruby-align", 583 + "type": "css_property", 584 + "platforms": { 585 + "desktop": 0.001309219188175924, 586 + "fenix": 0.0019857776600019895 587 + } 588 + }, 589 + "scrollbar-width": { 590 + "pct": 0.4195911256037384, 591 + "source": "firefox_use_counters", 592 + "observable": "css.properties.scrollbar-width", 593 + "type": "css_property", 594 + "platforms": { 595 + "desktop": 0.2724598964562964, 596 + "fenix": 0.4195911256037384 597 + } 598 + }, 599 + "font-variant-position": { 600 + "pct": 0.0019919431666883414, 601 + "source": "firefox_use_counters", 602 + "observable": "css.properties.font-variant-position", 603 + "type": "css_property", 604 + "platforms": { 605 + "desktop": 0.0013241460207972266, 606 + "fenix": 0.0019919431666883414 607 + } 608 + }, 609 + "remote-playback": { 610 + "pct": 0.005795596476471643, 611 + "source": "firefox_use_counters", 612 + "observable": "api.RemotePlayback", 613 + "type": "blink_api", 614 + "platforms": { 615 + "desktop": 0.0049997982503341915, 616 + "fenix": 0.005795596476471643 617 + } 618 + }, 619 + "hyphenate-limit-chars": { 620 + "pct": 0.002412664032214245, 621 + "source": "firefox_use_counters", 622 + "observable": "css.properties.hyphenate-limit-chars", 623 + "type": "css_property", 624 + "platforms": { 625 + "desktop": 0.0006383442011342691, 626 + "fenix": 0.002412664032214245 627 + } 628 + }, 629 + "registered-custom-properties": { 630 + "pct": 0.028970720927724423, 631 + "source": "firefox_use_counters", 632 + "observable": "api.CSSPropertyRule", 633 + "type": "blink_api", 634 + "platforms": { 635 + "desktop": 0.028970720927724423, 636 + "fenix": 0.02275835023223371 637 + } 638 + }, 639 + "font-language-override": { 640 + "pct": 0.004197127472031811, 641 + "source": "firefox_use_counters", 642 + "observable": "css.properties.font-language-override", 643 + "type": "css_property", 644 + "platforms": { 645 + "desktop": 0.003712330450894495, 646 + "fenix": 0.004197127472031811 647 + } 648 + }, 649 + "font-optical-sizing": { 650 + "pct": 0.0114290182595152, 651 + "source": "firefox_use_counters", 652 + "observable": "css.properties.font-optical-sizing", 653 + "type": "css_property", 654 + "platforms": { 655 + "desktop": 0.0114290182595152, 656 + "fenix": 0.008094165104094008 657 + } 658 + }, 659 + "appearance": { 660 + "pct": 0.5277942372604344, 661 + "source": "firefox_use_counters", 662 + "observable": "css.properties.appearance", 663 + "type": "css_property", 664 + "platforms": { 665 + "desktop": 0.4725171838915718, 666 + "fenix": 0.5277942372604344 667 + } 668 + }, 669 + "image-orientation": { 670 + "pct": 0.004249868383050822, 671 + "source": "firefox_use_counters", 672 + "observable": "css.properties.image-orientation", 673 + "type": "css_property", 674 + "platforms": { 675 + "desktop": 0.0037027242984975913, 676 + "fenix": 0.004249868383050822 677 + } 678 + }, 679 + "transition-behavior": { 680 + "pct": 0.021863287566919316, 681 + "source": "firefox_use_counters", 682 + "observable": "css.properties.transition-behavior", 683 + "type": "css_property", 684 + "platforms": { 685 + "desktop": 0.021863287566919316, 686 + "fenix": 0.004267310251143087 687 + } 688 + }, 689 + "box-decoration-break": { 690 + "pct": 0.04966524108691367, 691 + "source": "firefox_use_counters", 692 + "observable": "css.properties.box-decoration-break", 693 + "type": "css_property", 694 + "platforms": { 695 + "desktop": 0.04966524108691367, 696 + "fenix": 0.04327186167365444 697 + } 698 + }, 699 + "color-scheme": { 700 + "pct": 0.1470620434729665, 701 + "source": "firefox_use_counters", 702 + "observable": "css.properties.color-scheme", 703 + "type": "css_property", 704 + "platforms": { 705 + "desktop": 0.11708397365490791, 706 + "fenix": 0.1470620434729665 707 + } 708 + }, 709 + "content-visibility": { 710 + "pct": 0.05769310135650326, 711 + "source": "firefox_use_counters", 712 + "observable": "css.properties.content-visibility", 713 + "type": "css_property", 714 + "platforms": { 715 + "desktop": 0.047900187048349994, 716 + "fenix": 0.05769310135650326 717 + } 718 + }, 719 + "line-break": { 720 + "pct": 0.15049230910709957, 721 + "source": "firefox_use_counters", 722 + "observable": "css.properties.line-break", 723 + "type": "css_property", 724 + "platforms": { 725 + "desktop": 0.15049230910709957, 726 + "fenix": 0.11909874797480012 727 + } 728 + }, 729 + "will-change": { 730 + "pct": 0.3273864871503988, 731 + "source": "firefox_use_counters", 732 + "observable": "css.properties.will-change", 733 + "type": "css_property", 734 + "platforms": { 735 + "desktop": 0.31593785693600285, 736 + "fenix": 0.3273864871503988 737 + } 738 + }, 739 + "font-synthesis-small-caps": { 740 + "pct": 0.000054121022672508584, 741 + "source": "firefox_use_counters", 742 + "observable": "css.properties.font-synthesis-small-caps", 743 + "type": "css_property", 744 + "platforms": { 745 + "desktop": 0.000054121022672508584, 746 + "fenix": 0.00003061781815722572 747 + } 748 + }, 749 + "keyboard-map": { 750 + "pct": 0.0021185823633944087, 751 + "source": "firefox_use_counters", 752 + "observable": "api.KeyboardLayoutMap", 753 + "type": "blink_api", 754 + "platforms": { 755 + "desktop": 0.000004165978672623264, 756 + "fenix": 0.0021185823633944087 757 + } 758 + }, 759 + "white-space-collapse": { 760 + "pct": 0.006235146062892904, 761 + "source": "firefox_use_counters", 762 + "observable": "css.properties.white-space-collapse", 763 + "type": "css_property", 764 + "platforms": { 765 + "desktop": 0.006235146062892904, 766 + "fenix": 0.0051301666468813265 767 + } 768 + }, 769 + "beforeinstallprompt": { 770 + "pct": 0.0015969816761600565, 771 + "source": "firefox_use_counters", 772 + "observable": "api.BeforeInstallPromptEvent", 773 + "type": "blink_api", 774 + "platforms": { 775 + "desktop": 0.00044831252503447615, 776 + "fenix": 0.0015969816761600565 777 + } 778 + }, 779 + "text-indent": { 780 + "pct": 0.5356411530621198, 781 + "source": "firefox_use_counters", 782 + "observable": "css.properties.text-indent", 783 + "type": "css_property", 784 + "platforms": { 785 + "desktop": 0.501826191841259, 786 + "fenix": 0.5356411530621198 787 + } 788 + }, 789 + "scheduler": { 790 + "pct": 0.00000853933091549038, 791 + "source": "firefox_use_counters", 792 + "observable": "api.scheduler", 793 + "type": "blink_api", 794 + "platforms": { 795 + "desktop": 2.887445673298131e-7, 796 + "fenix": 0.00000853933091549038 797 + } 798 + }, 799 + "view-transitions": { 800 + "pct": 0.00002122324310054048, 801 + "source": "firefox_use_counters", 802 + "observable": "css.properties.view-transition-name", 803 + "type": "css_property", 804 + "platforms": { 805 + "desktop": 0.0000072681490277717605, 806 + "fenix": 0.00002122324310054048 807 + } 808 + }, 809 + "anchor-positioning": { 810 + "pct": 6.562456728800945e-7, 811 + "source": "firefox_use_counters", 812 + "observable": "css.properties.position-area", 813 + "type": "css_property", 814 + "platforms": { 815 + "desktop": 6.562456728800945e-7 816 + } 817 + }, 818 + "field-sizing": { 819 + "pct": 0.0000037735603095554436, 820 + "source": "firefox_use_counters", 821 + "observable": "css.properties.field-sizing", 822 + "type": "css_property", 823 + "platforms": { 824 + "desktop": 0.0000037735603095554436 825 + } 826 + }, 827 + "initial-letter": { 828 + "pct": 0.0000031287055606483928, 829 + "source": "firefox_use_counters", 830 + "observable": "css.properties.initial-letter", 831 + "type": "css_property", 832 + "platforms": { 833 + "fenix": 0.0000031287055606483928 834 + } 835 + } 836 + } 837 + }
+497
data/firefox-results/desktop-mapped.json
··· 1 + { 2 + "date": "2025-06-11", 3 + "features": { 4 + "web-bluetooth": { 5 + "pct": 0.003978003042683833, 6 + "source": "firefox_use_counters", 7 + "observable": "api.BluetoothRemoteGATTDescriptor", 8 + "type": "blink_api" 9 + }, 10 + "keyboard-lock": { 11 + "pct": 0.0011261298073384914, 12 + "source": "firefox_use_counters", 13 + "observable": "api.Keyboard", 14 + "type": "blink_api" 15 + }, 16 + "logical-properties": { 17 + "pct": 0.2898545503601178, 18 + "source": "firefox_use_counters", 19 + "observable": "css.properties.inset", 20 + "type": "css_property" 21 + }, 22 + "font-palette": { 23 + "pct": 0.00007914660776523708, 24 + "source": "firefox_use_counters", 25 + "observable": "css.properties.font-palette", 26 + "type": "css_property" 27 + }, 28 + "font-synthesis-weight": { 29 + "pct": 0.0006092822176012978, 30 + "source": "firefox_use_counters", 31 + "observable": "css.properties.font-synthesis-weight", 32 + "type": "css_property" 33 + }, 34 + "scroll-snap": { 35 + "pct": 0.16055114390584213, 36 + "source": "firefox_use_counters", 37 + "observable": "css.properties.scroll-snap-type", 38 + "type": "css_property" 39 + }, 40 + "individual-transforms": { 41 + "pct": 0.06126938703540517, 42 + "source": "firefox_use_counters", 43 + "observable": "css.properties.translate", 44 + "type": "css_property" 45 + }, 46 + "motion-path": { 47 + "pct": 0.0042516482536737055, 48 + "source": "firefox_use_counters", 49 + "observable": "css.properties.offset-distance", 50 + "type": "css_property" 51 + }, 52 + "outline": { 53 + "pct": 0.6550282160213018, 54 + "source": "firefox_use_counters", 55 + "observable": "css.properties.outline", 56 + "type": "css_property" 57 + }, 58 + "scroll-driven-animations": { 59 + "pct": 0.0000016635610936159353, 60 + "source": "firefox_use_counters", 61 + "observable": "css.properties.animation-timeline", 62 + "type": "css_property" 63 + }, 64 + "backdrop-filter": { 65 + "pct": 0.23592200704438981, 66 + "source": "firefox_use_counters", 67 + "observable": "css.properties.backdrop-filter", 68 + "type": "css_property" 69 + }, 70 + "flexbox": { 71 + "pct": 0.5837310237480966, 72 + "source": "firefox_use_counters", 73 + "observable": "css.properties.flex-direction", 74 + "type": "css_property" 75 + }, 76 + "grid": { 77 + "pct": 0.4102703295570574, 78 + "source": "firefox_use_counters", 79 + "observable": "css.properties.grid-template-columns", 80 + "type": "css_property" 81 + }, 82 + "animation-composition": { 83 + "pct": 0.003136399158139463, 84 + "source": "firefox_use_counters", 85 + "observable": "css.properties.animation-composition", 86 + "type": "css_property" 87 + }, 88 + "text-emphasis": { 89 + "pct": 0.0021205177010981927, 90 + "source": "firefox_use_counters", 91 + "observable": "css.properties.text-emphasis-position", 92 + "type": "css_property" 93 + }, 94 + "webcodecs": { 95 + "pct": 0.04085757684838708, 96 + "source": "firefox_use_counters", 97 + "observable": "api.VideoFrame", 98 + "type": "blink_api" 99 + }, 100 + "web-midi": { 101 + "pct": 0.04876490460930782, 102 + "source": "firefox_use_counters", 103 + "observable": "api.MIDIPort", 104 + "type": "blink_api" 105 + }, 106 + "scrollbar-gutter": { 107 + "pct": 0.10131216827806148, 108 + "source": "firefox_use_counters", 109 + "observable": "css.properties.scrollbar-gutter", 110 + "type": "css_property" 111 + }, 112 + "overflow-shorthand": { 113 + "pct": 0.6782751091909076, 114 + "source": "firefox_use_counters", 115 + "observable": "css.properties.overflow", 116 + "type": "css_property" 117 + }, 118 + "cookie-store": { 119 + "pct": 0.00005350571022246091, 120 + "source": "firefox_use_counters", 121 + "observable": "api.CookieStore", 122 + "type": "blink_api" 123 + }, 124 + "hyphens": { 125 + "pct": 0.1444387383964318, 126 + "source": "firefox_use_counters", 127 + "observable": "css.properties.hyphens", 128 + "type": "css_property" 129 + }, 130 + "text-justify": { 131 + "pct": 0.006176128100129998, 132 + "source": "firefox_use_counters", 133 + "observable": "css.properties.text-justify", 134 + "type": "css_property" 135 + }, 136 + "text-underline-offset": { 137 + "pct": 0.08575788613796845, 138 + "source": "firefox_use_counters", 139 + "observable": "css.properties.text-underline-offset", 140 + "type": "css_property" 141 + }, 142 + "masks": { 143 + "pct": 0.19288559588002668, 144 + "source": "firefox_use_counters", 145 + "observable": "css.properties.mask", 146 + "type": "css_property" 147 + }, 148 + "text-wrap": { 149 + "pct": 0.20867073416959023, 150 + "source": "firefox_use_counters", 151 + "observable": "css.properties.text-wrap", 152 + "type": "css_property" 153 + }, 154 + "device-orientation-events": { 155 + "pct": 0.0000019085466142008374, 156 + "source": "firefox_use_counters", 157 + "observable": "api.DeviceMotionEventRotationRate", 158 + "type": "blink_api" 159 + }, 160 + "reporting": { 161 + "pct": 0.03560495218443147, 162 + "source": "firefox_use_counters", 163 + "observable": "api.ReportingObserver", 164 + "type": "blink_api" 165 + }, 166 + "webusb": { 167 + "pct": 0.0018863163634452267, 168 + "source": "firefox_use_counters", 169 + "observable": "api.USB", 170 + "type": "blink_api" 171 + }, 172 + "font-synthesis": { 173 + "pct": 0.009887290558682694, 174 + "source": "firefox_use_counters", 175 + "observable": "css.properties.font-synthesis", 176 + "type": "css_property" 177 + }, 178 + "quotes": { 179 + "pct": 0.14507151194722137, 180 + "source": "firefox_use_counters", 181 + "observable": "css.properties.quotes", 182 + "type": "css_property" 183 + }, 184 + "contain-intrinsic-size": { 185 + "pct": 0.024783309040277913, 186 + "source": "firefox_use_counters", 187 + "observable": "css.properties.contain-intrinsic-size", 188 + "type": "css_property" 189 + }, 190 + "text-wrap-style": { 191 + "pct": 0.0003383270015230673, 192 + "source": "firefox_use_counters", 193 + "observable": "css.properties.text-wrap-style", 194 + "type": "css_property" 195 + }, 196 + "print-color-adjust": { 197 + "pct": 0.05068898745354016, 198 + "source": "firefox_use_counters", 199 + "observable": "css.properties.print-color-adjust", 200 + "type": "css_property" 201 + }, 202 + "transform-box": { 203 + "pct": 0.01890592920934985, 204 + "source": "firefox_use_counters", 205 + "observable": "css.properties.transform-box", 206 + "type": "css_property" 207 + }, 208 + "font-synthesis-style": { 209 + "pct": 0.00012184293996603901, 210 + "source": "firefox_use_counters", 211 + "observable": "css.properties.font-synthesis-style", 212 + "type": "css_property" 213 + }, 214 + "hyphenate-character": { 215 + "pct": 0.0005401292159609279, 216 + "source": "firefox_use_counters", 217 + "observable": "css.properties.hyphenate-character", 218 + "type": "css_property" 219 + }, 220 + "accent-color": { 221 + "pct": 0.02441068629599739, 222 + "source": "firefox_use_counters", 223 + "observable": "css.properties.accent-color", 224 + "type": "css_property" 225 + }, 226 + "scrollbar-color": { 227 + "pct": 0.15183089845968892, 228 + "source": "firefox_use_counters", 229 + "observable": "css.properties.scrollbar-color", 230 + "type": "css_property" 231 + }, 232 + "speech-recognition": { 233 + "pct": 0.0001717835242398396, 234 + "source": "firefox_use_counters", 235 + "observable": "api.SpeechRecognitionAlternative", 236 + "type": "blink_api" 237 + }, 238 + "screen-wake-lock": { 239 + "pct": 0.03391379975720428, 240 + "source": "firefox_use_counters", 241 + "observable": "api.WakeLockSentinel", 242 + "type": "blink_api" 243 + }, 244 + "paint-order": { 245 + "pct": 0.0076230531599109485, 246 + "source": "firefox_use_counters", 247 + "observable": "css.properties.paint-order", 248 + "type": "css_property" 249 + }, 250 + "async-clipboard": { 251 + "pct": 0.03183925212180658, 252 + "source": "firefox_use_counters", 253 + "observable": "api.ClipboardItem", 254 + "type": "blink_api" 255 + }, 256 + "accelerometer": { 257 + "pct": 0.002607767308778071, 258 + "source": "firefox_use_counters", 259 + "observable": "api.Accelerometer", 260 + "type": "blink_api" 261 + }, 262 + "baseline-source": { 263 + "pct": 0.00008319253622493894, 264 + "source": "firefox_use_counters", 265 + "observable": "css.properties.baseline-source", 266 + "type": "css_property" 267 + }, 268 + "mathml": { 269 + "pct": 0.00007446305880783341, 270 + "source": "firefox_use_counters", 271 + "observable": "css.properties.math-depth", 272 + "type": "css_property" 273 + }, 274 + "container-queries": { 275 + "pct": 0.06717193484928506, 276 + "source": "firefox_use_counters", 277 + "observable": "css.properties.container-type", 278 + "type": "css_property" 279 + }, 280 + "font-variant-alternates": { 281 + "pct": 0.0020768539574350466, 282 + "source": "firefox_use_counters", 283 + "observable": "css.properties.font-variant-alternates", 284 + "type": "css_property" 285 + }, 286 + "ruby-position": { 287 + "pct": 0.0012130445275420313, 288 + "source": "firefox_use_counters", 289 + "observable": "css.properties.ruby-position", 290 + "type": "css_property" 291 + }, 292 + "font-size-adjust": { 293 + "pct": 0.015357887722063339, 294 + "source": "firefox_use_counters", 295 + "observable": "css.properties.font-size-adjust", 296 + "type": "css_property" 297 + }, 298 + "aspect-ratio": { 299 + "pct": 0.20065378943004558, 300 + "source": "firefox_use_counters", 301 + "observable": "css.properties.aspect-ratio", 302 + "type": "css_property" 303 + }, 304 + "counter-set": { 305 + "pct": 0.0030680933134647, 306 + "source": "firefox_use_counters", 307 + "observable": "css.properties.counter-set", 308 + "type": "css_property" 309 + }, 310 + "clip-path": { 311 + "pct": 0.37105459502997096, 312 + "source": "firefox_use_counters", 313 + "observable": "css.properties.clip-path", 314 + "type": "css_property" 315 + }, 316 + "forced-colors": { 317 + "pct": 0.1056445360039836, 318 + "source": "firefox_use_counters", 319 + "observable": "css.properties.forced-color-adjust", 320 + "type": "css_property" 321 + }, 322 + "picture-in-picture": { 323 + "pct": 0.0017174575416112822, 324 + "source": "firefox_use_counters", 325 + "observable": "api.PictureInPictureWindow", 326 + "type": "blink_api" 327 + }, 328 + "border-image": { 329 + "pct": 0.07328494395007147, 330 + "source": "firefox_use_counters", 331 + "observable": "css.properties.border-image", 332 + "type": "css_property" 333 + }, 334 + "font-variant-emoji": { 335 + "pct": 2.8047376513523426e-8, 336 + "source": "firefox_use_counters", 337 + "observable": "css.properties.font-variant-emoji", 338 + "type": "css_property" 339 + }, 340 + "dialog": { 341 + "pct": 0.00012785147380100232, 342 + "source": "firefox_use_counters", 343 + "observable": "api.HTMLDialogElement", 344 + "type": "blink_api" 345 + }, 346 + "ruby-align": { 347 + "pct": 0.001309219188175924, 348 + "source": "firefox_use_counters", 349 + "observable": "css.properties.ruby-align", 350 + "type": "css_property" 351 + }, 352 + "scrollbar-width": { 353 + "pct": 0.2724598964562964, 354 + "source": "firefox_use_counters", 355 + "observable": "css.properties.scrollbar-width", 356 + "type": "css_property" 357 + }, 358 + "font-variant-position": { 359 + "pct": 0.0013241460207972266, 360 + "source": "firefox_use_counters", 361 + "observable": "css.properties.font-variant-position", 362 + "type": "css_property" 363 + }, 364 + "remote-playback": { 365 + "pct": 0.0049997982503341915, 366 + "source": "firefox_use_counters", 367 + "observable": "api.RemotePlayback", 368 + "type": "blink_api" 369 + }, 370 + "hyphenate-limit-chars": { 371 + "pct": 0.0006383442011342691, 372 + "source": "firefox_use_counters", 373 + "observable": "css.properties.hyphenate-limit-chars", 374 + "type": "css_property" 375 + }, 376 + "registered-custom-properties": { 377 + "pct": 0.028970720927724423, 378 + "source": "firefox_use_counters", 379 + "observable": "api.CSSPropertyRule", 380 + "type": "blink_api" 381 + }, 382 + "font-language-override": { 383 + "pct": 0.003712330450894495, 384 + "source": "firefox_use_counters", 385 + "observable": "css.properties.font-language-override", 386 + "type": "css_property" 387 + }, 388 + "font-optical-sizing": { 389 + "pct": 0.0114290182595152, 390 + "source": "firefox_use_counters", 391 + "observable": "css.properties.font-optical-sizing", 392 + "type": "css_property" 393 + }, 394 + "appearance": { 395 + "pct": 0.4725171838915718, 396 + "source": "firefox_use_counters", 397 + "observable": "css.properties.appearance", 398 + "type": "css_property" 399 + }, 400 + "image-orientation": { 401 + "pct": 0.0037027242984975913, 402 + "source": "firefox_use_counters", 403 + "observable": "css.properties.image-orientation", 404 + "type": "css_property" 405 + }, 406 + "transition-behavior": { 407 + "pct": 0.021863287566919316, 408 + "source": "firefox_use_counters", 409 + "observable": "css.properties.transition-behavior", 410 + "type": "css_property" 411 + }, 412 + "box-decoration-break": { 413 + "pct": 0.04966524108691367, 414 + "source": "firefox_use_counters", 415 + "observable": "css.properties.box-decoration-break", 416 + "type": "css_property" 417 + }, 418 + "color-scheme": { 419 + "pct": 0.11708397365490791, 420 + "source": "firefox_use_counters", 421 + "observable": "css.properties.color-scheme", 422 + "type": "css_property" 423 + }, 424 + "content-visibility": { 425 + "pct": 0.047900187048349994, 426 + "source": "firefox_use_counters", 427 + "observable": "css.properties.content-visibility", 428 + "type": "css_property" 429 + }, 430 + "line-break": { 431 + "pct": 0.15049230910709957, 432 + "source": "firefox_use_counters", 433 + "observable": "css.properties.line-break", 434 + "type": "css_property" 435 + }, 436 + "will-change": { 437 + "pct": 0.31593785693600285, 438 + "source": "firefox_use_counters", 439 + "observable": "css.properties.will-change", 440 + "type": "css_property" 441 + }, 442 + "font-synthesis-small-caps": { 443 + "pct": 0.000054121022672508584, 444 + "source": "firefox_use_counters", 445 + "observable": "css.properties.font-synthesis-small-caps", 446 + "type": "css_property" 447 + }, 448 + "keyboard-map": { 449 + "pct": 0.000004165978672623264, 450 + "source": "firefox_use_counters", 451 + "observable": "api.KeyboardLayoutMap", 452 + "type": "blink_api" 453 + }, 454 + "white-space-collapse": { 455 + "pct": 0.006235146062892904, 456 + "source": "firefox_use_counters", 457 + "observable": "css.properties.white-space-collapse", 458 + "type": "css_property" 459 + }, 460 + "beforeinstallprompt": { 461 + "pct": 0.00044831252503447615, 462 + "source": "firefox_use_counters", 463 + "observable": "api.BeforeInstallPromptEvent", 464 + "type": "blink_api" 465 + }, 466 + "text-indent": { 467 + "pct": 0.501826191841259, 468 + "source": "firefox_use_counters", 469 + "observable": "css.properties.text-indent", 470 + "type": "css_property" 471 + }, 472 + "scheduler": { 473 + "pct": 2.887445673298131e-7, 474 + "source": "firefox_use_counters", 475 + "observable": "api.scheduler", 476 + "type": "blink_api" 477 + }, 478 + "view-transitions": { 479 + "pct": 0.0000072681490277717605, 480 + "source": "firefox_use_counters", 481 + "observable": "css.properties.view-transition-name", 482 + "type": "css_property" 483 + }, 484 + "anchor-positioning": { 485 + "pct": 6.562456728800945e-7, 486 + "source": "firefox_use_counters", 487 + "observable": "css.properties.position-area", 488 + "type": "css_property" 489 + }, 490 + "field-sizing": { 491 + "pct": 0.0000037735603095554436, 492 + "source": "firefox_use_counters", 493 + "observable": "css.properties.field-sizing", 494 + "type": "css_property" 495 + } 496 + } 497 + }
+491
data/firefox-results/fenix-mapped.json
··· 1 + { 2 + "date": "2025-06-11", 3 + "features": { 4 + "logical-properties": { 5 + "pct": 0.31312940289211894, 6 + "source": "firefox_use_counters", 7 + "observable": "css.properties.inset", 8 + "type": "css_property" 9 + }, 10 + "flexbox": { 11 + "pct": 0.7430886553448814, 12 + "source": "firefox_use_counters", 13 + "observable": "css.properties.justify-content", 14 + "type": "css_property" 15 + }, 16 + "grid": { 17 + "pct": 0.538874478177919, 18 + "source": "firefox_use_counters", 19 + "observable": "css.properties.gap", 20 + "type": "css_property" 21 + }, 22 + "contain-intrinsic-size": { 23 + "pct": 0.038033493872670625, 24 + "source": "firefox_use_counters", 25 + "observable": "css.properties.contain-intrinsic-size", 26 + "type": "css_property" 27 + }, 28 + "container-queries": { 29 + "pct": 0.06070830034585386, 30 + "source": "firefox_use_counters", 31 + "observable": "css.properties.container-type", 32 + "type": "css_property" 33 + }, 34 + "masks": { 35 + "pct": 0.20986158177318934, 36 + "source": "firefox_use_counters", 37 + "observable": "css.properties.mask-image", 38 + "type": "css_property" 39 + }, 40 + "webcodecs": { 41 + "pct": 0.024543293016878565, 42 + "source": "firefox_use_counters", 43 + "observable": "api.VideoFrame", 44 + "type": "blink_api" 45 + }, 46 + "font-synthesis-weight": { 47 + "pct": 0.00045472470138482505, 48 + "source": "firefox_use_counters", 49 + "observable": "css.properties.font-synthesis-weight", 50 + "type": "css_property" 51 + }, 52 + "quotes": { 53 + "pct": 0.18226455119275337, 54 + "source": "firefox_use_counters", 55 + "observable": "css.properties.quotes", 56 + "type": "css_property" 57 + }, 58 + "text-wrap": { 59 + "pct": 0.17039683852541843, 60 + "source": "firefox_use_counters", 61 + "observable": "css.properties.text-wrap", 62 + "type": "css_property" 63 + }, 64 + "registered-custom-properties": { 65 + "pct": 0.02275835023223371, 66 + "source": "firefox_use_counters", 67 + "observable": "api.CSSPropertyRule", 68 + "type": "blink_api" 69 + }, 70 + "webusb": { 71 + "pct": 0.008336814375660667, 72 + "source": "firefox_use_counters", 73 + "observable": "api.USBDevice", 74 + "type": "blink_api" 75 + }, 76 + "scroll-snap": { 77 + "pct": 0.19465274034125996, 78 + "source": "firefox_use_counters", 79 + "observable": "css.properties.scroll-snap-type", 80 + "type": "css_property" 81 + }, 82 + "web-bluetooth": { 83 + "pct": 0.005845832514362171, 84 + "source": "firefox_use_counters", 85 + "observable": "api.BluetoothRemoteGATTDescriptor", 86 + "type": "blink_api" 87 + }, 88 + "device-orientation-events": { 89 + "pct": 0.0010748491130807137, 90 + "source": "firefox_use_counters", 91 + "observable": "api.DeviceMotionEventRotationRate", 92 + "type": "blink_api" 93 + }, 94 + "border-image": { 95 + "pct": 0.09215214482209379, 96 + "source": "firefox_use_counters", 97 + "observable": "css.properties.border-image", 98 + "type": "css_property" 99 + }, 100 + "forced-colors": { 101 + "pct": 0.12474127531701686, 102 + "source": "firefox_use_counters", 103 + "observable": "css.properties.forced-color-adjust", 104 + "type": "css_property" 105 + }, 106 + "scrollbar-gutter": { 107 + "pct": 0.06076085603105934, 108 + "source": "firefox_use_counters", 109 + "observable": "css.properties.scrollbar-gutter", 110 + "type": "css_property" 111 + }, 112 + "transform-box": { 113 + "pct": 0.011443409032672628, 114 + "source": "firefox_use_counters", 115 + "observable": "css.properties.transform-box", 116 + "type": "css_property" 117 + }, 118 + "text-emphasis": { 119 + "pct": 0.0018861678846550506, 120 + "source": "firefox_use_counters", 121 + "observable": "css.properties.text-emphasis-position", 122 + "type": "css_property" 123 + }, 124 + "screen-wake-lock": { 125 + "pct": 0.027623593031436224, 126 + "source": "firefox_use_counters", 127 + "observable": "api.WakeLockSentinel", 128 + "type": "blink_api" 129 + }, 130 + "keyboard-lock": { 131 + "pct": 0.0019317707845346104, 132 + "source": "firefox_use_counters", 133 + "observable": "api.Keyboard", 134 + "type": "blink_api" 135 + }, 136 + "overflow-shorthand": { 137 + "pct": 0.8063506878784442, 138 + "source": "firefox_use_counters", 139 + "observable": "css.properties.overflow", 140 + "type": "css_property" 141 + }, 142 + "reporting": { 143 + "pct": 0.035370641046869336, 144 + "source": "firefox_use_counters", 145 + "observable": "api.ReportingObserver", 146 + "type": "blink_api" 147 + }, 148 + "beforeinstallprompt": { 149 + "pct": 0.0015969816761600565, 150 + "source": "firefox_use_counters", 151 + "observable": "api.BeforeInstallPromptEvent", 152 + "type": "blink_api" 153 + }, 154 + "web-midi": { 155 + "pct": 0.006835827469477474, 156 + "source": "firefox_use_counters", 157 + "observable": "api.MIDIPort", 158 + "type": "blink_api" 159 + }, 160 + "scrollbar-width": { 161 + "pct": 0.4195911256037384, 162 + "source": "firefox_use_counters", 163 + "observable": "css.properties.scrollbar-width", 164 + "type": "css_property" 165 + }, 166 + "font-synthesis-small-caps": { 167 + "pct": 0.00003061781815722572, 168 + "source": "firefox_use_counters", 169 + "observable": "css.properties.font-synthesis-small-caps", 170 + "type": "css_property" 171 + }, 172 + "hyphens": { 173 + "pct": 0.16177519202724724, 174 + "source": "firefox_use_counters", 175 + "observable": "css.properties.hyphens", 176 + "type": "css_property" 177 + }, 178 + "picture-in-picture": { 179 + "pct": 0.0020374242416180406, 180 + "source": "firefox_use_counters", 181 + "observable": "api.PictureInPictureWindow", 182 + "type": "blink_api" 183 + }, 184 + "appearance": { 185 + "pct": 0.5277942372604344, 186 + "source": "firefox_use_counters", 187 + "observable": "css.properties.appearance", 188 + "type": "css_property" 189 + }, 190 + "mathml": { 191 + "pct": 0.000168060776396631, 192 + "source": "firefox_use_counters", 193 + "observable": "css.properties.math-style", 194 + "type": "css_property" 195 + }, 196 + "backdrop-filter": { 197 + "pct": 0.3011676122707288, 198 + "source": "firefox_use_counters", 199 + "observable": "css.properties.backdrop-filter", 200 + "type": "css_property" 201 + }, 202 + "hyphenate-character": { 203 + "pct": 0.0013077285671131114, 204 + "source": "firefox_use_counters", 205 + "observable": "css.properties.hyphenate-character", 206 + "type": "css_property" 207 + }, 208 + "content-visibility": { 209 + "pct": 0.05769310135650326, 210 + "source": "firefox_use_counters", 211 + "observable": "css.properties.content-visibility", 212 + "type": "css_property" 213 + }, 214 + "font-palette": { 215 + "pct": 0.00004621435847698203, 216 + "source": "firefox_use_counters", 217 + "observable": "css.properties.font-palette", 218 + "type": "css_property" 219 + }, 220 + "speech-recognition": { 221 + "pct": 0.00010500108220068829, 222 + "source": "firefox_use_counters", 223 + "observable": "api.SpeechRecognitionResultList", 224 + "type": "blink_api" 225 + }, 226 + "individual-transforms": { 227 + "pct": 0.06621634085738833, 228 + "source": "firefox_use_counters", 229 + "observable": "css.properties.rotate", 230 + "type": "css_property" 231 + }, 232 + "font-variant-position": { 233 + "pct": 0.0019919431666883414, 234 + "source": "firefox_use_counters", 235 + "observable": "css.properties.font-variant-position", 236 + "type": "css_property" 237 + }, 238 + "accelerometer": { 239 + "pct": 0.006750321441889268, 240 + "source": "firefox_use_counters", 241 + "observable": "api.Accelerometer", 242 + "type": "blink_api" 243 + }, 244 + "will-change": { 245 + "pct": 0.3273864871503988, 246 + "source": "firefox_use_counters", 247 + "observable": "css.properties.will-change", 248 + "type": "css_property" 249 + }, 250 + "color-scheme": { 251 + "pct": 0.1470620434729665, 252 + "source": "firefox_use_counters", 253 + "observable": "css.properties.color-scheme", 254 + "type": "css_property" 255 + }, 256 + "font-size-adjust": { 257 + "pct": 0.012567032821951598, 258 + "source": "firefox_use_counters", 259 + "observable": "css.properties.font-size-adjust", 260 + "type": "css_property" 261 + }, 262 + "motion-path": { 263 + "pct": 0.005585450401624134, 264 + "source": "firefox_use_counters", 265 + "observable": "css.properties.offset-distance", 266 + "type": "css_property" 267 + }, 268 + "font-synthesis": { 269 + "pct": 0.009539549985708712, 270 + "source": "firefox_use_counters", 271 + "observable": "css.properties.font-synthesis", 272 + "type": "css_property" 273 + }, 274 + "text-indent": { 275 + "pct": 0.5356411530621198, 276 + "source": "firefox_use_counters", 277 + "observable": "css.properties.text-indent", 278 + "type": "css_property" 279 + }, 280 + "box-decoration-break": { 281 + "pct": 0.04327186167365444, 282 + "source": "firefox_use_counters", 283 + "observable": "css.properties.box-decoration-break", 284 + "type": "css_property" 285 + }, 286 + "counter-set": { 287 + "pct": 0.0009370064381677687, 288 + "source": "firefox_use_counters", 289 + "observable": "css.properties.counter-set", 290 + "type": "css_property" 291 + }, 292 + "font-language-override": { 293 + "pct": 0.004197127472031811, 294 + "source": "firefox_use_counters", 295 + "observable": "css.properties.font-language-override", 296 + "type": "css_property" 297 + }, 298 + "text-justify": { 299 + "pct": 0.0058565772386665145, 300 + "source": "firefox_use_counters", 301 + "observable": "css.properties.text-justify", 302 + "type": "css_property" 303 + }, 304 + "animation-composition": { 305 + "pct": 0.005657318566947336, 306 + "source": "firefox_use_counters", 307 + "observable": "css.properties.animation-composition", 308 + "type": "css_property" 309 + }, 310 + "aspect-ratio": { 311 + "pct": 0.30242028597984927, 312 + "source": "firefox_use_counters", 313 + "observable": "css.properties.aspect-ratio", 314 + "type": "css_property" 315 + }, 316 + "font-synthesis-style": { 317 + "pct": 0.00008915601047246561, 318 + "source": "firefox_use_counters", 319 + "observable": "css.properties.font-synthesis-style", 320 + "type": "css_property" 321 + }, 322 + "outline": { 323 + "pct": 0.7837416631916435, 324 + "source": "firefox_use_counters", 325 + "observable": "css.properties.outline", 326 + "type": "css_property" 327 + }, 328 + "line-break": { 329 + "pct": 0.11909874797480012, 330 + "source": "firefox_use_counters", 331 + "observable": "css.properties.line-break", 332 + "type": "css_property" 333 + }, 334 + "print-color-adjust": { 335 + "pct": 0.03650688733198375, 336 + "source": "firefox_use_counters", 337 + "observable": "css.properties.print-color-adjust", 338 + "type": "css_property" 339 + }, 340 + "ruby-position": { 341 + "pct": 0.0018783516929650789, 342 + "source": "firefox_use_counters", 343 + "observable": "css.properties.ruby-position", 344 + "type": "css_property" 345 + }, 346 + "image-orientation": { 347 + "pct": 0.004249868383050822, 348 + "source": "firefox_use_counters", 349 + "observable": "css.properties.image-orientation", 350 + "type": "css_property" 351 + }, 352 + "scrollbar-color": { 353 + "pct": 0.12390811678374766, 354 + "source": "firefox_use_counters", 355 + "observable": "css.properties.scrollbar-color", 356 + "type": "css_property" 357 + }, 358 + "font-variant-alternates": { 359 + "pct": 0.0019942973615529242, 360 + "source": "firefox_use_counters", 361 + "observable": "css.properties.font-variant-alternates", 362 + "type": "css_property" 363 + }, 364 + "font-optical-sizing": { 365 + "pct": 0.008094165104094008, 366 + "source": "firefox_use_counters", 367 + "observable": "css.properties.font-optical-sizing", 368 + "type": "css_property" 369 + }, 370 + "keyboard-map": { 371 + "pct": 0.0021185823633944087, 372 + "source": "firefox_use_counters", 373 + "observable": "api.KeyboardLayoutMap", 374 + "type": "blink_api" 375 + }, 376 + "text-underline-offset": { 377 + "pct": 0.09599819827777563, 378 + "source": "firefox_use_counters", 379 + "observable": "css.properties.text-underline-offset", 380 + "type": "css_property" 381 + }, 382 + "clip-path": { 383 + "pct": 0.42532172060029144, 384 + "source": "firefox_use_counters", 385 + "observable": "css.properties.clip-path", 386 + "type": "css_property" 387 + }, 388 + "accent-color": { 389 + "pct": 0.021306973759056203, 390 + "source": "firefox_use_counters", 391 + "observable": "css.properties.accent-color", 392 + "type": "css_property" 393 + }, 394 + "async-clipboard": { 395 + "pct": 0.024087875645593015, 396 + "source": "firefox_use_counters", 397 + "observable": "api.ClipboardItem", 398 + "type": "blink_api" 399 + }, 400 + "ruby-align": { 401 + "pct": 0.0019857776600019895, 402 + "source": "firefox_use_counters", 403 + "observable": "css.properties.ruby-align", 404 + "type": "css_property" 405 + }, 406 + "paint-order": { 407 + "pct": 0.00578791551685629, 408 + "source": "firefox_use_counters", 409 + "observable": "css.properties.paint-order", 410 + "type": "css_property" 411 + }, 412 + "scheduler": { 413 + "pct": 0.00000853933091549038, 414 + "source": "firefox_use_counters", 415 + "observable": "api.scheduler", 416 + "type": "blink_api" 417 + }, 418 + "remote-playback": { 419 + "pct": 0.005795596476471643, 420 + "source": "firefox_use_counters", 421 + "observable": "api.RemotePlayback", 422 + "type": "blink_api" 423 + }, 424 + "baseline-source": { 425 + "pct": 0.00011938224347137631, 426 + "source": "firefox_use_counters", 427 + "observable": "css.properties.baseline-source", 428 + "type": "css_property" 429 + }, 430 + "scroll-driven-animations": { 431 + "pct": 0.000023635832864202826, 432 + "source": "firefox_use_counters", 433 + "observable": "css.properties.animation-timeline", 434 + "type": "css_property" 435 + }, 436 + "font-variant-emoji": { 437 + "pct": 0.00018562524716405192, 438 + "source": "firefox_use_counters", 439 + "observable": "css.properties.font-variant-emoji", 440 + "type": "css_property" 441 + }, 442 + "white-space-collapse": { 443 + "pct": 0.0051301666468813265, 444 + "source": "firefox_use_counters", 445 + "observable": "css.properties.white-space-collapse", 446 + "type": "css_property" 447 + }, 448 + "dialog": { 449 + "pct": 0.0002049191930551606, 450 + "source": "firefox_use_counters", 451 + "observable": "api.HTMLDialogElement", 452 + "type": "blink_api" 453 + }, 454 + "text-wrap-style": { 455 + "pct": 0.00038005773274383636, 456 + "source": "firefox_use_counters", 457 + "observable": "css.properties.text-wrap-style", 458 + "type": "css_property" 459 + }, 460 + "transition-behavior": { 461 + "pct": 0.004267310251143087, 462 + "source": "firefox_use_counters", 463 + "observable": "css.properties.transition-behavior", 464 + "type": "css_property" 465 + }, 466 + "view-transitions": { 467 + "pct": 0.00002122324310054048, 468 + "source": "firefox_use_counters", 469 + "observable": "css.properties.view-transition-name", 470 + "type": "css_property" 471 + }, 472 + "cookie-store": { 473 + "pct": 0.01066651608106001, 474 + "source": "firefox_use_counters", 475 + "observable": "api.CookieStore", 476 + "type": "blink_api" 477 + }, 478 + "hyphenate-limit-chars": { 479 + "pct": 0.002412664032214245, 480 + "source": "firefox_use_counters", 481 + "observable": "css.properties.hyphenate-limit-chars", 482 + "type": "css_property" 483 + }, 484 + "initial-letter": { 485 + "pct": 0.0000031287055606483928, 486 + "source": "firefox_use_counters", 487 + "observable": "css.properties.initial-letter", 488 + "type": "css_property" 489 + } 490 + } 491 + }
+9468
data/web-feature-usage.json
··· 1 + { 2 + "generated": "2026-02-25T21:55:28.104Z", 3 + "description": "Web feature prioritization by real-world usage. Combines Chrome-ecosystem sources (HTTP Archive page scanning, web.dev Blink UseCounters, ChromeStatus) and Firefox use-counter telemetry, mapped to Baseline Widely Available (BWA) web-features.", 4 + "sources": { 5 + "httparchive": { 6 + "description": "HTTP Archive custom_metrics — static analysis of CSS properties, HTML elements, selectors, at-rules in ~10.9M crawled pages", 7 + "internal_key": "custom_metrics", 8 + "feature_count": 107 9 + }, 10 + "webdev": { 11 + "description": "web.dev — Blink UseCounter data published by Google, queried via HTTP Archive BigQuery mirror (httparchive.blink_features.usage)", 12 + "internal_key": "blink_features", 13 + "feature_count": 46 14 + }, 15 + "chromestatus": { 16 + "description": "ChromeStatus — usage percentages (day_percentage) aggregated across all Chrome page loads globally (chromestatus.com)", 17 + "internal_key": "chrome_popularity", 18 + "feature_count": 230 19 + }, 20 + "firefox": { 21 + "description": "Firefox use-counter telemetry — fraction of Firefox page loads triggering CSS property or API use-counters (public Mozilla telemetry)", 22 + "internal_key": "firefox_use_counters", 23 + "feature_count": 83, 24 + "date": "2025-06-11" 25 + } 26 + }, 27 + "methodology": { 28 + "priority": "httparchive > webdev > chromestatus", 29 + "priority_rationale": "HTTP Archive page scanning is ground truth (direct content analysis). web.dev UseCounters cover JS APIs not detectable by static analysis. ChromeStatus is fallback with a different denominator (all Chrome traffic vs. crawled pages).", 30 + "observable_selection": "Highest-percentage observable chosen as representative per feature", 31 + "scale": "All usage values normalized to 0-1. HTTP Archive and web.dev = fraction of crawled pages. ChromeStatus = fraction of all Chrome page loads. Firefox = fraction of Firefox page loads. Values across sources are not directly comparable.", 32 + "firefox_note": "Firefox usage is included as supplementary data (firefox_usage field) but not yet integrated into the priority waterfall. It provides an independent, non-Chrome signal for cross-validation." 33 + }, 34 + "summary": { 35 + "total_features": 415, 36 + "with_usage_data": 383, 37 + "without_usage_data": 32, 38 + "tiers": { 39 + "above_50_pct": 26, 40 + "10_to_50_pct": 62, 41 + "1_to_10_pct": 83, 42 + "below_1_pct": 212 43 + } 44 + }, 45 + "features": [ 46 + { 47 + "name": "overflow-shorthand", 48 + "usage": 0.9575161742804598, 49 + "source": "custom_metrics", 50 + "observable": "overflow", 51 + "observable_type": "css_property", 52 + "bcd_key_count": 17, 53 + "bcd_keys": [ 54 + "css.properties.overflow", 55 + "css.properties.overflow-x", 56 + "css.properties.overflow-x.auto", 57 + "css.properties.overflow-x.hidden", 58 + "css.properties.overflow-x.scroll", 59 + "css.properties.overflow-x.visible", 60 + "css.properties.overflow-y", 61 + "css.properties.overflow-y.auto", 62 + "css.properties.overflow-y.hidden", 63 + "css.properties.overflow-y.scroll", 64 + "css.properties.overflow-y.visible", 65 + "css.properties.overflow.auto", 66 + "css.properties.overflow.hidden", 67 + "css.properties.overflow.multiple_keywords", 68 + "css.properties.overflow.scroll", 69 + "css.properties.overflow.visible", 70 + "css.types.overflow" 71 + ], 72 + "firefox_usage": 0.8063506878784442, 73 + "firefox_observable": "css.properties.overflow" 74 + }, 75 + { 76 + "name": "outline", 77 + "usage": 0.9238862061213736, 78 + "source": "custom_metrics", 79 + "observable": "outline", 80 + "observable_type": "css_property", 81 + "bcd_key_count": 1, 82 + "bcd_keys": [ 83 + "css.properties.outline" 84 + ], 85 + "firefox_usage": 0.7837416631916435, 86 + "firefox_observable": "css.properties.outline" 87 + }, 88 + { 89 + "name": "not", 90 + "usage": 0.8798817078194864, 91 + "source": "custom_metrics", 92 + "observable": "not", 93 + "observable_type": "css_selector", 94 + "bcd_key_count": 2, 95 + "bcd_keys": [ 96 + "css.selectors.not", 97 + "css.selectors.not.selector_list" 98 + ], 99 + "firefox_usage": null, 100 + "firefox_observable": null 101 + }, 102 + { 103 + "name": "flexbox", 104 + "usage": 0.877012225315162, 105 + "source": "custom_metrics", 106 + "observable": "align-items", 107 + "observable_type": "css_property", 108 + "bcd_key_count": 74, 109 + "bcd_keys": [ 110 + "css.properties.align-content", 111 + "css.properties.align-content.flex_context", 112 + "css.properties.align-content.flex_context.baseline", 113 + "css.properties.align-content.flex_context.first_baseline", 114 + "css.properties.align-content.flex_context.last_baseline", 115 + "css.properties.align-content.flex_context.safe_unsafe", 116 + "css.properties.align-content.flex_context.space-evenly", 117 + "css.properties.align-content.flex_context.start_end", 118 + "css.properties.align-content.flex_context.stretch", 119 + "css.properties.align-content.normal", 120 + "css.properties.align-items", 121 + "css.properties.align-items.flex_context", 122 + "css.properties.align-items.flex_context.baseline", 123 + "css.properties.align-items.flex_context.first_baseline", 124 + "css.properties.align-items.flex_context.last_baseline", 125 + "css.properties.align-items.flex_context.safe_unsafe", 126 + "css.properties.align-items.flex_context.start_end", 127 + "css.properties.align-self", 128 + "css.properties.align-self.auto", 129 + "css.properties.align-self.flex_context", 130 + "css.properties.align-self.flex_context.baseline", 131 + "css.properties.align-self.flex_context.first_baseline", 132 + "css.properties.align-self.flex_context.last_baseline", 133 + "css.properties.align-self.flex_context.safe_unsafe", 134 + "css.properties.align-self.flex_context.start_end", 135 + "css.properties.align-self.flex_context.stretch", 136 + "css.properties.align-self.normal", 137 + "css.properties.align-self.stretch", 138 + "css.properties.display.flex", 139 + "css.properties.display.inline-flex", 140 + "css.properties.flex", 141 + "css.properties.flex-basis", 142 + "css.properties.flex-basis.auto", 143 + "css.properties.flex-basis.content", 144 + "css.properties.flex-basis.fit-content", 145 + "css.properties.flex-basis.max-content", 146 + "css.properties.flex-basis.min-content", 147 + "css.properties.flex-direction", 148 + "css.properties.flex-direction.column", 149 + "css.properties.flex-direction.column-reverse", 150 + "css.properties.flex-direction.row", 151 + "css.properties.flex-direction.row-reverse", 152 + "css.properties.flex-flow", 153 + "css.properties.flex-grow", 154 + "css.properties.flex-grow.less_than_zero_animate", 155 + "css.properties.flex-shrink", 156 + "css.properties.flex-wrap", 157 + "css.properties.flex-wrap.nowrap", 158 + "css.properties.flex-wrap.wrap", 159 + "css.properties.flex-wrap.wrap-reverse", 160 + "css.properties.flex.none", 161 + "css.properties.justify-content", 162 + "css.properties.justify-content.flex_context", 163 + "css.properties.justify-content.flex_context.left_right", 164 + "css.properties.justify-content.flex_context.safe_unsafe", 165 + "css.properties.justify-content.flex_context.space-evenly", 166 + "css.properties.justify-content.flex_context.start_end", 167 + "css.properties.justify-content.flex_context.stretch", 168 + "css.properties.justify-content.left", 169 + "css.properties.justify-content.normal", 170 + "css.properties.justify-content.right", 171 + "css.properties.justify-items", 172 + "css.properties.justify-items.flex_context", 173 + "css.properties.justify-items.left", 174 + "css.properties.justify-items.legacy", 175 + "css.properties.justify-items.right", 176 + "css.properties.order", 177 + "css.properties.place-content", 178 + "css.properties.place-content.flex_context", 179 + "css.properties.place-items", 180 + "css.properties.place-items.flex_context", 181 + "css.properties.place-self", 182 + "css.properties.place-self.flex_context", 183 + "css.properties.position.absolutely_positioned_flex_children" 184 + ], 185 + "firefox_usage": 0.7430886553448814, 186 + "firefox_observable": "css.properties.justify-content" 187 + }, 188 + { 189 + "name": "slot", 190 + "usage": 0.8186960228291648, 191 + "source": "blink_features", 192 + "observable": "api.HTMLSlotElement", 193 + "observable_type": "blink_api", 194 + "bcd_key_count": 12, 195 + "bcd_keys": [ 196 + "api.Element.assignedSlot", 197 + "api.Element.slot", 198 + "api.HTMLSlotElement", 199 + "api.HTMLSlotElement.assignedElements", 200 + "api.HTMLSlotElement.assignedNodes", 201 + "api.HTMLSlotElement.name", 202 + "api.HTMLSlotElement.slotchange_event", 203 + "api.Text.assignedSlot", 204 + "css.selectors.slotted", 205 + "html.elements.slot", 206 + "html.elements.slot.name", 207 + "html.global_attributes.slot" 208 + ], 209 + "firefox_usage": null, 210 + "firefox_observable": null 211 + }, 212 + { 213 + "name": "slot-assign", 214 + "usage": 0.8186960228291648, 215 + "source": "blink_features", 216 + "observable": "api.HTMLSlotElement.assign", 217 + "observable_type": "blink_api", 218 + "bcd_key_count": 2, 219 + "bcd_keys": [ 220 + "api.HTMLSlotElement.assign", 221 + "api.ShadowRoot.slotAssignment" 222 + ], 223 + "firefox_usage": null, 224 + "firefox_observable": null 225 + }, 226 + { 227 + "name": "ua-client-hints", 228 + "usage": 0.74314817, 229 + "source": "chrome_popularity", 230 + "observable": null, 231 + "observable_type": "blink_api", 232 + "bcd_key_count": 26, 233 + "bcd_keys": [ 234 + "api.Navigator.userAgentData", 235 + "api.Navigator.userAgentData.secure_context_required", 236 + "api.NavigatorUAData", 237 + "api.NavigatorUAData.brands", 238 + "api.NavigatorUAData.getHighEntropyValues", 239 + "api.NavigatorUAData.mobile", 240 + "api.NavigatorUAData.platform", 241 + "api.NavigatorUAData.toJSON", 242 + "api.WorkerNavigator.userAgentData", 243 + "http.headers.Accept-CH.Sec-CH-UA", 244 + "http.headers.Accept-CH.Sec-CH-UA-Arch", 245 + "http.headers.Accept-CH.Sec-CH-UA-Full-Version", 246 + "http.headers.Accept-CH.Sec-CH-UA-Mobile", 247 + "http.headers.Accept-CH.Sec-CH-UA-Model", 248 + "http.headers.Accept-CH.Sec-CH-UA-Platform", 249 + "http.headers.Accept-CH.Sec-CH-UA-Platform-Version", 250 + "http.headers.Sec-CH-UA", 251 + "http.headers.Sec-CH-UA-Arch", 252 + "http.headers.Sec-CH-UA-Bitness", 253 + "http.headers.Sec-CH-UA-Form-Factors", 254 + "http.headers.Sec-CH-UA-Full-Version-List", 255 + "http.headers.Sec-CH-UA-Mobile", 256 + "http.headers.Sec-CH-UA-Model", 257 + "http.headers.Sec-CH-UA-Platform", 258 + "http.headers.Sec-CH-UA-Platform-Version", 259 + "http.headers.Sec-CH-UA-WoW64" 260 + ], 261 + "firefox_usage": null, 262 + "firefox_observable": null 263 + }, 264 + { 265 + "name": "intersection-observer", 266 + "usage": 0.7126436781609196, 267 + "source": "blink_features", 268 + "observable": "api.IntersectionObserver", 269 + "observable_type": "blink_api", 270 + "bcd_key_count": 23, 271 + "bcd_keys": [ 272 + "api.IntersectionObserver", 273 + "api.IntersectionObserver.IntersectionObserver", 274 + "api.IntersectionObserver.IntersectionObserver.options_root_parameter_Document", 275 + "api.IntersectionObserver.delay", 276 + "api.IntersectionObserver.disconnect", 277 + "api.IntersectionObserver.observe", 278 + "api.IntersectionObserver.root", 279 + "api.IntersectionObserver.rootMargin", 280 + "api.IntersectionObserver.scrollMargin", 281 + "api.IntersectionObserver.takeRecords", 282 + "api.IntersectionObserver.thresholds", 283 + "api.IntersectionObserver.trackVisibility", 284 + "api.IntersectionObserver.unobserve", 285 + "api.IntersectionObserverEntry", 286 + "api.IntersectionObserverEntry.IntersectionObserverEntry", 287 + "api.IntersectionObserverEntry.boundingClientRect", 288 + "api.IntersectionObserverEntry.intersectionRatio", 289 + "api.IntersectionObserverEntry.intersectionRect", 290 + "api.IntersectionObserverEntry.isIntersecting", 291 + "api.IntersectionObserverEntry.isVisible", 292 + "api.IntersectionObserverEntry.rootBounds", 293 + "api.IntersectionObserverEntry.target", 294 + "api.IntersectionObserverEntry.time" 295 + ], 296 + "firefox_usage": null, 297 + "firefox_observable": null 298 + }, 299 + { 300 + "name": "text-indent", 301 + "usage": 0.700350456135601, 302 + "source": "custom_metrics", 303 + "observable": "text-indent", 304 + "observable_type": "css_property", 305 + "bcd_key_count": 1, 306 + "bcd_keys": [ 307 + "css.properties.text-indent" 308 + ], 309 + "firefox_usage": 0.5356411530621198, 310 + "firefox_observable": "css.properties.text-indent" 311 + }, 312 + { 313 + "name": "grid", 314 + "usage": 0.6608178847582399, 315 + "source": "custom_metrics", 316 + "observable": "gap", 317 + "observable_type": "css_property", 318 + "bcd_key_count": 62, 319 + "bcd_keys": [ 320 + "css.properties.align-content.grid_context", 321 + "css.properties.align-items.grid_context", 322 + "css.properties.align-items.grid_context.start_end", 323 + "css.properties.align-self.grid_context", 324 + "css.properties.column-gap.grid_context", 325 + "css.properties.display.grid", 326 + "css.properties.display.inline-grid", 327 + "css.properties.gap", 328 + "css.properties.gap.grid_context", 329 + "css.properties.gap.grid_context.calc_values", 330 + "css.properties.gap.grid_context.percentage_values", 331 + "css.properties.gap.normal", 332 + "css.properties.grid", 333 + "css.properties.grid-area", 334 + "css.properties.grid-auto-columns", 335 + "css.properties.grid-auto-flow", 336 + "css.properties.grid-auto-flow.column", 337 + "css.properties.grid-auto-flow.dense", 338 + "css.properties.grid-auto-flow.row", 339 + "css.properties.grid-auto-rows", 340 + "css.properties.grid-column", 341 + "css.properties.grid-column-end", 342 + "css.properties.grid-column-start", 343 + "css.properties.grid-row", 344 + "css.properties.grid-row-end", 345 + "css.properties.grid-row-start", 346 + "css.properties.grid-template", 347 + "css.properties.grid-template-areas", 348 + "css.properties.grid-template-areas.none", 349 + "css.properties.grid-template-columns", 350 + "css.properties.grid-template-columns.auto", 351 + "css.properties.grid-template-columns.fit-content", 352 + "css.properties.grid-template-columns.max-content", 353 + "css.properties.grid-template-columns.min-content", 354 + "css.properties.grid-template-columns.minmax", 355 + "css.properties.grid-template-columns.none", 356 + "css.properties.grid-template-columns.repeat", 357 + "css.properties.grid-template-rows", 358 + "css.properties.grid-template-rows.auto", 359 + "css.properties.grid-template-rows.fit-content", 360 + "css.properties.grid-template-rows.max-content", 361 + "css.properties.grid-template-rows.min-content", 362 + "css.properties.grid-template-rows.minmax", 363 + "css.properties.grid-template-rows.none", 364 + "css.properties.grid-template-rows.repeat", 365 + "css.properties.grid-template.none", 366 + "css.properties.justify-content.grid_context", 367 + "css.properties.justify-items.grid_context", 368 + "css.properties.justify-self", 369 + "css.properties.justify-self.auto", 370 + "css.properties.justify-self.grid_context", 371 + "css.properties.justify-self.left", 372 + "css.properties.justify-self.normal", 373 + "css.properties.justify-self.right", 374 + "css.properties.justify-self.stretch", 375 + "css.properties.place-content.grid_context", 376 + "css.properties.place-items.grid_context", 377 + "css.properties.place-self.grid_context", 378 + "css.properties.row-gap", 379 + "css.properties.row-gap.grid_context", 380 + "css.properties.row-gap.normal", 381 + "css.types.flex" 382 + ], 383 + "firefox_usage": 0.538874478177919, 384 + "firefox_observable": "css.properties.gap" 385 + }, 386 + { 387 + "name": "appearance", 388 + "usage": 0.6496636388713634, 389 + "source": "custom_metrics", 390 + "observable": "appearance", 391 + "observable_type": "css_property", 392 + "bcd_key_count": 14, 393 + "bcd_keys": [ 394 + "css.properties.appearance", 395 + "css.properties.appearance.auto", 396 + "css.properties.appearance.button", 397 + "css.properties.appearance.checkbox", 398 + "css.properties.appearance.listbox", 399 + "css.properties.appearance.menulist", 400 + "css.properties.appearance.menulist-button", 401 + "css.properties.appearance.meter", 402 + "css.properties.appearance.none", 403 + "css.properties.appearance.progress-bar", 404 + "css.properties.appearance.radio", 405 + "css.properties.appearance.searchfield", 406 + "css.properties.appearance.textarea", 407 + "css.properties.appearance.textfield" 408 + ], 409 + "firefox_usage": 0.5277942372604344, 410 + "firefox_observable": "css.properties.appearance" 411 + }, 412 + { 413 + "name": "request-animation-frame", 414 + "usage": 0.61653786, 415 + "source": "chrome_popularity", 416 + "observable": null, 417 + "observable_type": "blink_api", 418 + "bcd_key_count": 2, 419 + "bcd_keys": [ 420 + "api.Window.cancelAnimationFrame", 421 + "api.Window.requestAnimationFrame" 422 + ], 423 + "firefox_usage": null, 424 + "firefox_observable": null 425 + }, 426 + { 427 + "name": "beforeunload", 428 + "usage": 0.57920782, 429 + "source": "chrome_popularity", 430 + "observable": null, 431 + "observable_type": "blink_api", 432 + "bcd_key_count": 4, 433 + "bcd_keys": [ 434 + "api.BeforeUnloadEvent", 435 + "api.BeforeUnloadEvent.user_interaction", 436 + "api.Window.beforeunload_event", 437 + "api.Window.beforeunload_event.preventdefault_activation" 438 + ], 439 + "firefox_usage": null, 440 + "firefox_observable": null 441 + }, 442 + { 443 + "name": "flexbox-gap", 444 + "usage": 0.559277, 445 + "source": "chrome_popularity", 446 + "observable": null, 447 + "observable_type": "css_property", 448 + "bcd_key_count": 3, 449 + "bcd_keys": [ 450 + "css.properties.column-gap.flex_context", 451 + "css.properties.gap.flex_context", 452 + "css.properties.row-gap.flex_context" 453 + ], 454 + "firefox_usage": null, 455 + "firefox_observable": null 456 + }, 457 + { 458 + "name": "canvas", 459 + "usage": 0.535303776683087, 460 + "source": "blink_features", 461 + "observable": "api.HTMLCanvasElement", 462 + "observable_type": "blink_api", 463 + "bcd_key_count": 9, 464 + "bcd_keys": [ 465 + "api.HTMLCanvasElement", 466 + "api.HTMLCanvasElement.getContext", 467 + "api.HTMLCanvasElement.height", 468 + "api.HTMLCanvasElement.toBlob", 469 + "api.HTMLCanvasElement.toDataURL", 470 + "api.HTMLCanvasElement.width", 471 + "html.elements.canvas", 472 + "html.elements.canvas.height", 473 + "html.elements.canvas.width" 474 + ], 475 + "firefox_usage": null, 476 + "firefox_observable": null 477 + }, 478 + { 479 + "name": "canvas-2d", 480 + "usage": 0.535303776683087, 481 + "source": "blink_features", 482 + "observable": "api.HTMLCanvasElement.getContext.2d_context", 483 + "observable_type": "blink_api", 484 + "bcd_key_count": 117, 485 + "bcd_keys": [ 486 + "api.CanvasGradient", 487 + "api.CanvasGradient.addColorStop", 488 + "api.CanvasPattern", 489 + "api.CanvasPattern.setTransform", 490 + "api.CanvasPattern.setTransform.dommatrix", 491 + "api.CanvasRenderingContext2D", 492 + "api.CanvasRenderingContext2D.arc", 493 + "api.CanvasRenderingContext2D.arcTo", 494 + "api.CanvasRenderingContext2D.beginPath", 495 + "api.CanvasRenderingContext2D.bezierCurveTo", 496 + "api.CanvasRenderingContext2D.canvas", 497 + "api.CanvasRenderingContext2D.clearRect", 498 + "api.CanvasRenderingContext2D.clip", 499 + "api.CanvasRenderingContext2D.clip.path_parameter", 500 + "api.CanvasRenderingContext2D.closePath", 501 + "api.CanvasRenderingContext2D.createImageData", 502 + "api.CanvasRenderingContext2D.createLinearGradient", 503 + "api.CanvasRenderingContext2D.createPattern", 504 + "api.CanvasRenderingContext2D.createRadialGradient", 505 + "api.CanvasRenderingContext2D.direction", 506 + "api.CanvasRenderingContext2D.drawFocusIfNeeded", 507 + "api.CanvasRenderingContext2D.drawFocusIfNeeded.path_parameter", 508 + "api.CanvasRenderingContext2D.drawImage", 509 + "api.CanvasRenderingContext2D.drawImage.ImageBitmap_source_image", 510 + "api.CanvasRenderingContext2D.ellipse", 511 + "api.CanvasRenderingContext2D.fill", 512 + "api.CanvasRenderingContext2D.fill.path_parameter", 513 + "api.CanvasRenderingContext2D.fillRect", 514 + "api.CanvasRenderingContext2D.fillStyle", 515 + "api.CanvasRenderingContext2D.fillText", 516 + "api.CanvasRenderingContext2D.filter", 517 + "api.CanvasRenderingContext2D.font", 518 + "api.CanvasRenderingContext2D.fontKerning", 519 + "api.CanvasRenderingContext2D.fontStretch", 520 + "api.CanvasRenderingContext2D.fontVariantCaps", 521 + "api.CanvasRenderingContext2D.getContextAttributes", 522 + "api.CanvasRenderingContext2D.getImageData", 523 + "api.CanvasRenderingContext2D.getLineDash", 524 + "api.CanvasRenderingContext2D.getTransform", 525 + "api.CanvasRenderingContext2D.globalAlpha", 526 + "api.CanvasRenderingContext2D.globalCompositeOperation", 527 + "api.CanvasRenderingContext2D.imageSmoothingEnabled", 528 + "api.CanvasRenderingContext2D.imageSmoothingQuality", 529 + "api.CanvasRenderingContext2D.isPointInPath", 530 + "api.CanvasRenderingContext2D.isPointInPath.path_parameter", 531 + "api.CanvasRenderingContext2D.isPointInStroke", 532 + "api.CanvasRenderingContext2D.isPointInStroke.path_parameter", 533 + "api.CanvasRenderingContext2D.lang", 534 + "api.CanvasRenderingContext2D.letterSpacing", 535 + "api.CanvasRenderingContext2D.lineCap", 536 + "api.CanvasRenderingContext2D.lineDashOffset", 537 + "api.CanvasRenderingContext2D.lineJoin", 538 + "api.CanvasRenderingContext2D.lineTo", 539 + "api.CanvasRenderingContext2D.lineWidth", 540 + "api.CanvasRenderingContext2D.measureText", 541 + "api.CanvasRenderingContext2D.miterLimit", 542 + "api.CanvasRenderingContext2D.moveTo", 543 + "api.CanvasRenderingContext2D.putImageData", 544 + "api.CanvasRenderingContext2D.quadraticCurveTo", 545 + "api.CanvasRenderingContext2D.rect", 546 + "api.CanvasRenderingContext2D.resetTransform", 547 + "api.CanvasRenderingContext2D.restore", 548 + "api.CanvasRenderingContext2D.rotate", 549 + "api.CanvasRenderingContext2D.save", 550 + "api.CanvasRenderingContext2D.scale", 551 + "api.CanvasRenderingContext2D.setLineDash", 552 + "api.CanvasRenderingContext2D.setTransform", 553 + "api.CanvasRenderingContext2D.setTransform.matrix_parameter", 554 + "api.CanvasRenderingContext2D.shadowBlur", 555 + "api.CanvasRenderingContext2D.shadowColor", 556 + "api.CanvasRenderingContext2D.shadowOffsetX", 557 + "api.CanvasRenderingContext2D.shadowOffsetY", 558 + "api.CanvasRenderingContext2D.stroke", 559 + "api.CanvasRenderingContext2D.stroke.path_parameter", 560 + "api.CanvasRenderingContext2D.strokeRect", 561 + "api.CanvasRenderingContext2D.strokeStyle", 562 + "api.CanvasRenderingContext2D.strokeText", 563 + "api.CanvasRenderingContext2D.textAlign", 564 + "api.CanvasRenderingContext2D.textBaseline", 565 + "api.CanvasRenderingContext2D.textRendering", 566 + "api.CanvasRenderingContext2D.transform", 567 + "api.CanvasRenderingContext2D.translate", 568 + "api.CanvasRenderingContext2D.wordSpacing", 569 + "api.HTMLCanvasElement.getContext.2d_context", 570 + "api.ImageData", 571 + "api.ImageData.ImageData", 572 + "api.ImageData.colorSpace", 573 + "api.ImageData.data", 574 + "api.ImageData.height", 575 + "api.ImageData.width", 576 + "api.ImageData.worker_support", 577 + "api.Path2D", 578 + "api.Path2D.Path2D", 579 + "api.Path2D.addPath", 580 + "api.Path2D.arc", 581 + "api.Path2D.arcTo", 582 + "api.Path2D.bezierCurveTo", 583 + "api.Path2D.closePath", 584 + "api.Path2D.ellipse", 585 + "api.Path2D.lineTo", 586 + "api.Path2D.moveTo", 587 + "api.Path2D.quadraticCurveTo", 588 + "api.Path2D.rect", 589 + "api.Path2D.roundRect", 590 + "api.TextMetrics", 591 + "api.TextMetrics.actualBoundingBoxAscent", 592 + "api.TextMetrics.actualBoundingBoxDescent", 593 + "api.TextMetrics.actualBoundingBoxLeft", 594 + "api.TextMetrics.actualBoundingBoxRight", 595 + "api.TextMetrics.alphabeticBaseline", 596 + "api.TextMetrics.emHeightAscent", 597 + "api.TextMetrics.emHeightDescent", 598 + "api.TextMetrics.fontBoundingBoxAscent", 599 + "api.TextMetrics.fontBoundingBoxDescent", 600 + "api.TextMetrics.hangingBaseline", 601 + "api.TextMetrics.ideographicBaseline", 602 + "api.TextMetrics.width" 603 + ], 604 + "firefox_usage": null, 605 + "firefox_observable": null 606 + }, 607 + { 608 + "name": "canvas-2d-alpha", 609 + "usage": 0.535303776683087, 610 + "source": "blink_features", 611 + "observable": "api.HTMLCanvasElement.getContext.2d_context.options_alpha_parameter", 612 + "observable_type": "blink_api", 613 + "bcd_key_count": 1, 614 + "bcd_keys": [ 615 + "api.HTMLCanvasElement.getContext.2d_context.options_alpha_parameter" 616 + ], 617 + "firefox_usage": null, 618 + "firefox_observable": null 619 + }, 620 + { 621 + "name": "offscreen-canvas", 622 + "usage": 0.535303776683087, 623 + "source": "blink_features", 624 + "observable": "api.HTMLCanvasElement.transferControlToOffscreen", 625 + "observable_type": "blink_api", 626 + "bcd_key_count": 80, 627 + "bcd_keys": [ 628 + "api.HTMLCanvasElement.transferControlToOffscreen", 629 + "api.OffscreenCanvas", 630 + "api.OffscreenCanvas.OffscreenCanvas", 631 + "api.OffscreenCanvas.convertToBlob", 632 + "api.OffscreenCanvas.convertToBlob.option_type_parameter_webp", 633 + "api.OffscreenCanvas.getContext", 634 + "api.OffscreenCanvas.getContext.2d_context", 635 + "api.OffscreenCanvas.getContext.bitmaprenderer_context", 636 + "api.OffscreenCanvas.getContext.webgl2_context", 637 + "api.OffscreenCanvas.getContext.webgl_context", 638 + "api.OffscreenCanvas.height", 639 + "api.OffscreenCanvas.transferToImageBitmap", 640 + "api.OffscreenCanvas.width", 641 + "api.OffscreenCanvasRenderingContext2D", 642 + "api.OffscreenCanvasRenderingContext2D.arc", 643 + "api.OffscreenCanvasRenderingContext2D.arcTo", 644 + "api.OffscreenCanvasRenderingContext2D.beginPath", 645 + "api.OffscreenCanvasRenderingContext2D.bezierCurveTo", 646 + "api.OffscreenCanvasRenderingContext2D.canvas", 647 + "api.OffscreenCanvasRenderingContext2D.clearRect", 648 + "api.OffscreenCanvasRenderingContext2D.clip", 649 + "api.OffscreenCanvasRenderingContext2D.closePath", 650 + "api.OffscreenCanvasRenderingContext2D.createImageData", 651 + "api.OffscreenCanvasRenderingContext2D.createLinearGradient", 652 + "api.OffscreenCanvasRenderingContext2D.createPattern", 653 + "api.OffscreenCanvasRenderingContext2D.createRadialGradient", 654 + "api.OffscreenCanvasRenderingContext2D.direction", 655 + "api.OffscreenCanvasRenderingContext2D.drawImage", 656 + "api.OffscreenCanvasRenderingContext2D.ellipse", 657 + "api.OffscreenCanvasRenderingContext2D.fill", 658 + "api.OffscreenCanvasRenderingContext2D.fillRect", 659 + "api.OffscreenCanvasRenderingContext2D.fillStyle", 660 + "api.OffscreenCanvasRenderingContext2D.fillText", 661 + "api.OffscreenCanvasRenderingContext2D.filter", 662 + "api.OffscreenCanvasRenderingContext2D.font", 663 + "api.OffscreenCanvasRenderingContext2D.fontKerning", 664 + "api.OffscreenCanvasRenderingContext2D.fontStretch", 665 + "api.OffscreenCanvasRenderingContext2D.fontVariantCaps", 666 + "api.OffscreenCanvasRenderingContext2D.getImageData", 667 + "api.OffscreenCanvasRenderingContext2D.getLineDash", 668 + "api.OffscreenCanvasRenderingContext2D.getTransform", 669 + "api.OffscreenCanvasRenderingContext2D.globalAlpha", 670 + "api.OffscreenCanvasRenderingContext2D.globalCompositeOperation", 671 + "api.OffscreenCanvasRenderingContext2D.imageSmoothingEnabled", 672 + "api.OffscreenCanvasRenderingContext2D.imageSmoothingQuality", 673 + "api.OffscreenCanvasRenderingContext2D.isPointInPath", 674 + "api.OffscreenCanvasRenderingContext2D.isPointInStroke", 675 + "api.OffscreenCanvasRenderingContext2D.letterSpacing", 676 + "api.OffscreenCanvasRenderingContext2D.lineCap", 677 + "api.OffscreenCanvasRenderingContext2D.lineDashOffset", 678 + "api.OffscreenCanvasRenderingContext2D.lineJoin", 679 + "api.OffscreenCanvasRenderingContext2D.lineTo", 680 + "api.OffscreenCanvasRenderingContext2D.lineWidth", 681 + "api.OffscreenCanvasRenderingContext2D.measureText", 682 + "api.OffscreenCanvasRenderingContext2D.miterLimit", 683 + "api.OffscreenCanvasRenderingContext2D.moveTo", 684 + "api.OffscreenCanvasRenderingContext2D.putImageData", 685 + "api.OffscreenCanvasRenderingContext2D.quadraticCurveTo", 686 + "api.OffscreenCanvasRenderingContext2D.rect", 687 + "api.OffscreenCanvasRenderingContext2D.resetTransform", 688 + "api.OffscreenCanvasRenderingContext2D.restore", 689 + "api.OffscreenCanvasRenderingContext2D.rotate", 690 + "api.OffscreenCanvasRenderingContext2D.save", 691 + "api.OffscreenCanvasRenderingContext2D.scale", 692 + "api.OffscreenCanvasRenderingContext2D.setLineDash", 693 + "api.OffscreenCanvasRenderingContext2D.setTransform", 694 + "api.OffscreenCanvasRenderingContext2D.shadowBlur", 695 + "api.OffscreenCanvasRenderingContext2D.shadowColor", 696 + "api.OffscreenCanvasRenderingContext2D.shadowOffsetX", 697 + "api.OffscreenCanvasRenderingContext2D.shadowOffsetY", 698 + "api.OffscreenCanvasRenderingContext2D.stroke", 699 + "api.OffscreenCanvasRenderingContext2D.strokeRect", 700 + "api.OffscreenCanvasRenderingContext2D.strokeStyle", 701 + "api.OffscreenCanvasRenderingContext2D.strokeText", 702 + "api.OffscreenCanvasRenderingContext2D.textAlign", 703 + "api.OffscreenCanvasRenderingContext2D.textBaseline", 704 + "api.OffscreenCanvasRenderingContext2D.textRendering", 705 + "api.OffscreenCanvasRenderingContext2D.transform", 706 + "api.OffscreenCanvasRenderingContext2D.translate", 707 + "api.OffscreenCanvasRenderingContext2D.wordSpacing" 708 + ], 709 + "firefox_usage": null, 710 + "firefox_observable": null 711 + }, 712 + { 713 + "name": "canvas-2d-willreadfrequently", 714 + "usage": 0.535303776683087, 715 + "source": "blink_features", 716 + "observable": "api.HTMLCanvasElement.getContext.2d_context.options_willReadFrequently_parameter", 717 + "observable_type": "blink_api", 718 + "bcd_key_count": 1, 719 + "bcd_keys": [ 720 + "api.HTMLCanvasElement.getContext.2d_context.options_willReadFrequently_parameter" 721 + ], 722 + "firefox_usage": null, 723 + "firefox_observable": null 724 + }, 725 + { 726 + "name": "webgpu", 727 + "usage": 0.535303776683087, 728 + "source": "blink_features", 729 + "observable": "api.HTMLCanvasElement.getContext.webgpu_context", 730 + "observable_type": "blink_api", 731 + "bcd_key_count": 300, 732 + "bcd_keys": [ 733 + "api.GPU", 734 + "api.GPU.getPreferredCanvasFormat", 735 + "api.GPU.requestAdapter", 736 + "api.GPU.requestAdapter.discrete_adapter_default_ac", 737 + "api.GPU.wgslLanguageFeatures", 738 + "api.GPUAdapter", 739 + "api.GPUAdapter.features", 740 + "api.GPUAdapter.info", 741 + "api.GPUAdapter.limits", 742 + "api.GPUAdapter.requestDevice", 743 + "api.GPUAdapter.requestDevice.lost_device_on_duplicate", 744 + "api.GPUAdapterInfo", 745 + "api.GPUAdapterInfo.architecture", 746 + "api.GPUAdapterInfo.description", 747 + "api.GPUAdapterInfo.device", 748 + "api.GPUAdapterInfo.subgroupMaxSize", 749 + "api.GPUAdapterInfo.subgroupMinSize", 750 + "api.GPUAdapterInfo.vendor", 751 + "api.GPUBindGroup", 752 + "api.GPUBindGroup.label", 753 + "api.GPUBindGroupLayout", 754 + "api.GPUBindGroupLayout.label", 755 + "api.GPUBuffer", 756 + "api.GPUBuffer.destroy", 757 + "api.GPUBuffer.getMappedRange", 758 + "api.GPUBuffer.label", 759 + "api.GPUBuffer.mapAsync", 760 + "api.GPUBuffer.mapState", 761 + "api.GPUBuffer.size", 762 + "api.GPUBuffer.unmap", 763 + "api.GPUBuffer.usage", 764 + "api.GPUCanvasContext", 765 + "api.GPUCanvasContext.canvas", 766 + "api.GPUCanvasContext.configure", 767 + "api.GPUCanvasContext.configure.toneMapping", 768 + "api.GPUCanvasContext.getConfiguration", 769 + "api.GPUCanvasContext.getCurrentTexture", 770 + "api.GPUCanvasContext.unconfigure", 771 + "api.GPUCommandBuffer", 772 + "api.GPUCommandBuffer.label", 773 + "api.GPUCommandEncoder", 774 + "api.GPUCommandEncoder.beginComputePass", 775 + "api.GPUCommandEncoder.beginComputePass.timestampWrites", 776 + "api.GPUCommandEncoder.beginRenderPass", 777 + "api.GPUCommandEncoder.beginRenderPass.depthSlice_option", 778 + "api.GPUCommandEncoder.beginRenderPass.separate_depth_stencil_read-only", 779 + "api.GPUCommandEncoder.beginRenderPass.timestampWrites", 780 + "api.GPUCommandEncoder.clearBuffer", 781 + "api.GPUCommandEncoder.copyBufferToBuffer", 782 + "api.GPUCommandEncoder.copyBufferToTexture", 783 + "api.GPUCommandEncoder.copyTextureToBuffer", 784 + "api.GPUCommandEncoder.copyTextureToTexture", 785 + "api.GPUCommandEncoder.finish", 786 + "api.GPUCommandEncoder.insertDebugMarker", 787 + "api.GPUCommandEncoder.label", 788 + "api.GPUCommandEncoder.popDebugGroup", 789 + "api.GPUCommandEncoder.pushDebugGroup", 790 + "api.GPUCommandEncoder.resolveQuerySet", 791 + "api.GPUCompilationInfo", 792 + "api.GPUCompilationInfo.messages", 793 + "api.GPUCompilationMessage", 794 + "api.GPUCompilationMessage.length", 795 + "api.GPUCompilationMessage.lineNum", 796 + "api.GPUCompilationMessage.linePos", 797 + "api.GPUCompilationMessage.message", 798 + "api.GPUCompilationMessage.offset", 799 + "api.GPUCompilationMessage.type", 800 + "api.GPUComputePassEncoder", 801 + "api.GPUComputePassEncoder.dispatchWorkgroups", 802 + "api.GPUComputePassEncoder.dispatchWorkgroupsIndirect", 803 + "api.GPUComputePassEncoder.end", 804 + "api.GPUComputePassEncoder.insertDebugMarker", 805 + "api.GPUComputePassEncoder.label", 806 + "api.GPUComputePassEncoder.popDebugGroup", 807 + "api.GPUComputePassEncoder.pushDebugGroup", 808 + "api.GPUComputePassEncoder.setBindGroup", 809 + "api.GPUComputePassEncoder.setBindGroup.unset_bind_group", 810 + "api.GPUComputePassEncoder.setPipeline", 811 + "api.GPUComputePipeline", 812 + "api.GPUComputePipeline.getBindGroupLayout", 813 + "api.GPUComputePipeline.label", 814 + "api.GPUDevice", 815 + "api.GPUDevice.adapterInfo", 816 + "api.GPUDevice.createBindGroup", 817 + "api.GPUDevice.createBindGroupLayout", 818 + "api.GPUDevice.createBindGroupLayout.storageTexture_access_read-write_read-only", 819 + "api.GPUDevice.createBindGroupLayout.texture_rgb10a2uint", 820 + "api.GPUDevice.createBuffer", 821 + "api.GPUDevice.createCommandEncoder", 822 + "api.GPUDevice.createComputePipeline", 823 + "api.GPUDevice.createComputePipeline.optional_entryPoint", 824 + "api.GPUDevice.createComputePipelineAsync", 825 + "api.GPUDevice.createComputePipelineAsync.optional_entryPoint", 826 + "api.GPUDevice.createPipelineLayout", 827 + "api.GPUDevice.createQuerySet", 828 + "api.GPUDevice.createQuerySet.timestamp", 829 + "api.GPUDevice.createRenderBundleEncoder", 830 + "api.GPUDevice.createRenderPipeline", 831 + "api.GPUDevice.createRenderPipeline.dual-source-blending", 832 + "api.GPUDevice.createRenderPipeline.optional_depthcompare_depthwriteenabled", 833 + "api.GPUDevice.createRenderPipeline.optional_entryPoint", 834 + "api.GPUDevice.createRenderPipeline.texture_rgb10a2uint", 835 + "api.GPUDevice.createRenderPipeline.validates_depth_bias_for_line_and_point_topologies", 836 + "api.GPUDevice.createRenderPipeline.vertex_unorm10-10-10-2", 837 + "api.GPUDevice.createRenderPipelineAsync", 838 + "api.GPUDevice.createRenderPipelineAsync.dual-source-blending", 839 + "api.GPUDevice.createRenderPipelineAsync.optional_depthcompare_depthwriteenabled", 840 + "api.GPUDevice.createRenderPipelineAsync.optional_entryPoint", 841 + "api.GPUDevice.createRenderPipelineAsync.texture_rgb10a2uint", 842 + "api.GPUDevice.createRenderPipelineAsync.validates_depth_bias_for_line_and_point_topologies", 843 + "api.GPUDevice.createRenderPipelineAsync.vertex_unorm10-10-10-2", 844 + "api.GPUDevice.createSampler", 845 + "api.GPUDevice.createShaderModule", 846 + "api.GPUDevice.createTexture", 847 + "api.GPUDevice.createTexture.texture_rgb10a2uint", 848 + "api.GPUDevice.destroy", 849 + "api.GPUDevice.features", 850 + "api.GPUDevice.importExternalTexture", 851 + "api.GPUDevice.importExternalTexture.color_space_display-p3", 852 + "api.GPUDevice.importExternalTexture.videoframe_source", 853 + "api.GPUDevice.label", 854 + "api.GPUDevice.limits", 855 + "api.GPUDevice.lost", 856 + "api.GPUDevice.popErrorScope", 857 + "api.GPUDevice.pushErrorScope", 858 + "api.GPUDevice.queue", 859 + "api.GPUDevice.uncapturederror_event", 860 + "api.GPUDeviceLostInfo", 861 + "api.GPUDeviceLostInfo.message", 862 + "api.GPUDeviceLostInfo.reason", 863 + "api.GPUError", 864 + "api.GPUError.message", 865 + "api.GPUExternalTexture", 866 + "api.GPUExternalTexture.label", 867 + "api.GPUInternalError", 868 + "api.GPUInternalError.GPUInternalError", 869 + "api.GPUOutOfMemoryError", 870 + "api.GPUOutOfMemoryError.GPUOutOfMemoryError", 871 + "api.GPUPipelineError", 872 + "api.GPUPipelineError.GPUPipelineError", 873 + "api.GPUPipelineError.GPUPipelineError.message_optional", 874 + "api.GPUPipelineError.reason", 875 + "api.GPUPipelineLayout", 876 + "api.GPUPipelineLayout.label", 877 + "api.GPUQuerySet", 878 + "api.GPUQuerySet.count", 879 + "api.GPUQuerySet.destroy", 880 + "api.GPUQuerySet.label", 881 + "api.GPUQuerySet.type", 882 + "api.GPUQuerySet.type.timestamp", 883 + "api.GPUQueue", 884 + "api.GPUQueue.copyExternalImageToTexture", 885 + "api.GPUQueue.copyExternalImageToTexture.htmlimageelement_imagedata_source", 886 + "api.GPUQueue.copyExternalImageToTexture.videoframe_source", 887 + "api.GPUQueue.label", 888 + "api.GPUQueue.onSubmittedWorkDone", 889 + "api.GPUQueue.submit", 890 + "api.GPUQueue.submit.validates_command_buffer_uniqueness", 891 + "api.GPUQueue.writeBuffer", 892 + "api.GPUQueue.writeTexture", 893 + "api.GPURenderBundle", 894 + "api.GPURenderBundle.label", 895 + "api.GPURenderBundleEncoder", 896 + "api.GPURenderBundleEncoder.draw", 897 + "api.GPURenderBundleEncoder.drawIndexed", 898 + "api.GPURenderBundleEncoder.drawIndexedIndirect", 899 + "api.GPURenderBundleEncoder.drawIndirect", 900 + "api.GPURenderBundleEncoder.finish", 901 + "api.GPURenderBundleEncoder.insertDebugMarker", 902 + "api.GPURenderBundleEncoder.label", 903 + "api.GPURenderBundleEncoder.popDebugGroup", 904 + "api.GPURenderBundleEncoder.pushDebugGroup", 905 + "api.GPURenderBundleEncoder.setBindGroup", 906 + "api.GPURenderBundleEncoder.setBindGroup.unset_bind_group", 907 + "api.GPURenderBundleEncoder.setIndexBuffer", 908 + "api.GPURenderBundleEncoder.setPipeline", 909 + "api.GPURenderBundleEncoder.setVertexBuffer", 910 + "api.GPURenderBundleEncoder.setVertexBuffer.unset_vertex_buffer", 911 + "api.GPURenderPassEncoder", 912 + "api.GPURenderPassEncoder.beginOcclusionQuery", 913 + "api.GPURenderPassEncoder.draw", 914 + "api.GPURenderPassEncoder.drawIndexed", 915 + "api.GPURenderPassEncoder.drawIndexedIndirect", 916 + "api.GPURenderPassEncoder.drawIndirect", 917 + "api.GPURenderPassEncoder.end", 918 + "api.GPURenderPassEncoder.endOcclusionQuery", 919 + "api.GPURenderPassEncoder.executeBundles", 920 + "api.GPURenderPassEncoder.insertDebugMarker", 921 + "api.GPURenderPassEncoder.label", 922 + "api.GPURenderPassEncoder.popDebugGroup", 923 + "api.GPURenderPassEncoder.pushDebugGroup", 924 + "api.GPURenderPassEncoder.setBindGroup", 925 + "api.GPURenderPassEncoder.setBindGroup.unset_bind_group", 926 + "api.GPURenderPassEncoder.setBlendConstant", 927 + "api.GPURenderPassEncoder.setIndexBuffer", 928 + "api.GPURenderPassEncoder.setPipeline", 929 + "api.GPURenderPassEncoder.setScissorRect", 930 + "api.GPURenderPassEncoder.setStencilReference", 931 + "api.GPURenderPassEncoder.setVertexBuffer", 932 + "api.GPURenderPassEncoder.setVertexBuffer.unset_vertex_buffer", 933 + "api.GPURenderPassEncoder.setViewport", 934 + "api.GPURenderPipeline", 935 + "api.GPURenderPipeline.getBindGroupLayout", 936 + "api.GPURenderPipeline.label", 937 + "api.GPUSampler", 938 + "api.GPUSampler.label", 939 + "api.GPUShaderModule", 940 + "api.GPUShaderModule.getCompilationInfo", 941 + "api.GPUShaderModule.label", 942 + "api.GPUSupportedFeatures", 943 + "api.GPUSupportedFeatures.@@iterator", 944 + "api.GPUSupportedFeatures.entries", 945 + "api.GPUSupportedFeatures.feature_bgra8unorm-storage", 946 + "api.GPUSupportedFeatures.feature_clip-distances", 947 + "api.GPUSupportedFeatures.feature_depth-clip-control", 948 + "api.GPUSupportedFeatures.feature_depth32float-stencil8", 949 + "api.GPUSupportedFeatures.feature_dual-source-blending", 950 + "api.GPUSupportedFeatures.feature_float32-blendable", 951 + "api.GPUSupportedFeatures.feature_float32-filterable", 952 + "api.GPUSupportedFeatures.feature_indirect-first-instance", 953 + "api.GPUSupportedFeatures.feature_rg11b10ufloat-renderable", 954 + "api.GPUSupportedFeatures.feature_shader-f16", 955 + "api.GPUSupportedFeatures.feature_texture-compression-astc", 956 + "api.GPUSupportedFeatures.feature_texture-compression-bc", 957 + "api.GPUSupportedFeatures.feature_texture-compression-etc2", 958 + "api.GPUSupportedFeatures.feature_timestamp-query", 959 + "api.GPUSupportedFeatures.forEach", 960 + "api.GPUSupportedFeatures.has", 961 + "api.GPUSupportedFeatures.keys", 962 + "api.GPUSupportedFeatures.size", 963 + "api.GPUSupportedFeatures.values", 964 + "api.GPUSupportedLimits", 965 + "api.GPUSupportedLimits.maxBindGroups", 966 + "api.GPUSupportedLimits.maxBindGroupsPlusVertexBuffers", 967 + "api.GPUSupportedLimits.maxBindingsPerBindGroup", 968 + "api.GPUSupportedLimits.maxBufferSize", 969 + "api.GPUSupportedLimits.maxColorAttachmentBytesPerSample", 970 + "api.GPUSupportedLimits.maxColorAttachments", 971 + "api.GPUSupportedLimits.maxComputeInvocationsPerWorkgroup", 972 + "api.GPUSupportedLimits.maxComputeWorkgroupSizeX", 973 + "api.GPUSupportedLimits.maxComputeWorkgroupSizeY", 974 + "api.GPUSupportedLimits.maxComputeWorkgroupSizeZ", 975 + "api.GPUSupportedLimits.maxComputeWorkgroupStorageSize", 976 + "api.GPUSupportedLimits.maxComputeWorkgroupsPerDimension", 977 + "api.GPUSupportedLimits.maxDynamicStorageBuffersPerPipelineLayout", 978 + "api.GPUSupportedLimits.maxDynamicUniformBuffersPerPipelineLayout", 979 + "api.GPUSupportedLimits.maxInterStageShaderVariables", 980 + "api.GPUSupportedLimits.maxSampledTexturesPerShaderStage", 981 + "api.GPUSupportedLimits.maxSamplersPerShaderStage", 982 + "api.GPUSupportedLimits.maxStorageBufferBindingSize", 983 + "api.GPUSupportedLimits.maxStorageBuffersPerShaderStage", 984 + "api.GPUSupportedLimits.maxStorageTexturesPerShaderStage", 985 + "api.GPUSupportedLimits.maxTextureArrayLayers", 986 + "api.GPUSupportedLimits.maxTextureDimension1D", 987 + "api.GPUSupportedLimits.maxTextureDimension2D", 988 + "api.GPUSupportedLimits.maxTextureDimension3D", 989 + "api.GPUSupportedLimits.maxUniformBufferBindingSize", 990 + "api.GPUSupportedLimits.maxUniformBuffersPerShaderStage", 991 + "api.GPUSupportedLimits.maxVertexAttributes", 992 + "api.GPUSupportedLimits.maxVertexBufferArrayStride", 993 + "api.GPUSupportedLimits.maxVertexBuffers", 994 + "api.GPUSupportedLimits.minStorageBufferOffsetAlignment", 995 + "api.GPUSupportedLimits.minUniformBufferOffsetAlignment", 996 + "api.GPUTexture", 997 + "api.GPUTexture.createView", 998 + "api.GPUTexture.createView.texture_rgb10a2uint", 999 + "api.GPUTexture.createView.usage", 1000 + "api.GPUTexture.depthOrArrayLayers", 1001 + "api.GPUTexture.destroy", 1002 + "api.GPUTexture.dimension", 1003 + "api.GPUTexture.format", 1004 + "api.GPUTexture.format.texture_rgb10a2uint", 1005 + "api.GPUTexture.height", 1006 + "api.GPUTexture.label", 1007 + "api.GPUTexture.mipLevelCount", 1008 + "api.GPUTexture.sampleCount", 1009 + "api.GPUTexture.usage", 1010 + "api.GPUTexture.width", 1011 + "api.GPUTextureView", 1012 + "api.GPUTextureView.label", 1013 + "api.GPUUncapturedErrorEvent", 1014 + "api.GPUUncapturedErrorEvent.GPUUncapturedErrorEvent", 1015 + "api.GPUUncapturedErrorEvent.error", 1016 + "api.GPUValidationError", 1017 + "api.GPUValidationError.GPUValidationError", 1018 + "api.HTMLCanvasElement.getContext.webgpu_context", 1019 + "api.Navigator.gpu", 1020 + "api.OffscreenCanvas.getContext.webgpu_context", 1021 + "api.WGSLLanguageFeatures", 1022 + "api.WGSLLanguageFeatures.@@iterator", 1023 + "api.WGSLLanguageFeatures.entries", 1024 + "api.WGSLLanguageFeatures.extension_packed_4x8_integer_dot_product", 1025 + "api.WGSLLanguageFeatures.extension_readonly_and_readwrite_storage_textures", 1026 + "api.WGSLLanguageFeatures.extension_unrestricted_pointer_parameters", 1027 + "api.WGSLLanguageFeatures.forEach", 1028 + "api.WGSLLanguageFeatures.has", 1029 + "api.WGSLLanguageFeatures.keys", 1030 + "api.WGSLLanguageFeatures.size", 1031 + "api.WGSLLanguageFeatures.values", 1032 + "api.WorkerNavigator.gpu" 1033 + ], 1034 + "firefox_usage": null, 1035 + "firefox_observable": null 1036 + }, 1037 + { 1038 + "name": "canvas-2d-desynchronized", 1039 + "usage": 0.535303776683087, 1040 + "source": "blink_features", 1041 + "observable": "api.HTMLCanvasElement.getContext.2d_context.options_desynchronized_parameter", 1042 + "observable_type": "blink_api", 1043 + "bcd_key_count": 1, 1044 + "bcd_keys": [ 1045 + "api.HTMLCanvasElement.getContext.2d_context.options_desynchronized_parameter" 1046 + ], 1047 + "firefox_usage": null, 1048 + "firefox_observable": null 1049 + }, 1050 + { 1051 + "name": "webgl2-desynchronized", 1052 + "usage": 0.535303776683087, 1053 + "source": "blink_features", 1054 + "observable": "api.HTMLCanvasElement.getContext.webgl2_context.options_desynchronized_parameter", 1055 + "observable_type": "blink_api", 1056 + "bcd_key_count": 1, 1057 + "bcd_keys": [ 1058 + "api.HTMLCanvasElement.getContext.webgl2_context.options_desynchronized_parameter" 1059 + ], 1060 + "firefox_usage": null, 1061 + "firefox_observable": null 1062 + }, 1063 + { 1064 + "name": "webgl-desynchronized", 1065 + "usage": 0.535303776683087, 1066 + "source": "blink_features", 1067 + "observable": "api.HTMLCanvasElement.getContext.webgl_context.options_desynchronized_parameter", 1068 + "observable_type": "blink_api", 1069 + "bcd_key_count": 1, 1070 + "bcd_keys": [ 1071 + "api.HTMLCanvasElement.getContext.webgl_context.options_desynchronized_parameter" 1072 + ], 1073 + "firefox_usage": null, 1074 + "firefox_observable": null 1075 + }, 1076 + { 1077 + "name": "canvas-context-lost", 1078 + "usage": 0.535303776683087, 1079 + "source": "blink_features", 1080 + "observable": "api.HTMLCanvasElement.contextlost_event", 1081 + "observable_type": "blink_api", 1082 + "bcd_key_count": 6, 1083 + "bcd_keys": [ 1084 + "api.CanvasRenderingContext2D.isContextLost", 1085 + "api.HTMLCanvasElement.contextlost_event", 1086 + "api.HTMLCanvasElement.contextrestored_event", 1087 + "api.OffscreenCanvas.contextlost_event", 1088 + "api.OffscreenCanvas.contextrestored_event", 1089 + "api.OffscreenCanvasRenderingContext2D.isContextLost" 1090 + ], 1091 + "firefox_usage": null, 1092 + "firefox_observable": null 1093 + }, 1094 + { 1095 + "name": "canvas-2d-color-management", 1096 + "usage": 0.535303776683087, 1097 + "source": "blink_features", 1098 + "observable": "api.HTMLCanvasElement.getContext.2d_context.options_colorSpace_parameter", 1099 + "observable_type": "blink_api", 1100 + "bcd_key_count": 1, 1101 + "bcd_keys": [ 1102 + "api.HTMLCanvasElement.getContext.2d_context.options_colorSpace_parameter" 1103 + ], 1104 + "firefox_usage": null, 1105 + "firefox_observable": null 1106 + }, 1107 + { 1108 + "name": "focus-visible", 1109 + "usage": 0.5063683718253383, 1110 + "source": "custom_metrics", 1111 + "observable": "focus-visible", 1112 + "observable_type": "css_selector", 1113 + "bcd_key_count": 1, 1114 + "bcd_keys": [ 1115 + "css.selectors.focus-visible" 1116 + ], 1117 + "firefox_usage": null, 1118 + "firefox_observable": null 1119 + }, 1120 + { 1121 + "name": "remote-playback", 1122 + "usage": 0.4729064039408867, 1123 + "source": "blink_features", 1124 + "observable": "api.HTMLMediaElement.disableRemotePlayback", 1125 + "observable_type": "blink_api", 1126 + "bcd_key_count": 12, 1127 + "bcd_keys": [ 1128 + "api.HTMLMediaElement.disableRemotePlayback", 1129 + "api.HTMLMediaElement.remote", 1130 + "api.RemotePlayback", 1131 + "api.RemotePlayback.cancelWatchAvailability", 1132 + "api.RemotePlayback.connect_event", 1133 + "api.RemotePlayback.connecting_event", 1134 + "api.RemotePlayback.disconnect_event", 1135 + "api.RemotePlayback.prompt", 1136 + "api.RemotePlayback.state", 1137 + "api.RemotePlayback.watchAvailability", 1138 + "html.elements.audio.disableremoteplayback", 1139 + "html.elements.video.disableremoteplayback" 1140 + ], 1141 + "firefox_usage": 0.005795596476471643, 1142 + "firefox_observable": "api.RemotePlayback" 1143 + }, 1144 + { 1145 + "name": "preserves-pitch", 1146 + "usage": 0.4729064039408867, 1147 + "source": "blink_features", 1148 + "observable": "api.HTMLMediaElement.preservesPitch", 1149 + "observable_type": "blink_api", 1150 + "bcd_key_count": 1, 1151 + "bcd_keys": [ 1152 + "api.HTMLMediaElement.preservesPitch" 1153 + ], 1154 + "firefox_usage": null, 1155 + "firefox_observable": null 1156 + }, 1157 + { 1158 + "name": "aborting", 1159 + "usage": 0.47132189, 1160 + "source": "chrome_popularity", 1161 + "observable": null, 1162 + "observable_type": "blink_api", 1163 + "bcd_key_count": 13, 1164 + "bcd_keys": [ 1165 + "api.AbortController", 1166 + "api.AbortController.AbortController", 1167 + "api.AbortController.abort", 1168 + "api.AbortController.abort.reason_parameter", 1169 + "api.AbortController.signal", 1170 + "api.AbortSignal", 1171 + "api.AbortSignal.abort_event", 1172 + "api.AbortSignal.abort_static", 1173 + "api.AbortSignal.abort_static.reason_parameter", 1174 + "api.AbortSignal.aborted", 1175 + "api.AbortSignal.reason", 1176 + "api.AbortSignal.throwIfAborted", 1177 + "api.AbortSignal.timeout_static" 1178 + ], 1179 + "firefox_usage": null, 1180 + "firefox_observable": null 1181 + }, 1182 + { 1183 + "name": "clip-path", 1184 + "usage": 0.458419918523108, 1185 + "source": "custom_metrics", 1186 + "observable": "clip-path", 1187 + "observable_type": "css_property", 1188 + "bcd_key_count": 12, 1189 + "bcd_keys": [ 1190 + "api.SVGClipPathElement", 1191 + "api.SVGClipPathElement.clipPathUnits", 1192 + "api.SVGClipPathElement.transform", 1193 + "css.properties.clip-path", 1194 + "css.properties.clip-path.basic_shape", 1195 + "css.properties.clip-path.html_elements", 1196 + "css.properties.clip-path.path", 1197 + "css.properties.clip-path.svg_elements", 1198 + "svg.elements.clipPath", 1199 + "svg.elements.clipPath.clipPathUnits", 1200 + "svg.elements.clipPath.systemLanguage", 1201 + "svg.global_attributes.clip-path" 1202 + ], 1203 + "firefox_usage": 0.42532172060029144, 1204 + "firefox_observable": "css.properties.clip-path" 1205 + }, 1206 + { 1207 + "name": "requestidlecallback", 1208 + "usage": 0.4484389, 1209 + "source": "chrome_popularity", 1210 + "observable": null, 1211 + "observable_type": "blink_api", 1212 + "bcd_key_count": 5, 1213 + "bcd_keys": [ 1214 + "api.IdleDeadline", 1215 + "api.IdleDeadline.didTimeout", 1216 + "api.IdleDeadline.timeRemaining", 1217 + "api.Window.cancelIdleCallback", 1218 + "api.Window.requestIdleCallback" 1219 + ], 1220 + "firefox_usage": null, 1221 + "firefox_observable": null 1222 + }, 1223 + { 1224 + "name": "background-clip-text", 1225 + "usage": 0.43783789, 1226 + "source": "chrome_popularity", 1227 + "observable": null, 1228 + "observable_type": "css_property", 1229 + "bcd_key_count": 1, 1230 + "bcd_keys": [ 1231 + "css.properties.background-clip.text" 1232 + ], 1233 + "firefox_usage": null, 1234 + "firefox_observable": null 1235 + }, 1236 + { 1237 + "name": "logical-properties", 1238 + "usage": 0.43079710809405064, 1239 + "source": "custom_metrics", 1240 + "observable": "inset", 1241 + "observable_type": "css_property", 1242 + "bcd_key_count": 86, 1243 + "bcd_keys": [ 1244 + "css.properties.block-size", 1245 + "css.properties.block-size.fit-content", 1246 + "css.properties.block-size.max-content", 1247 + "css.properties.block-size.min-content", 1248 + "css.properties.border-block", 1249 + "css.properties.border-block-color", 1250 + "css.properties.border-block-end", 1251 + "css.properties.border-block-end-color", 1252 + "css.properties.border-block-end-style", 1253 + "css.properties.border-block-end-width", 1254 + "css.properties.border-block-start", 1255 + "css.properties.border-block-start-color", 1256 + "css.properties.border-block-start-style", 1257 + "css.properties.border-block-start-width", 1258 + "css.properties.border-block-style", 1259 + "css.properties.border-block-width", 1260 + "css.properties.border-end-end-radius", 1261 + "css.properties.border-end-start-radius", 1262 + "css.properties.border-inline", 1263 + "css.properties.border-inline-color", 1264 + "css.properties.border-inline-end", 1265 + "css.properties.border-inline-end-color", 1266 + "css.properties.border-inline-end-style", 1267 + "css.properties.border-inline-end-width", 1268 + "css.properties.border-inline-start", 1269 + "css.properties.border-inline-start-color", 1270 + "css.properties.border-inline-start-style", 1271 + "css.properties.border-inline-start-width", 1272 + "css.properties.border-inline-style", 1273 + "css.properties.border-inline-width", 1274 + "css.properties.border-start-end-radius", 1275 + "css.properties.border-start-start-radius", 1276 + "css.properties.clear.inline-end", 1277 + "css.properties.clear.inline-start", 1278 + "css.properties.float.inline-end", 1279 + "css.properties.float.inline-start", 1280 + "css.properties.inline-size", 1281 + "css.properties.inline-size.fit-content", 1282 + "css.properties.inline-size.max-content", 1283 + "css.properties.inline-size.min-content", 1284 + "css.properties.inset", 1285 + "css.properties.inset-block", 1286 + "css.properties.inset-block-end", 1287 + "css.properties.inset-block-end.auto", 1288 + "css.properties.inset-block-start", 1289 + "css.properties.inset-block-start.auto", 1290 + "css.properties.inset-block.auto", 1291 + "css.properties.inset-inline", 1292 + "css.properties.inset-inline-end", 1293 + "css.properties.inset-inline-end.auto", 1294 + "css.properties.inset-inline-start", 1295 + "css.properties.inset-inline-start.auto", 1296 + "css.properties.inset-inline.auto", 1297 + "css.properties.inset.auto", 1298 + "css.properties.margin-block", 1299 + "css.properties.margin-block-end", 1300 + "css.properties.margin-block-start", 1301 + "css.properties.margin-inline", 1302 + "css.properties.margin-inline-end", 1303 + "css.properties.margin-inline-start", 1304 + "css.properties.max-block-size", 1305 + "css.properties.max-block-size.fit-content", 1306 + "css.properties.max-block-size.max-content", 1307 + "css.properties.max-block-size.min-content", 1308 + "css.properties.max-inline-size", 1309 + "css.properties.max-inline-size.fit-content", 1310 + "css.properties.max-inline-size.max-content", 1311 + "css.properties.max-inline-size.min-content", 1312 + "css.properties.min-block-size", 1313 + "css.properties.min-block-size.fit-content", 1314 + "css.properties.min-block-size.max-content", 1315 + "css.properties.min-block-size.min-content", 1316 + "css.properties.min-inline-size", 1317 + "css.properties.min-inline-size.fit-content", 1318 + "css.properties.min-inline-size.max-content", 1319 + "css.properties.min-inline-size.min-content", 1320 + "css.properties.overflow-block", 1321 + "css.properties.overflow-block.overlay", 1322 + "css.properties.overflow-inline", 1323 + "css.properties.overflow-inline.overlay", 1324 + "css.properties.padding-block", 1325 + "css.properties.padding-block-end", 1326 + "css.properties.padding-block-start", 1327 + "css.properties.padding-inline", 1328 + "css.properties.padding-inline-end", 1329 + "css.properties.padding-inline-start" 1330 + ], 1331 + "firefox_usage": 0.31312940289211894, 1332 + "firefox_observable": "css.properties.inset" 1333 + }, 1334 + { 1335 + "name": "layout-instability", 1336 + "usage": 0.41411571, 1337 + "source": "chrome_popularity", 1338 + "observable": null, 1339 + "observable_type": "blink_api", 1340 + "bcd_key_count": 11, 1341 + "bcd_keys": [ 1342 + "api.LayoutShift", 1343 + "api.LayoutShift.hadRecentInput", 1344 + "api.LayoutShift.lastInputTime", 1345 + "api.LayoutShift.sources", 1346 + "api.LayoutShift.toJSON", 1347 + "api.LayoutShift.value", 1348 + "api.LayoutShiftAttribution", 1349 + "api.LayoutShiftAttribution.currentRect", 1350 + "api.LayoutShiftAttribution.node", 1351 + "api.LayoutShiftAttribution.previousRect", 1352 + "api.LayoutShiftAttribution.toJSON" 1353 + ], 1354 + "firefox_usage": null, 1355 + "firefox_observable": null 1356 + }, 1357 + { 1358 + "name": "nullish-coalescing", 1359 + "usage": 0.40702124, 1360 + "source": "chrome_popularity", 1361 + "observable": null, 1362 + "observable_type": "js_operators", 1363 + "bcd_key_count": 2, 1364 + "bcd_keys": [ 1365 + "javascript.operators.nullish_coalescing", 1366 + "javascript.operators.nullish_coalescing_assignment" 1367 + ], 1368 + "firefox_usage": null, 1369 + "firefox_observable": null 1370 + }, 1371 + { 1372 + "name": "will-change", 1373 + "usage": 0.39817534415545003, 1374 + "source": "custom_metrics", 1375 + "observable": "will-change", 1376 + "observable_type": "css_property", 1377 + "bcd_key_count": 4, 1378 + "bcd_keys": [ 1379 + "css.properties.will-change", 1380 + "css.properties.will-change.auto", 1381 + "css.properties.will-change.contents", 1382 + "css.properties.will-change.scroll-position" 1383 + ], 1384 + "firefox_usage": 0.3273864871503988, 1385 + "firefox_observable": "css.properties.will-change" 1386 + }, 1387 + { 1388 + "name": "scrollbar-width", 1389 + "usage": 0.3914532264142132, 1390 + "source": "custom_metrics", 1391 + "observable": "scrollbar-width", 1392 + "observable_type": "css_property", 1393 + "bcd_key_count": 4, 1394 + "bcd_keys": [ 1395 + "css.properties.scrollbar-width", 1396 + "css.properties.scrollbar-width.auto", 1397 + "css.properties.scrollbar-width.none", 1398 + "css.properties.scrollbar-width.thin" 1399 + ], 1400 + "firefox_usage": 0.4195911256037384, 1401 + "firefox_observable": "css.properties.scrollbar-width" 1402 + }, 1403 + { 1404 + "name": "is", 1405 + "usage": 0.3881473753508862, 1406 + "source": "custom_metrics", 1407 + "observable": "is", 1408 + "observable_type": "css_selector", 1409 + "bcd_key_count": 2, 1410 + "bcd_keys": [ 1411 + "css.selectors.is", 1412 + "css.selectors.is.forgiving_selector_list" 1413 + ], 1414 + "firefox_usage": null, 1415 + "firefox_observable": null 1416 + }, 1417 + { 1418 + "name": "where", 1419 + "usage": 0.3850358860200786, 1420 + "source": "custom_metrics", 1421 + "observable": "where", 1422 + "observable_type": "css_selector", 1423 + "bcd_key_count": 2, 1424 + "bcd_keys": [ 1425 + "css.selectors.where", 1426 + "css.selectors.where.forgiving_selector_list" 1427 + ], 1428 + "firefox_usage": null, 1429 + "firefox_observable": null 1430 + }, 1431 + { 1432 + "name": "zstd", 1433 + "usage": 0.37684414, 1434 + "source": "chrome_popularity", 1435 + "observable": null, 1436 + "observable_type": "http", 1437 + "bcd_key_count": 2, 1438 + "bcd_keys": [ 1439 + "http.headers.Accept-Encoding.zstd", 1440 + "http.headers.Content-Encoding.zstd" 1441 + ], 1442 + "firefox_usage": null, 1443 + "firefox_observable": null 1444 + }, 1445 + { 1446 + "name": "has", 1447 + "usage": 0.3711455449851932, 1448 + "source": "custom_metrics", 1449 + "observable": "has", 1450 + "observable_type": "css_selector", 1451 + "bcd_key_count": 1, 1452 + "bcd_keys": [ 1453 + "css.selectors.has" 1454 + ], 1455 + "firefox_usage": null, 1456 + "firefox_observable": null 1457 + }, 1458 + { 1459 + "name": "referrer-policy", 1460 + "usage": 0.34388238, 1461 + "source": "chrome_popularity", 1462 + "observable": null, 1463 + "observable_type": "blink_api", 1464 + "bcd_key_count": 56, 1465 + "bcd_keys": [ 1466 + "api.HTMLAnchorElement.referrerPolicy", 1467 + "api.HTMLAnchorElement.referrerPolicy.no-referrer-when-downgrade", 1468 + "api.HTMLAnchorElement.referrerPolicy.origin-when-cross-origin", 1469 + "api.HTMLAnchorElement.referrerPolicy.unsafe-url", 1470 + "api.HTMLAreaElement.referrerPolicy", 1471 + "api.HTMLAreaElement.referrerPolicy.no-referrer-when-downgrade", 1472 + "api.HTMLAreaElement.referrerPolicy.origin-when-cross-origin", 1473 + "api.HTMLAreaElement.referrerPolicy.unsafe-url", 1474 + "api.HTMLIFrameElement.referrerPolicy", 1475 + "api.HTMLIFrameElement.referrerPolicy.no-referrer-when-downgrade", 1476 + "api.HTMLIFrameElement.referrerPolicy.origin-when-cross-origin", 1477 + "api.HTMLIFrameElement.referrerPolicy.unsafe-url", 1478 + "api.HTMLImageElement.referrerPolicy", 1479 + "api.HTMLImageElement.referrerPolicy.no-referrer-when-downgrade", 1480 + "api.HTMLImageElement.referrerPolicy.origin-when-cross-origin", 1481 + "api.HTMLImageElement.referrerPolicy.unsafe-url", 1482 + "api.HTMLLinkElement.referrerPolicy", 1483 + "api.HTMLLinkElement.referrerPolicy.no-referrer-when-downgrade", 1484 + "api.HTMLLinkElement.referrerPolicy.origin-when-cross-origin", 1485 + "api.HTMLLinkElement.referrerPolicy.unsafe-url", 1486 + "api.HTMLScriptElement.referrerPolicy", 1487 + "api.HTMLScriptElement.referrerPolicy.no-referrer-when-downgrade", 1488 + "api.HTMLScriptElement.referrerPolicy.origin-when-cross-origin", 1489 + "api.HTMLScriptElement.referrerPolicy.unsafe-url", 1490 + "html.elements.a.referrerpolicy", 1491 + "html.elements.a.referrerpolicy.no-referrer-when-downgrade", 1492 + "html.elements.a.referrerpolicy.origin-when-cross-origin", 1493 + "html.elements.a.referrerpolicy.unsafe-url", 1494 + "html.elements.area.referrerpolicy", 1495 + "html.elements.area.referrerpolicy.no-referrer-when-downgrade", 1496 + "html.elements.area.referrerpolicy.origin-when-cross-origin", 1497 + "html.elements.area.referrerpolicy.unsafe-url", 1498 + "html.elements.iframe.referrerpolicy", 1499 + "html.elements.iframe.referrerpolicy.no-referrer-when-downgrade", 1500 + "html.elements.iframe.referrerpolicy.origin-when-cross-origin", 1501 + "html.elements.iframe.referrerpolicy.unsafe-url", 1502 + "html.elements.img.referrerpolicy", 1503 + "html.elements.img.referrerpolicy.no-referrer-when-downgrade", 1504 + "html.elements.img.referrerpolicy.origin-when-cross-origin", 1505 + "html.elements.img.referrerpolicy.unsafe-url", 1506 + "html.elements.link.referrerpolicy", 1507 + "html.elements.link.referrerpolicy.no-referrer-when-downgrade", 1508 + "html.elements.link.referrerpolicy.origin-when-cross-origin", 1509 + "html.elements.link.referrerpolicy.unsafe-url", 1510 + "html.elements.script.referrerpolicy", 1511 + "html.elements.script.referrerpolicy.no-referrer-when-downgrade", 1512 + "html.elements.script.referrerpolicy.origin-when-cross-origin", 1513 + "html.elements.script.referrerpolicy.unsafe-url", 1514 + "http.headers.Referrer-Policy", 1515 + "http.headers.Referrer-Policy.default_strict-origin-when-cross-origin", 1516 + "http.headers.Referrer-Policy.no-referrer-when-downgrade", 1517 + "http.headers.Referrer-Policy.origin-when-cross-origin", 1518 + "http.headers.Referrer-Policy.same-origin", 1519 + "http.headers.Referrer-Policy.strict-origin", 1520 + "http.headers.Referrer-Policy.strict-origin-when-cross-origin", 1521 + "http.headers.Referrer-Policy.unsafe-url" 1522 + ], 1523 + "firefox_usage": null, 1524 + "firefox_observable": null 1525 + }, 1526 + { 1527 + "name": "fetch-priority", 1528 + "usage": 0.34052556, 1529 + "source": "chrome_popularity", 1530 + "observable": null, 1531 + "observable_type": "blink_api", 1532 + "bcd_key_count": 12, 1533 + "bcd_keys": [ 1534 + "api.HTMLImageElement.fetchPriority", 1535 + "api.HTMLLinkElement.fetchPriority", 1536 + "api.HTMLScriptElement.fetchPriority", 1537 + "api.Request.Request.init_priority_parameter", 1538 + "api.fetch.init_priority_parameter", 1539 + "html.elements.img.fetchpriority", 1540 + "html.elements.link.fetchpriority", 1541 + "html.elements.script.fetchpriority", 1542 + "http.headers.Link.fetchpriority", 1543 + "svg.elements.feImage.fetchpriority", 1544 + "svg.elements.image.fetchpriority", 1545 + "svg.elements.script.fetchpriority" 1546 + ], 1547 + "firefox_usage": null, 1548 + "firefox_observable": null 1549 + }, 1550 + { 1551 + "name": "template", 1552 + "usage": 0.33825944170771755, 1553 + "source": "blink_features", 1554 + "observable": "api.HTMLTemplateElement", 1555 + "observable_type": "blink_api", 1556 + "bcd_key_count": 3, 1557 + "bcd_keys": [ 1558 + "api.HTMLTemplateElement", 1559 + "api.HTMLTemplateElement.content", 1560 + "html.elements.template" 1561 + ], 1562 + "firefox_usage": null, 1563 + "firefox_observable": null 1564 + }, 1565 + { 1566 + "name": "declarative-shadow-dom", 1567 + "usage": 0.33825944170771755, 1568 + "source": "blink_features", 1569 + "observable": "api.HTMLTemplateElement.shadowRootClonable", 1570 + "observable_type": "blink_api", 1571 + "bcd_key_count": 8, 1572 + "bcd_keys": [ 1573 + "api.HTMLTemplateElement.shadowRootClonable", 1574 + "api.HTMLTemplateElement.shadowRootDelegatesFocus", 1575 + "api.HTMLTemplateElement.shadowRootMode", 1576 + "api.HTMLTemplateElement.shadowRootSerializable", 1577 + "html.elements.template.shadowrootclonable", 1578 + "html.elements.template.shadowrootdelegatesfocus", 1579 + "html.elements.template.shadowrootmode", 1580 + "html.elements.template.shadowrootserializable" 1581 + ], 1582 + "firefox_usage": null, 1583 + "firefox_observable": null 1584 + }, 1585 + { 1586 + "name": "masks", 1587 + "usage": 0.3208719354703923, 1588 + "source": "custom_metrics", 1589 + "observable": "mask-image", 1590 + "observable_type": "css_property", 1591 + "bcd_key_count": 28, 1592 + "bcd_keys": [ 1593 + "css.properties.mask", 1594 + "css.properties.mask-clip", 1595 + "css.properties.mask-clip.border", 1596 + "css.properties.mask-clip.content", 1597 + "css.properties.mask-clip.padding", 1598 + "css.properties.mask-clip.text", 1599 + "css.properties.mask-composite", 1600 + "css.properties.mask-composite.add", 1601 + "css.properties.mask-composite.exclude", 1602 + "css.properties.mask-composite.intersect", 1603 + "css.properties.mask-composite.subtract", 1604 + "css.properties.mask-image", 1605 + "css.properties.mask-image.multiple_mask_images", 1606 + "css.properties.mask-image.svg_masks", 1607 + "css.properties.mask-mode", 1608 + "css.properties.mask-mode.alpha", 1609 + "css.properties.mask-mode.luminance", 1610 + "css.properties.mask-mode.match-source", 1611 + "css.properties.mask-origin", 1612 + "css.properties.mask-origin.border", 1613 + "css.properties.mask-origin.content", 1614 + "css.properties.mask-origin.fill-box", 1615 + "css.properties.mask-origin.padding", 1616 + "css.properties.mask-origin.stroke-box", 1617 + "css.properties.mask-origin.view-box", 1618 + "css.properties.mask-position", 1619 + "css.properties.mask-repeat", 1620 + "css.properties.mask-size" 1621 + ], 1622 + "firefox_usage": 0.20986158177318934, 1623 + "firefox_observable": "css.properties.mask-image" 1624 + }, 1625 + { 1626 + "name": "string-replaceall", 1627 + "usage": 0.31667797, 1628 + "source": "chrome_popularity", 1629 + "observable": null, 1630 + "observable_type": "js_builtin", 1631 + "bcd_key_count": 1, 1632 + "bcd_keys": [ 1633 + "javascript.builtins.String.replaceAll" 1634 + ], 1635 + "firefox_usage": null, 1636 + "firefox_observable": null 1637 + }, 1638 + { 1639 + "name": "backdrop-filter", 1640 + "usage": 0.30837606423919955, 1641 + "source": "custom_metrics", 1642 + "observable": "backdrop-filter", 1643 + "observable_type": "css_property", 1644 + "bcd_key_count": 1, 1645 + "bcd_keys": [ 1646 + "css.properties.backdrop-filter" 1647 + ], 1648 + "firefox_usage": 0.3011676122707288, 1649 + "firefox_observable": "css.properties.backdrop-filter" 1650 + }, 1651 + { 1652 + "name": "js-modules", 1653 + "usage": 0.30317967, 1654 + "source": "chrome_popularity", 1655 + "observable": null, 1656 + "observable_type": "js_operators", 1657 + "bcd_key_count": 15, 1658 + "bcd_keys": [ 1659 + "api.Worklet.ecmascript_modules", 1660 + "html.elements.script.nomodule", 1661 + "html.elements.script.type.module", 1662 + "javascript.operators.import", 1663 + "javascript.operators.import_meta", 1664 + "javascript.operators.import_meta.resolve", 1665 + "javascript.statements.export", 1666 + "javascript.statements.export.arbitrary_module_namespace_identifier_names", 1667 + "javascript.statements.export.default", 1668 + "javascript.statements.export.namespace", 1669 + "javascript.statements.import", 1670 + "javascript.statements.import.arbitrary_module_namespace_identifier_names", 1671 + "javascript.statements.import.import_attributes", 1672 + "javascript.statements.import.worklet_support", 1673 + "svg.elements.script.type.module" 1674 + ], 1675 + "firefox_usage": null, 1676 + "firefox_observable": null 1677 + }, 1678 + { 1679 + "name": "aspect-ratio", 1680 + "usage": 0.27891107137745563, 1681 + "source": "custom_metrics", 1682 + "observable": "aspect-ratio", 1683 + "observable_type": "css_property", 1684 + "bcd_key_count": 4, 1685 + "bcd_keys": [ 1686 + "css.properties.aspect-ratio", 1687 + "css.properties.aspect-ratio.auto", 1688 + "html.elements.img.aspect_ratio_computed_from_attributes", 1689 + "html.elements.video.aspect_ratio_computed_from_attributes" 1690 + ], 1691 + "firefox_usage": 0.30242028597984927, 1692 + "firefox_observable": "css.properties.aspect-ratio" 1693 + }, 1694 + { 1695 + "name": "barprop", 1696 + "usage": 0.2581453634085213, 1697 + "source": "blink_features", 1698 + "observable": "api.BarProp", 1699 + "observable_type": "blink_api", 1700 + "bcd_key_count": 9, 1701 + "bcd_keys": [ 1702 + "api.BarProp", 1703 + "api.BarProp.visible", 1704 + "api.BarProp.visible.returns_popup", 1705 + "api.Window.locationbar", 1706 + "api.Window.menubar", 1707 + "api.Window.personalbar", 1708 + "api.Window.scrollbars", 1709 + "api.Window.statusbar", 1710 + "api.Window.toolbar" 1711 + ], 1712 + "firefox_usage": null, 1713 + "firefox_observable": null 1714 + }, 1715 + { 1716 + "name": "quotes", 1717 + "usage": 0.2555461630857534, 1718 + "source": "custom_metrics", 1719 + "observable": "quotes", 1720 + "observable_type": "css_property", 1721 + "bcd_key_count": 3, 1722 + "bcd_keys": [ 1723 + "css.properties.quotes", 1724 + "css.properties.quotes.auto", 1725 + "css.properties.quotes.none" 1726 + ], 1727 + "firefox_usage": 0.18226455119275337, 1728 + "firefox_observable": "css.properties.quotes" 1729 + }, 1730 + { 1731 + "name": "contain-intrinsic-size", 1732 + "usage": 0.25382914355863856, 1733 + "source": "custom_metrics", 1734 + "observable": "contain-intrinsic-size", 1735 + "observable_type": "css_property", 1736 + "bcd_key_count": 11, 1737 + "bcd_keys": [ 1738 + "css.properties.contain-intrinsic-block-size", 1739 + "css.properties.contain-intrinsic-block-size.none", 1740 + "css.properties.contain-intrinsic-height", 1741 + "css.properties.contain-intrinsic-height.none", 1742 + "css.properties.contain-intrinsic-inline-size", 1743 + "css.properties.contain-intrinsic-inline-size.none", 1744 + "css.properties.contain-intrinsic-size", 1745 + "css.properties.contain-intrinsic-size.auto_none", 1746 + "css.properties.contain-intrinsic-size.none", 1747 + "css.properties.contain-intrinsic-width", 1748 + "css.properties.contain-intrinsic-width.none" 1749 + ], 1750 + "firefox_usage": 0.038033493872670625, 1751 + "firefox_observable": "css.properties.contain-intrinsic-size" 1752 + }, 1753 + { 1754 + "name": "scrollend", 1755 + "usage": 0.2420052, 1756 + "source": "chrome_popularity", 1757 + "observable": null, 1758 + "observable_type": "blink_api", 1759 + "bcd_key_count": 2, 1760 + "bcd_keys": [ 1761 + "api.Document.scrollend_event", 1762 + "api.Element.scrollend_event" 1763 + ], 1764 + "firefox_usage": null, 1765 + "firefox_observable": null 1766 + }, 1767 + { 1768 + "name": "prefers-contrast", 1769 + "usage": 0.2347656, 1770 + "source": "chrome_popularity", 1771 + "observable": null, 1772 + "observable_type": "css_atrule", 1773 + "bcd_key_count": 1, 1774 + "bcd_keys": [ 1775 + "css.at-rules.media.prefers-contrast" 1776 + ], 1777 + "firefox_usage": null, 1778 + "firefox_observable": null 1779 + }, 1780 + { 1781 + "name": "attribution-reporting", 1782 + "usage": 0.22759915, 1783 + "source": "chrome_popularity", 1784 + "observable": null, 1785 + "observable_type": "blink_api", 1786 + "bcd_key_count": 18, 1787 + "bcd_keys": [ 1788 + "api.HTMLAnchorElement.attributionSrc", 1789 + "api.HTMLAreaElement.attributionSrc", 1790 + "api.HTMLImageElement.attributionSrc", 1791 + "api.HTMLScriptElement.attributionSrc", 1792 + "api.Request.Request.init_attributionReporting_parameter", 1793 + "api.Window.open.features_parameter_attributionsrc", 1794 + "api.XMLHttpRequest.setAttributionReporting", 1795 + "api.fetch.init_attributionReporting_parameter", 1796 + "html.elements.a.attributionsrc", 1797 + "html.elements.area.attributionsrc", 1798 + "html.elements.iframe.allow.attribution-reporting", 1799 + "html.elements.img.attributionsrc", 1800 + "html.elements.script.attributionsrc", 1801 + "http.headers.Attribution-Reporting-Eligible", 1802 + "http.headers.Attribution-Reporting-Register-Source", 1803 + "http.headers.Attribution-Reporting-Register-Trigger", 1804 + "http.headers.Attribution-Reporting-Support", 1805 + "http.headers.Permissions-Policy.attribution-reporting" 1806 + ], 1807 + "firefox_usage": null, 1808 + "firefox_observable": null 1809 + }, 1810 + { 1811 + "name": "structured-clone", 1812 + "usage": 0.22604681, 1813 + "source": "chrome_popularity", 1814 + "observable": null, 1815 + "observable_type": "blink_api", 1816 + "bcd_key_count": 1, 1817 + "bcd_keys": [ 1818 + "api.structuredClone" 1819 + ], 1820 + "firefox_usage": null, 1821 + "firefox_observable": null 1822 + }, 1823 + { 1824 + "name": "reporting", 1825 + "usage": 0.22305764411027568, 1826 + "source": "blink_features", 1827 + "observable": "api.ReportingObserver", 1828 + "observable_type": "blink_api", 1829 + "bcd_key_count": 22, 1830 + "bcd_keys": [ 1831 + "api.DeprecationReportBody", 1832 + "api.DeprecationReportBody.anticipatedRemoval", 1833 + "api.DeprecationReportBody.columnNumber", 1834 + "api.DeprecationReportBody.id", 1835 + "api.DeprecationReportBody.lineNumber", 1836 + "api.DeprecationReportBody.message", 1837 + "api.DeprecationReportBody.sourceFile", 1838 + "api.DeprecationReportBody.toJSON", 1839 + "api.InterventionReportBody", 1840 + "api.InterventionReportBody.columnNumber", 1841 + "api.InterventionReportBody.id", 1842 + "api.InterventionReportBody.lineNumber", 1843 + "api.InterventionReportBody.message", 1844 + "api.InterventionReportBody.sourceFile", 1845 + "api.InterventionReportBody.toJSON", 1846 + "api.ReportingObserver", 1847 + "api.ReportingObserver.ReportingObserver", 1848 + "api.ReportingObserver.disconnect", 1849 + "api.ReportingObserver.observe", 1850 + "api.ReportingObserver.takeRecords", 1851 + "api.ReportingObserver.worker_support", 1852 + "http.headers.Reporting-Endpoints" 1853 + ], 1854 + "firefox_usage": 0.03560495218443147, 1855 + "firefox_observable": "api.ReportingObserver" 1856 + }, 1857 + { 1858 + "name": "beforeinstallprompt", 1859 + "usage": 0.21839080459770116, 1860 + "source": "blink_features", 1861 + "observable": "api.BeforeInstallPromptEvent", 1862 + "observable_type": "blink_api", 1863 + "bcd_key_count": 7, 1864 + "bcd_keys": [ 1865 + "api.BeforeInstallPromptEvent", 1866 + "api.BeforeInstallPromptEvent.BeforeInstallPromptEvent", 1867 + "api.BeforeInstallPromptEvent.platforms", 1868 + "api.BeforeInstallPromptEvent.prompt", 1869 + "api.BeforeInstallPromptEvent.userChoice", 1870 + "api.Window.appinstalled_event", 1871 + "api.Window.beforeinstallprompt_event" 1872 + ], 1873 + "firefox_usage": 0.0015969816761600565, 1874 + "firefox_observable": "api.BeforeInstallPromptEvent" 1875 + }, 1876 + { 1877 + "name": "compression-streams", 1878 + "usage": 0.2157301, 1879 + "source": "chrome_popularity", 1880 + "observable": null, 1881 + "observable_type": "blink_api", 1882 + "bcd_key_count": 14, 1883 + "bcd_keys": [ 1884 + "api.CompressionStream", 1885 + "api.CompressionStream.CompressionStream", 1886 + "api.CompressionStream.CompressionStream.deflate", 1887 + "api.CompressionStream.CompressionStream.deflate-raw", 1888 + "api.CompressionStream.CompressionStream.gzip", 1889 + "api.CompressionStream.readable", 1890 + "api.CompressionStream.writable", 1891 + "api.DecompressionStream", 1892 + "api.DecompressionStream.DecompressionStream", 1893 + "api.DecompressionStream.DecompressionStream.deflate", 1894 + "api.DecompressionStream.DecompressionStream.deflate-raw", 1895 + "api.DecompressionStream.DecompressionStream.gzip", 1896 + "api.DecompressionStream.readable", 1897 + "api.DecompressionStream.writable" 1898 + ], 1899 + "firefox_usage": null, 1900 + "firefox_observable": null 1901 + }, 1902 + { 1903 + "name": "manifest", 1904 + "usage": 0.21375105, 1905 + "source": "chrome_popularity", 1906 + "observable": null, 1907 + "observable_type": "html_element", 1908 + "bcd_key_count": 16, 1909 + "bcd_keys": [ 1910 + "html.elements.link.rel.manifest", 1911 + "manifests.webapp.background_color", 1912 + "manifests.webapp.description", 1913 + "manifests.webapp.display", 1914 + "manifests.webapp.icons", 1915 + "manifests.webapp.id", 1916 + "manifests.webapp.name", 1917 + "manifests.webapp.orientation", 1918 + "manifests.webapp.scope", 1919 + "manifests.webapp.serviceworker", 1920 + "manifests.webapp.serviceworker.scope", 1921 + "manifests.webapp.serviceworker.src", 1922 + "manifests.webapp.serviceworker.use_cache", 1923 + "manifests.webapp.short_name", 1924 + "manifests.webapp.start_url", 1925 + "manifests.webapp.theme_color" 1926 + ], 1927 + "firefox_usage": null, 1928 + "firefox_observable": null 1929 + }, 1930 + { 1931 + "name": "scheduler", 1932 + "usage": 0.21334586466165414, 1933 + "source": "blink_features", 1934 + "observable": "api.Scheduler", 1935 + "observable_type": "blink_api", 1936 + "bcd_key_count": 14, 1937 + "bcd_keys": [ 1938 + "api.Scheduler", 1939 + "api.Scheduler.postTask", 1940 + "api.Scheduler.yield", 1941 + "api.TaskController", 1942 + "api.TaskController.TaskController", 1943 + "api.TaskController.setPriority", 1944 + "api.TaskPriorityChangeEvent", 1945 + "api.TaskPriorityChangeEvent.TaskPriorityChangeEvent", 1946 + "api.TaskPriorityChangeEvent.previousPriority", 1947 + "api.TaskSignal", 1948 + "api.TaskSignal.any_static", 1949 + "api.TaskSignal.priority", 1950 + "api.TaskSignal.prioritychange_event", 1951 + "api.scheduler" 1952 + ], 1953 + "firefox_usage": 0.00000853933091549038, 1954 + "firefox_observable": "api.scheduler" 1955 + }, 1956 + { 1957 + "name": "device-posture", 1958 + "usage": 0.20676691729323307, 1959 + "source": "blink_features", 1960 + "observable": "api.DevicePosture", 1961 + "observable_type": "blink_api", 1962 + "bcd_key_count": 5, 1963 + "bcd_keys": [ 1964 + "api.DevicePosture", 1965 + "api.DevicePosture.change_event", 1966 + "api.DevicePosture.type", 1967 + "api.Navigator.devicePosture", 1968 + "css.at-rules.media.device-posture" 1969 + ], 1970 + "firefox_usage": null, 1971 + "firefox_observable": null 1972 + }, 1973 + { 1974 + "name": "scroll-snap", 1975 + "usage": 0.2030726547978704, 1976 + "source": "custom_metrics", 1977 + "observable": "scroll-snap-type", 1978 + "observable_type": "css_property", 1979 + "bcd_key_count": 44, 1980 + "bcd_keys": [ 1981 + "css.properties.scroll-margin", 1982 + "css.properties.scroll-margin-block", 1983 + "css.properties.scroll-margin-block-end", 1984 + "css.properties.scroll-margin-block-start", 1985 + "css.properties.scroll-margin-bottom", 1986 + "css.properties.scroll-margin-inline", 1987 + "css.properties.scroll-margin-inline-end", 1988 + "css.properties.scroll-margin-inline-start", 1989 + "css.properties.scroll-margin-left", 1990 + "css.properties.scroll-margin-right", 1991 + "css.properties.scroll-margin-top", 1992 + "css.properties.scroll-padding", 1993 + "css.properties.scroll-padding-block", 1994 + "css.properties.scroll-padding-block-end", 1995 + "css.properties.scroll-padding-block-end.auto", 1996 + "css.properties.scroll-padding-block-start", 1997 + "css.properties.scroll-padding-block-start.auto", 1998 + "css.properties.scroll-padding-block.auto", 1999 + "css.properties.scroll-padding-bottom", 2000 + "css.properties.scroll-padding-inline", 2001 + "css.properties.scroll-padding-inline-end", 2002 + "css.properties.scroll-padding-inline-end.auto", 2003 + "css.properties.scroll-padding-inline-start", 2004 + "css.properties.scroll-padding-inline-start.auto", 2005 + "css.properties.scroll-padding-inline.auto", 2006 + "css.properties.scroll-padding-left", 2007 + "css.properties.scroll-padding-right", 2008 + "css.properties.scroll-padding-top", 2009 + "css.properties.scroll-padding.auto", 2010 + "css.properties.scroll-snap-align", 2011 + "css.properties.scroll-snap-align.center", 2012 + "css.properties.scroll-snap-align.end", 2013 + "css.properties.scroll-snap-align.none", 2014 + "css.properties.scroll-snap-align.start", 2015 + "css.properties.scroll-snap-stop", 2016 + "css.properties.scroll-snap-stop.always", 2017 + "css.properties.scroll-snap-stop.normal", 2018 + "css.properties.scroll-snap-type", 2019 + "css.properties.scroll-snap-type.block", 2020 + "css.properties.scroll-snap-type.both", 2021 + "css.properties.scroll-snap-type.inline", 2022 + "css.properties.scroll-snap-type.none", 2023 + "css.properties.scroll-snap-type.x", 2024 + "css.properties.scroll-snap-type.y" 2025 + ], 2026 + "firefox_usage": 0.19465274034125996, 2027 + "firefox_observable": "css.properties.scroll-snap-type" 2028 + }, 2029 + { 2030 + "name": "logical-assignments", 2031 + "usage": 0.20278456, 2032 + "source": "chrome_popularity", 2033 + "observable": null, 2034 + "observable_type": "js_operators", 2035 + "bcd_key_count": 2, 2036 + "bcd_keys": [ 2037 + "javascript.operators.logical_and_assignment", 2038 + "javascript.operators.logical_or_assignment" 2039 + ], 2040 + "firefox_usage": null, 2041 + "firefox_observable": null 2042 + }, 2043 + { 2044 + "name": "view-transitions", 2045 + "usage": 0.19987468671679198, 2046 + "source": "blink_features", 2047 + "observable": "api.ViewTransition", 2048 + "observable_type": "blink_api", 2049 + "bcd_key_count": 25, 2050 + "bcd_keys": [ 2051 + "api.Document.startViewTransition", 2052 + "api.Document.startViewTransition.callbackOptions_parameter", 2053 + "api.Document.startViewTransition.updateCallback_parameter", 2054 + "api.PageRevealEvent", 2055 + "api.PageRevealEvent.PageRevealEvent", 2056 + "api.PageRevealEvent.viewTransition", 2057 + "api.PageSwapEvent", 2058 + "api.PageSwapEvent.PageSwapEvent", 2059 + "api.PageSwapEvent.activation", 2060 + "api.PageSwapEvent.viewTransition", 2061 + "api.ViewTransition", 2062 + "api.ViewTransition.finished", 2063 + "api.ViewTransition.ready", 2064 + "api.ViewTransition.skipTransition", 2065 + "api.ViewTransition.updateCallbackDone", 2066 + "api.Window.pagereveal_event", 2067 + "api.Window.pageswap_event", 2068 + "css.properties.view-transition-name", 2069 + "css.properties.view-transition-name.match-element", 2070 + "css.properties.view-transition-name.none", 2071 + "css.selectors.view-transition", 2072 + "css.selectors.view-transition-group", 2073 + "css.selectors.view-transition-image-pair", 2074 + "css.selectors.view-transition-new", 2075 + "css.selectors.view-transition-old" 2076 + ], 2077 + "firefox_usage": 0.00002122324310054048, 2078 + "firefox_observable": "css.properties.view-transition-name" 2079 + }, 2080 + { 2081 + "name": "active-view-transition", 2082 + "usage": 0.19987468671679198, 2083 + "source": "blink_features", 2084 + "observable": "api.ViewTransition.types", 2085 + "observable_type": "blink_api", 2086 + "bcd_key_count": 14, 2087 + "bcd_keys": [ 2088 + "api.ViewTransition.types", 2089 + "api.ViewTransitionTypeSet", 2090 + "api.ViewTransitionTypeSet.@@iterator", 2091 + "api.ViewTransitionTypeSet.add", 2092 + "api.ViewTransitionTypeSet.clear", 2093 + "api.ViewTransitionTypeSet.delete", 2094 + "api.ViewTransitionTypeSet.entries", 2095 + "api.ViewTransitionTypeSet.forEach", 2096 + "api.ViewTransitionTypeSet.has", 2097 + "api.ViewTransitionTypeSet.keys", 2098 + "api.ViewTransitionTypeSet.size", 2099 + "api.ViewTransitionTypeSet.values", 2100 + "css.selectors.active-view-transition", 2101 + "css.selectors.active-view-transition-type" 2102 + ], 2103 + "firefox_usage": null, 2104 + "firefox_observable": null 2105 + }, 2106 + { 2107 + "name": "broadcast-channel", 2108 + "usage": 0.18719211822660098, 2109 + "source": "blink_features", 2110 + "observable": "api.BroadcastChannel", 2111 + "observable_type": "blink_api", 2112 + "bcd_key_count": 7, 2113 + "bcd_keys": [ 2114 + "api.BroadcastChannel", 2115 + "api.BroadcastChannel.BroadcastChannel", 2116 + "api.BroadcastChannel.close", 2117 + "api.BroadcastChannel.message_event", 2118 + "api.BroadcastChannel.messageerror_event", 2119 + "api.BroadcastChannel.name", 2120 + "api.BroadcastChannel.postMessage" 2121 + ], 2122 + "firefox_usage": null, 2123 + "firefox_observable": null 2124 + }, 2125 + { 2126 + "name": "overflow-clip", 2127 + "usage": 0.18427132, 2128 + "source": "chrome_popularity", 2129 + "observable": null, 2130 + "observable_type": "css_property", 2131 + "bcd_key_count": 4, 2132 + "bcd_keys": [ 2133 + "css.properties.overflow-x.clip", 2134 + "css.properties.overflow-y.clip", 2135 + "css.properties.overflow.clip", 2136 + "css.types.overflow.clip" 2137 + ], 2138 + "firefox_usage": null, 2139 + "firefox_observable": null 2140 + }, 2141 + { 2142 + "name": "scrollbar-color", 2143 + "usage": 0.1755639468061433, 2144 + "source": "custom_metrics", 2145 + "observable": "scrollbar-color", 2146 + "observable_type": "css_property", 2147 + "bcd_key_count": 2, 2148 + "bcd_keys": [ 2149 + "css.properties.scrollbar-color", 2150 + "css.properties.scrollbar-color.auto" 2151 + ], 2152 + "firefox_usage": 0.15183089845968892, 2153 + "firefox_observable": "css.properties.scrollbar-color" 2154 + }, 2155 + { 2156 + "name": "hyphens", 2157 + "usage": 0.17118523032337973, 2158 + "source": "custom_metrics", 2159 + "observable": "hyphens", 2160 + "observable_type": "css_property", 2161 + "bcd_key_count": 65, 2162 + "bcd_keys": [ 2163 + "css.properties.hyphens", 2164 + "css.properties.hyphens.auto", 2165 + "css.properties.hyphens.language_afrikaans", 2166 + "css.properties.hyphens.language_albanian", 2167 + "css.properties.hyphens.language_amharic", 2168 + "css.properties.hyphens.language_armenian", 2169 + "css.properties.hyphens.language_assamese", 2170 + "css.properties.hyphens.language_basque", 2171 + "css.properties.hyphens.language_belarusian", 2172 + "css.properties.hyphens.language_bengali", 2173 + "css.properties.hyphens.language_bosnian", 2174 + "css.properties.hyphens.language_bulgarian", 2175 + "css.properties.hyphens.language_catalan", 2176 + "css.properties.hyphens.language_croatian", 2177 + "css.properties.hyphens.language_cyrillic_mongolian", 2178 + "css.properties.hyphens.language_czech", 2179 + "css.properties.hyphens.language_danish", 2180 + "css.properties.hyphens.language_dutch", 2181 + "css.properties.hyphens.language_english", 2182 + "css.properties.hyphens.language_esperanto", 2183 + "css.properties.hyphens.language_estonian", 2184 + "css.properties.hyphens.language_ethiopic_script_mul", 2185 + "css.properties.hyphens.language_ethiopic_script_und", 2186 + "css.properties.hyphens.language_finnish", 2187 + "css.properties.hyphens.language_french", 2188 + "css.properties.hyphens.language_galician", 2189 + "css.properties.hyphens.language_georgian", 2190 + "css.properties.hyphens.language_german_reformed_orthography", 2191 + "css.properties.hyphens.language_german_swiss_orthography", 2192 + "css.properties.hyphens.language_german_traditional_orthography", 2193 + "css.properties.hyphens.language_gujarati", 2194 + "css.properties.hyphens.language_hindi", 2195 + "css.properties.hyphens.language_hungarian", 2196 + "css.properties.hyphens.language_icelandic", 2197 + "css.properties.hyphens.language_interlingua", 2198 + "css.properties.hyphens.language_irish", 2199 + "css.properties.hyphens.language_italian", 2200 + "css.properties.hyphens.language_kannada", 2201 + "css.properties.hyphens.language_kurmanji", 2202 + "css.properties.hyphens.language_latin", 2203 + "css.properties.hyphens.language_latvian", 2204 + "css.properties.hyphens.language_lithuanian", 2205 + "css.properties.hyphens.language_malayalam", 2206 + "css.properties.hyphens.language_marathi", 2207 + "css.properties.hyphens.language_modern_greek", 2208 + "css.properties.hyphens.language_mongolian", 2209 + "css.properties.hyphens.language_norwegian_nn", 2210 + "css.properties.hyphens.language_norwegian_no", 2211 + "css.properties.hyphens.language_old_slavonic", 2212 + "css.properties.hyphens.language_oriya", 2213 + "css.properties.hyphens.language_polish", 2214 + "css.properties.hyphens.language_portuguese", 2215 + "css.properties.hyphens.language_punjabi", 2216 + "css.properties.hyphens.language_russian", 2217 + "css.properties.hyphens.language_slovak", 2218 + "css.properties.hyphens.language_slovenian", 2219 + "css.properties.hyphens.language_spanish", 2220 + "css.properties.hyphens.language_swedish", 2221 + "css.properties.hyphens.language_tamil", 2222 + "css.properties.hyphens.language_telugu", 2223 + "css.properties.hyphens.language_turkish", 2224 + "css.properties.hyphens.language_turkmen", 2225 + "css.properties.hyphens.language_ukrainian", 2226 + "css.properties.hyphens.language_upper_sorbian", 2227 + "css.properties.hyphens.language_welsh" 2228 + ], 2229 + "firefox_usage": 0.16177519202724724, 2230 + "firefox_observable": "css.properties.hyphens" 2231 + }, 2232 + { 2233 + "name": "aria-attribute-reflection", 2234 + "usage": 0.163643, 2235 + "source": "chrome_popularity", 2236 + "observable": null, 2237 + "observable_type": "blink_api", 2238 + "bcd_key_count": 103, 2239 + "bcd_keys": [ 2240 + "api.Element.ariaActiveDescendantElement", 2241 + "api.Element.ariaAtomic", 2242 + "api.Element.ariaAutoComplete", 2243 + "api.Element.ariaBrailleLabel", 2244 + "api.Element.ariaBrailleRoleDescription", 2245 + "api.Element.ariaBusy", 2246 + "api.Element.ariaChecked", 2247 + "api.Element.ariaColCount", 2248 + "api.Element.ariaColIndex", 2249 + "api.Element.ariaColIndexText", 2250 + "api.Element.ariaColSpan", 2251 + "api.Element.ariaControlsElements", 2252 + "api.Element.ariaCurrent", 2253 + "api.Element.ariaDescribedByElements", 2254 + "api.Element.ariaDescription", 2255 + "api.Element.ariaDetailsElements", 2256 + "api.Element.ariaDisabled", 2257 + "api.Element.ariaErrorMessageElements", 2258 + "api.Element.ariaExpanded", 2259 + "api.Element.ariaFlowToElements", 2260 + "api.Element.ariaHasPopup", 2261 + "api.Element.ariaHidden", 2262 + "api.Element.ariaInvalid", 2263 + "api.Element.ariaKeyShortcuts", 2264 + "api.Element.ariaLabel", 2265 + "api.Element.ariaLabelledByElements", 2266 + "api.Element.ariaLevel", 2267 + "api.Element.ariaLive", 2268 + "api.Element.ariaModal", 2269 + "api.Element.ariaMultiLine", 2270 + "api.Element.ariaMultiSelectable", 2271 + "api.Element.ariaOrientation", 2272 + "api.Element.ariaOwnsElements", 2273 + "api.Element.ariaPlaceholder", 2274 + "api.Element.ariaPosInSet", 2275 + "api.Element.ariaPressed", 2276 + "api.Element.ariaReadOnly", 2277 + "api.Element.ariaRelevant", 2278 + "api.Element.ariaRequired", 2279 + "api.Element.ariaRoleDescription", 2280 + "api.Element.ariaRowCount", 2281 + "api.Element.ariaRowIndex", 2282 + "api.Element.ariaRowIndexText", 2283 + "api.Element.ariaRowSpan", 2284 + "api.Element.ariaSelected", 2285 + "api.Element.ariaSetSize", 2286 + "api.Element.ariaSort", 2287 + "api.Element.ariaValueMax", 2288 + "api.Element.ariaValueMin", 2289 + "api.Element.ariaValueNow", 2290 + "api.Element.ariaValueText", 2291 + "api.Element.role", 2292 + "api.ElementInternals.ariaActiveDescendantElement", 2293 + "api.ElementInternals.ariaAtomic", 2294 + "api.ElementInternals.ariaAutoComplete", 2295 + "api.ElementInternals.ariaBrailleLabel", 2296 + "api.ElementInternals.ariaBrailleRoleDescription", 2297 + "api.ElementInternals.ariaBusy", 2298 + "api.ElementInternals.ariaChecked", 2299 + "api.ElementInternals.ariaColCount", 2300 + "api.ElementInternals.ariaColIndex", 2301 + "api.ElementInternals.ariaColIndexText", 2302 + "api.ElementInternals.ariaColSpan", 2303 + "api.ElementInternals.ariaControlsElements", 2304 + "api.ElementInternals.ariaCurrent", 2305 + "api.ElementInternals.ariaDescribedByElements", 2306 + "api.ElementInternals.ariaDescription", 2307 + "api.ElementInternals.ariaDetailsElements", 2308 + "api.ElementInternals.ariaDisabled", 2309 + "api.ElementInternals.ariaErrorMessageElements", 2310 + "api.ElementInternals.ariaExpanded", 2311 + "api.ElementInternals.ariaFlowToElements", 2312 + "api.ElementInternals.ariaHasPopup", 2313 + "api.ElementInternals.ariaHidden", 2314 + "api.ElementInternals.ariaInvalid", 2315 + "api.ElementInternals.ariaKeyShortcuts", 2316 + "api.ElementInternals.ariaLabel", 2317 + "api.ElementInternals.ariaLabelledByElements", 2318 + "api.ElementInternals.ariaLevel", 2319 + "api.ElementInternals.ariaLive", 2320 + "api.ElementInternals.ariaModal", 2321 + "api.ElementInternals.ariaMultiLine", 2322 + "api.ElementInternals.ariaMultiSelectable", 2323 + "api.ElementInternals.ariaOrientation", 2324 + "api.ElementInternals.ariaOwnsElements", 2325 + "api.ElementInternals.ariaPlaceholder", 2326 + "api.ElementInternals.ariaPosInSet", 2327 + "api.ElementInternals.ariaPressed", 2328 + "api.ElementInternals.ariaReadOnly", 2329 + "api.ElementInternals.ariaRequired", 2330 + "api.ElementInternals.ariaRoleDescription", 2331 + "api.ElementInternals.ariaRowCount", 2332 + "api.ElementInternals.ariaRowIndex", 2333 + "api.ElementInternals.ariaRowIndexText", 2334 + "api.ElementInternals.ariaRowSpan", 2335 + "api.ElementInternals.ariaSelected", 2336 + "api.ElementInternals.ariaSetSize", 2337 + "api.ElementInternals.ariaSort", 2338 + "api.ElementInternals.ariaValueMax", 2339 + "api.ElementInternals.ariaValueMin", 2340 + "api.ElementInternals.ariaValueNow", 2341 + "api.ElementInternals.ariaValueText", 2342 + "api.ElementInternals.role" 2343 + ], 2344 + "firefox_usage": null, 2345 + "firefox_observable": null 2346 + }, 2347 + { 2348 + "name": "display-mode", 2349 + "usage": 0.15434049, 2350 + "source": "chrome_popularity", 2351 + "observable": null, 2352 + "observable_type": "css_atrule", 2353 + "bcd_key_count": 2, 2354 + "bcd_keys": [ 2355 + "css.at-rules.media.display-mode", 2356 + "css.at-rules.media.display-mode.picture-in-picture" 2357 + ], 2358 + "firefox_usage": null, 2359 + "firefox_observable": null 2360 + }, 2361 + { 2362 + "name": "line-break", 2363 + "usage": 0.15422215886349055, 2364 + "source": "custom_metrics", 2365 + "observable": "line-break", 2366 + "observable_type": "css_property", 2367 + "bcd_key_count": 6, 2368 + "bcd_keys": [ 2369 + "css.properties.line-break", 2370 + "css.properties.line-break.anywhere", 2371 + "css.properties.line-break.auto", 2372 + "css.properties.line-break.loose", 2373 + "css.properties.line-break.normal", 2374 + "css.properties.line-break.strict" 2375 + ], 2376 + "firefox_usage": 0.15049230910709957, 2377 + "firefox_observable": "css.properties.line-break" 2378 + }, 2379 + { 2380 + "name": "web-animations", 2381 + "usage": 0.15133355, 2382 + "source": "chrome_popularity", 2383 + "observable": null, 2384 + "observable_type": "blink_api", 2385 + "bcd_key_count": 63, 2386 + "bcd_keys": [ 2387 + "api.Animation", 2388 + "api.Animation.Animation", 2389 + "api.Animation.cancel", 2390 + "api.Animation.cancel_event", 2391 + "api.Animation.commitStyles", 2392 + "api.Animation.currentTime", 2393 + "api.Animation.effect", 2394 + "api.Animation.finish", 2395 + "api.Animation.finish_event", 2396 + "api.Animation.finished", 2397 + "api.Animation.id", 2398 + "api.Animation.pause", 2399 + "api.Animation.pending", 2400 + "api.Animation.persist", 2401 + "api.Animation.play", 2402 + "api.Animation.playState", 2403 + "api.Animation.playbackRate", 2404 + "api.Animation.ready", 2405 + "api.Animation.remove_event", 2406 + "api.Animation.remove_filling_animation", 2407 + "api.Animation.replaceState", 2408 + "api.Animation.reverse", 2409 + "api.Animation.startTime", 2410 + "api.Animation.timeline", 2411 + "api.Animation.updatePlaybackRate", 2412 + "api.AnimationEffect", 2413 + "api.AnimationEffect.getComputedTiming", 2414 + "api.AnimationEffect.getTiming", 2415 + "api.AnimationEffect.updateTiming", 2416 + "api.AnimationPlaybackEvent", 2417 + "api.AnimationPlaybackEvent.AnimationPlaybackEvent", 2418 + "api.AnimationPlaybackEvent.currentTime", 2419 + "api.AnimationPlaybackEvent.timelineTime", 2420 + "api.AnimationTimeline", 2421 + "api.AnimationTimeline.currentTime", 2422 + "api.AnimationTimeline.duration", 2423 + "api.Document.getAnimations", 2424 + "api.Document.timeline", 2425 + "api.DocumentTimeline", 2426 + "api.DocumentTimeline.DocumentTimeline", 2427 + "api.Element.animate", 2428 + "api.Element.animate.implicit_tofrom", 2429 + "api.Element.animate.options_composite_parameter", 2430 + "api.Element.animate.options_id_parameter", 2431 + "api.Element.animate.options_iterationComposite_parameter", 2432 + "api.Element.animate.options_pseudoElement_parameter", 2433 + "api.Element.animate.options_rangeEnd_parameter", 2434 + "api.Element.animate.options_rangeStart_parameter", 2435 + "api.Element.animate.options_timeline_parameter", 2436 + "api.Element.animationcancel_event", 2437 + "api.Element.animationend_event", 2438 + "api.Element.animationiteration_event", 2439 + "api.Element.animationstart_event", 2440 + "api.Element.getAnimations", 2441 + "api.KeyframeEffect", 2442 + "api.KeyframeEffect.KeyframeEffect", 2443 + "api.KeyframeEffect.composite", 2444 + "api.KeyframeEffect.getKeyframes", 2445 + "api.KeyframeEffect.iterationComposite", 2446 + "api.KeyframeEffect.pseudoElement", 2447 + "api.KeyframeEffect.setKeyframes", 2448 + "api.KeyframeEffect.target", 2449 + "api.ShadowRoot.getAnimations" 2450 + ], 2451 + "firefox_usage": null, 2452 + "firefox_observable": null 2453 + }, 2454 + { 2455 + "name": "bfcache-blocking-reasons", 2456 + "usage": 0.14919106, 2457 + "source": "chrome_popularity", 2458 + "observable": null, 2459 + "observable_type": "blink_api", 2460 + "bcd_key_count": 12, 2461 + "bcd_keys": [ 2462 + "api.NotRestoredReasonDetails", 2463 + "api.NotRestoredReasonDetails.reason", 2464 + "api.NotRestoredReasonDetails.toJSON", 2465 + "api.NotRestoredReasons", 2466 + "api.NotRestoredReasons.children", 2467 + "api.NotRestoredReasons.id", 2468 + "api.NotRestoredReasons.name", 2469 + "api.NotRestoredReasons.reasons", 2470 + "api.NotRestoredReasons.src", 2471 + "api.NotRestoredReasons.toJSON", 2472 + "api.NotRestoredReasons.url", 2473 + "api.PerformanceNavigationTiming.notRestoredReasons" 2474 + ], 2475 + "firefox_usage": null, 2476 + "firefox_observable": null 2477 + }, 2478 + { 2479 + "name": "weak-references", 2480 + "usage": 0.14744593, 2481 + "source": "chrome_popularity", 2482 + "observable": null, 2483 + "observable_type": "js_builtin", 2484 + "bcd_key_count": 10, 2485 + "bcd_keys": [ 2486 + "javascript.builtins.FinalizationRegistry", 2487 + "javascript.builtins.FinalizationRegistry.FinalizationRegistry", 2488 + "javascript.builtins.FinalizationRegistry.register", 2489 + "javascript.builtins.FinalizationRegistry.register.symbol_as_target", 2490 + "javascript.builtins.FinalizationRegistry.unregister", 2491 + "javascript.builtins.FinalizationRegistry.unregister.symbol_as_target", 2492 + "javascript.builtins.WeakRef", 2493 + "javascript.builtins.WeakRef.WeakRef", 2494 + "javascript.builtins.WeakRef.WeakRef.symbol_as_target", 2495 + "javascript.builtins.WeakRef.deref" 2496 + ], 2497 + "firefox_usage": null, 2498 + "firefox_observable": null 2499 + }, 2500 + { 2501 + "name": "long-animation-frames", 2502 + "usage": 0.14519841, 2503 + "source": "chrome_popularity", 2504 + "observable": null, 2505 + "observable_type": "blink_api", 2506 + "bcd_key_count": 19, 2507 + "bcd_keys": [ 2508 + "api.PerformanceLongAnimationFrameTiming", 2509 + "api.PerformanceLongAnimationFrameTiming.blockingDuration", 2510 + "api.PerformanceLongAnimationFrameTiming.firstUIEventTimestamp", 2511 + "api.PerformanceLongAnimationFrameTiming.renderStart", 2512 + "api.PerformanceLongAnimationFrameTiming.scripts", 2513 + "api.PerformanceLongAnimationFrameTiming.styleAndLayoutStart", 2514 + "api.PerformanceLongAnimationFrameTiming.toJSON", 2515 + "api.PerformanceScriptTiming", 2516 + "api.PerformanceScriptTiming.executionStart", 2517 + "api.PerformanceScriptTiming.forcedStyleAndLayoutDuration", 2518 + "api.PerformanceScriptTiming.invoker", 2519 + "api.PerformanceScriptTiming.invokerType", 2520 + "api.PerformanceScriptTiming.pauseDuration", 2521 + "api.PerformanceScriptTiming.sourceCharPosition", 2522 + "api.PerformanceScriptTiming.sourceFunctionName", 2523 + "api.PerformanceScriptTiming.sourceURL", 2524 + "api.PerformanceScriptTiming.toJSON", 2525 + "api.PerformanceScriptTiming.window", 2526 + "api.PerformanceScriptTiming.windowAttribution" 2527 + ], 2528 + "firefox_usage": null, 2529 + "firefox_observable": null 2530 + }, 2531 + { 2532 + "name": "individual-transforms", 2533 + "usage": 0.14430176965601188, 2534 + "source": "custom_metrics", 2535 + "observable": "rotate", 2536 + "observable_type": "css_property", 2537 + "bcd_key_count": 7, 2538 + "bcd_keys": [ 2539 + "css.properties.rotate", 2540 + "css.properties.rotate.none", 2541 + "css.properties.rotate.x_y_z_angle", 2542 + "css.properties.scale", 2543 + "css.properties.scale.none", 2544 + "css.properties.translate", 2545 + "css.properties.translate.none" 2546 + ], 2547 + "firefox_usage": 0.06621634085738833, 2548 + "firefox_observable": "css.properties.rotate" 2549 + }, 2550 + { 2551 + "name": "viewport-unit-variants", 2552 + "usage": 0.14325774, 2553 + "source": "chrome_popularity", 2554 + "observable": null, 2555 + "observable_type": "css_type", 2556 + "bcd_key_count": 5, 2557 + "bcd_keys": [ 2558 + "css.types.length.vb", 2559 + "css.types.length.vi", 2560 + "css.types.length.viewport_percentage_units_dynamic", 2561 + "css.types.length.viewport_percentage_units_large", 2562 + "css.types.length.viewport_percentage_units_small" 2563 + ], 2564 + "firefox_usage": null, 2565 + "firefox_observable": null 2566 + }, 2567 + { 2568 + "name": "linear-easing", 2569 + "usage": 0.12953064, 2570 + "source": "chrome_popularity", 2571 + "observable": null, 2572 + "observable_type": "css_type", 2573 + "bcd_key_count": 1, 2574 + "bcd_keys": [ 2575 + "css.types.easing-function.linear-function" 2576 + ], 2577 + "firefox_usage": null, 2578 + "firefox_observable": null 2579 + }, 2580 + { 2581 + "name": "offline-audio-context", 2582 + "usage": 0.12643678160919541, 2583 + "source": "blink_features", 2584 + "observable": "api.OfflineAudioContext", 2585 + "observable_type": "blink_api", 2586 + "bcd_key_count": 12, 2587 + "bcd_keys": [ 2588 + "api.OfflineAudioCompletionEvent", 2589 + "api.OfflineAudioCompletionEvent.OfflineAudioCompletionEvent", 2590 + "api.OfflineAudioCompletionEvent.renderedBuffer", 2591 + "api.OfflineAudioContext", 2592 + "api.OfflineAudioContext.OfflineAudioContext", 2593 + "api.OfflineAudioContext.OfflineAudioContext.options_parameter", 2594 + "api.OfflineAudioContext.complete_event", 2595 + "api.OfflineAudioContext.length", 2596 + "api.OfflineAudioContext.resume", 2597 + "api.OfflineAudioContext.startRendering", 2598 + "api.OfflineAudioContext.startRendering.returns_promise", 2599 + "api.OfflineAudioContext.suspend" 2600 + ], 2601 + "firefox_usage": null, 2602 + "firefox_observable": null 2603 + }, 2604 + { 2605 + "name": "text-underline-offset", 2606 + "usage": 0.12165928955492865, 2607 + "source": "custom_metrics", 2608 + "observable": "text-underline-offset", 2609 + "observable_type": "css_property", 2610 + "bcd_key_count": 3, 2611 + "bcd_keys": [ 2612 + "css.properties.text-underline-offset", 2613 + "css.properties.text-underline-offset.auto", 2614 + "css.properties.text-underline-offset.percentage" 2615 + ], 2616 + "firefox_usage": 0.09599819827777563, 2617 + "firefox_observable": "css.properties.text-underline-offset" 2618 + }, 2619 + { 2620 + "name": "speculation-rules", 2621 + "usage": 0.11717813, 2622 + "source": "chrome_popularity", 2623 + "observable": null, 2624 + "observable_type": "blink_api", 2625 + "bcd_key_count": 24, 2626 + "bcd_keys": [ 2627 + "api.Document.prerendering", 2628 + "api.Document.prerenderingchange_event", 2629 + "api.PerformanceNavigationTiming.activationStart", 2630 + "html.elements.script.type.speculationrules", 2631 + "html.elements.script.type.speculationrules.eagerness", 2632 + "html.elements.script.type.speculationrules.expects_no_vary_search", 2633 + "html.elements.script.type.speculationrules.prefetch", 2634 + "html.elements.script.type.speculationrules.prerender", 2635 + "html.elements.script.type.speculationrules.referrer_policy", 2636 + "html.elements.script.type.speculationrules.relative_to", 2637 + "html.elements.script.type.speculationrules.requires", 2638 + "html.elements.script.type.speculationrules.requires.anonymous-client-ip-when-cross-origin", 2639 + "html.elements.script.type.speculationrules.source_optional", 2640 + "html.elements.script.type.speculationrules.tag", 2641 + "html.elements.script.type.speculationrules.target_hint", 2642 + "html.elements.script.type.speculationrules.urls", 2643 + "html.elements.script.type.speculationrules.where", 2644 + "http.headers.Content-Security-Policy.script-src.inline-speculation-rules", 2645 + "http.headers.Sec-Purpose.speculationrules", 2646 + "http.headers.Sec-Speculation-Tags", 2647 + "http.headers.Speculation-Rules", 2648 + "http.headers.Supports-Loading-Mode", 2649 + "http.headers.Supports-Loading-Mode.credentialed-prerender", 2650 + "http.headers.Supports-Loading-Mode.fenced-frame" 2651 + ], 2652 + "firefox_usage": null, 2653 + "firefox_observable": null 2654 + }, 2655 + { 2656 + "name": "nesting", 2657 + "usage": 0.11288380061133192, 2658 + "source": "custom_metrics", 2659 + "observable": "nesting", 2660 + "observable_type": "css_selector", 2661 + "bcd_key_count": 6, 2662 + "bcd_keys": [ 2663 + "api.CSSNestedDeclarations", 2664 + "api.CSSNestedDeclarations.style", 2665 + "api.CSSStyleRule.cssRules", 2666 + "api.CSSStyleRule.deleteRule", 2667 + "api.CSSStyleRule.insertRule", 2668 + "css.selectors.nesting" 2669 + ], 2670 + "firefox_usage": null, 2671 + "firefox_observable": null 2672 + }, 2673 + { 2674 + "name": "blocking-render", 2675 + "usage": 0.105139, 2676 + "source": "chrome_popularity", 2677 + "observable": null, 2678 + "observable_type": "blink_api", 2679 + "bcd_key_count": 6, 2680 + "bcd_keys": [ 2681 + "api.HTMLLinkElement.blocking", 2682 + "api.HTMLScriptElement.blocking", 2683 + "api.HTMLStyleElement.blocking", 2684 + "html.elements.link.blocking", 2685 + "html.elements.script.blocking", 2686 + "html.elements.style.blocking" 2687 + ], 2688 + "firefox_usage": null, 2689 + "firefox_observable": null 2690 + }, 2691 + { 2692 + "name": "link-rel-expect", 2693 + "usage": 0.10418346, 2694 + "source": "chrome_popularity", 2695 + "observable": null, 2696 + "observable_type": "html_element", 2697 + "bcd_key_count": 1, 2698 + "bcd_keys": [ 2699 + "html.elements.link.rel.expect" 2700 + ], 2701 + "firefox_usage": null, 2702 + "firefox_observable": null 2703 + }, 2704 + { 2705 + "name": "scrollbar-gutter", 2706 + "usage": 0.10151694794603322, 2707 + "source": "custom_metrics", 2708 + "observable": "scrollbar-gutter", 2709 + "observable_type": "css_property", 2710 + "bcd_key_count": 3, 2711 + "bcd_keys": [ 2712 + "css.properties.scrollbar-gutter", 2713 + "css.properties.scrollbar-gutter.auto", 2714 + "css.properties.scrollbar-gutter.stable" 2715 + ], 2716 + "firefox_usage": 0.10131216827806148, 2717 + "firefox_observable": "css.properties.scrollbar-gutter" 2718 + }, 2719 + { 2720 + "name": "constructed-stylesheets", 2721 + "usage": 0.09915322, 2722 + "source": "chrome_popularity", 2723 + "observable": null, 2724 + "observable_type": "blink_api", 2725 + "bcd_key_count": 6, 2726 + "bcd_keys": [ 2727 + "api.CSSStyleSheet.CSSStyleSheet", 2728 + "api.CSSStyleSheet.CSSStyleSheet.options_baseURL_parameter", 2729 + "api.CSSStyleSheet.replace", 2730 + "api.CSSStyleSheet.replaceSync", 2731 + "api.Document.adoptedStyleSheets", 2732 + "api.ShadowRoot.adoptedStyleSheets" 2733 + ], 2734 + "firefox_usage": null, 2735 + "firefox_observable": null 2736 + }, 2737 + { 2738 + "name": "text-wrap", 2739 + "usage": 0.09580587044277986, 2740 + "source": "custom_metrics", 2741 + "observable": "text-wrap", 2742 + "observable_type": "css_property", 2743 + "bcd_key_count": 2, 2744 + "bcd_keys": [ 2745 + "css.properties.text-wrap", 2746 + "css.properties.text-wrap.wrap" 2747 + ], 2748 + "firefox_usage": 0.20867073416959023, 2749 + "firefox_observable": "css.properties.text-wrap" 2750 + }, 2751 + { 2752 + "name": "media-query-range-syntax", 2753 + "usage": 0.09326128, 2754 + "source": "chrome_popularity", 2755 + "observable": null, 2756 + "observable_type": "css_atrule", 2757 + "bcd_key_count": 1, 2758 + "bcd_keys": [ 2759 + "css.at-rules.media.range_syntax" 2760 + ], 2761 + "firefox_usage": null, 2762 + "firefox_observable": null 2763 + }, 2764 + { 2765 + "name": "font-metric-overrides", 2766 + "usage": 0.09134683, 2767 + "source": "chrome_popularity", 2768 + "observable": null, 2769 + "observable_type": "blink_api", 2770 + "bcd_key_count": 6, 2771 + "bcd_keys": [ 2772 + "api.FontFace.ascentOverride", 2773 + "api.FontFace.descentOverride", 2774 + "api.FontFace.lineGapOverride", 2775 + "css.at-rules.font-face.ascent-override", 2776 + "css.at-rules.font-face.descent-override", 2777 + "css.at-rules.font-face.line-gap-override" 2778 + ], 2779 + "firefox_usage": null, 2780 + "firefox_observable": null 2781 + }, 2782 + { 2783 + "name": "container-queries", 2784 + "usage": 0.08816762451582091, 2785 + "source": "custom_metrics", 2786 + "observable": "container-type", 2787 + "observable_type": "css_property", 2788 + "bcd_key_count": 12, 2789 + "bcd_keys": [ 2790 + "api.CSSContainerRule", 2791 + "api.CSSContainerRule.containerName", 2792 + "api.CSSContainerRule.containerQuery", 2793 + "css.at-rules.container", 2794 + "css.properties.container", 2795 + "css.properties.container-name", 2796 + "css.properties.container-name.none", 2797 + "css.properties.container-type", 2798 + "css.properties.container-type.inline-size", 2799 + "css.properties.container-type.normal", 2800 + "css.properties.container-type.size", 2801 + "css.types.length.container_query_length_units" 2802 + ], 2803 + "firefox_usage": 0.06717193484928506, 2804 + "firefox_observable": "css.properties.container-type" 2805 + }, 2806 + { 2807 + "name": "compression-dictionary-transport", 2808 + "usage": 0.08578132, 2809 + "source": "chrome_popularity", 2810 + "observable": null, 2811 + "observable_type": "html_element", 2812 + "bcd_key_count": 8, 2813 + "bcd_keys": [ 2814 + "html.elements.link.rel.compression-dictionary", 2815 + "http.headers.Accept-Encoding.dcb", 2816 + "http.headers.Accept-Encoding.dcz", 2817 + "http.headers.Available-Dictionary", 2818 + "http.headers.Content-Encoding.dcb", 2819 + "http.headers.Content-Encoding.dcz", 2820 + "http.headers.Dictionary-ID", 2821 + "http.headers.Use-As-Dictionary" 2822 + ], 2823 + "firefox_usage": null, 2824 + "firefox_observable": null 2825 + }, 2826 + { 2827 + "name": "html-wrapper-methods", 2828 + "usage": 0.08386845, 2829 + "source": "chrome_popularity", 2830 + "observable": null, 2831 + "observable_type": "js_builtin", 2832 + "bcd_key_count": 14, 2833 + "bcd_keys": [ 2834 + "javascript.builtins.String.anchor", 2835 + "javascript.builtins.String.big", 2836 + "javascript.builtins.String.blink", 2837 + "javascript.builtins.String.bold", 2838 + "javascript.builtins.String.fixed", 2839 + "javascript.builtins.String.fontcolor", 2840 + "javascript.builtins.String.fontsize", 2841 + "javascript.builtins.String.italics", 2842 + "javascript.builtins.String.link", 2843 + "javascript.builtins.String.small", 2844 + "javascript.builtins.String.strike", 2845 + "javascript.builtins.String.sub", 2846 + "javascript.builtins.String.substr", 2847 + "javascript.builtins.String.sup" 2848 + ], 2849 + "firefox_usage": null, 2850 + "firefox_observable": null 2851 + }, 2852 + { 2853 + "name": "with", 2854 + "usage": 0.08150589, 2855 + "source": "chrome_popularity", 2856 + "observable": null, 2857 + "observable_type": "js_builtin", 2858 + "bcd_key_count": 3, 2859 + "bcd_keys": [ 2860 + "javascript.builtins.Array.@@unscopables", 2861 + "javascript.builtins.Symbol.unscopables", 2862 + "javascript.statements.with" 2863 + ], 2864 + "firefox_usage": null, 2865 + "firefox_observable": null 2866 + }, 2867 + { 2868 + "name": "keyboard-map", 2869 + "usage": 0.08067136, 2870 + "source": "chrome_popularity", 2871 + "observable": null, 2872 + "observable_type": "blink_api", 2873 + "bcd_key_count": 10, 2874 + "bcd_keys": [ 2875 + "api.Keyboard.getLayoutMap", 2876 + "api.KeyboardLayoutMap", 2877 + "api.KeyboardLayoutMap.@@iterator", 2878 + "api.KeyboardLayoutMap.entries", 2879 + "api.KeyboardLayoutMap.forEach", 2880 + "api.KeyboardLayoutMap.get", 2881 + "api.KeyboardLayoutMap.has", 2882 + "api.KeyboardLayoutMap.keys", 2883 + "api.KeyboardLayoutMap.size", 2884 + "api.KeyboardLayoutMap.values" 2885 + ], 2886 + "firefox_usage": 0.0021185823633944087, 2887 + "firefox_observable": "api.KeyboardLayoutMap" 2888 + }, 2889 + { 2890 + "name": "align-content-block", 2891 + "usage": 0.07071306, 2892 + "source": "chrome_popularity", 2893 + "observable": null, 2894 + "observable_type": "css_property", 2895 + "bcd_key_count": 1, 2896 + "bcd_keys": [ 2897 + "css.properties.align-content.block_context" 2898 + ], 2899 + "firefox_usage": null, 2900 + "firefox_observable": null 2901 + }, 2902 + { 2903 + "name": "color-mix", 2904 + "usage": 0.07040583, 2905 + "source": "chrome_popularity", 2906 + "observable": null, 2907 + "observable_type": "css_type", 2908 + "bcd_key_count": 1, 2909 + "bcd_keys": [ 2910 + "css.types.color.color-mix" 2911 + ], 2912 + "firefox_usage": null, 2913 + "firefox_observable": null 2914 + }, 2915 + { 2916 + "name": "string-wellformed", 2917 + "usage": 0.06918426, 2918 + "source": "chrome_popularity", 2919 + "observable": null, 2920 + "observable_type": "js_builtin", 2921 + "bcd_key_count": 2, 2922 + "bcd_keys": [ 2923 + "javascript.builtins.String.isWellFormed", 2924 + "javascript.builtins.String.toWellFormed" 2925 + ], 2926 + "firefox_usage": null, 2927 + "firefox_observable": null 2928 + }, 2929 + { 2930 + "name": "border-image", 2931 + "usage": 0.06777580790103131, 2932 + "source": "custom_metrics", 2933 + "observable": "border-image", 2934 + "observable_type": "css_property", 2935 + "bcd_key_count": 14, 2936 + "bcd_keys": [ 2937 + "css.properties.border-image", 2938 + "css.properties.border-image-outset", 2939 + "css.properties.border-image-repeat", 2940 + "css.properties.border-image-repeat.repeat", 2941 + "css.properties.border-image-repeat.round", 2942 + "css.properties.border-image-repeat.space", 2943 + "css.properties.border-image-repeat.stretch", 2944 + "css.properties.border-image-slice", 2945 + "css.properties.border-image-source", 2946 + "css.properties.border-image-width", 2947 + "css.properties.border-image-width.auto", 2948 + "css.properties.border-image.fill", 2949 + "css.properties.border-image.gradient", 2950 + "css.properties.border-image.optional_border_image_slice" 2951 + ], 2952 + "firefox_usage": 0.09215214482209379, 2953 + "firefox_observable": "css.properties.border-image" 2954 + }, 2955 + { 2956 + "name": "file-selector-button", 2957 + "usage": 0.06517640879641876, 2958 + "source": "custom_metrics", 2959 + "observable": "file-selector-button", 2960 + "observable_type": "css_selector", 2961 + "bcd_key_count": 1, 2962 + "bcd_keys": [ 2963 + "css.selectors.file-selector-button" 2964 + ], 2965 + "firefox_usage": null, 2966 + "firefox_observable": null 2967 + }, 2968 + { 2969 + "name": "regexp-static-properties", 2970 + "usage": 0.06357131, 2971 + "source": "chrome_popularity", 2972 + "observable": null, 2973 + "observable_type": "js_builtin", 2974 + "bcd_key_count": 6, 2975 + "bcd_keys": [ 2976 + "javascript.builtins.RegExp.input", 2977 + "javascript.builtins.RegExp.lastMatch", 2978 + "javascript.builtins.RegExp.lastParen", 2979 + "javascript.builtins.RegExp.leftContext", 2980 + "javascript.builtins.RegExp.n", 2981 + "javascript.builtins.RegExp.rightContext" 2982 + ], 2983 + "firefox_usage": null, 2984 + "firefox_observable": null 2985 + }, 2986 + { 2987 + "name": "device-orientation-events", 2988 + "usage": 0.06257137, 2989 + "source": "chrome_popularity", 2990 + "observable": null, 2991 + "observable_type": "blink_api", 2992 + "bcd_key_count": 25, 2993 + "bcd_keys": [ 2994 + "api.DeviceMotionEvent", 2995 + "api.DeviceMotionEvent.DeviceMotionEvent", 2996 + "api.DeviceMotionEvent.acceleration", 2997 + "api.DeviceMotionEvent.accelerationIncludingGravity", 2998 + "api.DeviceMotionEvent.interval", 2999 + "api.DeviceMotionEvent.requestPermission_static", 3000 + "api.DeviceMotionEvent.rotationRate", 3001 + "api.DeviceMotionEventAcceleration", 3002 + "api.DeviceMotionEventAcceleration.x", 3003 + "api.DeviceMotionEventAcceleration.y", 3004 + "api.DeviceMotionEventAcceleration.z", 3005 + "api.DeviceMotionEventRotationRate", 3006 + "api.DeviceMotionEventRotationRate.alpha", 3007 + "api.DeviceMotionEventRotationRate.beta", 3008 + "api.DeviceMotionEventRotationRate.gamma", 3009 + "api.DeviceOrientationEvent", 3010 + "api.DeviceOrientationEvent.DeviceOrientationEvent", 3011 + "api.DeviceOrientationEvent.absolute", 3012 + "api.DeviceOrientationEvent.alpha", 3013 + "api.DeviceOrientationEvent.beta", 3014 + "api.DeviceOrientationEvent.gamma", 3015 + "api.DeviceOrientationEvent.requestPermission_static", 3016 + "api.Window.devicemotion_event", 3017 + "api.Window.deviceorientation_event", 3018 + "api.Window.deviceorientationabsolute_event" 3019 + ], 3020 + "firefox_usage": 0.0010748491130807137, 3021 + "firefox_observable": "api.DeviceMotionEventRotationRate" 3022 + }, 3023 + { 3024 + "name": "pdf-viewer", 3025 + "usage": 0.06130341, 3026 + "source": "chrome_popularity", 3027 + "observable": null, 3028 + "observable_type": "blink_api", 3029 + "bcd_key_count": 1, 3030 + "bcd_keys": [ 3031 + "api.Navigator.pdfViewerEnabled" 3032 + ], 3033 + "firefox_usage": null, 3034 + "firefox_observable": null 3035 + }, 3036 + { 3037 + "name": "partitioned-cookies", 3038 + "usage": 0.06046365914786967, 3039 + "source": "blink_features", 3040 + "observable": "api.CookieStore.delete.partitioned_option", 3041 + "observable_type": "blink_api", 3042 + "bcd_key_count": 6, 3043 + "bcd_keys": [ 3044 + "api.CookieStore.delete.partitioned_option", 3045 + "api.CookieStore.get.partitioned_return_property", 3046 + "api.CookieStore.set.partitioned_option", 3047 + "api.ExtendableCookieChangeEvent.changed.partitioned_property", 3048 + "api.ExtendableCookieChangeEvent.deleted.partitioned_property", 3049 + "http.headers.Set-Cookie.Partitioned" 3050 + ], 3051 + "firefox_usage": null, 3052 + "firefox_observable": null 3053 + }, 3054 + { 3055 + "name": "cookie-store", 3056 + "usage": 0.06046365914786967, 3057 + "source": "blink_features", 3058 + "observable": "api.CookieStore", 3059 + "observable_type": "blink_api", 3060 + "bcd_key_count": 29, 3061 + "bcd_keys": [ 3062 + "api.CookieChangeEvent", 3063 + "api.CookieChangeEvent.CookieChangeEvent", 3064 + "api.CookieChangeEvent.changed", 3065 + "api.CookieChangeEvent.deleted", 3066 + "api.CookieStore", 3067 + "api.CookieStore.change_event", 3068 + "api.CookieStore.delete", 3069 + "api.CookieStore.get", 3070 + "api.CookieStore.get.domain_return_property", 3071 + "api.CookieStore.get.expires_return_property", 3072 + "api.CookieStore.get.name_return_property", 3073 + "api.CookieStore.get.path_return_property", 3074 + "api.CookieStore.get.sameSite_return_property", 3075 + "api.CookieStore.get.secure_return_property", 3076 + "api.CookieStore.get.value_return_property", 3077 + "api.CookieStore.getAll", 3078 + "api.CookieStore.set", 3079 + "api.CookieStoreManager", 3080 + "api.CookieStoreManager.getSubscriptions", 3081 + "api.CookieStoreManager.subscribe", 3082 + "api.CookieStoreManager.unsubscribe", 3083 + "api.ExtendableCookieChangeEvent", 3084 + "api.ExtendableCookieChangeEvent.ExtendableCookieChangeEvent", 3085 + "api.ExtendableCookieChangeEvent.changed", 3086 + "api.ExtendableCookieChangeEvent.deleted", 3087 + "api.ServiceWorkerGlobalScope.cookieStore", 3088 + "api.ServiceWorkerGlobalScope.cookiechange_event", 3089 + "api.ServiceWorkerRegistration.cookies", 3090 + "api.Window.cookieStore" 3091 + ], 3092 + "firefox_usage": 0.01066651608106001, 3093 + "firefox_observable": "api.CookieStore" 3094 + }, 3095 + { 3096 + "name": "media-playback-quality", 3097 + "usage": 0.06044252, 3098 + "source": "chrome_popularity", 3099 + "observable": null, 3100 + "observable_type": "blink_api", 3101 + "bcd_key_count": 5, 3102 + "bcd_keys": [ 3103 + "api.HTMLVideoElement.getVideoPlaybackQuality", 3104 + "api.VideoPlaybackQuality", 3105 + "api.VideoPlaybackQuality.creationTime", 3106 + "api.VideoPlaybackQuality.droppedVideoFrames", 3107 + "api.VideoPlaybackQuality.totalVideoFrames" 3108 + ], 3109 + "firefox_usage": null, 3110 + "firefox_observable": null 3111 + }, 3112 + { 3113 + "name": "print-color-adjust", 3114 + "usage": 0.05995463884546106, 3115 + "source": "custom_metrics", 3116 + "observable": "print-color-adjust", 3117 + "observable_type": "css_property", 3118 + "bcd_key_count": 3, 3119 + "bcd_keys": [ 3120 + "css.properties.print-color-adjust", 3121 + "css.properties.print-color-adjust.economy", 3122 + "css.properties.print-color-adjust.exact" 3123 + ], 3124 + "firefox_usage": 0.05068898745354016, 3125 + "firefox_observable": "css.properties.print-color-adjust" 3126 + }, 3127 + { 3128 + "name": "webvtt", 3129 + "usage": 0.05747126436781609, 3130 + "source": "blink_features", 3131 + "observable": "api.VTTCue", 3132 + "observable_type": "blink_api", 3133 + "bcd_key_count": 7, 3134 + "bcd_keys": [ 3135 + "api.VTTCue", 3136 + "api.VTTCue.VTTCue", 3137 + "api.VTTCue.getCueAsHTML", 3138 + "api.VTTCue.text", 3139 + "api.VTTCue.text.all_html_character_references", 3140 + "css.selectors.cue", 3141 + "css.selectors.cue.selector_argument" 3142 + ], 3143 + "firefox_usage": null, 3144 + "firefox_observable": null 3145 + }, 3146 + { 3147 + "name": "set-methods", 3148 + "usage": 0.05532563, 3149 + "source": "chrome_popularity", 3150 + "observable": null, 3151 + "observable_type": "js_builtin", 3152 + "bcd_key_count": 7, 3153 + "bcd_keys": [ 3154 + "javascript.builtins.Set.difference", 3155 + "javascript.builtins.Set.intersection", 3156 + "javascript.builtins.Set.isDisjointFrom", 3157 + "javascript.builtins.Set.isSubsetOf", 3158 + "javascript.builtins.Set.isSupersetOf", 3159 + "javascript.builtins.Set.symmetricDifference", 3160 + "javascript.builtins.Set.union" 3161 + ], 3162 + "firefox_usage": null, 3163 + "firefox_observable": null 3164 + }, 3165 + { 3166 + "name": "url-canparse", 3167 + "usage": 0.05433871, 3168 + "source": "chrome_popularity", 3169 + "observable": null, 3170 + "observable_type": "blink_api", 3171 + "bcd_key_count": 1, 3172 + "bcd_keys": [ 3173 + "api.URL.canParse_static" 3174 + ], 3175 + "firefox_usage": null, 3176 + "firefox_observable": null 3177 + }, 3178 + { 3179 + "name": "marker", 3180 + "usage": 0.05262183200302054, 3181 + "source": "custom_metrics", 3182 + "observable": "marker", 3183 + "observable_type": "css_selector", 3184 + "bcd_key_count": 2, 3185 + "bcd_keys": [ 3186 + "css.selectors.marker", 3187 + "css.selectors.marker.animation_and_transition_support" 3188 + ], 3189 + "firefox_usage": null, 3190 + "firefox_observable": null 3191 + }, 3192 + { 3193 + "name": "color-scheme", 3194 + "usage": 0.05074268680894525, 3195 + "source": "custom_metrics", 3196 + "observable": "color-scheme", 3197 + "observable_type": "css_property", 3198 + "bcd_key_count": 6, 3199 + "bcd_keys": [ 3200 + "css.properties.color-scheme", 3201 + "css.properties.color-scheme.dark", 3202 + "css.properties.color-scheme.light", 3203 + "css.properties.color-scheme.normal", 3204 + "css.properties.color-scheme.only", 3205 + "html.elements.meta.name.color-scheme" 3206 + ], 3207 + "firefox_usage": 0.1470620434729665, 3208 + "firefox_observable": "css.properties.color-scheme" 3209 + }, 3210 + { 3211 + "name": "document-caretpositionfrompoint", 3212 + "usage": 0.05060111, 3213 + "source": "chrome_popularity", 3214 + "observable": null, 3215 + "observable_type": "blink_api", 3216 + "bcd_key_count": 6, 3217 + "bcd_keys": [ 3218 + "api.CaretPosition", 3219 + "api.CaretPosition.getClientRect", 3220 + "api.CaretPosition.offset", 3221 + "api.CaretPosition.offsetNode", 3222 + "api.Document.caretPositionFromPoint", 3223 + "api.Document.caretPositionFromPoint.options_parameter" 3224 + ], 3225 + "firefox_usage": null, 3226 + "firefox_observable": null 3227 + }, 3228 + { 3229 + "name": "content-visibility", 3230 + "usage": 0.04842528237753556, 3231 + "source": "custom_metrics", 3232 + "observable": "content-visibility", 3233 + "observable_type": "css_property", 3234 + "bcd_key_count": 8, 3235 + "bcd_keys": [ 3236 + "api.ContentVisibilityAutoStateChangeEvent", 3237 + "api.ContentVisibilityAutoStateChangeEvent.ContentVisibilityAutoStateChangeEvent", 3238 + "api.ContentVisibilityAutoStateChangeEvent.skipped", 3239 + "api.Element.contentvisibilityautostatechange_event", 3240 + "css.properties.content-visibility", 3241 + "css.properties.content-visibility.auto", 3242 + "css.properties.content-visibility.hidden", 3243 + "css.properties.content-visibility.visible" 3244 + ], 3245 + "firefox_usage": 0.05769310135650326, 3246 + "firefox_observable": "css.properties.content-visibility" 3247 + }, 3248 + { 3249 + "name": "ch", 3250 + "usage": 0.04761499, 3251 + "source": "chrome_popularity", 3252 + "observable": null, 3253 + "observable_type": "css_type", 3254 + "bcd_key_count": 1, 3255 + "bcd_keys": [ 3256 + "css.types.length.ch" 3257 + ], 3258 + "firefox_usage": null, 3259 + "firefox_observable": null 3260 + }, 3261 + { 3262 + "name": "dynamic-range", 3263 + "usage": 0.04497831, 3264 + "source": "chrome_popularity", 3265 + "observable": null, 3266 + "observable_type": "css_atrule", 3267 + "bcd_key_count": 1, 3268 + "bcd_keys": [ 3269 + "css.at-rules.media.dynamic-range" 3270 + ], 3271 + "firefox_usage": null, 3272 + "firefox_observable": null 3273 + }, 3274 + { 3275 + "name": "promise-try", 3276 + "usage": 0.04373023, 3277 + "source": "chrome_popularity", 3278 + "observable": null, 3279 + "observable_type": "js_builtin", 3280 + "bcd_key_count": 1, 3281 + "bcd_keys": [ 3282 + "javascript.builtins.Promise.try" 3283 + ], 3284 + "firefox_usage": null, 3285 + "firefox_observable": null 3286 + }, 3287 + { 3288 + "name": "web-locks", 3289 + "usage": 0.04315989, 3290 + "source": "chrome_popularity", 3291 + "observable": null, 3292 + "observable_type": "blink_api", 3293 + "bcd_key_count": 8, 3294 + "bcd_keys": [ 3295 + "api.Lock", 3296 + "api.Lock.mode", 3297 + "api.Lock.name", 3298 + "api.LockManager", 3299 + "api.LockManager.query", 3300 + "api.LockManager.request", 3301 + "api.Navigator.locks", 3302 + "api.WorkerNavigator.locks" 3303 + ], 3304 + "firefox_usage": null, 3305 + "firefox_observable": null 3306 + }, 3307 + { 3308 + "name": "relative-color", 3309 + "usage": 0.04151111, 3310 + "source": "chrome_popularity", 3311 + "observable": null, 3312 + "observable_type": "css_type", 3313 + "bcd_key_count": 9, 3314 + "bcd_keys": [ 3315 + "css.types.calc.color_component", 3316 + "css.types.color.color.relative_syntax", 3317 + "css.types.color.hsl.relative_syntax", 3318 + "css.types.color.hwb.relative_syntax", 3319 + "css.types.color.lab.relative_syntax", 3320 + "css.types.color.lch.relative_syntax", 3321 + "css.types.color.oklab.relative_syntax", 3322 + "css.types.color.oklch.relative_syntax", 3323 + "css.types.color.rgb.relative_syntax" 3324 + ], 3325 + "firefox_usage": null, 3326 + "firefox_observable": null 3327 + }, 3328 + { 3329 + "name": "iterator-methods", 3330 + "usage": 0.04029988, 3331 + "source": "chrome_popularity", 3332 + "observable": null, 3333 + "observable_type": "js_builtin", 3334 + "bcd_key_count": 13, 3335 + "bcd_keys": [ 3336 + "javascript.builtins.Iterator.Iterator", 3337 + "javascript.builtins.Iterator.drop", 3338 + "javascript.builtins.Iterator.every", 3339 + "javascript.builtins.Iterator.filter", 3340 + "javascript.builtins.Iterator.find", 3341 + "javascript.builtins.Iterator.flatMap", 3342 + "javascript.builtins.Iterator.forEach", 3343 + "javascript.builtins.Iterator.from", 3344 + "javascript.builtins.Iterator.map", 3345 + "javascript.builtins.Iterator.reduce", 3346 + "javascript.builtins.Iterator.some", 3347 + "javascript.builtins.Iterator.take", 3348 + "javascript.builtins.Iterator.toArray" 3349 + ], 3350 + "firefox_usage": null, 3351 + "firefox_observable": null 3352 + }, 3353 + { 3354 + "name": "box-decoration-break", 3355 + "usage": 0.038174969801140345, 3356 + "source": "custom_metrics", 3357 + "observable": "box-decoration-break", 3358 + "observable_type": "css_property", 3359 + "bcd_key_count": 3, 3360 + "bcd_keys": [ 3361 + "css.properties.box-decoration-break", 3362 + "css.properties.box-decoration-break.clone", 3363 + "css.properties.box-decoration-break.slice" 3364 + ], 3365 + "firefox_usage": 0.04966524108691367, 3366 + "firefox_observable": "css.properties.box-decoration-break" 3367 + }, 3368 + { 3369 + "name": "fetchlater", 3370 + "usage": 0.03797306, 3371 + "source": "chrome_popularity", 3372 + "observable": null, 3373 + "observable_type": "blink_api", 3374 + "bcd_key_count": 5, 3375 + "bcd_keys": [ 3376 + "api.FetchLaterResult", 3377 + "api.FetchLaterResult.activated", 3378 + "api.Window.fetchLater", 3379 + "http.headers.Permissions-Policy.deferred-fetch", 3380 + "http.headers.Permissions-Policy.deferred-fetch-minimal" 3381 + ], 3382 + "firefox_usage": null, 3383 + "firefox_observable": null 3384 + }, 3385 + { 3386 + "name": "nth-child-of", 3387 + "usage": 0.03511571, 3388 + "source": "chrome_popularity", 3389 + "observable": null, 3390 + "observable_type": "css_selector", 3391 + "bcd_key_count": 2, 3392 + "bcd_keys": [ 3393 + "css.selectors.nth-child.of_syntax", 3394 + "css.selectors.nth-last-child.of_syntax" 3395 + ], 3396 + "firefox_usage": null, 3397 + "firefox_observable": null 3398 + }, 3399 + { 3400 + "name": "prefers-reduced-transparency", 3401 + "usage": 0.03507494, 3402 + "source": "chrome_popularity", 3403 + "observable": null, 3404 + "observable_type": "css_atrule", 3405 + "bcd_key_count": 2, 3406 + "bcd_keys": [ 3407 + "css.at-rules.media.prefers-reduced-transparency", 3408 + "http.headers.Sec-CH-Prefers-Reduced-Transparency" 3409 + ], 3410 + "firefox_usage": null, 3411 + "firefox_observable": null 3412 + }, 3413 + { 3414 + "name": "web-audio", 3415 + "usage": 0.03420405, 3416 + "source": "chrome_popularity", 3417 + "observable": null, 3418 + "observable_type": "blink_api", 3419 + "bcd_key_count": 204, 3420 + "bcd_keys": [ 3421 + "api.AnalyserNode", 3422 + "api.AnalyserNode.AnalyserNode", 3423 + "api.AnalyserNode.fftSize", 3424 + "api.AnalyserNode.frequencyBinCount", 3425 + "api.AnalyserNode.getByteFrequencyData", 3426 + "api.AnalyserNode.getByteTimeDomainData", 3427 + "api.AnalyserNode.getFloatFrequencyData", 3428 + "api.AnalyserNode.getFloatTimeDomainData", 3429 + "api.AnalyserNode.maxDecibels", 3430 + "api.AnalyserNode.minDecibels", 3431 + "api.AnalyserNode.smoothingTimeConstant", 3432 + "api.AudioBuffer", 3433 + "api.AudioBuffer.AudioBuffer", 3434 + "api.AudioBuffer.copyFromChannel", 3435 + "api.AudioBuffer.copyToChannel", 3436 + "api.AudioBuffer.duration", 3437 + "api.AudioBuffer.getChannelData", 3438 + "api.AudioBuffer.length", 3439 + "api.AudioBuffer.numberOfChannels", 3440 + "api.AudioBuffer.sampleRate", 3441 + "api.AudioBufferSourceNode", 3442 + "api.AudioBufferSourceNode.AudioBufferSourceNode", 3443 + "api.AudioBufferSourceNode.buffer", 3444 + "api.AudioBufferSourceNode.detune", 3445 + "api.AudioBufferSourceNode.loop", 3446 + "api.AudioBufferSourceNode.loopEnd", 3447 + "api.AudioBufferSourceNode.loopStart", 3448 + "api.AudioBufferSourceNode.playbackRate", 3449 + "api.AudioBufferSourceNode.start", 3450 + "api.AudioContext", 3451 + "api.AudioContext.AudioContext", 3452 + "api.AudioContext.AudioContext.options_latencyHint_parameter", 3453 + "api.AudioContext.AudioContext.options_sampleRate_parameter", 3454 + "api.AudioContext.AudioContext.options_sinkId_parameter", 3455 + "api.AudioContext.baseLatency", 3456 + "api.AudioContext.close", 3457 + "api.AudioContext.createMediaElementSource", 3458 + "api.AudioContext.createMediaStreamDestination", 3459 + "api.AudioContext.createMediaStreamSource", 3460 + "api.AudioContext.createMediaStreamTrackSource", 3461 + "api.AudioContext.error_event", 3462 + "api.AudioContext.getOutputTimestamp", 3463 + "api.AudioContext.outputLatency", 3464 + "api.AudioContext.resume", 3465 + "api.AudioContext.setSinkId", 3466 + "api.AudioContext.sinkId", 3467 + "api.AudioContext.sinkchange_event", 3468 + "api.AudioContext.suspend", 3469 + "api.AudioDestinationNode", 3470 + "api.AudioDestinationNode.maxChannelCount", 3471 + "api.AudioListener", 3472 + "api.AudioListener.forwardX", 3473 + "api.AudioListener.forwardY", 3474 + "api.AudioListener.forwardZ", 3475 + "api.AudioListener.positionX", 3476 + "api.AudioListener.positionY", 3477 + "api.AudioListener.positionZ", 3478 + "api.AudioListener.upX", 3479 + "api.AudioListener.upY", 3480 + "api.AudioListener.upZ", 3481 + "api.AudioNode", 3482 + "api.AudioNode.channelCount", 3483 + "api.AudioNode.channelCountMode", 3484 + "api.AudioNode.channelInterpretation", 3485 + "api.AudioNode.connect", 3486 + "api.AudioNode.context", 3487 + "api.AudioNode.disconnect", 3488 + "api.AudioNode.disconnect.destination_parameter", 3489 + "api.AudioNode.disconnect.input_parameter", 3490 + "api.AudioNode.numberOfInputs", 3491 + "api.AudioNode.numberOfOutputs", 3492 + "api.AudioParam", 3493 + "api.AudioParam.automationRate", 3494 + "api.AudioParam.cancelAndHoldAtTime", 3495 + "api.AudioParam.cancelScheduledValues", 3496 + "api.AudioParam.defaultValue", 3497 + "api.AudioParam.exponentialRampToValueAtTime", 3498 + "api.AudioParam.linearRampToValueAtTime", 3499 + "api.AudioParam.maxValue", 3500 + "api.AudioParam.minValue", 3501 + "api.AudioParam.setTargetAtTime", 3502 + "api.AudioParam.setValueAtTime", 3503 + "api.AudioParam.setValueCurveAtTime", 3504 + "api.AudioParam.value", 3505 + "api.AudioParamMap", 3506 + "api.AudioParamMap.@@iterator", 3507 + "api.AudioParamMap.entries", 3508 + "api.AudioParamMap.forEach", 3509 + "api.AudioParamMap.get", 3510 + "api.AudioParamMap.has", 3511 + "api.AudioParamMap.keys", 3512 + "api.AudioParamMap.size", 3513 + "api.AudioParamMap.values", 3514 + "api.AudioScheduledSourceNode", 3515 + "api.AudioScheduledSourceNode.ended_event", 3516 + "api.AudioScheduledSourceNode.start", 3517 + "api.AudioScheduledSourceNode.stop", 3518 + "api.AudioSinkInfo", 3519 + "api.AudioSinkInfo.type", 3520 + "api.BaseAudioContext", 3521 + "api.BaseAudioContext.createAnalyser", 3522 + "api.BaseAudioContext.createBiquadFilter", 3523 + "api.BaseAudioContext.createBuffer", 3524 + "api.BaseAudioContext.createBufferSource", 3525 + "api.BaseAudioContext.createChannelMerger", 3526 + "api.BaseAudioContext.createChannelSplitter", 3527 + "api.BaseAudioContext.createConstantSource", 3528 + "api.BaseAudioContext.createConvolver", 3529 + "api.BaseAudioContext.createDelay", 3530 + "api.BaseAudioContext.createDynamicsCompressor", 3531 + "api.BaseAudioContext.createGain", 3532 + "api.BaseAudioContext.createIIRFilter", 3533 + "api.BaseAudioContext.createOscillator", 3534 + "api.BaseAudioContext.createPanner", 3535 + "api.BaseAudioContext.createPeriodicWave", 3536 + "api.BaseAudioContext.createPeriodicWave.constraints_disableNormalization_parameter", 3537 + "api.BaseAudioContext.createStereoPanner", 3538 + "api.BaseAudioContext.createWaveShaper", 3539 + "api.BaseAudioContext.currentTime", 3540 + "api.BaseAudioContext.decodeAudioData", 3541 + "api.BaseAudioContext.decodeAudioData.returns_promise", 3542 + "api.BaseAudioContext.destination", 3543 + "api.BaseAudioContext.listener", 3544 + "api.BaseAudioContext.sampleRate", 3545 + "api.BaseAudioContext.state", 3546 + "api.BaseAudioContext.statechange_event", 3547 + "api.BiquadFilterNode", 3548 + "api.BiquadFilterNode.BiquadFilterNode", 3549 + "api.BiquadFilterNode.Q", 3550 + "api.BiquadFilterNode.detune", 3551 + "api.BiquadFilterNode.frequency", 3552 + "api.BiquadFilterNode.gain", 3553 + "api.BiquadFilterNode.getFrequencyResponse", 3554 + "api.BiquadFilterNode.type", 3555 + "api.ChannelMergerNode", 3556 + "api.ChannelMergerNode.ChannelMergerNode", 3557 + "api.ChannelSplitterNode", 3558 + "api.ChannelSplitterNode.ChannelSplitterNode", 3559 + "api.ConstantSourceNode", 3560 + "api.ConstantSourceNode.ConstantSourceNode", 3561 + "api.ConstantSourceNode.offset", 3562 + "api.ConvolverNode", 3563 + "api.ConvolverNode.ConvolverNode", 3564 + "api.ConvolverNode.buffer", 3565 + "api.ConvolverNode.normalize", 3566 + "api.DelayNode", 3567 + "api.DelayNode.DelayNode", 3568 + "api.DelayNode.delayTime", 3569 + "api.DynamicsCompressorNode", 3570 + "api.DynamicsCompressorNode.DynamicsCompressorNode", 3571 + "api.DynamicsCompressorNode.attack", 3572 + "api.DynamicsCompressorNode.knee", 3573 + "api.DynamicsCompressorNode.ratio", 3574 + "api.DynamicsCompressorNode.reduction", 3575 + "api.DynamicsCompressorNode.release", 3576 + "api.DynamicsCompressorNode.threshold", 3577 + "api.GainNode", 3578 + "api.GainNode.GainNode", 3579 + "api.GainNode.gain", 3580 + "api.IIRFilterNode", 3581 + "api.IIRFilterNode.IIRFilterNode", 3582 + "api.IIRFilterNode.getFrequencyResponse", 3583 + "api.MediaElementAudioSourceNode", 3584 + "api.MediaElementAudioSourceNode.MediaElementAudioSourceNode", 3585 + "api.MediaElementAudioSourceNode.mediaElement", 3586 + "api.MediaStreamAudioDestinationNode", 3587 + "api.MediaStreamAudioDestinationNode.MediaStreamAudioDestinationNode", 3588 + "api.MediaStreamAudioDestinationNode.stream", 3589 + "api.MediaStreamAudioSourceNode", 3590 + "api.MediaStreamAudioSourceNode.MediaStreamAudioSourceNode", 3591 + "api.MediaStreamAudioSourceNode.mediaStream", 3592 + "api.MediaStreamTrackAudioSourceNode", 3593 + "api.MediaStreamTrackAudioSourceNode.MediaStreamTrackAudioSourceNode", 3594 + "api.OscillatorNode", 3595 + "api.OscillatorNode.OscillatorNode", 3596 + "api.OscillatorNode.detune", 3597 + "api.OscillatorNode.frequency", 3598 + "api.OscillatorNode.setPeriodicWave", 3599 + "api.OscillatorNode.type", 3600 + "api.PannerNode", 3601 + "api.PannerNode.PannerNode", 3602 + "api.PannerNode.coneInnerAngle", 3603 + "api.PannerNode.coneOuterAngle", 3604 + "api.PannerNode.coneOuterGain", 3605 + "api.PannerNode.distanceModel", 3606 + "api.PannerNode.maxDistance", 3607 + "api.PannerNode.orientationX", 3608 + "api.PannerNode.orientationY", 3609 + "api.PannerNode.orientationZ", 3610 + "api.PannerNode.panningModel", 3611 + "api.PannerNode.positionX", 3612 + "api.PannerNode.positionY", 3613 + "api.PannerNode.positionZ", 3614 + "api.PannerNode.refDistance", 3615 + "api.PannerNode.rolloffFactor", 3616 + "api.PeriodicWave", 3617 + "api.PeriodicWave.PeriodicWave", 3618 + "api.StereoPannerNode", 3619 + "api.StereoPannerNode.StereoPannerNode", 3620 + "api.StereoPannerNode.pan", 3621 + "api.WaveShaperNode", 3622 + "api.WaveShaperNode.WaveShaperNode", 3623 + "api.WaveShaperNode.curve", 3624 + "api.WaveShaperNode.oversample" 3625 + ], 3626 + "firefox_usage": null, 3627 + "firefox_observable": null 3628 + }, 3629 + { 3630 + "name": "check-visibility", 3631 + "usage": 0.0337996, 3632 + "source": "chrome_popularity", 3633 + "observable": null, 3634 + "observable_type": "blink_api", 3635 + "bcd_key_count": 6, 3636 + "bcd_keys": [ 3637 + "api.Element.checkVisibility", 3638 + "api.Element.checkVisibility.options_checkOpacity_parameter", 3639 + "api.Element.checkVisibility.options_checkVisibilityCSS_parameter", 3640 + "api.Element.checkVisibility.options_contentVisibilityAuto_parameter", 3641 + "api.Element.checkVisibility.options_opacityProperty_parameter", 3642 + "api.Element.checkVisibility.options_visibilityProperty_parameter" 3643 + ], 3644 + "firefox_usage": null, 3645 + "firefox_observable": null 3646 + }, 3647 + { 3648 + "name": "text-justify", 3649 + "usage": 0.03362911735383686, 3650 + "source": "custom_metrics", 3651 + "observable": "text-justify", 3652 + "observable_type": "css_property", 3653 + "bcd_key_count": 5, 3654 + "bcd_keys": [ 3655 + "css.properties.text-justify", 3656 + "css.properties.text-justify.auto", 3657 + "css.properties.text-justify.inter-character", 3658 + "css.properties.text-justify.inter-word", 3659 + "css.properties.text-justify.none" 3660 + ], 3661 + "firefox_usage": 0.006176128100129998, 3662 + "firefox_observable": "css.properties.text-justify" 3663 + }, 3664 + { 3665 + "name": "font-synthesis", 3666 + "usage": 0.033622216377925424, 3667 + "source": "custom_metrics", 3668 + "observable": "font-synthesis", 3669 + "observable_type": "css_property", 3670 + "bcd_key_count": 5, 3671 + "bcd_keys": [ 3672 + "css.properties.font-synthesis", 3673 + "css.properties.font-synthesis.position", 3674 + "css.properties.font-synthesis.small-caps", 3675 + "css.properties.font-synthesis.style", 3676 + "css.properties.font-synthesis.weight" 3677 + ], 3678 + "firefox_usage": 0.009887290558682694, 3679 + "firefox_observable": "css.properties.font-synthesis" 3680 + }, 3681 + { 3682 + "name": "revert-value", 3683 + "usage": 0.03130349, 3684 + "source": "chrome_popularity", 3685 + "observable": null, 3686 + "observable_type": "css_type", 3687 + "bcd_key_count": 1, 3688 + "bcd_keys": [ 3689 + "css.types.global_keywords.revert" 3690 + ], 3691 + "firefox_usage": null, 3692 + "firefox_observable": null 3693 + }, 3694 + { 3695 + "name": "storage-access", 3696 + "usage": 0.03044302, 3697 + "source": "chrome_popularity", 3698 + "observable": null, 3699 + "observable_type": "blink_api", 3700 + "bcd_key_count": 7, 3701 + "bcd_keys": [ 3702 + "api.Document.hasStorageAccess", 3703 + "api.Document.requestStorageAccess", 3704 + "api.Document.requestStorageAccessFor", 3705 + "api.Permissions.permission_storage-access", 3706 + "api.Permissions.permission_top-level-storage-access", 3707 + "html.elements.iframe.allow.storage-access", 3708 + "http.headers.Permissions-Policy.storage-access" 3709 + ], 3710 + "firefox_usage": null, 3711 + "firefox_observable": null 3712 + }, 3713 + { 3714 + "name": "wasm-sign-extension-operators", 3715 + "usage": 0.02832971, 3716 + "source": "chrome_popularity", 3717 + "observable": null, 3718 + "observable_type": "webassembly", 3719 + "bcd_key_count": 1, 3720 + "bcd_keys": [ 3721 + "webassembly.sign-extension-operations" 3722 + ], 3723 + "firefox_usage": null, 3724 + "firefox_observable": null 3725 + }, 3726 + { 3727 + "name": "font-size-adjust", 3728 + "usage": 0.028212985670359854, 3729 + "source": "custom_metrics", 3730 + "observable": "font-size-adjust", 3731 + "observable_type": "css_property", 3732 + "bcd_key_count": 6, 3733 + "bcd_keys": [ 3734 + "css.at-rules.font-face.size-adjust", 3735 + "css.properties.font-size-adjust", 3736 + "css.properties.font-size-adjust.from-font", 3737 + "css.properties.font-size-adjust.none", 3738 + "css.properties.font-size-adjust.two-values", 3739 + "svg.global_attributes.font-size-adjust" 3740 + ], 3741 + "firefox_usage": 0.015357887722063339, 3742 + "firefox_observable": "css.properties.font-size-adjust" 3743 + }, 3744 + { 3745 + "name": "array-group", 3746 + "usage": 0.02780728, 3747 + "source": "chrome_popularity", 3748 + "observable": null, 3749 + "observable_type": "js_builtin", 3750 + "bcd_key_count": 2, 3751 + "bcd_keys": [ 3752 + "javascript.builtins.Map.groupBy", 3753 + "javascript.builtins.Object.groupBy" 3754 + ], 3755 + "firefox_usage": null, 3756 + "firefox_observable": null 3757 + }, 3758 + { 3759 + "name": "accent-color", 3760 + "usage": 0.02767782916851559, 3761 + "source": "custom_metrics", 3762 + "observable": "accent-color", 3763 + "observable_type": "css_property", 3764 + "bcd_key_count": 2, 3765 + "bcd_keys": [ 3766 + "css.properties.accent-color", 3767 + "css.properties.accent-color.auto" 3768 + ], 3769 + "firefox_usage": 0.02441068629599739, 3770 + "firefox_observable": "css.properties.accent-color" 3771 + }, 3772 + { 3773 + "name": "media-session", 3774 + "usage": 0.027540548872309792, 3775 + "source": "blink_features", 3776 + "observable": "api.MediaSession", 3777 + "observable_type": "blink_api", 3778 + "bcd_key_count": 34, 3779 + "bcd_keys": [ 3780 + "api.ChapterInformation", 3781 + "api.ChapterInformation.artwork", 3782 + "api.ChapterInformation.startTime", 3783 + "api.ChapterInformation.title", 3784 + "api.MediaMetadata", 3785 + "api.MediaMetadata.MediaMetadata", 3786 + "api.MediaMetadata.album", 3787 + "api.MediaMetadata.artist", 3788 + "api.MediaMetadata.artwork", 3789 + "api.MediaMetadata.chapterInfo", 3790 + "api.MediaMetadata.title", 3791 + "api.MediaSession", 3792 + "api.MediaSession.metadata", 3793 + "api.MediaSession.playbackState", 3794 + "api.MediaSession.setActionHandler", 3795 + "api.MediaSession.setActionHandler.hangup_type", 3796 + "api.MediaSession.setActionHandler.nextslide_type", 3797 + "api.MediaSession.setActionHandler.nexttrack_type", 3798 + "api.MediaSession.setActionHandler.pause_type", 3799 + "api.MediaSession.setActionHandler.play_type", 3800 + "api.MediaSession.setActionHandler.previousslide_type", 3801 + "api.MediaSession.setActionHandler.previoustrack_type", 3802 + "api.MediaSession.setActionHandler.seekbackward_type", 3803 + "api.MediaSession.setActionHandler.seekforward_type", 3804 + "api.MediaSession.setActionHandler.seekto_type", 3805 + "api.MediaSession.setActionHandler.skipad_type", 3806 + "api.MediaSession.setActionHandler.stop_type", 3807 + "api.MediaSession.setActionHandler.togglecamera_type", 3808 + "api.MediaSession.setActionHandler.togglemicrophone_type", 3809 + "api.MediaSession.setCameraActive", 3810 + "api.MediaSession.setMicrophoneActive", 3811 + "api.MediaSession.setPositionState", 3812 + "api.MediaSession.setScreenshareActive", 3813 + "api.Navigator.mediaSession" 3814 + ], 3815 + "firefox_usage": null, 3816 + "firefox_observable": null 3817 + }, 3818 + { 3819 + "name": "inert", 3820 + "usage": 0.02643255, 3821 + "source": "chrome_popularity", 3822 + "observable": null, 3823 + "observable_type": "blink_api", 3824 + "bcd_key_count": 4, 3825 + "bcd_keys": [ 3826 + "api.HTMLElement.inert", 3827 + "api.HTMLElement.inert.ignores_find_in_page", 3828 + "html.global_attributes.inert", 3829 + "html.global_attributes.inert.ignores_find_in_page" 3830 + ], 3831 + "firefox_usage": null, 3832 + "firefox_observable": null 3833 + }, 3834 + { 3835 + "name": "forced-colors", 3836 + "usage": 0.024843418747247884, 3837 + "source": "custom_metrics", 3838 + "observable": "forced-color-adjust", 3839 + "observable_type": "css_property", 3840 + "bcd_key_count": 5, 3841 + "bcd_keys": [ 3842 + "css.at-rules.media.forced-colors", 3843 + "css.properties.forced-color-adjust", 3844 + "css.properties.forced-color-adjust.auto", 3845 + "css.properties.forced-color-adjust.none", 3846 + "css.properties.forced-color-adjust.preserve-parent-color" 3847 + ], 3848 + "firefox_usage": 0.12474127531701686, 3849 + "firefox_observable": "css.properties.forced-color-adjust" 3850 + }, 3851 + { 3852 + "name": "array-by-copy", 3853 + "usage": 0.02466694, 3854 + "source": "chrome_popularity", 3855 + "observable": null, 3856 + "observable_type": "js_builtin", 3857 + "bcd_key_count": 7, 3858 + "bcd_keys": [ 3859 + "javascript.builtins.Array.toReversed", 3860 + "javascript.builtins.Array.toSorted", 3861 + "javascript.builtins.Array.toSpliced", 3862 + "javascript.builtins.Array.with", 3863 + "javascript.builtins.TypedArray.toReversed", 3864 + "javascript.builtins.TypedArray.toSorted", 3865 + "javascript.builtins.TypedArray.with" 3866 + ], 3867 + "firefox_usage": null, 3868 + "firefox_observable": null 3869 + }, 3870 + { 3871 + "name": "promise-any", 3872 + "usage": 0.02450899, 3873 + "source": "chrome_popularity", 3874 + "observable": null, 3875 + "observable_type": "js_builtin", 3876 + "bcd_key_count": 5, 3877 + "bcd_keys": [ 3878 + "javascript.builtins.AggregateError", 3879 + "javascript.builtins.AggregateError.AggregateError", 3880 + "javascript.builtins.AggregateError.errors", 3881 + "javascript.builtins.AggregateError.serializable_object", 3882 + "javascript.builtins.Promise.any" 3883 + ], 3884 + "firefox_usage": null, 3885 + "firefox_observable": null 3886 + }, 3887 + { 3888 + "name": "oklab", 3889 + "usage": 0.0235478, 3890 + "source": "chrome_popularity", 3891 + "observable": null, 3892 + "observable_type": "css_type", 3893 + "bcd_key_count": 4, 3894 + "bcd_keys": [ 3895 + "css.types.color.oklab", 3896 + "css.types.color.oklab.mixed_type_parameters", 3897 + "css.types.color.oklch", 3898 + "css.types.color.oklch.mixed_type_parameters" 3899 + ], 3900 + "firefox_usage": null, 3901 + "firefox_observable": null 3902 + }, 3903 + { 3904 + "name": "font-language-override", 3905 + "usage": 0.02324711903162481, 3906 + "source": "custom_metrics", 3907 + "observable": "font-language-override", 3908 + "observable_type": "css_property", 3909 + "bcd_key_count": 1, 3910 + "bcd_keys": [ 3911 + "css.properties.font-language-override" 3912 + ], 3913 + "firefox_usage": 0.004197127472031811, 3914 + "firefox_observable": "css.properties.font-language-override" 3915 + }, 3916 + { 3917 + "name": "promise-withresolvers", 3918 + "usage": 0.02264879, 3919 + "source": "chrome_popularity", 3920 + "observable": null, 3921 + "observable_type": "js_builtin", 3922 + "bcd_key_count": 1, 3923 + "bcd_keys": [ 3924 + "javascript.builtins.Promise.withResolvers" 3925 + ], 3926 + "firefox_usage": null, 3927 + "firefox_observable": null 3928 + }, 3929 + { 3930 + "name": "time-relative-selectors", 3931 + "usage": 0.022610905772940497, 3932 + "source": "custom_metrics", 3933 + "observable": "future", 3934 + "observable_type": "css_selector", 3935 + "bcd_key_count": 2, 3936 + "bcd_keys": [ 3937 + "css.selectors.future", 3938 + "css.selectors.past" 3939 + ], 3940 + "firefox_usage": null, 3941 + "firefox_observable": null 3942 + }, 3943 + { 3944 + "name": "fedcm", 3945 + "usage": 0.02156798, 3946 + "source": "chrome_popularity", 3947 + "observable": null, 3948 + "observable_type": "blink_api", 3949 + "bcd_key_count": 5, 3950 + "bcd_keys": [ 3951 + "api.CredentialsContainer.get.identity_option", 3952 + "api.CredentialsContainer.get.identity_option.context_option", 3953 + "api.CredentialsContainer.get.identity_option.providers_option_loginHint", 3954 + "api.IdentityCredential", 3955 + "api.IdentityCredential.token" 3956 + ], 3957 + "firefox_usage": null, 3958 + "firefox_observable": null 3959 + }, 3960 + { 3961 + "name": "intl-segmenter", 3962 + "usage": 0.02113988, 3963 + "source": "chrome_popularity", 3964 + "observable": null, 3965 + "observable_type": "js_builtin", 3966 + "bcd_key_count": 8, 3967 + "bcd_keys": [ 3968 + "javascript.builtins.Intl.Segmenter", 3969 + "javascript.builtins.Intl.Segmenter.Segmenter", 3970 + "javascript.builtins.Intl.Segmenter.resolvedOptions", 3971 + "javascript.builtins.Intl.Segmenter.segment", 3972 + "javascript.builtins.Intl.Segmenter.supportedLocalesOf", 3973 + "javascript.builtins.Intl.Segments", 3974 + "javascript.builtins.Intl.Segments.@@iterator", 3975 + "javascript.builtins.Intl.Segments.containing" 3976 + ], 3977 + "firefox_usage": null, 3978 + "firefox_observable": null 3979 + }, 3980 + { 3981 + "name": "regexp-escape", 3982 + "usage": 0.02067627, 3983 + "source": "chrome_popularity", 3984 + "observable": null, 3985 + "observable_type": "js_builtin", 3986 + "bcd_key_count": 1, 3987 + "bcd_keys": [ 3988 + "javascript.builtins.RegExp.escape" 3989 + ], 3990 + "firefox_usage": null, 3991 + "firefox_observable": null 3992 + }, 3993 + { 3994 + "name": "urlpattern", 3995 + "usage": 0.02026776, 3996 + "source": "chrome_popularity", 3997 + "observable": null, 3998 + "observable_type": "blink_api", 3999 + "bcd_key_count": 14, 4000 + "bcd_keys": [ 4001 + "api.URLPattern", 4002 + "api.URLPattern.URLPattern", 4003 + "api.URLPattern.URLPattern.ignoreCase_option", 4004 + "api.URLPattern.exec", 4005 + "api.URLPattern.hasRegExpGroups", 4006 + "api.URLPattern.hash", 4007 + "api.URLPattern.hostname", 4008 + "api.URLPattern.password", 4009 + "api.URLPattern.pathname", 4010 + "api.URLPattern.port", 4011 + "api.URLPattern.protocol", 4012 + "api.URLPattern.search", 4013 + "api.URLPattern.test", 4014 + "api.URLPattern.username" 4015 + ], 4016 + "firefox_usage": null, 4017 + "firefox_observable": null 4018 + }, 4019 + { 4020 + "name": "intl-display-names", 4021 + "usage": 0.01860004, 4022 + "source": "chrome_popularity", 4023 + "observable": null, 4024 + "observable_type": "js_builtin", 4025 + "bcd_key_count": 5, 4026 + "bcd_keys": [ 4027 + "javascript.builtins.Intl.DisplayNames", 4028 + "javascript.builtins.Intl.DisplayNames.DisplayNames", 4029 + "javascript.builtins.Intl.DisplayNames.of", 4030 + "javascript.builtins.Intl.DisplayNames.resolvedOptions", 4031 + "javascript.builtins.Intl.DisplayNames.supportedLocalesOf" 4032 + ], 4033 + "firefox_usage": null, 4034 + "firefox_observable": null 4035 + }, 4036 + { 4037 + "name": "dir-pseudo", 4038 + "usage": 0.01793176050323807, 4039 + "source": "custom_metrics", 4040 + "observable": "dir", 4041 + "observable_type": "css_selector", 4042 + "bcd_key_count": 1, 4043 + "bcd_keys": [ 4044 + "css.selectors.dir" 4045 + ], 4046 + "firefox_usage": null, 4047 + "firefox_observable": null 4048 + }, 4049 + { 4050 + "name": "text-wrap-balance", 4051 + "usage": 0.01791117, 4052 + "source": "chrome_popularity", 4053 + "observable": null, 4054 + "observable_type": "css_property", 4055 + "bcd_key_count": 1, 4056 + "bcd_keys": [ 4057 + "css.properties.text-wrap.balance" 4058 + ], 4059 + "firefox_usage": null, 4060 + "firefox_observable": null 4061 + }, 4062 + { 4063 + "name": "display-animation", 4064 + "usage": 0.01727396, 4065 + "source": "chrome_popularity", 4066 + "observable": null, 4067 + "observable_type": "css_property", 4068 + "bcd_key_count": 4, 4069 + "bcd_keys": [ 4070 + "css.properties.content-visibility.is_transitionable", 4071 + "css.properties.content-visibility.keyframe_animatable", 4072 + "css.properties.display.is_transitionable", 4073 + "css.properties.display.keyframe_animatable" 4074 + ], 4075 + "firefox_usage": null, 4076 + "firefox_observable": null 4077 + }, 4078 + { 4079 + "name": "app-shortcuts", 4080 + "usage": 0.01711546, 4081 + "source": "chrome_popularity", 4082 + "observable": null, 4083 + "observable_type": "manifests", 4084 + "bcd_key_count": 1, 4085 + "bcd_keys": [ 4086 + "manifests.webapp.shortcuts" 4087 + ], 4088 + "firefox_usage": null, 4089 + "firefox_observable": null 4090 + }, 4091 + { 4092 + "name": "intl-locale-info", 4093 + "usage": 0.01664468, 4094 + "source": "chrome_popularity", 4095 + "observable": null, 4096 + "observable_type": "js_builtin", 4097 + "bcd_key_count": 7, 4098 + "bcd_keys": [ 4099 + "javascript.builtins.Intl.Locale.getCalendars", 4100 + "javascript.builtins.Intl.Locale.getCollations", 4101 + "javascript.builtins.Intl.Locale.getHourCycles", 4102 + "javascript.builtins.Intl.Locale.getNumberingSystems", 4103 + "javascript.builtins.Intl.Locale.getTextInfo", 4104 + "javascript.builtins.Intl.Locale.getTimeZones", 4105 + "javascript.builtins.Intl.Locale.getWeekInfo" 4106 + ], 4107 + "firefox_usage": null, 4108 + "firefox_observable": null 4109 + }, 4110 + { 4111 + "name": "dialog", 4112 + "usage": 0.01655531159895756, 4113 + "source": "custom_metrics", 4114 + "observable": "dialog", 4115 + "observable_type": "html_element", 4116 + "bcd_key_count": 12, 4117 + "bcd_keys": [ 4118 + "api.HTMLDialogElement", 4119 + "api.HTMLDialogElement.cancel_event", 4120 + "api.HTMLDialogElement.close", 4121 + "api.HTMLDialogElement.close_event", 4122 + "api.HTMLDialogElement.open", 4123 + "api.HTMLDialogElement.returnValue", 4124 + "api.HTMLDialogElement.show", 4125 + "api.HTMLDialogElement.showModal", 4126 + "api.HTMLElement.beforetoggle_event.dialog_elements", 4127 + "api.HTMLElement.toggle_event.dialog_elements", 4128 + "html.elements.dialog", 4129 + "html.elements.dialog.open" 4130 + ], 4131 + "firefox_usage": 0.0002049191930551606, 4132 + "firefox_observable": "api.HTMLDialogElement" 4133 + }, 4134 + { 4135 + "name": "text-wrap-pretty", 4136 + "usage": 0.01584412, 4137 + "source": "chrome_popularity", 4138 + "observable": null, 4139 + "observable_type": "css_property", 4140 + "bcd_key_count": 1, 4141 + "bcd_keys": [ 4142 + "css.properties.text-wrap.pretty" 4143 + ], 4144 + "firefox_usage": null, 4145 + "firefox_observable": null 4146 + }, 4147 + { 4148 + "name": "page-orientation", 4149 + "usage": 0.01564981, 4150 + "source": "chrome_popularity", 4151 + "observable": null, 4152 + "observable_type": "css_atrule", 4153 + "bcd_key_count": 1, 4154 + "bcd_keys": [ 4155 + "css.at-rules.page.page-orientation" 4156 + ], 4157 + "firefox_usage": null, 4158 + "firefox_observable": null 4159 + }, 4160 + { 4161 + "name": "webgl-multi-draw", 4162 + "usage": 0.01556559, 4163 + "source": "chrome_popularity", 4164 + "observable": null, 4165 + "observable_type": "blink_api", 4166 + "bcd_key_count": 5, 4167 + "bcd_keys": [ 4168 + "api.WEBGL_multi_draw", 4169 + "api.WEBGL_multi_draw.multiDrawArraysInstancedWEBGL", 4170 + "api.WEBGL_multi_draw.multiDrawArraysWEBGL", 4171 + "api.WEBGL_multi_draw.multiDrawElementsInstancedWEBGL", 4172 + "api.WEBGL_multi_draw.multiDrawElementsWEBGL" 4173 + ], 4174 + "firefox_usage": null, 4175 + "firefox_observable": null 4176 + }, 4177 + { 4178 + "name": "wasm-bulk-memory", 4179 + "usage": 0.01516315, 4180 + "source": "chrome_popularity", 4181 + "observable": null, 4182 + "observable_type": "webassembly", 4183 + "bcd_key_count": 1, 4184 + "bcd_keys": [ 4185 + "webassembly.bulk-memory-operations" 4186 + ], 4187 + "firefox_usage": null, 4188 + "firefox_observable": null 4189 + }, 4190 + { 4191 + "name": "array-findlast", 4192 + "usage": 0.01438432, 4193 + "source": "chrome_popularity", 4194 + "observable": null, 4195 + "observable_type": "js_builtin", 4196 + "bcd_key_count": 4, 4197 + "bcd_keys": [ 4198 + "javascript.builtins.Array.findLast", 4199 + "javascript.builtins.Array.findLastIndex", 4200 + "javascript.builtins.TypedArray.findLast", 4201 + "javascript.builtins.TypedArray.findLastIndex" 4202 + ], 4203 + "firefox_usage": null, 4204 + "firefox_observable": null 4205 + }, 4206 + { 4207 + "name": "animation-composition", 4208 + "usage": 0.014162220579012676, 4209 + "source": "custom_metrics", 4210 + "observable": "animation-composition", 4211 + "observable_type": "css_property", 4212 + "bcd_key_count": 1, 4213 + "bcd_keys": [ 4214 + "css.properties.animation-composition" 4215 + ], 4216 + "firefox_usage": 0.005657318566947336, 4217 + "firefox_observable": "css.properties.animation-composition" 4218 + }, 4219 + { 4220 + "name": "is-error", 4221 + "usage": 0.01397917, 4222 + "source": "chrome_popularity", 4223 + "observable": null, 4224 + "observable_type": "js_builtin", 4225 + "bcd_key_count": 1, 4226 + "bcd_keys": [ 4227 + "javascript.builtins.Error.isError" 4228 + ], 4229 + "firefox_usage": null, 4230 + "firefox_observable": null 4231 + }, 4232 + { 4233 + "name": "array-fromasync", 4234 + "usage": 0.01360043, 4235 + "source": "chrome_popularity", 4236 + "observable": null, 4237 + "observable_type": "js_builtin", 4238 + "bcd_key_count": 1, 4239 + "bcd_keys": [ 4240 + "javascript.builtins.Array.fromAsync" 4241 + ], 4242 + "firefox_usage": null, 4243 + "firefox_observable": null 4244 + }, 4245 + { 4246 + "name": "screen-wake-lock", 4247 + "usage": 0.0134776, 4248 + "source": "chrome_popularity", 4249 + "observable": null, 4250 + "observable_type": "blink_api", 4251 + "bcd_key_count": 11, 4252 + "bcd_keys": [ 4253 + "api.Navigator.wakeLock", 4254 + "api.Permissions.permission_screen-wake-lock", 4255 + "api.WakeLock", 4256 + "api.WakeLock.request", 4257 + "api.WakeLockSentinel", 4258 + "api.WakeLockSentinel.release", 4259 + "api.WakeLockSentinel.release_event", 4260 + "api.WakeLockSentinel.released", 4261 + "api.WakeLockSentinel.type", 4262 + "html.elements.iframe.allow.screen-wake-lock", 4263 + "http.headers.Permissions-Policy.screen-wake-lock" 4264 + ], 4265 + "firefox_usage": 0.03391379975720428, 4266 + "firefox_observable": "api.WakeLockSentinel" 4267 + }, 4268 + { 4269 + "name": "modal", 4270 + "usage": 0.013454067009799574, 4271 + "source": "custom_metrics", 4272 + "observable": "modal", 4273 + "observable_type": "css_selector", 4274 + "bcd_key_count": 1, 4275 + "bcd_keys": [ 4276 + "css.selectors.modal" 4277 + ], 4278 + "firefox_usage": null, 4279 + "firefox_observable": null 4280 + }, 4281 + { 4282 + "name": "gradient-interpolation", 4283 + "usage": 0.01340491, 4284 + "source": "chrome_popularity", 4285 + "observable": null, 4286 + "observable_type": "css_type", 4287 + "bcd_key_count": 12, 4288 + "bcd_keys": [ 4289 + "css.types.gradient.conic-gradient.hue_interpolation_method", 4290 + "css.types.gradient.conic-gradient.interpolation_color_space", 4291 + "css.types.gradient.linear-gradient.hue_interpolation_method", 4292 + "css.types.gradient.linear-gradient.interpolation_color_space", 4293 + "css.types.gradient.radial-gradient.hue_interpolation_method", 4294 + "css.types.gradient.radial-gradient.interpolation_color_space", 4295 + "css.types.gradient.repeating-conic-gradient.hue_interpolation_method", 4296 + "css.types.gradient.repeating-conic-gradient.interpolation_color_space", 4297 + "css.types.gradient.repeating-linear-gradient.hue_interpolation_method", 4298 + "css.types.gradient.repeating-linear-gradient.interpolation_color_space", 4299 + "css.types.gradient.repeating-radial-gradient.hue_interpolation_method", 4300 + "css.types.gradient.repeating-radial-gradient.interpolation_color_space" 4301 + ], 4302 + "firefox_usage": null, 4303 + "firefox_observable": null 4304 + }, 4305 + { 4306 + "name": "oes-fbo-render-mipmap", 4307 + "usage": 0.01333392, 4308 + "source": "chrome_popularity", 4309 + "observable": null, 4310 + "observable_type": "blink_api", 4311 + "bcd_key_count": 1, 4312 + "bcd_keys": [ 4313 + "api.OES_fbo_render_mipmap" 4314 + ], 4315 + "firefox_usage": null, 4316 + "firefox_observable": null 4317 + }, 4318 + { 4319 + "name": "light-dark", 4320 + "usage": 0.0114018, 4321 + "source": "chrome_popularity", 4322 + "observable": null, 4323 + "observable_type": "css_type", 4324 + "bcd_key_count": 1, 4325 + "bcd_keys": [ 4326 + "css.types.color.light-dark" 4327 + ], 4328 + "firefox_usage": null, 4329 + "firefox_observable": null 4330 + }, 4331 + { 4332 + "name": "state", 4333 + "usage": 0.010734042627611805, 4334 + "source": "custom_metrics", 4335 + "observable": "state", 4336 + "observable_type": "css_selector", 4337 + "bcd_key_count": 13, 4338 + "bcd_keys": [ 4339 + "api.CustomStateSet", 4340 + "api.CustomStateSet.@@iterator", 4341 + "api.CustomStateSet.add", 4342 + "api.CustomStateSet.clear", 4343 + "api.CustomStateSet.delete", 4344 + "api.CustomStateSet.entries", 4345 + "api.CustomStateSet.forEach", 4346 + "api.CustomStateSet.has", 4347 + "api.CustomStateSet.keys", 4348 + "api.CustomStateSet.size", 4349 + "api.CustomStateSet.values", 4350 + "api.ElementInternals.states", 4351 + "css.selectors.state" 4352 + ], 4353 + "firefox_usage": null, 4354 + "firefox_observable": null 4355 + }, 4356 + { 4357 + "name": "wasm-non-trapping-float-to-int", 4358 + "usage": 0.01018516, 4359 + "source": "chrome_popularity", 4360 + "observable": null, 4361 + "observable_type": "webassembly", 4362 + "bcd_key_count": 1, 4363 + "bcd_keys": [ 4364 + "webassembly.non-trapping-float-to-int-conversions" 4365 + ], 4366 + "firefox_usage": null, 4367 + "firefox_observable": null 4368 + }, 4369 + { 4370 + "name": "image-orientation", 4371 + "usage": 0.009831243724129612, 4372 + "source": "custom_metrics", 4373 + "observable": "image-orientation", 4374 + "observable_type": "css_property", 4375 + "bcd_key_count": 3, 4376 + "bcd_keys": [ 4377 + "css.properties.image-orientation", 4378 + "css.properties.image-orientation.from-image", 4379 + "css.properties.image-orientation.none" 4380 + ], 4381 + "firefox_usage": 0.004249868383050822, 4382 + "firefox_observable": "css.properties.image-orientation" 4383 + }, 4384 + { 4385 + "name": "color-function", 4386 + "usage": 0.00966794, 4387 + "source": "chrome_popularity", 4388 + "observable": null, 4389 + "observable_type": "css_type", 4390 + "bcd_key_count": 2, 4391 + "bcd_keys": [ 4392 + "css.types.color.color", 4393 + "css.types.color.color.mixed_type_parameters" 4394 + ], 4395 + "firefox_usage": null, 4396 + "firefox_observable": null 4397 + }, 4398 + { 4399 + "name": "lh", 4400 + "usage": 0.00964605, 4401 + "source": "chrome_popularity", 4402 + "observable": null, 4403 + "observable_type": "css_type", 4404 + "bcd_key_count": 1, 4405 + "bcd_keys": [ 4406 + "css.types.length.lh" 4407 + ], 4408 + "firefox_usage": null, 4409 + "firefox_observable": null 4410 + }, 4411 + { 4412 + "name": "app-launch-handler", 4413 + "usage": 0.00954695, 4414 + "source": "chrome_popularity", 4415 + "observable": null, 4416 + "observable_type": "blink_api", 4417 + "bcd_key_count": 7, 4418 + "bcd_keys": [ 4419 + "api.LaunchParams", 4420 + "api.LaunchParams.targetURL", 4421 + "api.LaunchQueue", 4422 + "api.LaunchQueue.setConsumer", 4423 + "api.Window.launchQueue", 4424 + "manifests.webapp.launch_handler", 4425 + "manifests.webapp.launch_handler.client_mode" 4426 + ], 4427 + "firefox_usage": null, 4428 + "firefox_observable": null 4429 + }, 4430 + { 4431 + "name": "ext-texture-compression-bptc", 4432 + "usage": 0.00951907, 4433 + "source": "chrome_popularity", 4434 + "observable": null, 4435 + "observable_type": "blink_api", 4436 + "bcd_key_count": 1, 4437 + "bcd_keys": [ 4438 + "api.EXT_texture_compression_bptc" 4439 + ], 4440 + "firefox_usage": null, 4441 + "firefox_observable": null 4442 + }, 4443 + { 4444 + "name": "ext-texture-compression-rgtc", 4445 + "usage": 0.0092537, 4446 + "source": "chrome_popularity", 4447 + "observable": null, 4448 + "observable_type": "blink_api", 4449 + "bcd_key_count": 1, 4450 + "bcd_keys": [ 4451 + "api.EXT_texture_compression_rgtc" 4452 + ], 4453 + "firefox_usage": null, 4454 + "firefox_observable": null 4455 + }, 4456 + { 4457 + "name": "top-level-await", 4458 + "usage": 0.00914585, 4459 + "source": "chrome_popularity", 4460 + "observable": null, 4461 + "observable_type": "js_operators", 4462 + "bcd_key_count": 1, 4463 + "bcd_keys": [ 4464 + "javascript.operators.await.top_level" 4465 + ], 4466 + "firefox_usage": null, 4467 + "firefox_observable": null 4468 + }, 4469 + { 4470 + "name": "lab", 4471 + "usage": 0.00903723, 4472 + "source": "chrome_popularity", 4473 + "observable": null, 4474 + "observable_type": "css_type", 4475 + "bcd_key_count": 4, 4476 + "bcd_keys": [ 4477 + "css.types.color.lab", 4478 + "css.types.color.lab.mixed_type_parameters", 4479 + "css.types.color.lch", 4480 + "css.types.color.lch.mixed_type_parameters" 4481 + ], 4482 + "firefox_usage": null, 4483 + "firefox_observable": null 4484 + }, 4485 + { 4486 + "name": "search", 4487 + "usage": 0.008804281670388818, 4488 + "source": "custom_metrics", 4489 + "observable": "search", 4490 + "observable_type": "html_element", 4491 + "bcd_key_count": 1, 4492 + "bcd_keys": [ 4493 + "html.elements.search" 4494 + ], 4495 + "firefox_usage": null, 4496 + "firefox_observable": null 4497 + }, 4498 + { 4499 + "name": "js-modules-workers", 4500 + "usage": 0.00879745, 4501 + "source": "chrome_popularity", 4502 + "observable": null, 4503 + "observable_type": "blink_api", 4504 + "bcd_key_count": 4, 4505 + "bcd_keys": [ 4506 + "api.Worker.Worker.ecmascript_modules", 4507 + "api.Worker.Worker.options_type_parameter", 4508 + "javascript.operators.import.worker_support", 4509 + "javascript.statements.import.worker_support" 4510 + ], 4511 + "firefox_usage": null, 4512 + "firefox_observable": null 4513 + }, 4514 + { 4515 + "name": "transform-box", 4516 + "usage": 0.008591809543652643, 4517 + "source": "custom_metrics", 4518 + "observable": "transform-box", 4519 + "observable_type": "css_property", 4520 + "bcd_key_count": 6, 4521 + "bcd_keys": [ 4522 + "css.properties.transform-box", 4523 + "css.properties.transform-box.border-box", 4524 + "css.properties.transform-box.content-box", 4525 + "css.properties.transform-box.fill-box", 4526 + "css.properties.transform-box.stroke-box", 4527 + "css.properties.transform-box.view-box" 4528 + ], 4529 + "firefox_usage": 0.01890592920934985, 4530 + "firefox_observable": "css.properties.transform-box" 4531 + }, 4532 + { 4533 + "name": "paint-order", 4534 + "usage": 0.00846097460308517, 4535 + "source": "custom_metrics", 4536 + "observable": "paint-order", 4537 + "observable_type": "css_property", 4538 + "bcd_key_count": 2, 4539 + "bcd_keys": [ 4540 + "css.properties.paint-order", 4541 + "svg.global_attributes.paint-order" 4542 + ], 4543 + "firefox_usage": 0.0076230531599109485, 4544 + "firefox_observable": "css.properties.paint-order" 4545 + }, 4546 + { 4547 + "name": "sizes-auto", 4548 + "usage": 0.00810491, 4549 + "source": "chrome_popularity", 4550 + "observable": null, 4551 + "observable_type": "html_element", 4552 + "bcd_key_count": 1, 4553 + "bcd_keys": [ 4554 + "html.elements.img.sizes.auto" 4555 + ], 4556 + "firefox_usage": null, 4557 + "firefox_observable": null 4558 + }, 4559 + { 4560 + "name": "font-optical-sizing", 4561 + "usage": 0.007394632023893637, 4562 + "source": "custom_metrics", 4563 + "observable": "font-optical-sizing", 4564 + "observable_type": "css_property", 4565 + "bcd_key_count": 3, 4566 + "bcd_keys": [ 4567 + "css.properties.font-optical-sizing", 4568 + "css.properties.font-optical-sizing.auto", 4569 + "css.properties.font-optical-sizing.none" 4570 + ], 4571 + "firefox_usage": 0.0114290182595152, 4572 + "firefox_observable": "css.properties.font-optical-sizing" 4573 + }, 4574 + { 4575 + "name": "wasm-reference-types", 4576 + "usage": 0.00738685, 4577 + "source": "chrome_popularity", 4578 + "observable": null, 4579 + "observable_type": "webassembly", 4580 + "bcd_key_count": 1, 4581 + "bcd_keys": [ 4582 + "webassembly.reference-types" 4583 + ], 4584 + "firefox_usage": null, 4585 + "firefox_observable": null 4586 + }, 4587 + { 4588 + "name": "js-modules-shared-workers", 4589 + "usage": 0.00736653, 4590 + "source": "chrome_popularity", 4591 + "observable": null, 4592 + "observable_type": "blink_api", 4593 + "bcd_key_count": 2, 4594 + "bcd_keys": [ 4595 + "api.SharedWorker.SharedWorker.ecmascript_modules", 4596 + "api.SharedWorker.SharedWorker.options_type_parameter" 4597 + ], 4598 + "firefox_usage": null, 4599 + "firefox_observable": null 4600 + }, 4601 + { 4602 + "name": "update", 4603 + "usage": 0.00735874, 4604 + "source": "chrome_popularity", 4605 + "observable": null, 4606 + "observable_type": "css_atrule", 4607 + "bcd_key_count": 1, 4608 + "bcd_keys": [ 4609 + "css.at-rules.media.update" 4610 + ], 4611 + "firefox_usage": null, 4612 + "firefox_observable": null 4613 + }, 4614 + { 4615 + "name": "user-pseudos", 4616 + "usage": 0.00732902548577671, 4617 + "source": "custom_metrics", 4618 + "observable": "user-invalid", 4619 + "observable_type": "css_selector", 4620 + "bcd_key_count": 2, 4621 + "bcd_keys": [ 4622 + "css.selectors.user-invalid", 4623 + "css.selectors.user-valid" 4624 + ], 4625 + "firefox_usage": null, 4626 + "firefox_observable": null 4627 + }, 4628 + { 4629 + "name": "request-video-frame-callback", 4630 + "usage": 0.00705877, 4631 + "source": "chrome_popularity", 4632 + "observable": null, 4633 + "observable_type": "blink_api", 4634 + "bcd_key_count": 2, 4635 + "bcd_keys": [ 4636 + "api.HTMLVideoElement.cancelVideoFrameCallback", 4637 + "api.HTMLVideoElement.requestVideoFrameCallback" 4638 + ], 4639 + "firefox_usage": null, 4640 + "firefox_observable": null 4641 + }, 4642 + { 4643 + "name": "import-maps", 4644 + "usage": 0.0069852, 4645 + "source": "chrome_popularity", 4646 + "observable": null, 4647 + "observable_type": "html_element", 4648 + "bcd_key_count": 1, 4649 + "bcd_keys": [ 4650 + "html.elements.script.type.importmap" 4651 + ], 4652 + "firefox_usage": null, 4653 + "firefox_observable": null 4654 + }, 4655 + { 4656 + "name": "round-mod-rem", 4657 + "usage": 0.0068346, 4658 + "source": "chrome_popularity", 4659 + "observable": null, 4660 + "observable_type": "css_type", 4661 + "bcd_key_count": 3, 4662 + "bcd_keys": [ 4663 + "css.types.mod", 4664 + "css.types.rem", 4665 + "css.types.round" 4666 + ], 4667 + "firefox_usage": null, 4668 + "firefox_observable": null 4669 + }, 4670 + { 4671 + "name": "scripting", 4672 + "usage": 0.00676775, 4673 + "source": "chrome_popularity", 4674 + "observable": null, 4675 + "observable_type": "css_atrule", 4676 + "bcd_key_count": 1, 4677 + "bcd_keys": [ 4678 + "css.at-rules.media.scripting" 4679 + ], 4680 + "firefox_usage": null, 4681 + "firefox_observable": null 4682 + }, 4683 + { 4684 + "name": "autofill", 4685 + "usage": 0.00650941642889811, 4686 + "source": "custom_metrics", 4687 + "observable": "autofill", 4688 + "observable_type": "css_selector", 4689 + "bcd_key_count": 1, 4690 + "bcd_keys": [ 4691 + "css.selectors.autofill" 4692 + ], 4693 + "firefox_usage": null, 4694 + "firefox_observable": null 4695 + }, 4696 + { 4697 + "name": "page-visibility-state", 4698 + "usage": 0.00639106, 4699 + "source": "chrome_popularity", 4700 + "observable": null, 4701 + "observable_type": "blink_api", 4702 + "bcd_key_count": 5, 4703 + "bcd_keys": [ 4704 + "api.VisibilityStateEntry", 4705 + "api.VisibilityStateEntry.duration", 4706 + "api.VisibilityStateEntry.entryType", 4707 + "api.VisibilityStateEntry.name", 4708 + "api.VisibilityStateEntry.startTime" 4709 + ], 4710 + "firefox_usage": null, 4711 + "firefox_observable": null 4712 + }, 4713 + { 4714 + "name": "motion-path", 4715 + "usage": 0.005965657340643704, 4716 + "source": "custom_metrics", 4717 + "observable": "offset-distance", 4718 + "observable_type": "css_property", 4719 + "bcd_key_count": 36, 4720 + "bcd_keys": [ 4721 + "css.properties.offset", 4722 + "css.properties.offset-anchor", 4723 + "css.properties.offset-anchor.auto", 4724 + "css.properties.offset-anchor.bottom", 4725 + "css.properties.offset-anchor.center", 4726 + "css.properties.offset-anchor.left", 4727 + "css.properties.offset-anchor.right", 4728 + "css.properties.offset-anchor.top", 4729 + "css.properties.offset-distance", 4730 + "css.properties.offset-path", 4731 + "css.properties.offset-path.basic_shape", 4732 + "css.properties.offset-path.border-box", 4733 + "css.properties.offset-path.content-box", 4734 + "css.properties.offset-path.fill-box", 4735 + "css.properties.offset-path.margin-box", 4736 + "css.properties.offset-path.none", 4737 + "css.properties.offset-path.padding-box", 4738 + "css.properties.offset-path.path", 4739 + "css.properties.offset-path.ray", 4740 + "css.properties.offset-path.stroke-box", 4741 + "css.properties.offset-path.url", 4742 + "css.properties.offset-path.view-box", 4743 + "css.properties.offset-position", 4744 + "css.properties.offset-position.auto", 4745 + "css.properties.offset-position.bottom", 4746 + "css.properties.offset-position.center", 4747 + "css.properties.offset-position.left", 4748 + "css.properties.offset-position.normal", 4749 + "css.properties.offset-position.right", 4750 + "css.properties.offset-position.top", 4751 + "css.properties.offset-rotate", 4752 + "css.properties.offset-rotate.auto", 4753 + "css.properties.offset-rotate.reverse", 4754 + "css.types.ray", 4755 + "css.types.ray.position", 4756 + "css.types.ray.size" 4757 + ], 4758 + "firefox_usage": 0.005585450401624134, 4759 + "firefox_observable": "css.properties.offset-distance" 4760 + }, 4761 + { 4762 + "name": "scroll-driven-animations", 4763 + "usage": 0.005898632793777853, 4764 + "source": "custom_metrics", 4765 + "observable": "animation-timeline", 4766 + "observable_type": "css_property", 4767 + "bcd_key_count": 37, 4768 + "bcd_keys": [ 4769 + "api.ScrollTimeline", 4770 + "api.ScrollTimeline.ScrollTimeline", 4771 + "api.ScrollTimeline.axis", 4772 + "api.ScrollTimeline.source", 4773 + "api.ViewTimeline", 4774 + "api.ViewTimeline.ViewTimeline", 4775 + "api.ViewTimeline.endOffset", 4776 + "api.ViewTimeline.startOffset", 4777 + "api.ViewTimeline.subject", 4778 + "css.properties.animation-range", 4779 + "css.properties.animation-range-end", 4780 + "css.properties.animation-range-end.normal", 4781 + "css.properties.animation-range-start", 4782 + "css.properties.animation-range-start.normal", 4783 + "css.properties.animation-timeline", 4784 + "css.properties.animation-timeline.scroll", 4785 + "css.properties.animation-timeline.view", 4786 + "css.properties.animation.animation-timeline_included", 4787 + "css.properties.scroll-timeline", 4788 + "css.properties.scroll-timeline-axis", 4789 + "css.properties.scroll-timeline-axis.block", 4790 + "css.properties.scroll-timeline-axis.inline", 4791 + "css.properties.scroll-timeline-axis.x", 4792 + "css.properties.scroll-timeline-axis.y", 4793 + "css.properties.scroll-timeline-name", 4794 + "css.properties.timeline-scope", 4795 + "css.properties.timeline-scope.all", 4796 + "css.properties.timeline-scope.none", 4797 + "css.properties.view-timeline", 4798 + "css.properties.view-timeline-axis", 4799 + "css.properties.view-timeline-axis.block", 4800 + "css.properties.view-timeline-axis.inline", 4801 + "css.properties.view-timeline-axis.x", 4802 + "css.properties.view-timeline-axis.y", 4803 + "css.properties.view-timeline-inset", 4804 + "css.properties.view-timeline-inset.auto", 4805 + "css.properties.view-timeline-name" 4806 + ], 4807 + "firefox_usage": 0.000023635832864202826, 4808 + "firefox_observable": "css.properties.animation-timeline" 4809 + }, 4810 + { 4811 + "name": "interpolate-size", 4812 + "usage": 0.005877362662543979, 4813 + "source": "custom_metrics", 4814 + "observable": "interpolate-size", 4815 + "observable_type": "css_property", 4816 + "bcd_key_count": 3, 4817 + "bcd_keys": [ 4818 + "css.properties.interpolate-size", 4819 + "css.properties.interpolate-size.allow-keywords", 4820 + "css.properties.interpolate-size.numeric-only" 4821 + ], 4822 + "firefox_usage": null, 4823 + "firefox_observable": null 4824 + }, 4825 + { 4826 + "name": "abortsignal-any", 4827 + "usage": 0.00565574, 4828 + "source": "chrome_popularity", 4829 + "observable": null, 4830 + "observable_type": "blink_api", 4831 + "bcd_key_count": 1, 4832 + "bcd_keys": [ 4833 + "api.AbortSignal.any_static" 4834 + ], 4835 + "firefox_usage": null, 4836 + "firefox_observable": null 4837 + }, 4838 + { 4839 + "name": "container-style-queries", 4840 + "usage": 0.00528891, 4841 + "source": "chrome_popularity", 4842 + "observable": null, 4843 + "observable_type": "css_atrule", 4844 + "bcd_key_count": 1, 4845 + "bcd_keys": [ 4846 + "css.at-rules.container.style_queries_for_custom_properties" 4847 + ], 4848 + "firefox_usage": null, 4849 + "firefox_observable": null 4850 + }, 4851 + { 4852 + "name": "webtransport", 4853 + "usage": 0.005136506552937148, 4854 + "source": "blink_features", 4855 + "observable": "api.WebTransport", 4856 + "observable_type": "blink_api", 4857 + "bcd_key_count": 44, 4858 + "bcd_keys": [ 4859 + "api.WebTransport", 4860 + "api.WebTransport.WebTransport", 4861 + "api.WebTransport.WebTransport.options_allowPooling_parameter", 4862 + "api.WebTransport.WebTransport.options_congestionControl_parameter", 4863 + "api.WebTransport.WebTransport.options_requireUnreliable_parameter", 4864 + "api.WebTransport.WebTransport.options_serverCertificateHashes_parameter", 4865 + "api.WebTransport.byob_readers", 4866 + "api.WebTransport.close", 4867 + "api.WebTransport.closed", 4868 + "api.WebTransport.congestionControl", 4869 + "api.WebTransport.createBidirectionalStream", 4870 + "api.WebTransport.createBidirectionalStream.options_sendOrder_parameter", 4871 + "api.WebTransport.createUnidirectionalStream", 4872 + "api.WebTransport.createUnidirectionalStream.byob_readers", 4873 + "api.WebTransport.createUnidirectionalStream.options_sendOrder_parameter", 4874 + "api.WebTransport.datagrams", 4875 + "api.WebTransport.getStats", 4876 + "api.WebTransport.incomingBidirectionalStreams", 4877 + "api.WebTransport.incomingUnidirectionalStreams", 4878 + "api.WebTransport.ready", 4879 + "api.WebTransport.reliability", 4880 + "api.WebTransportBidirectionalStream", 4881 + "api.WebTransportBidirectionalStream.readable", 4882 + "api.WebTransportBidirectionalStream.readable.returns_WebTransportReceiveStream", 4883 + "api.WebTransportBidirectionalStream.writable", 4884 + "api.WebTransportBidirectionalStream.writable.returns_WebTransportSendStream", 4885 + "api.WebTransportDatagramDuplexStream", 4886 + "api.WebTransportDatagramDuplexStream.byob_readers", 4887 + "api.WebTransportDatagramDuplexStream.incomingHighWaterMark", 4888 + "api.WebTransportDatagramDuplexStream.incomingMaxAge", 4889 + "api.WebTransportDatagramDuplexStream.maxDatagramSize", 4890 + "api.WebTransportDatagramDuplexStream.outgoingHighWaterMark", 4891 + "api.WebTransportDatagramDuplexStream.outgoingMaxAge", 4892 + "api.WebTransportDatagramDuplexStream.readable", 4893 + "api.WebTransportError", 4894 + "api.WebTransportError.WebTransportError", 4895 + "api.WebTransportError.source", 4896 + "api.WebTransportError.streamErrorCode", 4897 + "api.WebTransportReceiveStream", 4898 + "api.WebTransportReceiveStream.getStats", 4899 + "api.WebTransportSendStream", 4900 + "api.WebTransportSendStream.getStats", 4901 + "api.WebTransportSendStream.getWriter", 4902 + "api.WebTransportSendStream.sendOrder" 4903 + ], 4904 + "firefox_usage": null, 4905 + "firefox_observable": null 4906 + }, 4907 + { 4908 + "name": "wasm-exception-handling", 4909 + "usage": 0.00495209, 4910 + "source": "chrome_popularity", 4911 + "observable": null, 4912 + "observable_type": "webassembly", 4913 + "bcd_key_count": 10, 4914 + "bcd_keys": [ 4915 + "webassembly.api.Exception", 4916 + "webassembly.api.Exception.Exception", 4917 + "webassembly.api.Exception.Exception.options_parameter_traceStack", 4918 + "webassembly.api.Exception.getArg", 4919 + "webassembly.api.Exception.is", 4920 + "webassembly.api.Exception.stack", 4921 + "webassembly.api.Tag", 4922 + "webassembly.api.Tag.Tag", 4923 + "webassembly.api.Tag.type", 4924 + "webassembly.exception-handling" 4925 + ], 4926 + "firefox_usage": null, 4927 + "firefox_observable": null 4928 + }, 4929 + { 4930 + "name": "popover", 4931 + "usage": 0.004579222919861519, 4932 + "source": "custom_metrics", 4933 + "observable": "popover-open", 4934 + "observable_type": "css_selector", 4935 + "bcd_key_count": 25, 4936 + "bcd_keys": [ 4937 + "api.HTMLButtonElement.popoverTargetAction", 4938 + "api.HTMLButtonElement.popoverTargetElement", 4939 + "api.HTMLElement.beforetoggle_event", 4940 + "api.HTMLElement.beforetoggle_event.popover_elements", 4941 + "api.HTMLElement.hidePopover", 4942 + "api.HTMLElement.popover", 4943 + "api.HTMLElement.showPopover", 4944 + "api.HTMLElement.showPopover.options_source_parameter", 4945 + "api.HTMLElement.togglePopover", 4946 + "api.HTMLElement.togglePopover.options_source_parameter", 4947 + "api.HTMLElement.togglePopover.returns_boolean", 4948 + "api.HTMLElement.toggle_event.popover_elements", 4949 + "api.HTMLInputElement.popoverTargetAction", 4950 + "api.HTMLInputElement.popoverTargetElement", 4951 + "api.ToggleEvent", 4952 + "api.ToggleEvent.ToggleEvent", 4953 + "api.ToggleEvent.newState", 4954 + "api.ToggleEvent.oldState", 4955 + "css.selectors.backdrop.popover", 4956 + "css.selectors.popover-open", 4957 + "html.elements.button.popovertarget", 4958 + "html.elements.button.popovertargetaction", 4959 + "html.elements.input.popovertarget", 4960 + "html.elements.input.popovertargetaction", 4961 + "html.global_attributes.popover" 4962 + ], 4963 + "firefox_usage": null, 4964 + "firefox_observable": null 4965 + }, 4966 + { 4967 + "name": "container-scroll-state-queries", 4968 + "usage": 0.00440579, 4969 + "source": "chrome_popularity", 4970 + "observable": null, 4971 + "observable_type": "css_atrule", 4972 + "bcd_key_count": 5, 4973 + "bcd_keys": [ 4974 + "css.at-rules.container.scroll-state_queries", 4975 + "css.at-rules.container.scroll-state_queries.scrollable", 4976 + "css.at-rules.container.scroll-state_queries.snapped", 4977 + "css.at-rules.container.scroll-state_queries.stuck", 4978 + "css.properties.container-type.scroll-state" 4979 + ], 4980 + "firefox_usage": null, 4981 + "firefox_observable": null 4982 + }, 4983 + { 4984 + "name": "wasm-garbage-collection", 4985 + "usage": 0.00437336, 4986 + "source": "chrome_popularity", 4987 + "observable": null, 4988 + "observable_type": "webassembly", 4989 + "bcd_key_count": 1, 4990 + "bcd_keys": [ 4991 + "webassembly.garbage-collection" 4992 + ], 4993 + "firefox_usage": null, 4994 + "firefox_observable": null 4995 + }, 4996 + { 4997 + "name": "wasm-typed-fun-refs", 4998 + "usage": 0.0043695, 4999 + "source": "chrome_popularity", 5000 + "observable": null, 5001 + "observable_type": "webassembly", 5002 + "bcd_key_count": 1, 5003 + "bcd_keys": [ 5004 + "webassembly.typedFunctionReferences" 5005 + ], 5006 + "firefox_usage": null, 5007 + "firefox_observable": null 5008 + }, 5009 + { 5010 + "name": "wasm-string-builtins", 5011 + "usage": 0.00436758, 5012 + "source": "chrome_popularity", 5013 + "observable": null, 5014 + "observable_type": "webassembly", 5015 + "bcd_key_count": 7, 5016 + "bcd_keys": [ 5017 + "webassembly.api.Module.Module.compile_options", 5018 + "webassembly.api.compileStreaming_static.compile_options", 5019 + "webassembly.api.compile_static.compile_options", 5020 + "webassembly.api.instantiateStreaming_static.compile_options", 5021 + "webassembly.api.instantiate_static.compile_options", 5022 + "webassembly.api.validate_static.compile_options", 5023 + "webassembly.jsStringBuiltins" 5024 + ], 5025 + "firefox_usage": null, 5026 + "firefox_observable": null 5027 + }, 5028 + { 5029 + "name": "calc-constants", 5030 + "usage": 0.00435489, 5031 + "source": "chrome_popularity", 5032 + "observable": null, 5033 + "observable_type": "css_type", 5034 + "bcd_key_count": 5, 5035 + "bcd_keys": [ 5036 + "css.types.calc-keyword", 5037 + "css.types.calc-keyword.NaN", 5038 + "css.types.calc-keyword.e", 5039 + "css.types.calc-keyword.infinity", 5040 + "css.types.calc-keyword.pi" 5041 + ], 5042 + "firefox_usage": null, 5043 + "firefox_observable": null 5044 + }, 5045 + { 5046 + "name": "webgl-compressed-texture-pvrtc", 5047 + "usage": 0.00418888, 5048 + "source": "chrome_popularity", 5049 + "observable": null, 5050 + "observable_type": "blink_api", 5051 + "bcd_key_count": 1, 5052 + "bcd_keys": [ 5053 + "api.WEBGL_compressed_texture_pvrtc" 5054 + ], 5055 + "firefox_usage": null, 5056 + "firefox_observable": null 5057 + }, 5058 + { 5059 + "name": "image-set", 5060 + "usage": 0.00416529, 5061 + "source": "chrome_popularity", 5062 + "observable": null, 5063 + "observable_type": "css_property", 5064 + "bcd_key_count": 3, 5065 + "bcd_keys": [ 5066 + "css.properties.background-image.image-set", 5067 + "css.properties.content.image-set", 5068 + "css.types.image.image-set" 5069 + ], 5070 + "firefox_usage": null, 5071 + "firefox_observable": null 5072 + }, 5073 + { 5074 + "name": "async-clipboard", 5075 + "usage": 0.00414589, 5076 + "source": "chrome_popularity", 5077 + "observable": null, 5078 + "observable_type": "blink_api", 5079 + "bcd_key_count": 15, 5080 + "bcd_keys": [ 5081 + "api.Clipboard", 5082 + "api.Clipboard.read", 5083 + "api.Clipboard.readText", 5084 + "api.Clipboard.type_image-png", 5085 + "api.Clipboard.type_text-html", 5086 + "api.Clipboard.type_text-plain", 5087 + "api.Clipboard.write", 5088 + "api.Clipboard.writeText", 5089 + "api.ClipboardItem", 5090 + "api.ClipboardItem.ClipboardItem", 5091 + "api.ClipboardItem.getType", 5092 + "api.ClipboardItem.presentationStyle", 5093 + "api.ClipboardItem.types", 5094 + "api.Navigator.clipboard", 5095 + "api.Permissions.permission_clipboard-write" 5096 + ], 5097 + "firefox_usage": 0.03183925212180658, 5098 + "firefox_observable": "api.ClipboardItem" 5099 + }, 5100 + { 5101 + "name": "two-value-display", 5102 + "usage": 0.00411289, 5103 + "source": "chrome_popularity", 5104 + "observable": null, 5105 + "observable_type": "css_property", 5106 + "bcd_key_count": 1, 5107 + "bcd_keys": [ 5108 + "css.properties.display.multi-keyword_values" 5109 + ], 5110 + "firefox_usage": null, 5111 + "firefox_observable": null 5112 + }, 5113 + { 5114 + "name": "regexp-compile", 5115 + "usage": 0.00408444, 5116 + "source": "chrome_popularity", 5117 + "observable": null, 5118 + "observable_type": "js_builtin", 5119 + "bcd_key_count": 1, 5120 + "bcd_keys": [ 5121 + "javascript.builtins.RegExp.compile" 5122 + ], 5123 + "firefox_usage": null, 5124 + "firefox_observable": null 5125 + }, 5126 + { 5127 + "name": "subgrid", 5128 + "usage": 0.00397497, 5129 + "source": "chrome_popularity", 5130 + "observable": null, 5131 + "observable_type": "css_property", 5132 + "bcd_key_count": 2, 5133 + "bcd_keys": [ 5134 + "css.properties.grid-template-columns.subgrid", 5135 + "css.properties.grid-template-rows.subgrid" 5136 + ], 5137 + "firefox_usage": null, 5138 + "firefox_observable": null 5139 + }, 5140 + { 5141 + "name": "app-protocol-handlers", 5142 + "usage": 0.00397116, 5143 + "source": "chrome_popularity", 5144 + "observable": null, 5145 + "observable_type": "manifests", 5146 + "bcd_key_count": 3, 5147 + "bcd_keys": [ 5148 + "manifests.webapp.protocol_handlers", 5149 + "manifests.webapp.protocol_handlers.protocol", 5150 + "manifests.webapp.protocol_handlers.url" 5151 + ], 5152 + "firefox_usage": null, 5153 + "firefox_observable": null 5154 + }, 5155 + { 5156 + "name": "trig-functions", 5157 + "usage": 0.00384141, 5158 + "source": "chrome_popularity", 5159 + "observable": null, 5160 + "observable_type": "css_type", 5161 + "bcd_key_count": 7, 5162 + "bcd_keys": [ 5163 + "css.types.acos", 5164 + "css.types.asin", 5165 + "css.types.atan", 5166 + "css.types.atan2", 5167 + "css.types.cos", 5168 + "css.types.sin", 5169 + "css.types.tan" 5170 + ], 5171 + "firefox_usage": null, 5172 + "firefox_observable": null 5173 + }, 5174 + { 5175 + "name": "origin-private-file-system", 5176 + "usage": 0.00349643, 5177 + "source": "chrome_popularity", 5178 + "observable": null, 5179 + "observable_type": "blink_api", 5180 + "bcd_key_count": 27, 5181 + "bcd_keys": [ 5182 + "api.FileSystemDirectoryHandle", 5183 + "api.FileSystemDirectoryHandle.entries", 5184 + "api.FileSystemDirectoryHandle.getDirectoryHandle", 5185 + "api.FileSystemDirectoryHandle.getFileHandle", 5186 + "api.FileSystemDirectoryHandle.keys", 5187 + "api.FileSystemDirectoryHandle.removeEntry", 5188 + "api.FileSystemDirectoryHandle.resolve", 5189 + "api.FileSystemDirectoryHandle.values", 5190 + "api.FileSystemFileHandle", 5191 + "api.FileSystemFileHandle.createSyncAccessHandle", 5192 + "api.FileSystemFileHandle.getFile", 5193 + "api.FileSystemHandle", 5194 + "api.FileSystemHandle.isSameEntry", 5195 + "api.FileSystemHandle.kind", 5196 + "api.FileSystemHandle.name", 5197 + "api.FileSystemSyncAccessHandle", 5198 + "api.FileSystemSyncAccessHandle.close", 5199 + "api.FileSystemSyncAccessHandle.close.sync_version", 5200 + "api.FileSystemSyncAccessHandle.flush", 5201 + "api.FileSystemSyncAccessHandle.flush.sync_version", 5202 + "api.FileSystemSyncAccessHandle.getSize", 5203 + "api.FileSystemSyncAccessHandle.getSize.sync_version", 5204 + "api.FileSystemSyncAccessHandle.read", 5205 + "api.FileSystemSyncAccessHandle.truncate", 5206 + "api.FileSystemSyncAccessHandle.truncate.sync_version", 5207 + "api.FileSystemSyncAccessHandle.write", 5208 + "api.StorageManager.getDirectory" 5209 + ], 5210 + "firefox_usage": null, 5211 + "firefox_observable": null 5212 + }, 5213 + { 5214 + "name": "wasm-multi-value", 5215 + "usage": 0.00344456, 5216 + "source": "chrome_popularity", 5217 + "observable": null, 5218 + "observable_type": "webassembly", 5219 + "bcd_key_count": 1, 5220 + "bcd_keys": [ 5221 + "webassembly.multi-value" 5222 + ], 5223 + "firefox_usage": null, 5224 + "firefox_observable": null 5225 + }, 5226 + { 5227 + "name": "transition-behavior", 5228 + "usage": 0.003385543155016527, 5229 + "source": "custom_metrics", 5230 + "observable": "transition-behavior", 5231 + "observable_type": "css_property", 5232 + "bcd_key_count": 2, 5233 + "bcd_keys": [ 5234 + "css.properties.transition-behavior", 5235 + "css.properties.transition.transition-behavior" 5236 + ], 5237 + "firefox_usage": 0.021863287566919316, 5238 + "firefox_observable": "css.properties.transition-behavior" 5239 + }, 5240 + { 5241 + "name": "wasm-simd", 5242 + "usage": 0.00325589, 5243 + "source": "chrome_popularity", 5244 + "observable": null, 5245 + "observable_type": "webassembly", 5246 + "bcd_key_count": 1, 5247 + "bcd_keys": [ 5248 + "webassembly.fixed-width-SIMD" 5249 + ], 5250 + "firefox_usage": null, 5251 + "firefox_observable": null 5252 + }, 5253 + { 5254 + "name": "webgl-oes-draw-buffers-indexed", 5255 + "usage": 0.00301681, 5256 + "source": "chrome_popularity", 5257 + "observable": null, 5258 + "observable_type": "blink_api", 5259 + "bcd_key_count": 8, 5260 + "bcd_keys": [ 5261 + "api.OES_draw_buffers_indexed", 5262 + "api.OES_draw_buffers_indexed.blendEquationSeparateiOES", 5263 + "api.OES_draw_buffers_indexed.blendEquationiOES", 5264 + "api.OES_draw_buffers_indexed.blendFuncSeparateiOES", 5265 + "api.OES_draw_buffers_indexed.blendFunciOES", 5266 + "api.OES_draw_buffers_indexed.colorMaskiOES", 5267 + "api.OES_draw_buffers_indexed.disableiOES", 5268 + "api.OES_draw_buffers_indexed.enableiOES" 5269 + ], 5270 + "firefox_usage": null, 5271 + "firefox_observable": null 5272 + }, 5273 + { 5274 + "name": "window-controls-overlay", 5275 + "usage": 0.002956738250855898, 5276 + "source": "blink_features", 5277 + "observable": "api.WindowControlsOverlay", 5278 + "observable_type": "blink_api", 5279 + "bcd_key_count": 14, 5280 + "bcd_keys": [ 5281 + "api.Navigator.windowControlsOverlay", 5282 + "api.WindowControlsOverlay", 5283 + "api.WindowControlsOverlay.geometrychange_event", 5284 + "api.WindowControlsOverlay.getTitlebarAreaRect", 5285 + "api.WindowControlsOverlay.visible", 5286 + "api.WindowControlsOverlayGeometryChangeEvent", 5287 + "api.WindowControlsOverlayGeometryChangeEvent.WindowControlsOverlayGeometryChangeEvent", 5288 + "api.WindowControlsOverlayGeometryChangeEvent.titlebarAreaRect", 5289 + "api.WindowControlsOverlayGeometryChangeEvent.visible", 5290 + "css.types.env.titlebar-area-height", 5291 + "css.types.env.titlebar-area-width", 5292 + "css.types.env.titlebar-area-x", 5293 + "css.types.env.titlebar-area-y", 5294 + "manifests.webapp.display_override.window-controls-overlay" 5295 + ], 5296 + "firefox_usage": null, 5297 + "firefox_observable": null 5298 + }, 5299 + { 5300 + "name": "overflow", 5301 + "usage": 0.00284646, 5302 + "source": "chrome_popularity", 5303 + "observable": null, 5304 + "observable_type": "css_atrule", 5305 + "bcd_key_count": 2, 5306 + "bcd_keys": [ 5307 + "css.at-rules.media.overflow-block", 5308 + "css.at-rules.media.overflow-inline" 5309 + ], 5310 + "firefox_usage": null, 5311 + "firefox_observable": null 5312 + }, 5313 + { 5314 + "name": "white-space-collapse", 5315 + "usage": 0.0027088693800295586, 5316 + "source": "custom_metrics", 5317 + "observable": "white-space-collapse", 5318 + "observable_type": "css_property", 5319 + "bcd_key_count": 6, 5320 + "bcd_keys": [ 5321 + "css.properties.white-space-collapse", 5322 + "css.properties.white-space-collapse.break-spaces", 5323 + "css.properties.white-space-collapse.collapse", 5324 + "css.properties.white-space-collapse.preserve", 5325 + "css.properties.white-space-collapse.preserve-breaks", 5326 + "css.properties.white-space-collapse.preserve-spaces" 5327 + ], 5328 + "firefox_usage": 0.006235146062892904, 5329 + "firefox_observable": "css.properties.white-space-collapse" 5330 + }, 5331 + { 5332 + "name": "clear-site-data", 5333 + "usage": 0.00265028, 5334 + "source": "chrome_popularity", 5335 + "observable": null, 5336 + "observable_type": "http", 5337 + "bcd_key_count": 8, 5338 + "bcd_keys": [ 5339 + "http.headers.Clear-Site-Data", 5340 + "http.headers.Clear-Site-Data.cache", 5341 + "http.headers.Clear-Site-Data.clientHints", 5342 + "http.headers.Clear-Site-Data.cookies", 5343 + "http.headers.Clear-Site-Data.executionContexts", 5344 + "http.headers.Clear-Site-Data.secure_context_required", 5345 + "http.headers.Clear-Site-Data.storage", 5346 + "http.headers.Clear-Site-Data.wildcard" 5347 + ], 5348 + "firefox_usage": null, 5349 + "firefox_observable": null 5350 + }, 5351 + { 5352 + "name": "fencedframe", 5353 + "usage": 0.0026455026455026454, 5354 + "source": "blink_features", 5355 + "observable": "api.HTMLFencedFrameElement", 5356 + "observable_type": "blink_api", 5357 + "bcd_key_count": 21, 5358 + "bcd_keys": [ 5359 + "api.Fence", 5360 + "api.Fence.getNestedConfigs", 5361 + "api.Fence.reportEvent", 5362 + "api.Fence.setReportEventDataForAutomaticBeacons", 5363 + "api.FencedFrameConfig", 5364 + "api.FencedFrameConfig.setSharedStorageContext", 5365 + "api.HTMLFencedFrameElement", 5366 + "api.HTMLFencedFrameElement.allow", 5367 + "api.HTMLFencedFrameElement.config", 5368 + "api.HTMLFencedFrameElement.height", 5369 + "api.HTMLFencedFrameElement.sandbox", 5370 + "api.HTMLFencedFrameElement.width", 5371 + "api.Navigator.deprecatedReplaceInURN", 5372 + "api.Window.fence", 5373 + "html.elements.a.target.unfencedTop", 5374 + "html.elements.fencedframe", 5375 + "html.elements.fencedframe.allow", 5376 + "html.elements.fencedframe.height", 5377 + "html.elements.fencedframe.width", 5378 + "http.headers.Content-Security-Policy.fenced-frame-src", 5379 + "http.headers.Sec-Fetch-Dest.fencedframe" 5380 + ], 5381 + "firefox_usage": null, 5382 + "firefox_observable": null 5383 + }, 5384 + { 5385 + "name": "app-share-targets", 5386 + "usage": 0.00262989, 5387 + "source": "chrome_popularity", 5388 + "observable": null, 5389 + "observable_type": "manifests", 5390 + "bcd_key_count": 1, 5391 + "bcd_keys": [ 5392 + "manifests.webapp.share_target" 5393 + ], 5394 + "firefox_usage": null, 5395 + "firefox_observable": null 5396 + }, 5397 + { 5398 + "name": "async-iterable-streams", 5399 + "usage": 0.00261857, 5400 + "source": "chrome_popularity", 5401 + "observable": null, 5402 + "observable_type": "blink_api", 5403 + "bcd_key_count": 2, 5404 + "bcd_keys": [ 5405 + "api.ReadableStream.@@asyncIterator", 5406 + "api.ReadableStream.values" 5407 + ], 5408 + "firefox_usage": null, 5409 + "firefox_observable": null 5410 + }, 5411 + { 5412 + "name": "explicit-resource-management", 5413 + "usage": 0.00250648, 5414 + "source": "chrome_popularity", 5415 + "observable": null, 5416 + "observable_type": "js_builtin", 5417 + "bcd_key_count": 28, 5418 + "bcd_keys": [ 5419 + "javascript.builtins.AsyncDisposableStack", 5420 + "javascript.builtins.AsyncDisposableStack.@@asyncDispose", 5421 + "javascript.builtins.AsyncDisposableStack.AsyncDisposableStack", 5422 + "javascript.builtins.AsyncDisposableStack.adopt", 5423 + "javascript.builtins.AsyncDisposableStack.defer", 5424 + "javascript.builtins.AsyncDisposableStack.disposeAsync", 5425 + "javascript.builtins.AsyncDisposableStack.disposed", 5426 + "javascript.builtins.AsyncDisposableStack.move", 5427 + "javascript.builtins.AsyncDisposableStack.use", 5428 + "javascript.builtins.AsyncIterator.@@asyncDispose", 5429 + "javascript.builtins.DisposableStack", 5430 + "javascript.builtins.DisposableStack.@@dispose", 5431 + "javascript.builtins.DisposableStack.DisposableStack", 5432 + "javascript.builtins.DisposableStack.adopt", 5433 + "javascript.builtins.DisposableStack.defer", 5434 + "javascript.builtins.DisposableStack.dispose", 5435 + "javascript.builtins.DisposableStack.disposed", 5436 + "javascript.builtins.DisposableStack.move", 5437 + "javascript.builtins.DisposableStack.use", 5438 + "javascript.builtins.Iterator.@@dispose", 5439 + "javascript.builtins.SuppressedError", 5440 + "javascript.builtins.SuppressedError.SuppressedError", 5441 + "javascript.builtins.SuppressedError.error", 5442 + "javascript.builtins.SuppressedError.suppressed", 5443 + "javascript.builtins.Symbol.asyncDispose", 5444 + "javascript.builtins.Symbol.dispose", 5445 + "javascript.statements.await_using", 5446 + "javascript.statements.using" 5447 + ], 5448 + "firefox_usage": null, 5449 + "firefox_observable": null 5450 + }, 5451 + { 5452 + "name": "details-content", 5453 + "usage": 0.002391235420270378, 5454 + "source": "custom_metrics", 5455 + "observable": "details-content", 5456 + "observable_type": "css_selector", 5457 + "bcd_key_count": 1, 5458 + "bcd_keys": [ 5459 + "css.selectors.details-content" 5460 + ], 5461 + "firefox_usage": null, 5462 + "firefox_observable": null 5463 + }, 5464 + { 5465 + "name": "ruby-position", 5466 + "usage": 0.002376204527531774, 5467 + "source": "custom_metrics", 5468 + "observable": "ruby-position", 5469 + "observable_type": "css_property", 5470 + "bcd_key_count": 4, 5471 + "bcd_keys": [ 5472 + "css.properties.ruby-position", 5473 + "css.properties.ruby-position.inter-character", 5474 + "css.properties.ruby-position.over", 5475 + "css.properties.ruby-position.under" 5476 + ], 5477 + "firefox_usage": 0.0018783516929650789, 5478 + "firefox_observable": "css.properties.ruby-position" 5479 + }, 5480 + { 5481 + "name": "ruby-align", 5482 + "usage": 0.002371477831702025, 5483 + "source": "custom_metrics", 5484 + "observable": "ruby-align", 5485 + "observable_type": "css_property", 5486 + "bcd_key_count": 5, 5487 + "bcd_keys": [ 5488 + "css.properties.ruby-align", 5489 + "css.properties.ruby-align.center", 5490 + "css.properties.ruby-align.space-around", 5491 + "css.properties.ruby-align.space-between", 5492 + "css.properties.ruby-align.start" 5493 + ], 5494 + "firefox_usage": 0.0019857776600019895, 5495 + "firefox_observable": "css.properties.ruby-align" 5496 + }, 5497 + { 5498 + "name": "ext-texture-norm16", 5499 + "usage": 0.00232164, 5500 + "source": "chrome_popularity", 5501 + "observable": null, 5502 + "observable_type": "blink_api", 5503 + "bcd_key_count": 1, 5504 + "bcd_keys": [ 5505 + "api.EXT_texture_norm16" 5506 + ], 5507 + "firefox_usage": null, 5508 + "firefox_observable": null 5509 + }, 5510 + { 5511 + "name": "writingsuggestions", 5512 + "usage": 0.00231929, 5513 + "source": "chrome_popularity", 5514 + "observable": null, 5515 + "observable_type": "blink_api", 5516 + "bcd_key_count": 2, 5517 + "bcd_keys": [ 5518 + "api.HTMLElement.writingSuggestions", 5519 + "html.global_attributes.writingsuggestions" 5520 + ], 5521 + "firefox_usage": null, 5522 + "firefox_observable": null 5523 + }, 5524 + { 5525 + "name": "compute-pressure", 5526 + "usage": 0.00230595, 5527 + "source": "chrome_popularity", 5528 + "observable": null, 5529 + "observable_type": "blink_api", 5530 + "bcd_key_count": 14, 5531 + "bcd_keys": [ 5532 + "api.PressureObserver", 5533 + "api.PressureObserver.PressureObserver", 5534 + "api.PressureObserver.disconnect", 5535 + "api.PressureObserver.knownSources_static", 5536 + "api.PressureObserver.observe", 5537 + "api.PressureObserver.takeRecords", 5538 + "api.PressureObserver.unobserve", 5539 + "api.PressureRecord", 5540 + "api.PressureRecord.source", 5541 + "api.PressureRecord.state", 5542 + "api.PressureRecord.time", 5543 + "api.PressureRecord.toJSON", 5544 + "html.elements.iframe.allow.compute-pressure", 5545 + "http.headers.Permissions-Policy.compute-pressure" 5546 + ], 5547 + "firefox_usage": null, 5548 + "firefox_observable": null 5549 + }, 5550 + { 5551 + "name": "font-variant-position", 5552 + "usage": 0.0021256896485550396, 5553 + "source": "custom_metrics", 5554 + "observable": "font-variant-position", 5555 + "observable_type": "css_property", 5556 + "bcd_key_count": 4, 5557 + "bcd_keys": [ 5558 + "css.properties.font-variant-position", 5559 + "css.properties.font-variant-position.normal", 5560 + "css.properties.font-variant-position.sub", 5561 + "css.properties.font-variant-position.super" 5562 + ], 5563 + "firefox_usage": 0.0019919431666883414, 5564 + "firefox_observable": "css.properties.font-variant-position" 5565 + }, 5566 + { 5567 + "name": "hwb", 5568 + "usage": 0.00207603, 5569 + "source": "chrome_popularity", 5570 + "observable": null, 5571 + "observable_type": "css_type", 5572 + "bcd_key_count": 2, 5573 + "bcd_keys": [ 5574 + "css.types.color.hwb", 5575 + "css.types.color.hwb.mixed_type_parameters" 5576 + ], 5577 + "firefox_usage": null, 5578 + "firefox_observable": null 5579 + }, 5580 + { 5581 + "name": "font-variant-alternates", 5582 + "usage": 0.0020589487034389734, 5583 + "source": "custom_metrics", 5584 + "observable": "font-variant-alternates", 5585 + "observable_type": "css_property", 5586 + "bcd_key_count": 37, 5587 + "bcd_keys": [ 5588 + "api.CSSFontFeatureValuesMap", 5589 + "api.CSSFontFeatureValuesMap.@@iterator", 5590 + "api.CSSFontFeatureValuesMap.clear", 5591 + "api.CSSFontFeatureValuesMap.delete", 5592 + "api.CSSFontFeatureValuesMap.entries", 5593 + "api.CSSFontFeatureValuesMap.forEach", 5594 + "api.CSSFontFeatureValuesMap.get", 5595 + "api.CSSFontFeatureValuesMap.has", 5596 + "api.CSSFontFeatureValuesMap.keys", 5597 + "api.CSSFontFeatureValuesMap.set", 5598 + "api.CSSFontFeatureValuesMap.size", 5599 + "api.CSSFontFeatureValuesMap.values", 5600 + "api.CSSFontFeatureValuesRule", 5601 + "api.CSSFontFeatureValuesRule.annotation", 5602 + "api.CSSFontFeatureValuesRule.characterVariant", 5603 + "api.CSSFontFeatureValuesRule.fontFamily", 5604 + "api.CSSFontFeatureValuesRule.ornaments", 5605 + "api.CSSFontFeatureValuesRule.styleset", 5606 + "api.CSSFontFeatureValuesRule.stylistic", 5607 + "api.CSSFontFeatureValuesRule.swash", 5608 + "css.at-rules.font-feature-values", 5609 + "css.at-rules.font-feature-values.annotation", 5610 + "css.at-rules.font-feature-values.character-variant", 5611 + "css.at-rules.font-feature-values.historical-forms", 5612 + "css.at-rules.font-feature-values.ornaments", 5613 + "css.at-rules.font-feature-values.styleset", 5614 + "css.at-rules.font-feature-values.stylistic", 5615 + "css.at-rules.font-feature-values.swash", 5616 + "css.properties.font-variant-alternates", 5617 + "css.properties.font-variant-alternates.annotation", 5618 + "css.properties.font-variant-alternates.character_variant", 5619 + "css.properties.font-variant-alternates.historical-forms", 5620 + "css.properties.font-variant-alternates.normal", 5621 + "css.properties.font-variant-alternates.ornaments", 5622 + "css.properties.font-variant-alternates.styleset", 5623 + "css.properties.font-variant-alternates.stylistic", 5624 + "css.properties.font-variant-alternates.swash" 5625 + ], 5626 + "firefox_usage": 0.0020768539574350466, 5627 + "firefox_observable": "css.properties.font-variant-alternates" 5628 + }, 5629 + { 5630 + "name": "text-emphasis", 5631 + "usage": 0.0020304939945438804, 5632 + "source": "custom_metrics", 5633 + "observable": "text-emphasis-position", 5634 + "observable_type": "css_property", 5635 + "bcd_key_count": 16, 5636 + "bcd_keys": [ 5637 + "css.properties.text-emphasis", 5638 + "css.properties.text-emphasis-color", 5639 + "css.properties.text-emphasis-position", 5640 + "css.properties.text-emphasis-position.auto", 5641 + "css.properties.text-emphasis-position.left", 5642 + "css.properties.text-emphasis-position.over", 5643 + "css.properties.text-emphasis-position.right", 5644 + "css.properties.text-emphasis-position.under", 5645 + "css.properties.text-emphasis-style", 5646 + "css.properties.text-emphasis-style.circle", 5647 + "css.properties.text-emphasis-style.dot", 5648 + "css.properties.text-emphasis-style.double-circle", 5649 + "css.properties.text-emphasis-style.filled", 5650 + "css.properties.text-emphasis-style.none", 5651 + "css.properties.text-emphasis-style.sesame", 5652 + "css.properties.text-emphasis-style.triangle" 5653 + ], 5654 + "firefox_usage": 0.0021205177010981927, 5655 + "firefox_observable": "css.properties.text-emphasis-position" 5656 + }, 5657 + { 5658 + "name": "target-text", 5659 + "usage": 0.0019983524629015826, 5660 + "source": "custom_metrics", 5661 + "observable": "target-text", 5662 + "observable_type": "css_selector", 5663 + "bcd_key_count": 1, 5664 + "bcd_keys": [ 5665 + "css.selectors.target-text" 5666 + ], 5667 + "firefox_usage": null, 5668 + "firefox_observable": null 5669 + }, 5670 + { 5671 + "name": "calc-size", 5672 + "usage": 0.00193455, 5673 + "source": "chrome_popularity", 5674 + "observable": null, 5675 + "observable_type": "css_type", 5676 + "bcd_key_count": 1, 5677 + "bcd_keys": [ 5678 + "css.types.calc-size" 5679 + ], 5680 + "firefox_usage": null, 5681 + "firefox_observable": null 5682 + }, 5683 + { 5684 + "name": "hyphenate-character", 5685 + "usage": 0.0019032513428070184, 5686 + "source": "custom_metrics", 5687 + "observable": "hyphenate-character", 5688 + "observable_type": "css_property", 5689 + "bcd_key_count": 2, 5690 + "bcd_keys": [ 5691 + "css.properties.hyphenate-character", 5692 + "css.properties.hyphenate-character.auto" 5693 + ], 5694 + "firefox_usage": 0.0013077285671131114, 5695 + "firefox_observable": "css.properties.hyphenate-character" 5696 + }, 5697 + { 5698 + "name": "field-sizing", 5699 + "usage": 0.0018966339686453688, 5700 + "source": "custom_metrics", 5701 + "observable": "field-sizing", 5702 + "observable_type": "css_property", 5703 + "bcd_key_count": 3, 5704 + "bcd_keys": [ 5705 + "css.properties.field-sizing", 5706 + "css.properties.field-sizing.content", 5707 + "css.properties.field-sizing.fixed" 5708 + ], 5709 + "firefox_usage": 0.0000037735603095554436, 5710 + "firefox_observable": "css.properties.field-sizing" 5711 + }, 5712 + { 5713 + "name": "anchor-positioning", 5714 + "usage": 0.0018963503668955836, 5715 + "source": "custom_metrics", 5716 + "observable": "anchor-name", 5717 + "observable_type": "css_property", 5718 + "bcd_key_count": 195, 5719 + "bcd_keys": [ 5720 + "api.CSSPositionTryDescriptors", 5721 + "api.CSSPositionTryDescriptors.align-self", 5722 + "api.CSSPositionTryDescriptors.alignSelf", 5723 + "api.CSSPositionTryDescriptors.block-size", 5724 + "api.CSSPositionTryDescriptors.blockSize", 5725 + "api.CSSPositionTryDescriptors.bottom", 5726 + "api.CSSPositionTryDescriptors.height", 5727 + "api.CSSPositionTryDescriptors.inline-size", 5728 + "api.CSSPositionTryDescriptors.inlineSize", 5729 + "api.CSSPositionTryDescriptors.inset", 5730 + "api.CSSPositionTryDescriptors.inset-block", 5731 + "api.CSSPositionTryDescriptors.inset-block-end", 5732 + "api.CSSPositionTryDescriptors.inset-block-start", 5733 + "api.CSSPositionTryDescriptors.inset-inline", 5734 + "api.CSSPositionTryDescriptors.inset-inline-end", 5735 + "api.CSSPositionTryDescriptors.inset-inline-start", 5736 + "api.CSSPositionTryDescriptors.insetBlock", 5737 + "api.CSSPositionTryDescriptors.insetBlockEnd", 5738 + "api.CSSPositionTryDescriptors.insetBlockStart", 5739 + "api.CSSPositionTryDescriptors.insetInline", 5740 + "api.CSSPositionTryDescriptors.insetInlineEnd", 5741 + "api.CSSPositionTryDescriptors.insetInlineStart", 5742 + "api.CSSPositionTryDescriptors.justify-self", 5743 + "api.CSSPositionTryDescriptors.justifySelf", 5744 + "api.CSSPositionTryDescriptors.left", 5745 + "api.CSSPositionTryDescriptors.margin", 5746 + "api.CSSPositionTryDescriptors.margin-block", 5747 + "api.CSSPositionTryDescriptors.margin-block-end", 5748 + "api.CSSPositionTryDescriptors.margin-block-start", 5749 + "api.CSSPositionTryDescriptors.margin-bottom", 5750 + "api.CSSPositionTryDescriptors.margin-inline", 5751 + "api.CSSPositionTryDescriptors.margin-inline-end", 5752 + "api.CSSPositionTryDescriptors.margin-inline-start", 5753 + "api.CSSPositionTryDescriptors.margin-left", 5754 + "api.CSSPositionTryDescriptors.margin-right", 5755 + "api.CSSPositionTryDescriptors.margin-top", 5756 + "api.CSSPositionTryDescriptors.marginBlock", 5757 + "api.CSSPositionTryDescriptors.marginBlockEnd", 5758 + "api.CSSPositionTryDescriptors.marginBlockStart", 5759 + "api.CSSPositionTryDescriptors.marginBottom", 5760 + "api.CSSPositionTryDescriptors.marginInline", 5761 + "api.CSSPositionTryDescriptors.marginInlineEnd", 5762 + "api.CSSPositionTryDescriptors.marginInlineStart", 5763 + "api.CSSPositionTryDescriptors.marginLeft", 5764 + "api.CSSPositionTryDescriptors.marginRight", 5765 + "api.CSSPositionTryDescriptors.marginTop", 5766 + "api.CSSPositionTryDescriptors.max-block-size", 5767 + "api.CSSPositionTryDescriptors.max-height", 5768 + "api.CSSPositionTryDescriptors.max-inline-size", 5769 + "api.CSSPositionTryDescriptors.max-width", 5770 + "api.CSSPositionTryDescriptors.maxBlockSize", 5771 + "api.CSSPositionTryDescriptors.maxHeight", 5772 + "api.CSSPositionTryDescriptors.maxInlineSize", 5773 + "api.CSSPositionTryDescriptors.maxWidth", 5774 + "api.CSSPositionTryDescriptors.min-block-size", 5775 + "api.CSSPositionTryDescriptors.min-height", 5776 + "api.CSSPositionTryDescriptors.min-inline-size", 5777 + "api.CSSPositionTryDescriptors.min-width", 5778 + "api.CSSPositionTryDescriptors.minBlockSize", 5779 + "api.CSSPositionTryDescriptors.minHeight", 5780 + "api.CSSPositionTryDescriptors.minInlineSize", 5781 + "api.CSSPositionTryDescriptors.minWidth", 5782 + "api.CSSPositionTryDescriptors.place-self", 5783 + "api.CSSPositionTryDescriptors.placeSelf", 5784 + "api.CSSPositionTryDescriptors.position-anchor", 5785 + "api.CSSPositionTryDescriptors.position-area", 5786 + "api.CSSPositionTryDescriptors.positionAnchor", 5787 + "api.CSSPositionTryDescriptors.positionArea", 5788 + "api.CSSPositionTryDescriptors.right", 5789 + "api.CSSPositionTryDescriptors.top", 5790 + "api.CSSPositionTryDescriptors.width", 5791 + "api.CSSPositionTryRule", 5792 + "api.CSSPositionTryRule.name", 5793 + "api.CSSPositionTryRule.style", 5794 + "api.HTMLButtonElement.popoverTargetElement.implicit_anchor_reference", 5795 + "api.HTMLElement.showPopover.options_source_parameter.implicit_anchor_reference", 5796 + "api.HTMLElement.togglePopover.options_source_parameter.implicit_anchor_reference", 5797 + "api.HTMLInputElement.popoverTargetElement.implicit_anchor_reference", 5798 + "css.at-rules.position-try", 5799 + "css.properties.align-items.anchor-center", 5800 + "css.properties.align-self.anchor-center", 5801 + "css.properties.anchor-name", 5802 + "css.properties.anchor-name.none", 5803 + "css.properties.anchor-scope", 5804 + "css.properties.anchor-scope.all", 5805 + "css.properties.anchor-scope.none", 5806 + "css.properties.block-size.anchor-size", 5807 + "css.properties.bottom.anchor", 5808 + "css.properties.bottom.anchor-size", 5809 + "css.properties.height.anchor-size", 5810 + "css.properties.inline-size.anchor-size", 5811 + "css.properties.inset-block-end.anchor", 5812 + "css.properties.inset-block-end.anchor-size", 5813 + "css.properties.inset-block-start.anchor", 5814 + "css.properties.inset-block-start.anchor-size", 5815 + "css.properties.inset-block.anchor", 5816 + "css.properties.inset-block.anchor-size", 5817 + "css.properties.inset-inline-end.anchor", 5818 + "css.properties.inset-inline-end.anchor-size", 5819 + "css.properties.inset-inline-start.anchor", 5820 + "css.properties.inset-inline-start.anchor-size", 5821 + "css.properties.inset-inline.anchor", 5822 + "css.properties.inset-inline.anchor-size", 5823 + "css.properties.inset.anchor", 5824 + "css.properties.inset.anchor-size", 5825 + "css.properties.justify-items.anchor-center", 5826 + "css.properties.justify-self.anchor-center", 5827 + "css.properties.left.anchor", 5828 + "css.properties.left.anchor-size", 5829 + "css.properties.margin-block-end.anchor-size", 5830 + "css.properties.margin-block-start.anchor-size", 5831 + "css.properties.margin-block.anchor-size", 5832 + "css.properties.margin-bottom.anchor-size", 5833 + "css.properties.margin-inline-end.anchor-size", 5834 + "css.properties.margin-inline-start.anchor-size", 5835 + "css.properties.margin-inline.anchor-size", 5836 + "css.properties.margin-left.anchor-size", 5837 + "css.properties.margin-right.anchor-size", 5838 + "css.properties.margin-top.anchor-size", 5839 + "css.properties.margin.anchor-size", 5840 + "css.properties.max-block-size.anchor-size", 5841 + "css.properties.max-height.anchor-size", 5842 + "css.properties.max-inline-size.anchor-size", 5843 + "css.properties.max-width.anchor-size", 5844 + "css.properties.min-block-size.anchor-size", 5845 + "css.properties.min-height.anchor-size", 5846 + "css.properties.min-inline-size.anchor-size", 5847 + "css.properties.min-width.anchor-size", 5848 + "css.properties.place-items.anchor-center", 5849 + "css.properties.place-self.anchor-center", 5850 + "css.properties.position-anchor", 5851 + "css.properties.position-anchor.auto", 5852 + "css.properties.position-area", 5853 + "css.properties.position-area.block-end", 5854 + "css.properties.position-area.block-start", 5855 + "css.properties.position-area.bottom", 5856 + "css.properties.position-area.center", 5857 + "css.properties.position-area.end", 5858 + "css.properties.position-area.inline-end", 5859 + "css.properties.position-area.inline-start", 5860 + "css.properties.position-area.left", 5861 + "css.properties.position-area.none", 5862 + "css.properties.position-area.right", 5863 + "css.properties.position-area.self-end", 5864 + "css.properties.position-area.self-start", 5865 + "css.properties.position-area.span-all", 5866 + "css.properties.position-area.span-block-end", 5867 + "css.properties.position-area.span-block-start", 5868 + "css.properties.position-area.span-bottom", 5869 + "css.properties.position-area.span-end", 5870 + "css.properties.position-area.span-inline-end", 5871 + "css.properties.position-area.span-inline-start", 5872 + "css.properties.position-area.span-start", 5873 + "css.properties.position-area.span-top", 5874 + "css.properties.position-area.span-x-end", 5875 + "css.properties.position-area.span-x-start", 5876 + "css.properties.position-area.span-y-end", 5877 + "css.properties.position-area.span-y-start", 5878 + "css.properties.position-area.start", 5879 + "css.properties.position-area.top", 5880 + "css.properties.position-area.x-end", 5881 + "css.properties.position-area.x-self-end", 5882 + "css.properties.position-area.x-self-start", 5883 + "css.properties.position-area.x-start", 5884 + "css.properties.position-area.y-end", 5885 + "css.properties.position-area.y-self-end", 5886 + "css.properties.position-area.y-self-start", 5887 + "css.properties.position-area.y-start", 5888 + "css.properties.position-try", 5889 + "css.properties.position-try-fallbacks", 5890 + "css.properties.position-try-fallbacks.flip-block", 5891 + "css.properties.position-try-fallbacks.flip-inline", 5892 + "css.properties.position-try-fallbacks.flip-start", 5893 + "css.properties.position-try-fallbacks.none", 5894 + "css.properties.position-try-fallbacks.position-area", 5895 + "css.properties.position-try-order", 5896 + "css.properties.position-try-order.most-block-size", 5897 + "css.properties.position-try-order.most-height", 5898 + "css.properties.position-try-order.most-inline-size", 5899 + "css.properties.position-try-order.most-width", 5900 + "css.properties.position-try-order.normal", 5901 + "css.properties.position-visibility", 5902 + "css.properties.position-visibility.always", 5903 + "css.properties.position-visibility.anchors-visible", 5904 + "css.properties.position-visibility.no-overflow", 5905 + "css.properties.right.anchor", 5906 + "css.properties.right.anchor-size", 5907 + "css.properties.top.anchor", 5908 + "css.properties.top.anchor-size", 5909 + "css.properties.width.anchor-size", 5910 + "css.types.anchor", 5911 + "css.types.anchor-size", 5912 + "css.types.anchor-size.inset_margin", 5913 + "html.elements.button.popovertarget.implicit_anchor_reference", 5914 + "html.elements.input.popovertarget.implicit_anchor_reference" 5915 + ], 5916 + "firefox_usage": 6.562456728800945e-7, 5917 + "firefox_observable": "css.properties.position-area" 5918 + }, 5919 + { 5920 + "name": "transferable-streams", 5921 + "usage": 0.00186906, 5922 + "source": "chrome_popularity", 5923 + "observable": null, 5924 + "observable_type": "blink_api", 5925 + "bcd_key_count": 3, 5926 + "bcd_keys": [ 5927 + "api.ReadableStream.transferable", 5928 + "api.TransformStream.transferable", 5929 + "api.WritableStream.transferable" 5930 + ], 5931 + "firefox_usage": null, 5932 + "firefox_observable": null 5933 + }, 5934 + { 5935 + "name": "wasm-threads", 5936 + "usage": 0.00185714, 5937 + "source": "chrome_popularity", 5938 + "observable": null, 5939 + "observable_type": "webassembly", 5940 + "bcd_key_count": 2, 5941 + "bcd_keys": [ 5942 + "webassembly.api.Memory.Memory.shared", 5943 + "webassembly.threads-and-atomics" 5944 + ], 5945 + "firefox_usage": null, 5946 + "firefox_observable": null 5947 + }, 5948 + { 5949 + "name": "clipboard-supports", 5950 + "usage": 0.0018446, 5951 + "source": "chrome_popularity", 5952 + "observable": null, 5953 + "observable_type": "blink_api", 5954 + "bcd_key_count": 1, 5955 + "bcd_keys": [ 5956 + "api.ClipboardItem.supports_static" 5957 + ], 5958 + "firefox_usage": null, 5959 + "firefox_observable": null 5960 + }, 5961 + { 5962 + "name": "accelerometer", 5963 + "usage": 0.0016420361247947454, 5964 + "source": "blink_features", 5965 + "observable": "api.Accelerometer", 5966 + "observable_type": "blink_api", 5967 + "bcd_key_count": 12, 5968 + "bcd_keys": [ 5969 + "api.Accelerometer", 5970 + "api.Accelerometer.Accelerometer", 5971 + "api.Accelerometer.x", 5972 + "api.Accelerometer.y", 5973 + "api.Accelerometer.z", 5974 + "api.GravitySensor", 5975 + "api.GravitySensor.GravitySensor", 5976 + "api.LinearAccelerationSensor", 5977 + "api.LinearAccelerationSensor.LinearAccelerationSensor", 5978 + "api.Permissions.permission_accelerometer", 5979 + "html.elements.iframe.allow.accelerometer", 5980 + "http.headers.Permissions-Policy.accelerometer" 5981 + ], 5982 + "firefox_usage": 0.006750321441889268, 5983 + "firefox_observable": "api.Accelerometer" 5984 + }, 5985 + { 5986 + "name": "hidden-until-found", 5987 + "usage": 0.00155541, 5988 + "source": "chrome_popularity", 5989 + "observable": null, 5990 + "observable_type": "blink_api", 5991 + "bcd_key_count": 2, 5992 + "bcd_keys": [ 5993 + "api.Element.beforematch_event", 5994 + "html.global_attributes.hidden.until-found" 5995 + ], 5996 + "firefox_usage": null, 5997 + "firefox_observable": null 5998 + }, 5999 + { 6000 + "name": "request-animation-frame-workers", 6001 + "usage": 0.00154096, 6002 + "source": "chrome_popularity", 6003 + "observable": null, 6004 + "observable_type": "blink_api", 6005 + "bcd_key_count": 2, 6006 + "bcd_keys": [ 6007 + "api.DedicatedWorkerGlobalScope.cancelAnimationFrame", 6008 + "api.DedicatedWorkerGlobalScope.requestAnimationFrame" 6009 + ], 6010 + "firefox_usage": null, 6011 + "firefox_observable": null 6012 + }, 6013 + { 6014 + "name": "canvas-roundrect", 6015 + "usage": 0.00149207, 6016 + "source": "chrome_popularity", 6017 + "observable": null, 6018 + "observable_type": "blink_api", 6019 + "bcd_key_count": 2, 6020 + "bcd_keys": [ 6021 + "api.CanvasRenderingContext2D.roundRect", 6022 + "api.OffscreenCanvasRenderingContext2D.roundRect" 6023 + ], 6024 + "firefox_usage": null, 6025 + "firefox_observable": null 6026 + }, 6027 + { 6028 + "name": "if", 6029 + "usage": 0.0013824, 6030 + "source": "chrome_popularity", 6031 + "observable": null, 6032 + "observable_type": "css_type", 6033 + "bcd_key_count": 1, 6034 + "bcd_keys": [ 6035 + "css.types.if" 6036 + ], 6037 + "firefox_usage": null, 6038 + "firefox_observable": null 6039 + }, 6040 + { 6041 + "name": "badging", 6042 + "usage": 0.00138026, 6043 + "source": "chrome_popularity", 6044 + "observable": null, 6045 + "observable_type": "blink_api", 6046 + "bcd_key_count": 2, 6047 + "bcd_keys": [ 6048 + "api.Navigator.clearAppBadge", 6049 + "api.Navigator.setAppBadge" 6050 + ], 6051 + "firefox_usage": null, 6052 + "firefox_observable": null 6053 + }, 6054 + { 6055 + "name": "storage-buckets", 6056 + "usage": 0.00134866, 6057 + "source": "chrome_popularity", 6058 + "observable": null, 6059 + "observable_type": "blink_api", 6060 + "bcd_key_count": 16, 6061 + "bcd_keys": [ 6062 + "api.Navigator.storageBuckets", 6063 + "api.StorageBucket", 6064 + "api.StorageBucket.caches", 6065 + "api.StorageBucket.estimate", 6066 + "api.StorageBucket.expires", 6067 + "api.StorageBucket.getDirectory", 6068 + "api.StorageBucket.indexedDB", 6069 + "api.StorageBucket.name", 6070 + "api.StorageBucket.persist", 6071 + "api.StorageBucket.persisted", 6072 + "api.StorageBucket.setExpires", 6073 + "api.StorageBucketManager", 6074 + "api.StorageBucketManager.delete", 6075 + "api.StorageBucketManager.keys", 6076 + "api.StorageBucketManager.open", 6077 + "api.WorkerNavigator.storageBuckets" 6078 + ], 6079 + "firefox_usage": null, 6080 + "firefox_observable": null 6081 + }, 6082 + { 6083 + "name": "gethtml", 6084 + "usage": 0.00134143, 6085 + "source": "chrome_popularity", 6086 + "observable": null, 6087 + "observable_type": "blink_api", 6088 + "bcd_key_count": 2, 6089 + "bcd_keys": [ 6090 + "api.Element.getHTML", 6091 + "api.ShadowRoot.getHTML" 6092 + ], 6093 + "firefox_usage": null, 6094 + "firefox_observable": null 6095 + }, 6096 + { 6097 + "name": "counter-set", 6098 + "usage": 0.0012994632175147903, 6099 + "source": "custom_metrics", 6100 + "observable": "counter-set", 6101 + "observable_type": "css_property", 6102 + "bcd_key_count": 3, 6103 + "bcd_keys": [ 6104 + "css.properties.counter-set", 6105 + "css.properties.counter-set.list-item", 6106 + "css.properties.counter-set.none" 6107 + ], 6108 + "firefox_usage": 0.0030680933134647, 6109 + "firefox_observable": "css.properties.counter-set" 6110 + }, 6111 + { 6112 + "name": "transferable-arraybuffer", 6113 + "usage": 0.00125764, 6114 + "source": "chrome_popularity", 6115 + "observable": null, 6116 + "observable_type": "js_builtin", 6117 + "bcd_key_count": 3, 6118 + "bcd_keys": [ 6119 + "javascript.builtins.ArrayBuffer.detached", 6120 + "javascript.builtins.ArrayBuffer.transfer", 6121 + "javascript.builtins.ArrayBuffer.transferToFixedLength" 6122 + ], 6123 + "firefox_usage": null, 6124 + "firefox_observable": null 6125 + }, 6126 + { 6127 + "name": "webgl-color-management", 6128 + "usage": 0.00106145, 6129 + "source": "chrome_popularity", 6130 + "observable": null, 6131 + "observable_type": "blink_api", 6132 + "bcd_key_count": 2, 6133 + "bcd_keys": [ 6134 + "api.WebGLRenderingContext.drawingBufferColorSpace", 6135 + "api.WebGLRenderingContext.unpackColorSpace" 6136 + ], 6137 + "firefox_usage": null, 6138 + "firefox_observable": null 6139 + }, 6140 + { 6141 + "name": "text-box", 6142 + "usage": 0.0009685945094323106, 6143 + "source": "custom_metrics", 6144 + "observable": "text-box", 6145 + "observable_type": "css_property", 6146 + "bcd_key_count": 14, 6147 + "bcd_keys": [ 6148 + "css.properties.text-box", 6149 + "css.properties.text-box-edge", 6150 + "css.properties.text-box-edge.auto", 6151 + "css.properties.text-box-trim", 6152 + "css.properties.text-box-trim.none", 6153 + "css.properties.text-box-trim.trim-both", 6154 + "css.properties.text-box-trim.trim-end", 6155 + "css.properties.text-box-trim.trim-start", 6156 + "css.properties.text-box.normal", 6157 + "css.types.text-edge", 6158 + "css.types.text-edge.alphabetic", 6159 + "css.types.text-edge.cap", 6160 + "css.types.text-edge.ex", 6161 + "css.types.text-edge.text" 6162 + ], 6163 + "firefox_usage": null, 6164 + "firefox_observable": null 6165 + }, 6166 + { 6167 + "name": "text-wrap-style", 6168 + "usage": 0.0009597083212723812, 6169 + "source": "custom_metrics", 6170 + "observable": "text-wrap-style", 6171 + "observable_type": "css_property", 6172 + "bcd_key_count": 5, 6173 + "bcd_keys": [ 6174 + "css.properties.text-wrap-style", 6175 + "css.properties.text-wrap-style.auto", 6176 + "css.properties.text-wrap-style.balance", 6177 + "css.properties.text-wrap-style.pretty", 6178 + "css.properties.text-wrap-style.stable" 6179 + ], 6180 + "firefox_usage": 0.00038005773274383636, 6181 + "firefox_observable": "css.properties.text-wrap-style" 6182 + }, 6183 + { 6184 + "name": "scroll-to-text-fragment", 6185 + "usage": 0.00091902, 6186 + "source": "chrome_popularity", 6187 + "observable": null, 6188 + "observable_type": "blink_api", 6189 + "bcd_key_count": 3, 6190 + "bcd_keys": [ 6191 + "api.Document.fragmentDirective", 6192 + "api.FragmentDirective", 6193 + "html.elements.a.text_fragments" 6194 + ], 6195 + "firefox_usage": null, 6196 + "firefox_observable": null 6197 + }, 6198 + { 6199 + "name": "hyphenate-limit-chars", 6200 + "usage": 0.0009110233542259591, 6201 + "source": "custom_metrics", 6202 + "observable": "hyphenate-limit-chars", 6203 + "observable_type": "css_property", 6204 + "bcd_key_count": 2, 6205 + "bcd_keys": [ 6206 + "css.properties.hyphenate-limit-chars", 6207 + "css.properties.hyphenate-limit-chars.auto" 6208 + ], 6209 + "firefox_usage": 0.002412664032214245, 6210 + "firefox_observable": "css.properties.hyphenate-limit-chars" 6211 + }, 6212 + { 6213 + "name": "webgl2-color-management", 6214 + "usage": 0.00089057, 6215 + "source": "chrome_popularity", 6216 + "observable": null, 6217 + "observable_type": "blink_api", 6218 + "bcd_key_count": 2, 6219 + "bcd_keys": [ 6220 + "api.WebGL2RenderingContext.drawingBufferColorSpace", 6221 + "api.WebGL2RenderingContext.unpackColorSpace" 6222 + ], 6223 + "firefox_usage": null, 6224 + "firefox_observable": null 6225 + }, 6226 + { 6227 + "name": "webcodecs", 6228 + "usage": 0.00083981, 6229 + "source": "chrome_popularity", 6230 + "observable": null, 6231 + "observable_type": "blink_api", 6232 + "bcd_key_count": 125, 6233 + "bcd_keys": [ 6234 + "api.AudioData", 6235 + "api.AudioData.AudioData", 6236 + "api.AudioData.allocationSize", 6237 + "api.AudioData.clone", 6238 + "api.AudioData.close", 6239 + "api.AudioData.copyTo", 6240 + "api.AudioData.duration", 6241 + "api.AudioData.format", 6242 + "api.AudioData.numberOfChannels", 6243 + "api.AudioData.numberOfFrames", 6244 + "api.AudioData.sampleRate", 6245 + "api.AudioData.timestamp", 6246 + "api.AudioDecoder", 6247 + "api.AudioDecoder.AudioDecoder", 6248 + "api.AudioDecoder.close", 6249 + "api.AudioDecoder.configure", 6250 + "api.AudioDecoder.decode", 6251 + "api.AudioDecoder.decodeQueueSize", 6252 + "api.AudioDecoder.dequeue_event", 6253 + "api.AudioDecoder.flush", 6254 + "api.AudioDecoder.isConfigSupported_static", 6255 + "api.AudioDecoder.reset", 6256 + "api.AudioDecoder.state", 6257 + "api.AudioEncoder", 6258 + "api.AudioEncoder.AudioEncoder", 6259 + "api.AudioEncoder.close", 6260 + "api.AudioEncoder.configure", 6261 + "api.AudioEncoder.configure.bitrateMode", 6262 + "api.AudioEncoder.configure.opus", 6263 + "api.AudioEncoder.configure.opus.opus_application", 6264 + "api.AudioEncoder.configure.opus.opus_signal", 6265 + "api.AudioEncoder.dequeue_event", 6266 + "api.AudioEncoder.encode", 6267 + "api.AudioEncoder.encodeQueueSize", 6268 + "api.AudioEncoder.flush", 6269 + "api.AudioEncoder.isConfigSupported_static", 6270 + "api.AudioEncoder.reset", 6271 + "api.AudioEncoder.state", 6272 + "api.EncodedAudioChunk", 6273 + "api.EncodedAudioChunk.EncodedAudioChunk", 6274 + "api.EncodedAudioChunk.byteLength", 6275 + "api.EncodedAudioChunk.copyTo", 6276 + "api.EncodedAudioChunk.duration", 6277 + "api.EncodedAudioChunk.timestamp", 6278 + "api.EncodedAudioChunk.type", 6279 + "api.EncodedVideoChunk", 6280 + "api.EncodedVideoChunk.EncodedVideoChunk", 6281 + "api.EncodedVideoChunk.byteLength", 6282 + "api.EncodedVideoChunk.copyTo", 6283 + "api.EncodedVideoChunk.duration", 6284 + "api.EncodedVideoChunk.timestamp", 6285 + "api.EncodedVideoChunk.type", 6286 + "api.ImageDecoder", 6287 + "api.ImageDecoder.ImageDecoder", 6288 + "api.ImageDecoder.close", 6289 + "api.ImageDecoder.complete", 6290 + "api.ImageDecoder.completed", 6291 + "api.ImageDecoder.decode", 6292 + "api.ImageDecoder.isTypeSupported_static", 6293 + "api.ImageDecoder.reset", 6294 + "api.ImageDecoder.tracks", 6295 + "api.ImageDecoder.type", 6296 + "api.ImageTrack", 6297 + "api.ImageTrack.animated", 6298 + "api.ImageTrack.frameCount", 6299 + "api.ImageTrack.repetitionCount", 6300 + "api.ImageTrack.selected", 6301 + "api.ImageTrackList", 6302 + "api.ImageTrackList.length", 6303 + "api.ImageTrackList.ready", 6304 + "api.ImageTrackList.selectedIndex", 6305 + "api.ImageTrackList.selectedTrack", 6306 + "api.VideoColorSpace", 6307 + "api.VideoColorSpace.VideoColorSpace", 6308 + "api.VideoColorSpace.fullRange", 6309 + "api.VideoColorSpace.matrix", 6310 + "api.VideoColorSpace.primaries", 6311 + "api.VideoColorSpace.toJSON", 6312 + "api.VideoColorSpace.transfer", 6313 + "api.VideoDecoder", 6314 + "api.VideoDecoder.VideoDecoder", 6315 + "api.VideoDecoder.close", 6316 + "api.VideoDecoder.configure", 6317 + "api.VideoDecoder.configure.flip_option", 6318 + "api.VideoDecoder.configure.rotation_option", 6319 + "api.VideoDecoder.decode", 6320 + "api.VideoDecoder.decodeQueueSize", 6321 + "api.VideoDecoder.dequeue_event", 6322 + "api.VideoDecoder.flush", 6323 + "api.VideoDecoder.isConfigSupported_static", 6324 + "api.VideoDecoder.isConfigSupported_static.flip_option", 6325 + "api.VideoDecoder.isConfigSupported_static.rotation_option", 6326 + "api.VideoDecoder.reset", 6327 + "api.VideoDecoder.state", 6328 + "api.VideoEncoder", 6329 + "api.VideoEncoder.VideoEncoder", 6330 + "api.VideoEncoder.close", 6331 + "api.VideoEncoder.configure", 6332 + "api.VideoEncoder.dequeue_event", 6333 + "api.VideoEncoder.encode", 6334 + "api.VideoEncoder.encodeQueueSize", 6335 + "api.VideoEncoder.flush", 6336 + "api.VideoEncoder.isConfigSupported_static", 6337 + "api.VideoEncoder.reset", 6338 + "api.VideoEncoder.state", 6339 + "api.VideoFrame", 6340 + "api.VideoFrame.VideoFrame", 6341 + "api.VideoFrame.VideoFrame.flip_option", 6342 + "api.VideoFrame.VideoFrame.rotation_option", 6343 + "api.VideoFrame.allocationSize", 6344 + "api.VideoFrame.clone", 6345 + "api.VideoFrame.close", 6346 + "api.VideoFrame.codedHeight", 6347 + "api.VideoFrame.codedRect", 6348 + "api.VideoFrame.codedWidth", 6349 + "api.VideoFrame.colorSpace", 6350 + "api.VideoFrame.copyTo", 6351 + "api.VideoFrame.displayHeight", 6352 + "api.VideoFrame.displayWidth", 6353 + "api.VideoFrame.duration", 6354 + "api.VideoFrame.flip", 6355 + "api.VideoFrame.format", 6356 + "api.VideoFrame.rotation", 6357 + "api.VideoFrame.timestamp", 6358 + "api.VideoFrame.visibleRect" 6359 + ], 6360 + "firefox_usage": 0.04085757684838708, 6361 + "firefox_observable": "api.VideoFrame" 6362 + }, 6363 + { 6364 + "name": "datalist", 6365 + "usage": 0.0007617234555212754, 6366 + "source": "custom_metrics", 6367 + "observable": "datalist", 6368 + "observable_type": "html_element", 6369 + "bcd_key_count": 3, 6370 + "bcd_keys": [ 6371 + "api.HTMLDataListElement", 6372 + "api.HTMLDataListElement.options", 6373 + "html.elements.datalist" 6374 + ], 6375 + "firefox_usage": null, 6376 + "firefox_observable": null 6377 + }, 6378 + { 6379 + "name": "resizable-buffers", 6380 + "usage": 0.0007511, 6381 + "source": "chrome_popularity", 6382 + "observable": null, 6383 + "observable_type": "js_builtin", 6384 + "bcd_key_count": 8, 6385 + "bcd_keys": [ 6386 + "javascript.builtins.ArrayBuffer.ArrayBuffer.maxByteLength_option", 6387 + "javascript.builtins.ArrayBuffer.maxByteLength", 6388 + "javascript.builtins.ArrayBuffer.resizable", 6389 + "javascript.builtins.ArrayBuffer.resize", 6390 + "javascript.builtins.SharedArrayBuffer.SharedArrayBuffer.maxByteLength_option", 6391 + "javascript.builtins.SharedArrayBuffer.grow", 6392 + "javascript.builtins.SharedArrayBuffer.growable", 6393 + "javascript.builtins.SharedArrayBuffer.maxByteLength" 6394 + ], 6395 + "firefox_usage": null, 6396 + "firefox_observable": null 6397 + }, 6398 + { 6399 + "name": "clip-path-boxes", 6400 + "usage": 0.00073744, 6401 + "source": "chrome_popularity", 6402 + "observable": null, 6403 + "observable_type": "css_property", 6404 + "bcd_key_count": 3, 6405 + "bcd_keys": [ 6406 + "css.properties.clip-path.fill-box", 6407 + "css.properties.clip-path.stroke-box", 6408 + "css.properties.clip-path.view-box" 6409 + ], 6410 + "firefox_usage": null, 6411 + "firefox_observable": null 6412 + }, 6413 + { 6414 + "name": "virtual-keyboard", 6415 + "usage": 0.0006226068549014725, 6416 + "source": "blink_features", 6417 + "observable": "api.VirtualKeyboard", 6418 + "observable_type": "blink_api", 6419 + "bcd_key_count": 9, 6420 + "bcd_keys": [ 6421 + "api.HTMLElement.virtualKeyboardPolicy", 6422 + "api.Navigator.virtualKeyboard", 6423 + "api.VirtualKeyboard", 6424 + "api.VirtualKeyboard.boundingRect", 6425 + "api.VirtualKeyboard.geometrychange_event", 6426 + "api.VirtualKeyboard.hide", 6427 + "api.VirtualKeyboard.overlaysContent", 6428 + "api.VirtualKeyboard.show", 6429 + "html.global_attributes.virtualkeyboardpolicy" 6430 + ], 6431 + "firefox_usage": null, 6432 + "firefox_observable": null 6433 + }, 6434 + { 6435 + "name": "non-cookie-storage-access", 6436 + "usage": 0.00054668, 6437 + "source": "chrome_popularity", 6438 + "observable": null, 6439 + "observable_type": "blink_api", 6440 + "bcd_key_count": 28, 6441 + "bcd_keys": [ 6442 + "api.Document.hasUnpartitionedCookieAccess", 6443 + "api.Document.requestStorageAccess.types_parameter", 6444 + "api.Document.requestStorageAccess.types_parameter.types_BroadcastChannel_parameter", 6445 + "api.Document.requestStorageAccess.types_parameter.types_SharedWorker_parameter", 6446 + "api.Document.requestStorageAccess.types_parameter.types_all_parameter", 6447 + "api.Document.requestStorageAccess.types_parameter.types_caches_parameter", 6448 + "api.Document.requestStorageAccess.types_parameter.types_cookies_parameter", 6449 + "api.Document.requestStorageAccess.types_parameter.types_createObjectURL_parameter", 6450 + "api.Document.requestStorageAccess.types_parameter.types_estimate_parameter", 6451 + "api.Document.requestStorageAccess.types_parameter.types_getDirectory_parameter", 6452 + "api.Document.requestStorageAccess.types_parameter.types_indexedDB_parameter", 6453 + "api.Document.requestStorageAccess.types_parameter.types_localStorage_parameter", 6454 + "api.Document.requestStorageAccess.types_parameter.types_locks_parameter", 6455 + "api.Document.requestStorageAccess.types_parameter.types_revokeObjectURL_parameter", 6456 + "api.Document.requestStorageAccess.types_parameter.types_sessionStorage_parameter", 6457 + "api.SharedWorker.SharedWorker.options_sameSiteCookies_parameter", 6458 + "api.StorageAccessHandle", 6459 + "api.StorageAccessHandle.BroadcastChannel", 6460 + "api.StorageAccessHandle.SharedWorker", 6461 + "api.StorageAccessHandle.caches", 6462 + "api.StorageAccessHandle.createObjectURL", 6463 + "api.StorageAccessHandle.estimate", 6464 + "api.StorageAccessHandle.getDirectory", 6465 + "api.StorageAccessHandle.indexedDB", 6466 + "api.StorageAccessHandle.localStorage", 6467 + "api.StorageAccessHandle.locks", 6468 + "api.StorageAccessHandle.revokeObjectURL", 6469 + "api.StorageAccessHandle.sessionStorage" 6470 + ], 6471 + "firefox_usage": null, 6472 + "firefox_observable": null 6473 + }, 6474 + { 6475 + "name": "pointer-lock", 6476 + "usage": 0.00050105, 6477 + "source": "chrome_popularity", 6478 + "observable": null, 6479 + "observable_type": "blink_api", 6480 + "bcd_key_count": 5, 6481 + "bcd_keys": [ 6482 + "api.Document.exitPointerLock", 6483 + "api.Document.pointerLockElement", 6484 + "api.Document.pointerlockchange_event", 6485 + "api.Document.pointerlockerror_event", 6486 + "api.Element.requestPointerLock" 6487 + ], 6488 + "firefox_usage": null, 6489 + "firefox_observable": null 6490 + }, 6491 + { 6492 + "name": "details-name", 6493 + "usage": 0.00049566, 6494 + "source": "chrome_popularity", 6495 + "observable": null, 6496 + "observable_type": "blink_api", 6497 + "bcd_key_count": 2, 6498 + "bcd_keys": [ 6499 + "api.HTMLDetailsElement.name", 6500 + "html.elements.details.name" 6501 + ], 6502 + "firefox_usage": null, 6503 + "firefox_observable": null 6504 + }, 6505 + { 6506 + "name": "font-family-math", 6507 + "usage": 0.00048724, 6508 + "source": "chrome_popularity", 6509 + "observable": null, 6510 + "observable_type": "css_property", 6511 + "bcd_key_count": 1, 6512 + "bcd_keys": [ 6513 + "css.properties.font-family.math" 6514 + ], 6515 + "firefox_usage": null, 6516 + "firefox_observable": null 6517 + }, 6518 + { 6519 + "name": "window-management", 6520 + "usage": 0.00046148, 6521 + "source": "chrome_popularity", 6522 + "observable": null, 6523 + "observable_type": "blink_api", 6524 + "bcd_key_count": 27, 6525 + "bcd_keys": [ 6526 + "api.Element.requestFullscreen.options_screen_parameter", 6527 + "api.Permissions.permission_window-management", 6528 + "api.Screen.change_event", 6529 + "api.Screen.isExtended", 6530 + "api.ScreenDetailed", 6531 + "api.ScreenDetailed.availLeft", 6532 + "api.ScreenDetailed.availTop", 6533 + "api.ScreenDetailed.devicePixelRatio", 6534 + "api.ScreenDetailed.isInternal", 6535 + "api.ScreenDetailed.isPrimary", 6536 + "api.ScreenDetailed.label", 6537 + "api.ScreenDetailed.left", 6538 + "api.ScreenDetailed.top", 6539 + "api.ScreenDetails", 6540 + "api.ScreenDetails.currentScreen", 6541 + "api.ScreenDetails.currentscreenchange_event", 6542 + "api.ScreenDetails.screens", 6543 + "api.ScreenDetails.screenschange_event", 6544 + "api.Window.getScreenDetails", 6545 + "api.Window.moveTo.relative-multi-screen", 6546 + "api.Window.open.relative-multi-screen", 6547 + "api.Window.screenLeft.relative-multi-screen", 6548 + "api.Window.screenTop.relative-multi-screen", 6549 + "api.Window.screenX.relative-multi-screen", 6550 + "api.Window.screenY.relative-multi-screen", 6551 + "html.elements.iframe.allow.window-management", 6552 + "http.headers.Permissions-Policy.window-management" 6553 + ], 6554 + "firefox_usage": null, 6555 + "firefox_observable": null 6556 + }, 6557 + { 6558 + "name": "word-break-auto-phrase", 6559 + "usage": 0.00045117, 6560 + "source": "chrome_popularity", 6561 + "observable": null, 6562 + "observable_type": "css_property", 6563 + "bcd_key_count": 1, 6564 + "bcd_keys": [ 6565 + "css.properties.word-break.auto-phrase" 6566 + ], 6567 + "firefox_usage": null, 6568 + "firefox_observable": null 6569 + }, 6570 + { 6571 + "name": "document-picture-in-picture", 6572 + "usage": 0.00043707, 6573 + "source": "chrome_popularity", 6574 + "observable": null, 6575 + "observable_type": "blink_api", 6576 + "bcd_key_count": 10, 6577 + "bcd_keys": [ 6578 + "api.DocumentPictureInPicture", 6579 + "api.DocumentPictureInPicture.enter_event", 6580 + "api.DocumentPictureInPicture.requestWindow", 6581 + "api.DocumentPictureInPicture.requestWindow.option_disallowReturnToOpener", 6582 + "api.DocumentPictureInPicture.requestWindow.option_preferInitialWindowPlacement", 6583 + "api.DocumentPictureInPicture.window", 6584 + "api.DocumentPictureInPictureEvent", 6585 + "api.DocumentPictureInPictureEvent.DocumentPictureInPictureEvent", 6586 + "api.DocumentPictureInPictureEvent.window", 6587 + "api.Window.documentPictureInPicture" 6588 + ], 6589 + "firefox_usage": null, 6590 + "firefox_observable": null 6591 + }, 6592 + { 6593 + "name": "contain-inline-size", 6594 + "usage": 0.00041088, 6595 + "source": "chrome_popularity", 6596 + "observable": null, 6597 + "observable_type": "css_property", 6598 + "bcd_key_count": 1, 6599 + "bcd_keys": [ 6600 + "css.properties.contain.inline-size" 6601 + ], 6602 + "firefox_usage": null, 6603 + "firefox_observable": null 6604 + }, 6605 + { 6606 + "name": "iframe-credentialless", 6607 + "usage": 0.00039457, 6608 + "source": "chrome_popularity", 6609 + "observable": null, 6610 + "observable_type": "blink_api", 6611 + "bcd_key_count": 3, 6612 + "bcd_keys": [ 6613 + "api.HTMLIFrameElement.credentialless", 6614 + "api.Window.credentialless", 6615 + "html.elements.iframe.credentialless" 6616 + ], 6617 + "firefox_usage": null, 6618 + "firefox_observable": null 6619 + }, 6620 + { 6621 + "name": "font-synthesis-weight", 6622 + "usage": 0.0003828623622097265, 6623 + "source": "custom_metrics", 6624 + "observable": "font-synthesis-weight", 6625 + "observable_type": "css_property", 6626 + "bcd_key_count": 3, 6627 + "bcd_keys": [ 6628 + "css.properties.font-synthesis-weight", 6629 + "css.properties.font-synthesis-weight.auto", 6630 + "css.properties.font-synthesis-weight.none" 6631 + ], 6632 + "firefox_usage": 0.0006092822176012978, 6633 + "firefox_observable": "css.properties.font-synthesis-weight" 6634 + }, 6635 + { 6636 + "name": "idle-detection", 6637 + "usage": 0.000344, 6638 + "source": "chrome_popularity", 6639 + "observable": null, 6640 + "observable_type": "blink_api", 6641 + "bcd_key_count": 9, 6642 + "bcd_keys": [ 6643 + "api.IdleDetector", 6644 + "api.IdleDetector.IdleDetector", 6645 + "api.IdleDetector.change_event", 6646 + "api.IdleDetector.requestPermission_static", 6647 + "api.IdleDetector.screenState", 6648 + "api.IdleDetector.start", 6649 + "api.IdleDetector.userState", 6650 + "html.elements.iframe.allow.idle-detection", 6651 + "http.headers.Permissions-Policy.idle-detection" 6652 + ], 6653 + "firefox_usage": null, 6654 + "firefox_observable": null 6655 + }, 6656 + { 6657 + "name": "exp-functions", 6658 + "usage": 0.00034045, 6659 + "source": "chrome_popularity", 6660 + "observable": null, 6661 + "observable_type": "css_type", 6662 + "bcd_key_count": 5, 6663 + "bcd_keys": [ 6664 + "css.types.exp", 6665 + "css.types.hypot", 6666 + "css.types.log", 6667 + "css.types.pow", 6668 + "css.types.sqrt" 6669 + ], 6670 + "firefox_usage": null, 6671 + "firefox_observable": null 6672 + }, 6673 + { 6674 + "name": "dialog-closedby", 6675 + "usage": 0.00033714, 6676 + "source": "chrome_popularity", 6677 + "observable": null, 6678 + "observable_type": "blink_api", 6679 + "bcd_key_count": 2, 6680 + "bcd_keys": [ 6681 + "api.HTMLDialogElement.closedBy", 6682 + "html.elements.dialog.closedby" 6683 + ], 6684 + "firefox_usage": null, 6685 + "firefox_observable": null 6686 + }, 6687 + { 6688 + "name": "scroll-snap-events", 6689 + "usage": 0.0003132832080200501, 6690 + "source": "blink_features", 6691 + "observable": "api.SnapEvent", 6692 + "observable_type": "blink_api", 6693 + "bcd_key_count": 10, 6694 + "bcd_keys": [ 6695 + "api.Document.scrollsnapchange_event", 6696 + "api.Document.scrollsnapchanging_event", 6697 + "api.Element.scrollsnapchange_event", 6698 + "api.Element.scrollsnapchanging_event", 6699 + "api.SnapEvent", 6700 + "api.SnapEvent.SnapEvent", 6701 + "api.SnapEvent.snapTargetBlock", 6702 + "api.SnapEvent.snapTargetInline", 6703 + "api.Window.scrollsnapchange_event", 6704 + "api.Window.scrollsnapchanging_event" 6705 + ], 6706 + "firefox_usage": null, 6707 + "firefox_observable": null 6708 + }, 6709 + { 6710 + "name": "profiler", 6711 + "usage": 0.00031130342745073624, 6712 + "source": "blink_features", 6713 + "observable": "api.Profiler", 6714 + "observable_type": "blink_api", 6715 + "bcd_key_count": 5, 6716 + "bcd_keys": [ 6717 + "api.Profiler", 6718 + "api.Profiler.Profiler", 6719 + "api.Profiler.sampleInterval", 6720 + "api.Profiler.stop", 6721 + "api.Profiler.stopped" 6722 + ], 6723 + "firefox_usage": null, 6724 + "firefox_observable": null 6725 + }, 6726 + { 6727 + "name": "parse-html-unsafe", 6728 + "usage": 0.00030858, 6729 + "source": "chrome_popularity", 6730 + "observable": null, 6731 + "observable_type": "blink_api", 6732 + "bcd_key_count": 3, 6733 + "bcd_keys": [ 6734 + "api.Document.parseHTMLUnsafe_static", 6735 + "api.Element.setHTMLUnsafe", 6736 + "api.ShadowRoot.setHTMLUnsafe" 6737 + ], 6738 + "firefox_usage": null, 6739 + "firefox_observable": null 6740 + }, 6741 + { 6742 + "name": "vertical-form-controls", 6743 + "usage": 0.00030828, 6744 + "source": "chrome_popularity", 6745 + "observable": null, 6746 + "observable_type": "css_property", 6747 + "bcd_key_count": 2, 6748 + "bcd_keys": [ 6749 + "css.properties.direction.vertical_slider_direction", 6750 + "css.properties.writing-mode.vertical_oriented_form_controls" 6751 + ], 6752 + "firefox_usage": null, 6753 + "firefox_observable": null 6754 + }, 6755 + { 6756 + "name": "scroll-buttons", 6757 + "usage": 0.0002965528963584968, 6758 + "source": "custom_metrics", 6759 + "observable": "scroll-button", 6760 + "observable_type": "css_selector", 6761 + "bcd_key_count": 12, 6762 + "bcd_keys": [ 6763 + "css.selectors.scroll-button", 6764 + "css.selectors.scroll-button.block-end", 6765 + "css.selectors.scroll-button.block-start", 6766 + "css.selectors.scroll-button.down", 6767 + "css.selectors.scroll-button.inline-end", 6768 + "css.selectors.scroll-button.inline-start", 6769 + "css.selectors.scroll-button.left", 6770 + "css.selectors.scroll-button.next", 6771 + "css.selectors.scroll-button.prev", 6772 + "css.selectors.scroll-button.right", 6773 + "css.selectors.scroll-button.star", 6774 + "css.selectors.scroll-button.up" 6775 + ], 6776 + "firefox_usage": null, 6777 + "firefox_observable": null 6778 + }, 6779 + { 6780 + "name": "wasm-mutable-globals", 6781 + "usage": 0.00025636, 6782 + "source": "chrome_popularity", 6783 + "observable": null, 6784 + "observable_type": "webassembly", 6785 + "bcd_key_count": 1, 6786 + "bcd_keys": [ 6787 + "webassembly.mutable-globals" 6788 + ], 6789 + "firefox_usage": null, 6790 + "firefox_observable": null 6791 + }, 6792 + { 6793 + "name": "initial-letter", 6794 + "usage": 0.00024834059889504976, 6795 + "source": "custom_metrics", 6796 + "observable": "initial-letter", 6797 + "observable_type": "css_property", 6798 + "bcd_key_count": 2, 6799 + "bcd_keys": [ 6800 + "css.properties.initial-letter", 6801 + "css.properties.initial-letter.normal" 6802 + ], 6803 + "firefox_usage": 0.0000031287055606483928, 6804 + "firefox_observable": "css.properties.initial-letter" 6805 + }, 6806 + { 6807 + "name": "popover-hint", 6808 + "usage": 0.00024751, 6809 + "source": "chrome_popularity", 6810 + "observable": null, 6811 + "observable_type": "blink_api", 6812 + "bcd_key_count": 2, 6813 + "bcd_keys": [ 6814 + "api.HTMLElement.popover.hint", 6815 + "html.global_attributes.popover.hint" 6816 + ], 6817 + "firefox_usage": null, 6818 + "firefox_observable": null 6819 + }, 6820 + { 6821 + "name": "atomics-wait-async", 6822 + "usage": 0.0002406, 6823 + "source": "chrome_popularity", 6824 + "observable": null, 6825 + "observable_type": "js_builtin", 6826 + "bcd_key_count": 1, 6827 + "bcd_keys": [ 6828 + "javascript.builtins.Atomics.waitAsync" 6829 + ], 6830 + "firefox_usage": null, 6831 + "firefox_observable": null 6832 + }, 6833 + { 6834 + "name": "wasm-simd-relaxed", 6835 + "usage": 0.00023477, 6836 + "source": "chrome_popularity", 6837 + "observable": null, 6838 + "observable_type": "webassembly", 6839 + "bcd_key_count": 1, 6840 + "bcd_keys": [ 6841 + "webassembly.relaxed-SIMD" 6842 + ], 6843 + "firefox_usage": null, 6844 + "firefox_observable": null 6845 + }, 6846 + { 6847 + "name": "web-otp", 6848 + "usage": 0.00021695, 6849 + "source": "chrome_popularity", 6850 + "observable": null, 6851 + "observable_type": "blink_api", 6852 + "bcd_key_count": 5, 6853 + "bcd_keys": [ 6854 + "api.CredentialsContainer.get.otp_option", 6855 + "api.OTPCredential", 6856 + "api.OTPCredential.code", 6857 + "html.elements.iframe.allow.otp-credentials", 6858 + "http.headers.Permissions-Policy.otp-credentials" 6859 + ], 6860 + "firefox_usage": null, 6861 + "firefox_observable": null 6862 + }, 6863 + { 6864 + "name": "spelling-grammar-error", 6865 + "usage": 0.00021213410883916698, 6866 + "source": "custom_metrics", 6867 + "observable": "spelling-error", 6868 + "observable_type": "css_selector", 6869 + "bcd_key_count": 2, 6870 + "bcd_keys": [ 6871 + "css.selectors.grammar-error", 6872 + "css.selectors.spelling-error" 6873 + ], 6874 + "firefox_usage": null, 6875 + "firefox_observable": null 6876 + }, 6877 + { 6878 + "name": "customizable-select", 6879 + "usage": 0.0001986157587660828, 6880 + "source": "custom_metrics", 6881 + "observable": "picker", 6882 + "observable_type": "css_selector", 6883 + "bcd_key_count": 5, 6884 + "bcd_keys": [ 6885 + "css.properties.appearance.base-select", 6886 + "css.selectors.checkmark", 6887 + "css.selectors.picker", 6888 + "css.selectors.picker-icon", 6889 + "html.elements.selectedcontent" 6890 + ], 6891 + "firefox_usage": null, 6892 + "firefox_observable": null 6893 + }, 6894 + { 6895 + "name": "measure-memory", 6896 + "usage": 0.00017899, 6897 + "source": "chrome_popularity", 6898 + "observable": null, 6899 + "observable_type": "blink_api", 6900 + "bcd_key_count": 1, 6901 + "bcd_keys": [ 6902 + "api.Performance.measureUserAgentSpecificMemory" 6903 + ], 6904 + "firefox_usage": null, 6905 + "firefox_observable": null 6906 + }, 6907 + { 6908 + "name": "audio-worklet", 6909 + "usage": 0.0001556178026766262, 6910 + "source": "blink_features", 6911 + "observable": "api.AudioWorklet", 6912 + "observable_type": "blink_api", 6913 + "bcd_key_count": 19, 6914 + "bcd_keys": [ 6915 + "api.AudioWorklet", 6916 + "api.AudioWorkletGlobalScope", 6917 + "api.AudioWorkletGlobalScope.currentFrame", 6918 + "api.AudioWorkletGlobalScope.currentTime", 6919 + "api.AudioWorkletGlobalScope.port", 6920 + "api.AudioWorkletGlobalScope.registerProcessor", 6921 + "api.AudioWorkletGlobalScope.sampleRate", 6922 + "api.AudioWorkletNode", 6923 + "api.AudioWorkletNode.AudioWorkletNode", 6924 + "api.AudioWorkletNode.parameters", 6925 + "api.AudioWorkletNode.port", 6926 + "api.AudioWorkletNode.processorerror_event", 6927 + "api.AudioWorkletProcessor", 6928 + "api.AudioWorkletProcessor.AudioWorkletProcessor", 6929 + "api.AudioWorkletProcessor.port", 6930 + "api.BaseAudioContext.audioWorklet", 6931 + "api.Worklet", 6932 + "api.Worklet.addModule", 6933 + "api.WorkletGlobalScope" 6934 + ], 6935 + "firefox_usage": null, 6936 + "firefox_observable": null 6937 + }, 6938 + { 6939 + "name": "readable-byte-streams", 6940 + "usage": 0.0001556178026766262, 6941 + "source": "blink_features", 6942 + "observable": "api.ReadableStreamBYOBReader", 6943 + "observable_type": "blink_api", 6944 + "bcd_key_count": 18, 6945 + "bcd_keys": [ 6946 + "api.ReadableByteStreamController", 6947 + "api.ReadableByteStreamController.byobRequest", 6948 + "api.ReadableByteStreamController.close", 6949 + "api.ReadableByteStreamController.desiredSize", 6950 + "api.ReadableByteStreamController.enqueue", 6951 + "api.ReadableByteStreamController.error", 6952 + "api.ReadableStreamBYOBReader", 6953 + "api.ReadableStreamBYOBReader.ReadableStreamBYOBReader", 6954 + "api.ReadableStreamBYOBReader.cancel", 6955 + "api.ReadableStreamBYOBReader.closed", 6956 + "api.ReadableStreamBYOBReader.read", 6957 + "api.ReadableStreamBYOBReader.read.options_min_parameter", 6958 + "api.ReadableStreamBYOBReader.releaseLock", 6959 + "api.ReadableStreamBYOBReader.releaseLock.reject_pending_read_request", 6960 + "api.ReadableStreamBYOBRequest", 6961 + "api.ReadableStreamBYOBRequest.respond", 6962 + "api.ReadableStreamBYOBRequest.respondWithNewView", 6963 + "api.ReadableStreamBYOBRequest.view" 6964 + ], 6965 + "firefox_usage": null, 6966 + "firefox_observable": null 6967 + }, 6968 + { 6969 + "name": "cap", 6970 + "usage": 0.00015506, 6971 + "source": "chrome_popularity", 6972 + "observable": null, 6973 + "observable_type": "css_type", 6974 + "bcd_key_count": 1, 6975 + "bcd_keys": [ 6976 + "css.types.length.cap" 6977 + ], 6978 + "firefox_usage": null, 6979 + "firefox_observable": null 6980 + }, 6981 + { 6982 + "name": "overlay", 6983 + "usage": 0.00015030892738604078, 6984 + "source": "custom_metrics", 6985 + "observable": "overlay", 6986 + "observable_type": "css_property", 6987 + "bcd_key_count": 3, 6988 + "bcd_keys": [ 6989 + "css.properties.overlay", 6990 + "css.properties.overlay.auto", 6991 + "css.properties.overlay.none" 6992 + ], 6993 + "firefox_usage": null, 6994 + "firefox_observable": null 6995 + }, 6996 + { 6997 + "name": "closewatcher", 6998 + "usage": 0.00014292, 6999 + "source": "chrome_popularity", 7000 + "observable": null, 7001 + "observable_type": "blink_api", 7002 + "bcd_key_count": 7, 7003 + "bcd_keys": [ 7004 + "api.CloseWatcher", 7005 + "api.CloseWatcher.CloseWatcher", 7006 + "api.CloseWatcher.cancel_event", 7007 + "api.CloseWatcher.close", 7008 + "api.CloseWatcher.close_event", 7009 + "api.CloseWatcher.destroy", 7010 + "api.CloseWatcher.requestClose" 7011 + ], 7012 + "firefox_usage": null, 7013 + "firefox_observable": null 7014 + }, 7015 + { 7016 + "name": "scroll-markers", 7017 + "usage": 0.00014246261230865627, 7018 + "source": "custom_metrics", 7019 + "observable": "scroll-marker-group", 7020 + "observable_type": "css_property", 7021 + "bcd_key_count": 6, 7022 + "bcd_keys": [ 7023 + "css.properties.scroll-marker-group", 7024 + "css.properties.scroll-marker-group.after", 7025 + "css.properties.scroll-marker-group.before", 7026 + "css.properties.scroll-marker-group.none", 7027 + "css.selectors.scroll-marker", 7028 + "css.selectors.scroll-marker-group" 7029 + ], 7030 + "firefox_usage": null, 7031 + "firefox_observable": null 7032 + }, 7033 + { 7034 + "name": "canvas-reset", 7035 + "usage": 0.0001043, 7036 + "source": "chrome_popularity", 7037 + "observable": null, 7038 + "observable_type": "blink_api", 7039 + "bcd_key_count": 2, 7040 + "bcd_keys": [ 7041 + "api.CanvasRenderingContext2D.reset", 7042 + "api.OffscreenCanvasRenderingContext2D.reset" 7043 + ], 7044 + "firefox_usage": null, 7045 + "firefox_observable": null 7046 + }, 7047 + { 7048 + "name": "highlight", 7049 + "usage": 0.00009840980717538897, 7050 + "source": "custom_metrics", 7051 + "observable": "highlight", 7052 + "observable_type": "css_selector", 7053 + "bcd_key_count": 29, 7054 + "bcd_keys": [ 7055 + "api.CSS.highlights_static", 7056 + "api.Highlight", 7057 + "api.Highlight.@@iterator", 7058 + "api.Highlight.Highlight", 7059 + "api.Highlight.add", 7060 + "api.Highlight.clear", 7061 + "api.Highlight.delete", 7062 + "api.Highlight.entries", 7063 + "api.Highlight.forEach", 7064 + "api.Highlight.has", 7065 + "api.Highlight.keys", 7066 + "api.Highlight.priority", 7067 + "api.Highlight.size", 7068 + "api.Highlight.type", 7069 + "api.Highlight.values", 7070 + "api.HighlightRegistry", 7071 + "api.HighlightRegistry.@@iterator", 7072 + "api.HighlightRegistry.clear", 7073 + "api.HighlightRegistry.delete", 7074 + "api.HighlightRegistry.entries", 7075 + "api.HighlightRegistry.forEach", 7076 + "api.HighlightRegistry.get", 7077 + "api.HighlightRegistry.has", 7078 + "api.HighlightRegistry.highlightsFromPoint", 7079 + "api.HighlightRegistry.keys", 7080 + "api.HighlightRegistry.set", 7081 + "api.HighlightRegistry.size", 7082 + "api.HighlightRegistry.values", 7083 + "css.selectors.highlight" 7084 + ], 7085 + "firefox_usage": null, 7086 + "firefox_observable": null 7087 + }, 7088 + { 7089 + "name": "reading-flow", 7090 + "usage": 0.00007921942210660515, 7091 + "source": "custom_metrics", 7092 + "observable": "reading-flow", 7093 + "observable_type": "css_property", 7094 + "bcd_key_count": 9, 7095 + "bcd_keys": [ 7096 + "css.properties.reading-flow", 7097 + "css.properties.reading-flow.flex-flow", 7098 + "css.properties.reading-flow.flex-visual", 7099 + "css.properties.reading-flow.grid-columns", 7100 + "css.properties.reading-flow.grid-order", 7101 + "css.properties.reading-flow.grid-rows", 7102 + "css.properties.reading-flow.normal", 7103 + "css.properties.reading-flow.source-order", 7104 + "css.properties.reading-order" 7105 + ], 7106 + "firefox_usage": null, 7107 + "firefox_observable": null 7108 + }, 7109 + { 7110 + "name": "web-midi", 7111 + "usage": 0.00007885, 7112 + "source": "chrome_popularity", 7113 + "observable": null, 7114 + "observable_type": "blink_api", 7115 + "bcd_key_count": 50, 7116 + "bcd_keys": [ 7117 + "api.MIDIAccess", 7118 + "api.MIDIAccess.inputs", 7119 + "api.MIDIAccess.outputs", 7120 + "api.MIDIAccess.statechange_event", 7121 + "api.MIDIAccess.sysexEnabled", 7122 + "api.MIDIConnectionEvent", 7123 + "api.MIDIConnectionEvent.MIDIConnectionEvent", 7124 + "api.MIDIConnectionEvent.port", 7125 + "api.MIDIInput", 7126 + "api.MIDIInput.midimessage_event", 7127 + "api.MIDIInputMap", 7128 + "api.MIDIInputMap.@@iterator", 7129 + "api.MIDIInputMap.entries", 7130 + "api.MIDIInputMap.forEach", 7131 + "api.MIDIInputMap.get", 7132 + "api.MIDIInputMap.has", 7133 + "api.MIDIInputMap.keys", 7134 + "api.MIDIInputMap.size", 7135 + "api.MIDIInputMap.values", 7136 + "api.MIDIMessageEvent", 7137 + "api.MIDIMessageEvent.MIDIMessageEvent", 7138 + "api.MIDIMessageEvent.data", 7139 + "api.MIDIOutput", 7140 + "api.MIDIOutput.clear", 7141 + "api.MIDIOutput.send", 7142 + "api.MIDIOutputMap", 7143 + "api.MIDIOutputMap.@@iterator", 7144 + "api.MIDIOutputMap.entries", 7145 + "api.MIDIOutputMap.forEach", 7146 + "api.MIDIOutputMap.get", 7147 + "api.MIDIOutputMap.has", 7148 + "api.MIDIOutputMap.keys", 7149 + "api.MIDIOutputMap.size", 7150 + "api.MIDIOutputMap.values", 7151 + "api.MIDIPort", 7152 + "api.MIDIPort.close", 7153 + "api.MIDIPort.connection", 7154 + "api.MIDIPort.id", 7155 + "api.MIDIPort.manufacturer", 7156 + "api.MIDIPort.name", 7157 + "api.MIDIPort.open", 7158 + "api.MIDIPort.state", 7159 + "api.MIDIPort.statechange_event", 7160 + "api.MIDIPort.type", 7161 + "api.MIDIPort.version", 7162 + "api.Navigator.requestMIDIAccess", 7163 + "api.Navigator.requestMIDIAccess.secure_context_required", 7164 + "api.Permissions.permission_midi", 7165 + "html.elements.iframe.allow.midi", 7166 + "http.headers.Permissions-Policy.midi" 7167 + ], 7168 + "firefox_usage": 0.04876490460930782, 7169 + "firefox_observable": "api.MIDIPort" 7170 + }, 7171 + { 7172 + "name": "clipboard-custom-format", 7173 + "usage": 0.00007652, 7174 + "source": "chrome_popularity", 7175 + "observable": null, 7176 + "observable_type": "blink_api", 7177 + "bcd_key_count": 1, 7178 + "bcd_keys": [ 7179 + "api.ClipboardItem.type_web" 7180 + ], 7181 + "firefox_usage": null, 7182 + "firefox_observable": null 7183 + }, 7184 + { 7185 + "name": "speech-synthesis", 7186 + "usage": 0.00007372454242502551, 7187 + "source": "blink_features", 7188 + "observable": "api.SpeechSynthesis", 7189 + "observable_type": "blink_api", 7190 + "bcd_key_count": 42, 7191 + "bcd_keys": [ 7192 + "api.SpeechSynthesis", 7193 + "api.SpeechSynthesis.cancel", 7194 + "api.SpeechSynthesis.getVoices", 7195 + "api.SpeechSynthesis.pause", 7196 + "api.SpeechSynthesis.paused", 7197 + "api.SpeechSynthesis.pending", 7198 + "api.SpeechSynthesis.resume", 7199 + "api.SpeechSynthesis.speak", 7200 + "api.SpeechSynthesis.speaking", 7201 + "api.SpeechSynthesis.voiceschanged_event", 7202 + "api.SpeechSynthesisErrorEvent", 7203 + "api.SpeechSynthesisErrorEvent.SpeechSynthesisErrorEvent", 7204 + "api.SpeechSynthesisErrorEvent.error", 7205 + "api.SpeechSynthesisEvent", 7206 + "api.SpeechSynthesisEvent.SpeechSynthesisEvent", 7207 + "api.SpeechSynthesisEvent.charIndex", 7208 + "api.SpeechSynthesisEvent.charLength", 7209 + "api.SpeechSynthesisEvent.elapsedTime", 7210 + "api.SpeechSynthesisEvent.name", 7211 + "api.SpeechSynthesisEvent.utterance", 7212 + "api.SpeechSynthesisUtterance", 7213 + "api.SpeechSynthesisUtterance.SpeechSynthesisUtterance", 7214 + "api.SpeechSynthesisUtterance.boundary_event", 7215 + "api.SpeechSynthesisUtterance.end_event", 7216 + "api.SpeechSynthesisUtterance.error_event", 7217 + "api.SpeechSynthesisUtterance.lang", 7218 + "api.SpeechSynthesisUtterance.mark_event", 7219 + "api.SpeechSynthesisUtterance.pause_event", 7220 + "api.SpeechSynthesisUtterance.pitch", 7221 + "api.SpeechSynthesisUtterance.rate", 7222 + "api.SpeechSynthesisUtterance.resume_event", 7223 + "api.SpeechSynthesisUtterance.start_event", 7224 + "api.SpeechSynthesisUtterance.text", 7225 + "api.SpeechSynthesisUtterance.voice", 7226 + "api.SpeechSynthesisUtterance.volume", 7227 + "api.SpeechSynthesisVoice", 7228 + "api.SpeechSynthesisVoice.default", 7229 + "api.SpeechSynthesisVoice.lang", 7230 + "api.SpeechSynthesisVoice.localService", 7231 + "api.SpeechSynthesisVoice.name", 7232 + "api.SpeechSynthesisVoice.voiceURI", 7233 + "api.Window.speechSynthesis" 7234 + ], 7235 + "firefox_usage": null, 7236 + "firefox_observable": null 7237 + }, 7238 + { 7239 + "name": "font-variant-emoji", 7240 + "usage": 0.00007364192102750048, 7241 + "source": "custom_metrics", 7242 + "observable": "font-variant-emoji", 7243 + "observable_type": "css_property", 7244 + "bcd_key_count": 5, 7245 + "bcd_keys": [ 7246 + "css.properties.font-variant-emoji", 7247 + "css.properties.font-variant-emoji.emoji", 7248 + "css.properties.font-variant-emoji.normal", 7249 + "css.properties.font-variant-emoji.text", 7250 + "css.properties.font-variant-emoji.unicode" 7251 + ], 7252 + "firefox_usage": 0.00018562524716405192, 7253 + "firefox_observable": "css.properties.font-variant-emoji" 7254 + }, 7255 + { 7256 + "name": "keyboard-lock", 7257 + "usage": 0.00007345, 7258 + "source": "chrome_popularity", 7259 + "observable": null, 7260 + "observable_type": "blink_api", 7261 + "bcd_key_count": 4, 7262 + "bcd_keys": [ 7263 + "api.Keyboard", 7264 + "api.Keyboard.lock", 7265 + "api.Keyboard.unlock", 7266 + "api.Navigator.keyboard" 7267 + ], 7268 + "firefox_usage": 0.0019317707845346104, 7269 + "firefox_observable": "api.Keyboard" 7270 + }, 7271 + { 7272 + "name": "intl-duration-format", 7273 + "usage": 0.00006863, 7274 + "source": "chrome_popularity", 7275 + "observable": null, 7276 + "observable_type": "js_builtin", 7277 + "bcd_key_count": 6, 7278 + "bcd_keys": [ 7279 + "javascript.builtins.Intl.DurationFormat", 7280 + "javascript.builtins.Intl.DurationFormat.DurationFormat", 7281 + "javascript.builtins.Intl.DurationFormat.format", 7282 + "javascript.builtins.Intl.DurationFormat.formatToParts", 7283 + "javascript.builtins.Intl.DurationFormat.resolvedOptions", 7284 + "javascript.builtins.Intl.DurationFormat.supportedLocalesOf" 7285 + ], 7286 + "firefox_usage": null, 7287 + "firefox_observable": null 7288 + }, 7289 + { 7290 + "name": "context-fill-stroke", 7291 + "usage": 0.00006596, 7292 + "source": "chrome_popularity", 7293 + "observable": null, 7294 + "observable_type": "svg", 7295 + "bcd_key_count": 10, 7296 + "bcd_keys": [ 7297 + "svg.elements.circle.fill.context-fill", 7298 + "svg.elements.ellipse.fill.context-fill", 7299 + "svg.elements.path.fill.context-fill", 7300 + "svg.elements.polygon.fill.context-fill", 7301 + "svg.elements.polyline.fill.context-fill", 7302 + "svg.elements.rect.fill.context-fill", 7303 + "svg.elements.text.fill.context-fill", 7304 + "svg.elements.textPath.fill.context-fill", 7305 + "svg.elements.tspan.fill.context-fill", 7306 + "svg.global_attributes.stroke.context-stroke" 7307 + ], 7308 + "firefox_usage": null, 7309 + "firefox_observable": null 7310 + }, 7311 + { 7312 + "name": "clipboard-unsanitized-formats", 7313 + "usage": 0.00006171, 7314 + "source": "chrome_popularity", 7315 + "observable": null, 7316 + "observable_type": "blink_api", 7317 + "bcd_key_count": 1, 7318 + "bcd_keys": [ 7319 + "api.Clipboard.read.formats_unsanitized_parameter" 7320 + ], 7321 + "firefox_usage": null, 7322 + "firefox_observable": null 7323 + }, 7324 + { 7325 + "name": "text-spacing-trim", 7326 + "usage": 0.000058327426539111424, 7327 + "source": "custom_metrics", 7328 + "observable": "text-spacing-trim", 7329 + "observable_type": "css_property", 7330 + "bcd_key_count": 5, 7331 + "bcd_keys": [ 7332 + "css.properties.text-spacing-trim", 7333 + "css.properties.text-spacing-trim.normal", 7334 + "css.properties.text-spacing-trim.space-all", 7335 + "css.properties.text-spacing-trim.space-first", 7336 + "css.properties.text-spacing-trim.trim-start" 7337 + ], 7338 + "firefox_usage": null, 7339 + "firefox_observable": null 7340 + }, 7341 + { 7342 + "name": "composed-ranges", 7343 + "usage": 0.00005221, 7344 + "source": "chrome_popularity", 7345 + "observable": null, 7346 + "observable_type": "blink_api", 7347 + "bcd_key_count": 1, 7348 + "bcd_keys": [ 7349 + "api.Selection.getComposedRanges" 7350 + ], 7351 + "firefox_usage": null, 7352 + "firefox_observable": null 7353 + }, 7354 + { 7355 + "name": "canvas-createconicgradient", 7356 + "usage": 0.00005058, 7357 + "source": "chrome_popularity", 7358 + "observable": null, 7359 + "observable_type": "blink_api", 7360 + "bcd_key_count": 2, 7361 + "bcd_keys": [ 7362 + "api.CanvasRenderingContext2D.createConicGradient", 7363 + "api.OffscreenCanvasRenderingContext2D.createConicGradient" 7364 + ], 7365 + "firefox_usage": null, 7366 + "firefox_observable": null 7367 + }, 7368 + { 7369 + "name": "edit-context", 7370 + "usage": 0.000046549155908639525, 7371 + "source": "blink_features", 7372 + "observable": "api.EditContext", 7373 + "observable_type": "blink_api", 7374 + "bcd_key_count": 39, 7375 + "bcd_keys": [ 7376 + "api.CharacterBoundsUpdateEvent", 7377 + "api.CharacterBoundsUpdateEvent.CharacterBoundsUpdateEvent", 7378 + "api.CharacterBoundsUpdateEvent.rangeEnd", 7379 + "api.CharacterBoundsUpdateEvent.rangeStart", 7380 + "api.EditContext", 7381 + "api.EditContext.EditContext", 7382 + "api.EditContext.attachedElements", 7383 + "api.EditContext.characterBounds", 7384 + "api.EditContext.characterBoundsRangeStart", 7385 + "api.EditContext.characterboundsupdate_event", 7386 + "api.EditContext.compositionend_event", 7387 + "api.EditContext.compositionstart_event", 7388 + "api.EditContext.selectionEnd", 7389 + "api.EditContext.selectionStart", 7390 + "api.EditContext.text", 7391 + "api.EditContext.textformatupdate_event", 7392 + "api.EditContext.textupdate_event", 7393 + "api.EditContext.updateCharacterBounds", 7394 + "api.EditContext.updateControlBounds", 7395 + "api.EditContext.updateSelection", 7396 + "api.EditContext.updateSelectionBounds", 7397 + "api.EditContext.updateText", 7398 + "api.HTMLElement.editContext", 7399 + "api.TextFormat", 7400 + "api.TextFormat.TextFormat", 7401 + "api.TextFormat.rangeEnd", 7402 + "api.TextFormat.rangeStart", 7403 + "api.TextFormat.underlineStyle", 7404 + "api.TextFormat.underlineThickness", 7405 + "api.TextFormatUpdateEvent", 7406 + "api.TextFormatUpdateEvent.TextFormatUpdateEvent", 7407 + "api.TextFormatUpdateEvent.getTextFormats", 7408 + "api.TextUpdateEvent", 7409 + "api.TextUpdateEvent.TextUpdateEvent", 7410 + "api.TextUpdateEvent.selectionEnd", 7411 + "api.TextUpdateEvent.selectionStart", 7412 + "api.TextUpdateEvent.text", 7413 + "api.TextUpdateEvent.updateRangeEnd", 7414 + "api.TextUpdateEvent.updateRangeStart" 7415 + ], 7416 + "firefox_usage": null, 7417 + "firefox_observable": null 7418 + }, 7419 + { 7420 + "name": "file-system-access", 7421 + "usage": 0.0000457, 7422 + "source": "chrome_popularity", 7423 + "observable": null, 7424 + "observable_type": "blink_api", 7425 + "bcd_key_count": 11, 7426 + "bcd_keys": [ 7427 + "api.FileSystemDirectoryHandle.@@asyncIterator", 7428 + "api.FileSystemFileHandle.createWritable", 7429 + "api.FileSystemHandle.queryPermission", 7430 + "api.FileSystemHandle.requestPermission", 7431 + "api.FileSystemWritableFileStream", 7432 + "api.FileSystemWritableFileStream.seek", 7433 + "api.FileSystemWritableFileStream.truncate", 7434 + "api.FileSystemWritableFileStream.write", 7435 + "api.Window.showDirectoryPicker", 7436 + "api.Window.showOpenFilePicker", 7437 + "api.Window.showSaveFilePicker" 7438 + ], 7439 + "firefox_usage": null, 7440 + "firefox_observable": null 7441 + }, 7442 + { 7443 + "name": "font-synthesis-style", 7444 + "usage": 0.000032614201225273, 7445 + "source": "custom_metrics", 7446 + "observable": "font-synthesis-style", 7447 + "observable_type": "css_property", 7448 + "bcd_key_count": 3, 7449 + "bcd_keys": [ 7450 + "css.properties.font-synthesis-style", 7451 + "css.properties.font-synthesis-style.auto", 7452 + "css.properties.font-synthesis-style.none" 7453 + ], 7454 + "firefox_usage": 0.00012184293996603901, 7455 + "firefox_observable": "css.properties.font-synthesis-style" 7456 + }, 7457 + { 7458 + "name": "object-view-box", 7459 + "usage": 0.000031574328142728064, 7460 + "source": "custom_metrics", 7461 + "observable": "object-view-box", 7462 + "observable_type": "css_property", 7463 + "bcd_key_count": 2, 7464 + "bcd_keys": [ 7465 + "css.properties.object-view-box", 7466 + "css.properties.object-view-box.none" 7467 + ], 7468 + "firefox_usage": null, 7469 + "firefox_observable": null 7470 + }, 7471 + { 7472 + "name": "navigation", 7473 + "usage": 0.000031130342745073624, 7474 + "source": "blink_features", 7475 + "observable": "api.Navigation", 7476 + "observable_type": "blink_api", 7477 + "bcd_key_count": 59, 7478 + "bcd_keys": [ 7479 + "api.NavigateEvent", 7480 + "api.NavigateEvent.NavigateEvent", 7481 + "api.NavigateEvent.canIntercept", 7482 + "api.NavigateEvent.destination", 7483 + "api.NavigateEvent.downloadRequest", 7484 + "api.NavigateEvent.formData", 7485 + "api.NavigateEvent.hasUAVisualTransition", 7486 + "api.NavigateEvent.hashChange", 7487 + "api.NavigateEvent.info", 7488 + "api.NavigateEvent.intercept", 7489 + "api.NavigateEvent.navigationType", 7490 + "api.NavigateEvent.scroll", 7491 + "api.NavigateEvent.signal", 7492 + "api.NavigateEvent.userInitiated", 7493 + "api.Navigation", 7494 + "api.Navigation.activation", 7495 + "api.Navigation.back", 7496 + "api.Navigation.canGoBack", 7497 + "api.Navigation.canGoForward", 7498 + "api.Navigation.currentEntry", 7499 + "api.Navigation.currententrychange_event", 7500 + "api.Navigation.entries", 7501 + "api.Navigation.forward", 7502 + "api.Navigation.navigate", 7503 + "api.Navigation.navigate_event", 7504 + "api.Navigation.navigateerror_event", 7505 + "api.Navigation.navigatesuccess_event", 7506 + "api.Navigation.reload", 7507 + "api.Navigation.transition", 7508 + "api.Navigation.traverseTo", 7509 + "api.Navigation.updateCurrentEntry", 7510 + "api.NavigationActivation", 7511 + "api.NavigationActivation.entry", 7512 + "api.NavigationActivation.from", 7513 + "api.NavigationActivation.navigationType", 7514 + "api.NavigationCurrentEntryChangeEvent", 7515 + "api.NavigationCurrentEntryChangeEvent.NavigationCurrentEntryChangeEvent", 7516 + "api.NavigationCurrentEntryChangeEvent.from", 7517 + "api.NavigationCurrentEntryChangeEvent.navigationType", 7518 + "api.NavigationDestination", 7519 + "api.NavigationDestination.getState", 7520 + "api.NavigationDestination.id", 7521 + "api.NavigationDestination.index", 7522 + "api.NavigationDestination.key", 7523 + "api.NavigationDestination.sameDocument", 7524 + "api.NavigationDestination.url", 7525 + "api.NavigationHistoryEntry", 7526 + "api.NavigationHistoryEntry.dispose_event", 7527 + "api.NavigationHistoryEntry.getState", 7528 + "api.NavigationHistoryEntry.id", 7529 + "api.NavigationHistoryEntry.index", 7530 + "api.NavigationHistoryEntry.key", 7531 + "api.NavigationHistoryEntry.sameDocument", 7532 + "api.NavigationHistoryEntry.url", 7533 + "api.NavigationTransition", 7534 + "api.NavigationTransition.finished", 7535 + "api.NavigationTransition.from", 7536 + "api.NavigationTransition.navigationType", 7537 + "api.Window.navigation" 7538 + ], 7539 + "firefox_usage": null, 7540 + "firefox_observable": null 7541 + }, 7542 + { 7543 + "name": "observable", 7544 + "usage": 0.000031130342745073624, 7545 + "source": "blink_features", 7546 + "observable": "api.Observable", 7547 + "observable_type": "blink_api", 7548 + "bcd_key_count": 30, 7549 + "bcd_keys": [ 7550 + "api.EventTarget.when", 7551 + "api.Observable", 7552 + "api.Observable.Observable", 7553 + "api.Observable.catch", 7554 + "api.Observable.drop", 7555 + "api.Observable.every", 7556 + "api.Observable.filter", 7557 + "api.Observable.finally", 7558 + "api.Observable.find", 7559 + "api.Observable.first", 7560 + "api.Observable.flatMap", 7561 + "api.Observable.forEach", 7562 + "api.Observable.from_static", 7563 + "api.Observable.inspect", 7564 + "api.Observable.last", 7565 + "api.Observable.map", 7566 + "api.Observable.reduce", 7567 + "api.Observable.some", 7568 + "api.Observable.subscribe", 7569 + "api.Observable.switchMap", 7570 + "api.Observable.take", 7571 + "api.Observable.takeUntil", 7572 + "api.Observable.toArray", 7573 + "api.Subscriber", 7574 + "api.Subscriber.active", 7575 + "api.Subscriber.addTeardown", 7576 + "api.Subscriber.complete", 7577 + "api.Subscriber.error", 7578 + "api.Subscriber.next", 7579 + "api.Subscriber.signal" 7580 + ], 7581 + "firefox_usage": null, 7582 + "firefox_observable": null 7583 + }, 7584 + { 7585 + "name": "eyedropper", 7586 + "usage": 0.00003057, 7587 + "source": "chrome_popularity", 7588 + "observable": null, 7589 + "observable_type": "blink_api", 7590 + "bcd_key_count": 4, 7591 + "bcd_keys": [ 7592 + "api.EyeDropper", 7593 + "api.EyeDropper.EyeDropper", 7594 + "api.EyeDropper.open", 7595 + "api.EyeDropper.secure_context_required" 7596 + ], 7597 + "firefox_usage": null, 7598 + "firefox_observable": null 7599 + }, 7600 + { 7601 + "name": "rcap", 7602 + "usage": 0.00002799, 7603 + "source": "chrome_popularity", 7604 + "observable": null, 7605 + "observable_type": "css_type", 7606 + "bcd_key_count": 1, 7607 + "bcd_keys": [ 7608 + "css.types.length.rcap" 7609 + ], 7610 + "firefox_usage": null, 7611 + "firefox_observable": null 7612 + }, 7613 + { 7614 + "name": "region-capture", 7615 + "usage": 0.00002563, 7616 + "source": "chrome_popularity", 7617 + "observable": null, 7618 + "observable_type": "blink_api", 7619 + "bcd_key_count": 5, 7620 + "bcd_keys": [ 7621 + "api.BrowserCaptureMediaStreamTrack", 7622 + "api.BrowserCaptureMediaStreamTrack.clone", 7623 + "api.BrowserCaptureMediaStreamTrack.cropTo", 7624 + "api.CropTarget", 7625 + "api.CropTarget.fromElement_static" 7626 + ], 7627 + "firefox_usage": null, 7628 + "firefox_observable": null 7629 + }, 7630 + { 7631 + "name": "font-palette", 7632 + "usage": 0.000025429623564053443, 7633 + "source": "custom_metrics", 7634 + "observable": "font-palette", 7635 + "observable_type": "css_property", 7636 + "bcd_key_count": 13, 7637 + "bcd_keys": [ 7638 + "api.CSSFontPaletteValuesRule", 7639 + "api.CSSFontPaletteValuesRule.basePalette", 7640 + "api.CSSFontPaletteValuesRule.fontFamily", 7641 + "api.CSSFontPaletteValuesRule.name", 7642 + "api.CSSFontPaletteValuesRule.overrideColors", 7643 + "css.at-rules.font-palette-values", 7644 + "css.at-rules.font-palette-values.base-palette", 7645 + "css.at-rules.font-palette-values.font-family", 7646 + "css.at-rules.font-palette-values.override-colors", 7647 + "css.properties.font-palette", 7648 + "css.properties.font-palette.dark", 7649 + "css.properties.font-palette.light", 7650 + "css.properties.font-palette.normal" 7651 + ], 7652 + "firefox_usage": 0.00007914660776523708, 7653 + "firefox_observable": "css.properties.font-palette" 7654 + }, 7655 + { 7656 + "name": "show-picker-input", 7657 + "usage": 0.00002069, 7658 + "source": "chrome_popularity", 7659 + "observable": null, 7660 + "observable_type": "blink_api", 7661 + "bcd_key_count": 5, 7662 + "bcd_keys": [ 7663 + "api.HTMLInputElement.showPicker", 7664 + "api.HTMLInputElement.showPicker.color_input", 7665 + "api.HTMLInputElement.showPicker.date_input", 7666 + "api.HTMLInputElement.showPicker.datetime_local_input", 7667 + "api.HTMLInputElement.showPicker.file_input" 7668 + ], 7669 + "firefox_usage": null, 7670 + "firefox_observable": null 7671 + }, 7672 + { 7673 + "name": "rlh", 7674 + "usage": 0.00001831, 7675 + "source": "chrome_popularity", 7676 + "observable": null, 7677 + "observable_type": "css_type", 7678 + "bcd_key_count": 1, 7679 + "bcd_keys": [ 7680 + "css.types.length.rlh" 7681 + ], 7682 + "firefox_usage": null, 7683 + "firefox_observable": null 7684 + }, 7685 + { 7686 + "name": "webusb", 7687 + "usage": 0.00001743, 7688 + "source": "chrome_popularity", 7689 + "observable": null, 7690 + "observable_type": "blink_api", 7691 + "bcd_key_count": 106, 7692 + "bcd_keys": [ 7693 + "api.Navigator.usb", 7694 + "api.USB", 7695 + "api.USB.connect_event", 7696 + "api.USB.disconnect_event", 7697 + "api.USB.getDevices", 7698 + "api.USB.requestDevice", 7699 + "api.USB.worker_support", 7700 + "api.USBAlternateInterface", 7701 + "api.USBAlternateInterface.USBAlternateInterface", 7702 + "api.USBAlternateInterface.alternateSetting", 7703 + "api.USBAlternateInterface.endpoints", 7704 + "api.USBAlternateInterface.interfaceClass", 7705 + "api.USBAlternateInterface.interfaceName", 7706 + "api.USBAlternateInterface.interfaceProtocol", 7707 + "api.USBAlternateInterface.interfaceSubclass", 7708 + "api.USBAlternateInterface.worker_support", 7709 + "api.USBConfiguration", 7710 + "api.USBConfiguration.USBConfiguration", 7711 + "api.USBConfiguration.configurationName", 7712 + "api.USBConfiguration.configurationValue", 7713 + "api.USBConfiguration.interfaces", 7714 + "api.USBConfiguration.worker_support", 7715 + "api.USBConnectionEvent", 7716 + "api.USBConnectionEvent.USBConnectionEvent", 7717 + "api.USBConnectionEvent.device", 7718 + "api.USBConnectionEvent.worker_support", 7719 + "api.USBDevice", 7720 + "api.USBDevice.claimInterface", 7721 + "api.USBDevice.clearHalt", 7722 + "api.USBDevice.close", 7723 + "api.USBDevice.configuration", 7724 + "api.USBDevice.configurations", 7725 + "api.USBDevice.controlTransferIn", 7726 + "api.USBDevice.controlTransferOut", 7727 + "api.USBDevice.deviceClass", 7728 + "api.USBDevice.deviceProtocol", 7729 + "api.USBDevice.deviceSubclass", 7730 + "api.USBDevice.deviceVersionMajor", 7731 + "api.USBDevice.deviceVersionMinor", 7732 + "api.USBDevice.deviceVersionSubminor", 7733 + "api.USBDevice.forget", 7734 + "api.USBDevice.isochronousTransferIn", 7735 + "api.USBDevice.isochronousTransferOut", 7736 + "api.USBDevice.manufacturerName", 7737 + "api.USBDevice.open", 7738 + "api.USBDevice.opened", 7739 + "api.USBDevice.productId", 7740 + "api.USBDevice.productName", 7741 + "api.USBDevice.releaseInterface", 7742 + "api.USBDevice.reset", 7743 + "api.USBDevice.selectAlternateInterface", 7744 + "api.USBDevice.selectConfiguration", 7745 + "api.USBDevice.serialNumber", 7746 + "api.USBDevice.transferIn", 7747 + "api.USBDevice.transferOut", 7748 + "api.USBDevice.usbVersionMajor", 7749 + "api.USBDevice.usbVersionMinor", 7750 + "api.USBDevice.usbVersionSubminor", 7751 + "api.USBDevice.vendorId", 7752 + "api.USBDevice.worker_support", 7753 + "api.USBEndpoint", 7754 + "api.USBEndpoint.USBEndpoint", 7755 + "api.USBEndpoint.direction", 7756 + "api.USBEndpoint.endpointNumber", 7757 + "api.USBEndpoint.packetSize", 7758 + "api.USBEndpoint.type", 7759 + "api.USBEndpoint.worker_support", 7760 + "api.USBInTransferResult", 7761 + "api.USBInTransferResult.USBInTransferResult", 7762 + "api.USBInTransferResult.data", 7763 + "api.USBInTransferResult.status", 7764 + "api.USBInTransferResult.worker_support", 7765 + "api.USBInterface", 7766 + "api.USBInterface.USBInterface", 7767 + "api.USBInterface.alternate", 7768 + "api.USBInterface.alternates", 7769 + "api.USBInterface.claimed", 7770 + "api.USBInterface.interfaceNumber", 7771 + "api.USBInterface.worker_support", 7772 + "api.USBIsochronousInTransferPacket", 7773 + "api.USBIsochronousInTransferPacket.USBIsochronousInTransferPacket", 7774 + "api.USBIsochronousInTransferPacket.data", 7775 + "api.USBIsochronousInTransferPacket.status", 7776 + "api.USBIsochronousInTransferPacket.worker_support", 7777 + "api.USBIsochronousInTransferResult", 7778 + "api.USBIsochronousInTransferResult.USBIsochronousInTransferResult", 7779 + "api.USBIsochronousInTransferResult.data", 7780 + "api.USBIsochronousInTransferResult.packets", 7781 + "api.USBIsochronousInTransferResult.worker_support", 7782 + "api.USBIsochronousOutTransferPacket", 7783 + "api.USBIsochronousOutTransferPacket.USBIsochronousOutTransferPacket", 7784 + "api.USBIsochronousOutTransferPacket.bytesWritten", 7785 + "api.USBIsochronousOutTransferPacket.status", 7786 + "api.USBIsochronousOutTransferPacket.worker_support", 7787 + "api.USBIsochronousOutTransferResult", 7788 + "api.USBIsochronousOutTransferResult.USBIsochronousOutTransferResult", 7789 + "api.USBIsochronousOutTransferResult.packets", 7790 + "api.USBIsochronousOutTransferResult.worker_support", 7791 + "api.USBOutTransferResult", 7792 + "api.USBOutTransferResult.USBOutTransferResult", 7793 + "api.USBOutTransferResult.bytesWritten", 7794 + "api.USBOutTransferResult.status", 7795 + "api.USBOutTransferResult.worker_support", 7796 + "api.WorkerNavigator.usb", 7797 + "html.elements.iframe.allow.usb", 7798 + "http.headers.Permissions-Policy.usb" 7799 + ], 7800 + "firefox_usage": 0.008336814375660667, 7801 + "firefox_observable": "api.USBDevice" 7802 + }, 7803 + { 7804 + "name": "serial", 7805 + "usage": 0.00001522, 7806 + "source": "chrome_popularity", 7807 + "observable": null, 7808 + "observable_type": "blink_api", 7809 + "bcd_key_count": 24, 7810 + "bcd_keys": [ 7811 + "api.Navigator.serial", 7812 + "api.Serial", 7813 + "api.Serial.getPorts", 7814 + "api.Serial.requestPort", 7815 + "api.Serial.requestPort.allowedBluetoothServiceClassIds_option", 7816 + "api.Serial.requestPort.filters_bluetoothServiceClassId", 7817 + "api.SerialPort", 7818 + "api.SerialPort.close", 7819 + "api.SerialPort.connect_event", 7820 + "api.SerialPort.connect_event.bluetooth_rfcomm", 7821 + "api.SerialPort.connected", 7822 + "api.SerialPort.disconnect_event", 7823 + "api.SerialPort.disconnect_event.bluetooth_rfcomm", 7824 + "api.SerialPort.forget", 7825 + "api.SerialPort.getInfo", 7826 + "api.SerialPort.getInfo.bluetoothServiceClassId", 7827 + "api.SerialPort.getSignals", 7828 + "api.SerialPort.open", 7829 + "api.SerialPort.readable", 7830 + "api.SerialPort.setSignals", 7831 + "api.SerialPort.writable", 7832 + "api.WorkerNavigator.serial", 7833 + "html.elements.iframe.allow.serial", 7834 + "http.headers.Permissions-Policy.serial" 7835 + ], 7836 + "firefox_usage": null, 7837 + "firefox_observable": null 7838 + }, 7839 + { 7840 + "name": "web-nfc", 7841 + "usage": 0.00001477, 7842 + "source": "chrome_popularity", 7843 + "observable": null, 7844 + "observable_type": "blink_api", 7845 + "bcd_key_count": 27, 7846 + "bcd_keys": [ 7847 + "api.NDEFMessage", 7848 + "api.NDEFMessage.NDEFMessage", 7849 + "api.NDEFMessage.records", 7850 + "api.NDEFMessage.secure_context_required", 7851 + "api.NDEFReader", 7852 + "api.NDEFReader.NDEFReader", 7853 + "api.NDEFReader.makeReadOnly", 7854 + "api.NDEFReader.reading_event", 7855 + "api.NDEFReader.readingerror_event", 7856 + "api.NDEFReader.scan", 7857 + "api.NDEFReader.secure_context_required", 7858 + "api.NDEFReader.write", 7859 + "api.NDEFReadingEvent", 7860 + "api.NDEFReadingEvent.NDEFReadingEvent", 7861 + "api.NDEFReadingEvent.message", 7862 + "api.NDEFReadingEvent.secure_context_required", 7863 + "api.NDEFReadingEvent.serialNumber", 7864 + "api.NDEFRecord", 7865 + "api.NDEFRecord.NDEFRecord", 7866 + "api.NDEFRecord.data", 7867 + "api.NDEFRecord.encoding", 7868 + "api.NDEFRecord.id", 7869 + "api.NDEFRecord.lang", 7870 + "api.NDEFRecord.mediaType", 7871 + "api.NDEFRecord.recordType", 7872 + "api.NDEFRecord.secure_context_required", 7873 + "api.NDEFRecord.toRecords" 7874 + ], 7875 + "firefox_usage": null, 7876 + "firefox_observable": null 7877 + }, 7878 + { 7879 + "name": "view-transition-class", 7880 + "usage": 0.000014558223155629108, 7881 + "source": "custom_metrics", 7882 + "observable": "view-transition-class", 7883 + "observable_type": "css_property", 7884 + "bcd_key_count": 2, 7885 + "bcd_keys": [ 7886 + "css.properties.view-transition-class", 7887 + "css.properties.view-transition-class.none" 7888 + ], 7889 + "firefox_usage": null, 7890 + "firefox_observable": null 7891 + }, 7892 + { 7893 + "name": "json-modules", 7894 + "usage": 0.00001446, 7895 + "source": "chrome_popularity", 7896 + "observable": null, 7897 + "observable_type": "js_grammar", 7898 + "bcd_key_count": 2, 7899 + "bcd_keys": [ 7900 + "javascript.grammar.trailing_commas.trailing_commas_in_dynamic_import", 7901 + "javascript.statements.import.import_attributes.type_json" 7902 + ], 7903 + "firefox_usage": null, 7904 + "firefox_observable": null 7905 + }, 7906 + { 7907 + "name": "mathml", 7908 + "usage": 0.000014369155322439119, 7909 + "source": "custom_metrics", 7910 + "observable": "math-depth", 7911 + "observable_type": "css_property", 7912 + "bcd_key_count": 108, 7913 + "bcd_keys": [ 7914 + "api.MathMLElement", 7915 + "api.MathMLElement.attributeStyleMap", 7916 + "api.MathMLElement.blur", 7917 + "api.MathMLElement.focus", 7918 + "api.MathMLElement.nonce", 7919 + "api.MathMLElement.style", 7920 + "api.MathMLElement.tabIndex", 7921 + "css.properties.display.math", 7922 + "css.properties.font-size.math", 7923 + "css.properties.math-depth", 7924 + "css.properties.math-shift", 7925 + "css.properties.math-style", 7926 + "css.properties.text-transform.math-auto", 7927 + "mathml.attribute_values.named_space", 7928 + "mathml.attribute_values.nonzero_unitless_values", 7929 + "mathml.elements.annotation", 7930 + "mathml.elements.annotation-xml", 7931 + "mathml.elements.math", 7932 + "mathml.elements.math.display", 7933 + "mathml.elements.menclose", 7934 + "mathml.elements.menclose.notation", 7935 + "mathml.elements.menclose.notation.actuarial", 7936 + "mathml.elements.menclose.notation.bottom", 7937 + "mathml.elements.menclose.notation.box", 7938 + "mathml.elements.menclose.notation.circle", 7939 + "mathml.elements.menclose.notation.downdiagonalstrike", 7940 + "mathml.elements.menclose.notation.horizontalstrike", 7941 + "mathml.elements.menclose.notation.left", 7942 + "mathml.elements.menclose.notation.longdiv", 7943 + "mathml.elements.menclose.notation.madruwb", 7944 + "mathml.elements.menclose.notation.phasorangle", 7945 + "mathml.elements.menclose.notation.right", 7946 + "mathml.elements.menclose.notation.roundedbox", 7947 + "mathml.elements.menclose.notation.top", 7948 + "mathml.elements.menclose.notation.updiagonalarrow", 7949 + "mathml.elements.menclose.notation.updiagonalstrike", 7950 + "mathml.elements.menclose.notation.verticalstrike", 7951 + "mathml.elements.merror", 7952 + "mathml.elements.mfrac", 7953 + "mathml.elements.mfrac.linethickness", 7954 + "mathml.elements.mi", 7955 + "mathml.elements.mi.mathvariant", 7956 + "mathml.elements.mmultiscripts", 7957 + "mathml.elements.mn", 7958 + "mathml.elements.mo", 7959 + "mathml.elements.mo.accent", 7960 + "mathml.elements.mo.form", 7961 + "mathml.elements.mo.largeop", 7962 + "mathml.elements.mo.lspace", 7963 + "mathml.elements.mo.maxsize", 7964 + "mathml.elements.mo.minsize", 7965 + "mathml.elements.mo.movablelimits", 7966 + "mathml.elements.mo.rspace", 7967 + "mathml.elements.mo.stretchy", 7968 + "mathml.elements.mo.symmetric", 7969 + "mathml.elements.mover", 7970 + "mathml.elements.mover.accent", 7971 + "mathml.elements.mpadded", 7972 + "mathml.elements.mpadded.depth", 7973 + "mathml.elements.mpadded.height", 7974 + "mathml.elements.mpadded.lspace", 7975 + "mathml.elements.mpadded.relative_values", 7976 + "mathml.elements.mpadded.voffset", 7977 + "mathml.elements.mpadded.width", 7978 + "mathml.elements.mphantom", 7979 + "mathml.elements.mprescripts", 7980 + "mathml.elements.mroot", 7981 + "mathml.elements.mrow", 7982 + "mathml.elements.ms", 7983 + "mathml.elements.mspace", 7984 + "mathml.elements.mspace.depth", 7985 + "mathml.elements.mspace.height", 7986 + "mathml.elements.mspace.width", 7987 + "mathml.elements.msqrt", 7988 + "mathml.elements.mstyle", 7989 + "mathml.elements.msub", 7990 + "mathml.elements.msubsup", 7991 + "mathml.elements.msup", 7992 + "mathml.elements.mtable", 7993 + "mathml.elements.mtable.align", 7994 + "mathml.elements.mtable.columnalign", 7995 + "mathml.elements.mtable.columnlines", 7996 + "mathml.elements.mtable.columnspacing", 7997 + "mathml.elements.mtable.frame", 7998 + "mathml.elements.mtable.framespacing", 7999 + "mathml.elements.mtable.rowalign", 8000 + "mathml.elements.mtable.rowlines", 8001 + "mathml.elements.mtable.rowspacing", 8002 + "mathml.elements.mtable.width", 8003 + "mathml.elements.mtd", 8004 + "mathml.elements.mtd.columnalign", 8005 + "mathml.elements.mtd.columnspan", 8006 + "mathml.elements.mtd.rowalign", 8007 + "mathml.elements.mtd.rowspan", 8008 + "mathml.elements.mtext", 8009 + "mathml.elements.mtr", 8010 + "mathml.elements.mtr.columnalign", 8011 + "mathml.elements.mtr.rowalign", 8012 + "mathml.elements.munder", 8013 + "mathml.elements.munder.accentunder", 8014 + "mathml.elements.munderover", 8015 + "mathml.elements.munderover.accent", 8016 + "mathml.elements.munderover.accentunder", 8017 + "mathml.elements.semantics", 8018 + "mathml.global_attributes.dir", 8019 + "mathml.global_attributes.displaystyle", 8020 + "mathml.global_attributes.href", 8021 + "mathml.global_attributes.scriptlevel" 8022 + ], 8023 + "firefox_usage": 0.000168060776396631, 8024 + "firefox_observable": "css.properties.math-style" 8025 + }, 8026 + { 8027 + "name": "interactivity", 8028 + "usage": 0.000013045680490109199, 8029 + "source": "custom_metrics", 8030 + "observable": "interactivity", 8031 + "observable_type": "css_property", 8032 + "bcd_key_count": 3, 8033 + "bcd_keys": [ 8034 + "css.properties.interactivity", 8035 + "css.properties.interactivity.auto", 8036 + "css.properties.interactivity.inert" 8037 + ], 8038 + "firefox_usage": null, 8039 + "firefox_observable": null 8040 + }, 8041 + { 8042 + "name": "baseline-source", 8043 + "usage": 0.000011533137824589292, 8044 + "source": "custom_metrics", 8045 + "observable": "baseline-source", 8046 + "observable_type": "css_property", 8047 + "bcd_key_count": 4, 8048 + "bcd_keys": [ 8049 + "css.properties.baseline-source", 8050 + "css.properties.baseline-source.auto", 8051 + "css.properties.baseline-source.first", 8052 + "css.properties.baseline-source.last" 8053 + ], 8054 + "firefox_usage": 0.00011938224347137631, 8055 + "firefox_observable": "css.properties.baseline-source" 8056 + }, 8057 + { 8058 + "name": "fetch-request-streams", 8059 + "usage": 0.00001116, 8060 + "source": "chrome_popularity", 8061 + "observable": null, 8062 + "observable_type": "blink_api", 8063 + "bcd_key_count": 1, 8064 + "bcd_keys": [ 8065 + "api.Request.body" 8066 + ], 8067 + "firefox_usage": null, 8068 + "firefox_observable": null 8069 + }, 8070 + { 8071 + "name": "webhid", 8072 + "usage": 0.00001063, 8073 + "source": "chrome_popularity", 8074 + "observable": null, 8075 + "observable_type": "blink_api", 8076 + "bcd_key_count": 33, 8077 + "bcd_keys": [ 8078 + "api.HID", 8079 + "api.HID.connect_event", 8080 + "api.HID.disconnect_event", 8081 + "api.HID.getDevices", 8082 + "api.HID.requestDevice", 8083 + "api.HID.worker_support", 8084 + "api.HIDConnectionEvent", 8085 + "api.HIDConnectionEvent.HIDConnectionEvent", 8086 + "api.HIDConnectionEvent.device", 8087 + "api.HIDConnectionEvent.worker_support", 8088 + "api.HIDDevice", 8089 + "api.HIDDevice.close", 8090 + "api.HIDDevice.collections", 8091 + "api.HIDDevice.forget", 8092 + "api.HIDDevice.inputreport_event", 8093 + "api.HIDDevice.open", 8094 + "api.HIDDevice.opened", 8095 + "api.HIDDevice.productId", 8096 + "api.HIDDevice.productName", 8097 + "api.HIDDevice.receiveFeatureReport", 8098 + "api.HIDDevice.sendFeatureReport", 8099 + "api.HIDDevice.sendReport", 8100 + "api.HIDDevice.vendorId", 8101 + "api.HIDDevice.worker_support", 8102 + "api.HIDInputReportEvent", 8103 + "api.HIDInputReportEvent.data", 8104 + "api.HIDInputReportEvent.device", 8105 + "api.HIDInputReportEvent.reportId", 8106 + "api.HIDInputReportEvent.worker_support", 8107 + "api.Navigator.hid", 8108 + "api.WorkerNavigator.hid", 8109 + "html.elements.iframe.allow.hid", 8110 + "http.headers.Permissions-Policy.hid" 8111 + ], 8112 + "firefox_usage": null, 8113 + "firefox_observable": null 8114 + }, 8115 + { 8116 + "name": "font-synthesis-small-caps", 8117 + "usage": 0.000010115129075664381, 8118 + "source": "custom_metrics", 8119 + "observable": "font-synthesis-small-caps", 8120 + "observable_type": "css_property", 8121 + "bcd_key_count": 3, 8122 + "bcd_keys": [ 8123 + "css.properties.font-synthesis-small-caps", 8124 + "css.properties.font-synthesis-small-caps.auto", 8125 + "css.properties.font-synthesis-small-caps.none" 8126 + ], 8127 + "firefox_usage": 0.000054121022672508584, 8128 + "firefox_observable": "css.properties.font-synthesis-small-caps" 8129 + }, 8130 + { 8131 + "name": "local-fonts", 8132 + "usage": 0.00000968, 8133 + "source": "chrome_popularity", 8134 + "observable": null, 8135 + "observable_type": "blink_api", 8136 + "bcd_key_count": 10, 8137 + "bcd_keys": [ 8138 + "api.FontData", 8139 + "api.FontData.blob", 8140 + "api.FontData.family", 8141 + "api.FontData.fullName", 8142 + "api.FontData.postscriptName", 8143 + "api.FontData.style", 8144 + "api.Permissions.permission_local-fonts", 8145 + "api.Window.queryLocalFonts", 8146 + "html.elements.iframe.allow.local-fonts", 8147 + "http.headers.Permissions-Policy.local-fonts" 8148 + ], 8149 + "firefox_usage": null, 8150 + "firefox_observable": null 8151 + }, 8152 + { 8153 + "name": "gamepad", 8154 + "usage": 0.00000954, 8155 + "source": "chrome_popularity", 8156 + "observable": null, 8157 + "observable_type": "blink_api", 8158 + "bcd_key_count": 22, 8159 + "bcd_keys": [ 8160 + "api.Gamepad", 8161 + "api.Gamepad.axes", 8162 + "api.Gamepad.buttons", 8163 + "api.Gamepad.connected", 8164 + "api.Gamepad.id", 8165 + "api.Gamepad.index", 8166 + "api.Gamepad.mapping", 8167 + "api.Gamepad.secure_context_required", 8168 + "api.Gamepad.timestamp", 8169 + "api.GamepadButton", 8170 + "api.GamepadButton.pressed", 8171 + "api.GamepadButton.secure_context_required", 8172 + "api.GamepadButton.value", 8173 + "api.GamepadEvent", 8174 + "api.GamepadEvent.GamepadEvent", 8175 + "api.GamepadEvent.gamepad", 8176 + "api.GamepadEvent.secure_context_required", 8177 + "api.Navigator.getGamepads", 8178 + "api.Navigator.getGamepads.secure_context_required", 8179 + "api.Window.gamepadconnected_event", 8180 + "api.Window.gamepaddisconnected_event", 8181 + "html.elements.iframe.allow.gamepad" 8182 + ], 8183 + "firefox_usage": null, 8184 + "firefox_observable": null 8185 + }, 8186 + { 8187 + "name": "scroll-initial-target", 8188 + "usage": 0.000008508052493549479, 8189 + "source": "custom_metrics", 8190 + "observable": "scroll-initial-target", 8191 + "observable_type": "css_property", 8192 + "bcd_key_count": 3, 8193 + "bcd_keys": [ 8194 + "css.properties.scroll-initial-target", 8195 + "css.properties.scroll-initial-target.nearest", 8196 + "css.properties.scroll-initial-target.none" 8197 + ], 8198 + "firefox_usage": null, 8199 + "firefox_observable": null 8200 + }, 8201 + { 8202 + "name": "column-pseudo", 8203 + "usage": 0.000008508052493549479, 8204 + "source": "custom_metrics", 8205 + "observable": "column", 8206 + "observable_type": "css_selector", 8207 + "bcd_key_count": 2, 8208 + "bcd_keys": [ 8209 + "css.selectors.column", 8210 + "css.selectors.column.nested_scroll-marker" 8211 + ], 8212 + "firefox_usage": null, 8213 + "firefox_observable": null 8214 + }, 8215 + { 8216 + "name": "web-bluetooth", 8217 + "usage": 0.00000832, 8218 + "source": "chrome_popularity", 8219 + "observable": null, 8220 + "observable_type": "blink_api", 8221 + "bcd_key_count": 61, 8222 + "bcd_keys": [ 8223 + "api.Bluetooth", 8224 + "api.Bluetooth.getAvailability", 8225 + "api.Bluetooth.getDevices", 8226 + "api.Bluetooth.requestDevice", 8227 + "api.Bluetooth.requestDevice.options_exclusionFilters_parameter", 8228 + "api.Bluetooth.requestDevice.options_filter_manufacturerData_parameter", 8229 + "api.BluetoothCharacteristicProperties", 8230 + "api.BluetoothCharacteristicProperties.authenticatedSignedWrites", 8231 + "api.BluetoothCharacteristicProperties.broadcast", 8232 + "api.BluetoothCharacteristicProperties.indicate", 8233 + "api.BluetoothCharacteristicProperties.notify", 8234 + "api.BluetoothCharacteristicProperties.read", 8235 + "api.BluetoothCharacteristicProperties.reliableWrite", 8236 + "api.BluetoothCharacteristicProperties.writableAuxiliaries", 8237 + "api.BluetoothCharacteristicProperties.write", 8238 + "api.BluetoothCharacteristicProperties.writeWithoutResponse", 8239 + "api.BluetoothDevice", 8240 + "api.BluetoothDevice.gatt", 8241 + "api.BluetoothDevice.gattserverdisconnected_event", 8242 + "api.BluetoothDevice.id", 8243 + "api.BluetoothDevice.name", 8244 + "api.BluetoothRemoteGATTCharacteristic", 8245 + "api.BluetoothRemoteGATTCharacteristic.characteristicvaluechanged_event", 8246 + "api.BluetoothRemoteGATTCharacteristic.getDescriptor", 8247 + "api.BluetoothRemoteGATTCharacteristic.getDescriptors", 8248 + "api.BluetoothRemoteGATTCharacteristic.properties", 8249 + "api.BluetoothRemoteGATTCharacteristic.readValue", 8250 + "api.BluetoothRemoteGATTCharacteristic.service", 8251 + "api.BluetoothRemoteGATTCharacteristic.startNotifications", 8252 + "api.BluetoothRemoteGATTCharacteristic.stopNotifications", 8253 + "api.BluetoothRemoteGATTCharacteristic.uuid", 8254 + "api.BluetoothRemoteGATTCharacteristic.value", 8255 + "api.BluetoothRemoteGATTCharacteristic.writeValueWithResponse", 8256 + "api.BluetoothRemoteGATTCharacteristic.writeValueWithoutResponse", 8257 + "api.BluetoothRemoteGATTDescriptor", 8258 + "api.BluetoothRemoteGATTDescriptor.characteristic", 8259 + "api.BluetoothRemoteGATTDescriptor.readValue", 8260 + "api.BluetoothRemoteGATTDescriptor.uuid", 8261 + "api.BluetoothRemoteGATTDescriptor.value", 8262 + "api.BluetoothRemoteGATTDescriptor.writeValue", 8263 + "api.BluetoothRemoteGATTServer", 8264 + "api.BluetoothRemoteGATTServer.connect", 8265 + "api.BluetoothRemoteGATTServer.connected", 8266 + "api.BluetoothRemoteGATTServer.device", 8267 + "api.BluetoothRemoteGATTServer.disconnect", 8268 + "api.BluetoothRemoteGATTServer.getPrimaryService", 8269 + "api.BluetoothRemoteGATTServer.getPrimaryServices", 8270 + "api.BluetoothRemoteGATTService", 8271 + "api.BluetoothRemoteGATTService.device", 8272 + "api.BluetoothRemoteGATTService.getCharacteristic", 8273 + "api.BluetoothRemoteGATTService.getCharacteristics", 8274 + "api.BluetoothRemoteGATTService.isPrimary", 8275 + "api.BluetoothRemoteGATTService.uuid", 8276 + "api.BluetoothUUID", 8277 + "api.BluetoothUUID.canonicalUUID_static", 8278 + "api.BluetoothUUID.getCharacteristic_static", 8279 + "api.BluetoothUUID.getDescriptor_static", 8280 + "api.BluetoothUUID.getService_static", 8281 + "api.Navigator.bluetooth", 8282 + "html.elements.iframe.allow.bluetooth", 8283 + "http.headers.Permissions-Policy.bluetooth" 8284 + ], 8285 + "firefox_usage": 0.005845832514362171, 8286 + "firefox_observable": "api.BluetoothRemoteGATTDescriptor" 8287 + }, 8288 + { 8289 + "name": "speech-recognition", 8290 + "usage": 0.000005922802196175054, 8291 + "source": "blink_features", 8292 + "observable": "api.SpeechRecognition", 8293 + "observable_type": "blink_api", 8294 + "bcd_key_count": 38, 8295 + "bcd_keys": [ 8296 + "api.SpeechRecognition", 8297 + "api.SpeechRecognition.SpeechRecognition", 8298 + "api.SpeechRecognition.abort", 8299 + "api.SpeechRecognition.audioend_event", 8300 + "api.SpeechRecognition.audiostart_event", 8301 + "api.SpeechRecognition.continuous", 8302 + "api.SpeechRecognition.end_event", 8303 + "api.SpeechRecognition.error_event", 8304 + "api.SpeechRecognition.interimResults", 8305 + "api.SpeechRecognition.lang", 8306 + "api.SpeechRecognition.maxAlternatives", 8307 + "api.SpeechRecognition.nomatch_event", 8308 + "api.SpeechRecognition.result_event", 8309 + "api.SpeechRecognition.soundend_event", 8310 + "api.SpeechRecognition.soundstart_event", 8311 + "api.SpeechRecognition.speechend_event", 8312 + "api.SpeechRecognition.speechstart_event", 8313 + "api.SpeechRecognition.start", 8314 + "api.SpeechRecognition.start_event", 8315 + "api.SpeechRecognition.stop", 8316 + "api.SpeechRecognitionAlternative", 8317 + "api.SpeechRecognitionAlternative.confidence", 8318 + "api.SpeechRecognitionAlternative.transcript", 8319 + "api.SpeechRecognitionErrorEvent", 8320 + "api.SpeechRecognitionErrorEvent.SpeechRecognitionErrorEvent", 8321 + "api.SpeechRecognitionErrorEvent.error", 8322 + "api.SpeechRecognitionErrorEvent.message", 8323 + "api.SpeechRecognitionEvent", 8324 + "api.SpeechRecognitionEvent.SpeechRecognitionEvent", 8325 + "api.SpeechRecognitionEvent.resultIndex", 8326 + "api.SpeechRecognitionEvent.results", 8327 + "api.SpeechRecognitionResult", 8328 + "api.SpeechRecognitionResult.isFinal", 8329 + "api.SpeechRecognitionResult.item", 8330 + "api.SpeechRecognitionResult.length", 8331 + "api.SpeechRecognitionResultList", 8332 + "api.SpeechRecognitionResultList.item", 8333 + "api.SpeechRecognitionResultList.length" 8334 + ], 8335 + "firefox_usage": 0.0001717835242398396, 8336 + "firefox_observable": "api.SpeechRecognitionAlternative" 8337 + }, 8338 + { 8339 + "name": "move-before", 8340 + "usage": 0.00000538, 8341 + "source": "chrome_popularity", 8342 + "observable": null, 8343 + "observable_type": "blink_api", 8344 + "bcd_key_count": 4, 8345 + "bcd_keys": [ 8346 + "api.CustomElementRegistry.define.connectedMoveCallback_lifecycle_callback", 8347 + "api.Document.moveBefore", 8348 + "api.DocumentFragment.moveBefore", 8349 + "api.Element.moveBefore" 8350 + ], 8351 + "firefox_usage": null, 8352 + "firefox_observable": null 8353 + }, 8354 + { 8355 + "name": "picture-in-picture", 8356 + "usage": 0.000005104831496129686, 8357 + "source": "custom_metrics", 8358 + "observable": "picture-in-picture", 8359 + "observable_type": "css_selector", 8360 + "bcd_key_count": 19, 8361 + "bcd_keys": [ 8362 + "api.Document.exitPictureInPicture", 8363 + "api.Document.pictureInPictureElement", 8364 + "api.Document.pictureInPictureEnabled", 8365 + "api.HTMLVideoElement.disablePictureInPicture", 8366 + "api.HTMLVideoElement.enterpictureinpicture_event", 8367 + "api.HTMLVideoElement.leavepictureinpicture_event", 8368 + "api.HTMLVideoElement.requestPictureInPicture", 8369 + "api.PictureInPictureEvent", 8370 + "api.PictureInPictureEvent.PictureInPictureEvent", 8371 + "api.PictureInPictureEvent.pictureInPictureWindow", 8372 + "api.PictureInPictureWindow", 8373 + "api.PictureInPictureWindow.height", 8374 + "api.PictureInPictureWindow.resize_event", 8375 + "api.PictureInPictureWindow.width", 8376 + "api.ShadowRoot.pictureInPictureElement", 8377 + "css.selectors.picture-in-picture", 8378 + "html.elements.iframe.allow.picture-in-picture", 8379 + "html.elements.video.disablepictureinpicture", 8380 + "http.headers.Permissions-Policy.picture-in-picture" 8381 + ], 8382 + "firefox_usage": 0.0020374242416180406, 8383 + "firefox_observable": "api.PictureInPictureWindow" 8384 + }, 8385 + { 8386 + "name": "webauthn-public-key-easy", 8387 + "usage": 0.00000327, 8388 + "source": "chrome_popularity", 8389 + "observable": null, 8390 + "observable_type": "blink_api", 8391 + "bcd_key_count": 3, 8392 + "bcd_keys": [ 8393 + "api.AuthenticatorAttestationResponse.getAuthenticatorData", 8394 + "api.AuthenticatorAttestationResponse.getPublicKey", 8395 + "api.AuthenticatorAttestationResponse.getPublicKeyAlgorithm" 8396 + ], 8397 + "firefox_usage": null, 8398 + "firefox_observable": null 8399 + }, 8400 + { 8401 + "name": "ic", 8402 + "usage": 0.00000273, 8403 + "source": "chrome_popularity", 8404 + "observable": null, 8405 + "observable_type": "css_type", 8406 + "bcd_key_count": 1, 8407 + "bcd_keys": [ 8408 + "css.types.length.ic" 8409 + ], 8410 + "firefox_usage": null, 8411 + "firefox_observable": null 8412 + }, 8413 + { 8414 + "name": "meta-application-title", 8415 + "usage": 0.00000212, 8416 + "source": "chrome_popularity", 8417 + "observable": null, 8418 + "observable_type": "html_element", 8419 + "bcd_key_count": 1, 8420 + "bcd_keys": [ 8421 + "html.elements.meta.name.application-title" 8422 + ], 8423 + "firefox_usage": null, 8424 + "firefox_observable": null 8425 + }, 8426 + { 8427 + "name": "clipboard-svg", 8428 + "usage": 0.00000204, 8429 + "source": "chrome_popularity", 8430 + "observable": null, 8431 + "observable_type": "blink_api", 8432 + "bcd_key_count": 1, 8433 + "bcd_keys": [ 8434 + "api.ClipboardItem.type_image_svg_xml" 8435 + ], 8436 + "firefox_usage": null, 8437 + "firefox_observable": null 8438 + }, 8439 + { 8440 + "name": "show-picker-select", 8441 + "usage": 0.00000161, 8442 + "source": "chrome_popularity", 8443 + "observable": null, 8444 + "observable_type": "blink_api", 8445 + "bcd_key_count": 1, 8446 + "bcd_keys": [ 8447 + "api.HTMLSelectElement.showPicker" 8448 + ], 8449 + "firefox_usage": null, 8450 + "firefox_observable": null 8451 + }, 8452 + { 8453 + "name": "wasm-memory64", 8454 + "usage": 0.00000143, 8455 + "source": "chrome_popularity", 8456 + "observable": null, 8457 + "observable_type": "webassembly", 8458 + "bcd_key_count": 1, 8459 + "bcd_keys": [ 8460 + "webassembly.memory64" 8461 + ], 8462 + "firefox_usage": null, 8463 + "firefox_observable": null 8464 + }, 8465 + { 8466 + "name": "css-modules", 8467 + "usage": 9.9e-7, 8468 + "source": "chrome_popularity", 8469 + "observable": null, 8470 + "observable_type": "js_statements", 8471 + "bcd_key_count": 1, 8472 + "bcd_keys": [ 8473 + "javascript.statements.import.import_attributes.type_css" 8474 + ], 8475 + "firefox_usage": null, 8476 + "firefox_observable": null 8477 + }, 8478 + { 8479 + "name": "rch", 8480 + "usage": 9e-7, 8481 + "source": "chrome_popularity", 8482 + "observable": null, 8483 + "observable_type": "css_type", 8484 + "bcd_key_count": 1, 8485 + "bcd_keys": [ 8486 + "css.types.length.rch" 8487 + ], 8488 + "firefox_usage": null, 8489 + "firefox_observable": null 8490 + }, 8491 + { 8492 + "name": "atomics-pause", 8493 + "usage": 9e-7, 8494 + "source": "chrome_popularity", 8495 + "observable": null, 8496 + "observable_type": "js_builtin", 8497 + "bcd_key_count": 1, 8498 + "bcd_keys": [ 8499 + "javascript.builtins.Atomics.pause" 8500 + ], 8501 + "firefox_usage": null, 8502 + "firefox_observable": null 8503 + }, 8504 + { 8505 + "name": "wasm-multi-memory", 8506 + "usage": 8.3e-7, 8507 + "source": "chrome_popularity", 8508 + "observable": null, 8509 + "observable_type": "webassembly", 8510 + "bcd_key_count": 1, 8511 + "bcd_keys": [ 8512 + "webassembly.multiMemory" 8513 + ], 8514 + "firefox_usage": null, 8515 + "firefox_observable": null 8516 + }, 8517 + { 8518 + "name": "requestclose", 8519 + "usage": 7.1e-7, 8520 + "source": "chrome_popularity", 8521 + "observable": null, 8522 + "observable_type": "blink_api", 8523 + "bcd_key_count": 1, 8524 + "bcd_keys": [ 8525 + "api.HTMLDialogElement.requestClose" 8526 + ], 8527 + "firefox_usage": null, 8528 + "firefox_observable": null 8529 + }, 8530 + { 8531 + "name": "font-palette-animation", 8532 + "usage": 6.9e-7, 8533 + "source": "chrome_popularity", 8534 + "observable": null, 8535 + "observable_type": "css_property", 8536 + "bcd_key_count": 2, 8537 + "bcd_keys": [ 8538 + "css.properties.font-palette.animation_computed", 8539 + "css.properties.font-palette.palette-mix_function" 8540 + ], 8541 + "firefox_usage": null, 8542 + "firefox_observable": null 8543 + }, 8544 + { 8545 + "name": "webxr-dom-overlays", 8546 + "usage": 5.672034995699652e-7, 8547 + "source": "custom_metrics", 8548 + "observable": "xr-overlay", 8549 + "observable_type": "css_selector", 8550 + "bcd_key_count": 3, 8551 + "bcd_keys": [ 8552 + "api.Element.beforexrselect_event", 8553 + "api.XRSession.domOverlayState", 8554 + "css.selectors.xr-overlay" 8555 + ], 8556 + "firefox_usage": null, 8557 + "firefox_observable": null 8558 + }, 8559 + { 8560 + "name": "app-file-handlers", 8561 + "usage": 5.3e-7, 8562 + "source": "chrome_popularity", 8563 + "observable": null, 8564 + "observable_type": "blink_api", 8565 + "bcd_key_count": 2, 8566 + "bcd_keys": [ 8567 + "api.LaunchParams.files", 8568 + "manifests.webapp.file_handlers" 8569 + ], 8570 + "firefox_usage": null, 8571 + "firefox_observable": null 8572 + }, 8573 + { 8574 + "name": "wasm-tail-call-optimization", 8575 + "usage": 5.1e-7, 8576 + "source": "chrome_popularity", 8577 + "observable": null, 8578 + "observable_type": "webassembly", 8579 + "bcd_key_count": 1, 8580 + "bcd_keys": [ 8581 + "webassembly.tail-calls" 8582 + ], 8583 + "firefox_usage": null, 8584 + "firefox_observable": null 8585 + }, 8586 + { 8587 + "name": "element-capture", 8588 + "usage": 1.8e-7, 8589 + "source": "chrome_popularity", 8590 + "observable": null, 8591 + "observable_type": "blink_api", 8592 + "bcd_key_count": 3, 8593 + "bcd_keys": [ 8594 + "api.BrowserCaptureMediaStreamTrack.restrictTo", 8595 + "api.RestrictionTarget", 8596 + "api.RestrictionTarget.fromElement_static" 8597 + ], 8598 + "firefox_usage": null, 8599 + "firefox_observable": null 8600 + }, 8601 + { 8602 + "name": "webxr-ar", 8603 + "usage": 1.5e-7, 8604 + "source": "chrome_popularity", 8605 + "observable": null, 8606 + "observable_type": "blink_api", 8607 + "bcd_key_count": 3, 8608 + "bcd_keys": [ 8609 + "api.XRSession.environmentBlendMode", 8610 + "api.XRSession.interactionMode", 8611 + "api.XRView.isFirstPersonObserver" 8612 + ], 8613 + "firefox_usage": null, 8614 + "firefox_observable": null 8615 + }, 8616 + { 8617 + "name": "webxr-hit-test", 8618 + "usage": 1.4e-7, 8619 + "source": "chrome_popularity", 8620 + "observable": null, 8621 + "observable_type": "blink_api", 8622 + "bcd_key_count": 18, 8623 + "bcd_keys": [ 8624 + "api.XRFrame.getHitTestResults", 8625 + "api.XRFrame.getHitTestResultsForTransientInput", 8626 + "api.XRHitTestResult", 8627 + "api.XRHitTestResult.getPose", 8628 + "api.XRHitTestSource", 8629 + "api.XRHitTestSource.cancel", 8630 + "api.XRRay", 8631 + "api.XRRay.XRRay", 8632 + "api.XRRay.direction", 8633 + "api.XRRay.matrix", 8634 + "api.XRRay.origin", 8635 + "api.XRSession.requestHitTestSource", 8636 + "api.XRSession.requestHitTestSourceForTransientInput", 8637 + "api.XRTransientInputHitTestResult", 8638 + "api.XRTransientInputHitTestResult.inputSource", 8639 + "api.XRTransientInputHitTestResult.results", 8640 + "api.XRTransientInputHitTestSource", 8641 + "api.XRTransientInputHitTestSource.cancel" 8642 + ], 8643 + "firefox_usage": null, 8644 + "firefox_observable": null 8645 + }, 8646 + { 8647 + "name": "ink", 8648 + "usage": 9.101726078638731e-8, 8649 + "source": "blink_features", 8650 + "observable": "api.Ink", 8651 + "observable_type": "blink_api", 8652 + "bcd_key_count": 6, 8653 + "bcd_keys": [ 8654 + "api.DelegatedInkTrailPresenter", 8655 + "api.DelegatedInkTrailPresenter.presentationArea", 8656 + "api.DelegatedInkTrailPresenter.updateInkTrailStartPoint", 8657 + "api.Ink", 8658 + "api.Ink.requestPresenter", 8659 + "api.Navigator.ink" 8660 + ], 8661 + "firefox_usage": null, 8662 + "firefox_observable": null 8663 + }, 8664 + { 8665 + "name": "webxr-hand-input", 8666 + "usage": 9e-8, 8667 + "source": "chrome_popularity", 8668 + "observable": null, 8669 + "observable_type": "blink_api", 8670 + "bcd_key_count": 16, 8671 + "bcd_keys": [ 8672 + "api.XRFrame.fillJointRadii", 8673 + "api.XRFrame.fillPoses", 8674 + "api.XRFrame.getJointPose", 8675 + "api.XRHand", 8676 + "api.XRHand.@@iterator", 8677 + "api.XRHand.entries", 8678 + "api.XRHand.forEach", 8679 + "api.XRHand.get", 8680 + "api.XRHand.keys", 8681 + "api.XRHand.size", 8682 + "api.XRHand.values", 8683 + "api.XRInputSource.hand", 8684 + "api.XRJointPose", 8685 + "api.XRJointPose.radius", 8686 + "api.XRJointSpace", 8687 + "api.XRJointSpace.jointName" 8688 + ], 8689 + "firefox_usage": null, 8690 + "firefox_observable": null 8691 + }, 8692 + { 8693 + "name": "webxr-lighting-estimation", 8694 + "usage": 8e-8, 8695 + "source": "chrome_popularity", 8696 + "observable": null, 8697 + "observable_type": "blink_api", 8698 + "bcd_key_count": 11, 8699 + "bcd_keys": [ 8700 + "api.XRFrame.getLightEstimate", 8701 + "api.XRLightEstimate", 8702 + "api.XRLightEstimate.primaryLightDirection", 8703 + "api.XRLightEstimate.primaryLightIntensity", 8704 + "api.XRLightEstimate.sphericalHarmonicsCoefficients", 8705 + "api.XRLightProbe", 8706 + "api.XRLightProbe.probeSpace", 8707 + "api.XRLightProbe.reflectionchange_event", 8708 + "api.XRSession.preferredReflectionFormat", 8709 + "api.XRSession.requestLightProbe", 8710 + "api.XRWebGLBinding.getReflectionCubeMap" 8711 + ], 8712 + "firefox_usage": null, 8713 + "firefox_observable": null 8714 + }, 8715 + { 8716 + "name": "wasm-exnref-exceptions", 8717 + "usage": 6e-8, 8718 + "source": "chrome_popularity", 8719 + "observable": null, 8720 + "observable_type": "webassembly", 8721 + "bcd_key_count": 1, 8722 + "bcd_keys": [ 8723 + "webassembly.exceptionsFinal" 8724 + ], 8725 + "firefox_usage": null, 8726 + "firefox_observable": null 8727 + }, 8728 + { 8729 + "name": "webnn", 8730 + "usage": 4e-8, 8731 + "source": "chrome_popularity", 8732 + "observable": null, 8733 + "observable_type": "blink_api", 8734 + "bcd_key_count": 103, 8735 + "bcd_keys": [ 8736 + "api.ML", 8737 + "api.ML.createContext", 8738 + "api.MLContext", 8739 + "api.MLContext.dispatch", 8740 + "api.MLContext.opSupportLimits", 8741 + "api.MLGraph", 8742 + "api.MLGraphBuilder", 8743 + "api.MLGraphBuilder.MLGraphBuilder", 8744 + "api.MLGraphBuilder.abs", 8745 + "api.MLGraphBuilder.add", 8746 + "api.MLGraphBuilder.argMax", 8747 + "api.MLGraphBuilder.argMin", 8748 + "api.MLGraphBuilder.averagePool2d", 8749 + "api.MLGraphBuilder.batchNormalization", 8750 + "api.MLGraphBuilder.build", 8751 + "api.MLGraphBuilder.cast", 8752 + "api.MLGraphBuilder.ceil", 8753 + "api.MLGraphBuilder.clamp", 8754 + "api.MLGraphBuilder.concat", 8755 + "api.MLGraphBuilder.constant", 8756 + "api.MLGraphBuilder.conv2d", 8757 + "api.MLGraphBuilder.convTranspose2d", 8758 + "api.MLGraphBuilder.cos", 8759 + "api.MLGraphBuilder.cumulativeSum", 8760 + "api.MLGraphBuilder.dequantizeLinear", 8761 + "api.MLGraphBuilder.div", 8762 + "api.MLGraphBuilder.elu", 8763 + "api.MLGraphBuilder.equal", 8764 + "api.MLGraphBuilder.erf", 8765 + "api.MLGraphBuilder.exp", 8766 + "api.MLGraphBuilder.expand", 8767 + "api.MLGraphBuilder.floor", 8768 + "api.MLGraphBuilder.gather", 8769 + "api.MLGraphBuilder.gatherElements", 8770 + "api.MLGraphBuilder.gatherND", 8771 + "api.MLGraphBuilder.gemm", 8772 + "api.MLGraphBuilder.greater", 8773 + "api.MLGraphBuilder.greaterOrEqual", 8774 + "api.MLGraphBuilder.gru", 8775 + "api.MLGraphBuilder.gruCell", 8776 + "api.MLGraphBuilder.hardSigmoid", 8777 + "api.MLGraphBuilder.hardSwish", 8778 + "api.MLGraphBuilder.identity", 8779 + "api.MLGraphBuilder.input", 8780 + "api.MLGraphBuilder.instanceNormalization", 8781 + "api.MLGraphBuilder.l2Pool2d", 8782 + "api.MLGraphBuilder.layerNormalization", 8783 + "api.MLGraphBuilder.leakyRelu", 8784 + "api.MLGraphBuilder.lesser", 8785 + "api.MLGraphBuilder.lesserOrEqual", 8786 + "api.MLGraphBuilder.linear", 8787 + "api.MLGraphBuilder.log", 8788 + "api.MLGraphBuilder.logicalAnd", 8789 + "api.MLGraphBuilder.logicalNot", 8790 + "api.MLGraphBuilder.logicalOr", 8791 + "api.MLGraphBuilder.logicalXor", 8792 + "api.MLGraphBuilder.lstm", 8793 + "api.MLGraphBuilder.lstmCell", 8794 + "api.MLGraphBuilder.matmul", 8795 + "api.MLGraphBuilder.max", 8796 + "api.MLGraphBuilder.maxPool2d", 8797 + "api.MLGraphBuilder.min", 8798 + "api.MLGraphBuilder.mul", 8799 + "api.MLGraphBuilder.neg", 8800 + "api.MLGraphBuilder.pad", 8801 + "api.MLGraphBuilder.pow", 8802 + "api.MLGraphBuilder.prelu", 8803 + "api.MLGraphBuilder.quantizeLinear", 8804 + "api.MLGraphBuilder.reciprocal", 8805 + "api.MLGraphBuilder.reduceL1", 8806 + "api.MLGraphBuilder.reduceL2", 8807 + "api.MLGraphBuilder.reduceLogSum", 8808 + "api.MLGraphBuilder.reduceLogSumExp", 8809 + "api.MLGraphBuilder.reduceMax", 8810 + "api.MLGraphBuilder.reduceMean", 8811 + "api.MLGraphBuilder.reduceMin", 8812 + "api.MLGraphBuilder.reduceProduct", 8813 + "api.MLGraphBuilder.reduceSum", 8814 + "api.MLGraphBuilder.reduceSumSquare", 8815 + "api.MLGraphBuilder.relu", 8816 + "api.MLGraphBuilder.resample2d", 8817 + "api.MLGraphBuilder.reshape", 8818 + "api.MLGraphBuilder.scatterElements", 8819 + "api.MLGraphBuilder.scatterND", 8820 + "api.MLGraphBuilder.sigmoid", 8821 + "api.MLGraphBuilder.sign", 8822 + "api.MLGraphBuilder.sin", 8823 + "api.MLGraphBuilder.slice", 8824 + "api.MLGraphBuilder.softmax", 8825 + "api.MLGraphBuilder.softplus", 8826 + "api.MLGraphBuilder.softsign", 8827 + "api.MLGraphBuilder.split", 8828 + "api.MLGraphBuilder.sqrt", 8829 + "api.MLGraphBuilder.sub", 8830 + "api.MLGraphBuilder.tan", 8831 + "api.MLGraphBuilder.tanh", 8832 + "api.MLGraphBuilder.tile", 8833 + "api.MLGraphBuilder.transpose", 8834 + "api.MLGraphBuilder.triangular", 8835 + "api.MLGraphBuilder.where", 8836 + "api.MLOperand", 8837 + "api.Navigator.ml", 8838 + "api.WorkerNavigator.ml" 8839 + ], 8840 + "firefox_usage": null, 8841 + "firefox_observable": null 8842 + }, 8843 + { 8844 + "name": "webxr-anchors", 8845 + "usage": 3e-8, 8846 + "source": "chrome_popularity", 8847 + "observable": null, 8848 + "observable_type": "blink_api", 8849 + "bcd_key_count": 14, 8850 + "bcd_keys": [ 8851 + "api.XRAnchor", 8852 + "api.XRAnchor.anchorSpace", 8853 + "api.XRAnchor.delete", 8854 + "api.XRAnchorSet", 8855 + "api.XRAnchorSet.@@iterator", 8856 + "api.XRAnchorSet.entries", 8857 + "api.XRAnchorSet.forEach", 8858 + "api.XRAnchorSet.has", 8859 + "api.XRAnchorSet.keys", 8860 + "api.XRAnchorSet.size", 8861 + "api.XRAnchorSet.values", 8862 + "api.XRFrame.createAnchor", 8863 + "api.XRFrame.trackedAnchors", 8864 + "api.XRHitTestResult.createAnchor" 8865 + ], 8866 + "firefox_usage": null, 8867 + "firefox_observable": null 8868 + }, 8869 + { 8870 + "name": "webxr-camera", 8871 + "usage": 2e-8, 8872 + "source": "chrome_popularity", 8873 + "observable": null, 8874 + "observable_type": "blink_api", 8875 + "bcd_key_count": 5, 8876 + "bcd_keys": [ 8877 + "api.XRCamera", 8878 + "api.XRCamera.height", 8879 + "api.XRCamera.width", 8880 + "api.XRView.camera", 8881 + "api.XRWebGLBinding.getCameraImage" 8882 + ], 8883 + "firefox_usage": null, 8884 + "firefox_observable": null 8885 + }, 8886 + { 8887 + "name": "summarizer", 8888 + "usage": 1e-8, 8889 + "source": "chrome_popularity", 8890 + "observable": null, 8891 + "observable_type": "blink_api", 8892 + "bcd_key_count": 16, 8893 + "bcd_keys": [ 8894 + "api.Summarizer", 8895 + "api.Summarizer.availability_static", 8896 + "api.Summarizer.create_static", 8897 + "api.Summarizer.destroy", 8898 + "api.Summarizer.expectedContextLanguages", 8899 + "api.Summarizer.expectedInputLanguages", 8900 + "api.Summarizer.format", 8901 + "api.Summarizer.inputQuota", 8902 + "api.Summarizer.length", 8903 + "api.Summarizer.measureInputUsage", 8904 + "api.Summarizer.outputLanguage", 8905 + "api.Summarizer.sharedContext", 8906 + "api.Summarizer.summarize", 8907 + "api.Summarizer.summarizeStreaming", 8908 + "api.Summarizer.type", 8909 + "http.headers.Permissions-Policy.summarizer" 8910 + ], 8911 + "firefox_usage": null, 8912 + "firefox_observable": null 8913 + }, 8914 + { 8915 + "name": "ric", 8916 + "usage": 1e-8, 8917 + "source": "chrome_popularity", 8918 + "observable": null, 8919 + "observable_type": "css_type", 8920 + "bcd_key_count": 1, 8921 + "bcd_keys": [ 8922 + "css.types.length.ric" 8923 + ], 8924 + "firefox_usage": null, 8925 + "firefox_observable": null 8926 + }, 8927 + { 8928 + "name": "cross-document-view-transitions", 8929 + "usage": 0, 8930 + "source": "custom_metrics", 8931 + "observable": "view-transition", 8932 + "observable_type": "css_atrule", 8933 + "bcd_key_count": 4, 8934 + "bcd_keys": [ 8935 + "api.CSSViewTransitionRule", 8936 + "api.CSSViewTransitionRule.navigation", 8937 + "api.CSSViewTransitionRule.types", 8938 + "css.at-rules.view-transition" 8939 + ], 8940 + "firefox_usage": null, 8941 + "firefox_observable": null 8942 + }, 8943 + { 8944 + "name": "registered-custom-properties", 8945 + "usage": 0, 8946 + "source": "custom_metrics", 8947 + "observable": "property", 8948 + "observable_type": "css_atrule", 8949 + "bcd_key_count": 10, 8950 + "bcd_keys": [ 8951 + "api.CSS.registerProperty_static", 8952 + "api.CSSPropertyRule", 8953 + "api.CSSPropertyRule.inherits", 8954 + "api.CSSPropertyRule.initialValue", 8955 + "api.CSSPropertyRule.name", 8956 + "api.CSSPropertyRule.syntax", 8957 + "css.at-rules.property", 8958 + "css.at-rules.property.inherits", 8959 + "css.at-rules.property.initial-value", 8960 + "css.at-rules.property.syntax" 8961 + ], 8962 + "firefox_usage": 0.028970720927724423, 8963 + "firefox_observable": "api.CSSPropertyRule" 8964 + }, 8965 + { 8966 + "name": "cascade-layers", 8967 + "usage": 0, 8968 + "source": "custom_metrics", 8969 + "observable": "layer", 8970 + "observable_type": "css_atrule", 8971 + "bcd_key_count": 8, 8972 + "bcd_keys": [ 8973 + "api.CSSImportRule.layerName", 8974 + "api.CSSLayerBlockRule", 8975 + "api.CSSLayerBlockRule.name", 8976 + "api.CSSLayerStatementRule", 8977 + "api.CSSLayerStatementRule.nameList", 8978 + "css.at-rules.import.layer", 8979 + "css.at-rules.layer", 8980 + "css.types.global_keywords.revert-layer" 8981 + ], 8982 + "firefox_usage": null, 8983 + "firefox_observable": null 8984 + }, 8985 + { 8986 + "name": "starting-style", 8987 + "usage": 0, 8988 + "source": "custom_metrics", 8989 + "observable": "starting-style", 8990 + "observable_type": "css_atrule", 8991 + "bcd_key_count": 2, 8992 + "bcd_keys": [ 8993 + "api.CSSStartingStyleRule", 8994 + "css.at-rules.starting-style" 8995 + ], 8996 + "firefox_usage": null, 8997 + "firefox_observable": null 8998 + }, 8999 + { 9000 + "name": "counter-style", 9001 + "usage": 0, 9002 + "source": "custom_metrics", 9003 + "observable": "counter-style", 9004 + "observable_type": "css_atrule", 9005 + "bcd_key_count": 23, 9006 + "bcd_keys": [ 9007 + "api.CSSCounterStyleRule", 9008 + "api.CSSCounterStyleRule.additiveSymbols", 9009 + "api.CSSCounterStyleRule.fallback", 9010 + "api.CSSCounterStyleRule.name", 9011 + "api.CSSCounterStyleRule.negative", 9012 + "api.CSSCounterStyleRule.pad", 9013 + "api.CSSCounterStyleRule.prefix", 9014 + "api.CSSCounterStyleRule.range", 9015 + "api.CSSCounterStyleRule.speakAs", 9016 + "api.CSSCounterStyleRule.suffix", 9017 + "api.CSSCounterStyleRule.symbols", 9018 + "api.CSSCounterStyleRule.system", 9019 + "css.at-rules.counter-style", 9020 + "css.at-rules.counter-style.additive-symbols", 9021 + "css.at-rules.counter-style.fallback", 9022 + "css.at-rules.counter-style.negative", 9023 + "css.at-rules.counter-style.pad", 9024 + "css.at-rules.counter-style.prefix", 9025 + "css.at-rules.counter-style.range", 9026 + "css.at-rules.counter-style.speak-as", 9027 + "css.at-rules.counter-style.suffix", 9028 + "css.at-rules.counter-style.symbols", 9029 + "css.at-rules.counter-style.system" 9030 + ], 9031 + "firefox_usage": null, 9032 + "firefox_observable": null 9033 + }, 9034 + { 9035 + "name": "scope", 9036 + "usage": 0, 9037 + "source": "custom_metrics", 9038 + "observable": "scope", 9039 + "observable_type": "css_atrule", 9040 + "bcd_key_count": 4, 9041 + "bcd_keys": [ 9042 + "api.CSSScopeRule", 9043 + "api.CSSScopeRule.end", 9044 + "api.CSSScopeRule.start", 9045 + "css.at-rules.scope" 9046 + ], 9047 + "firefox_usage": null, 9048 + "firefox_observable": null 9049 + }, 9050 + { 9051 + "name": "has-slotted", 9052 + "usage": 0, 9053 + "source": "custom_metrics", 9054 + "observable": "has-slotted", 9055 + "observable_type": "css_selector", 9056 + "bcd_key_count": 1, 9057 + "bcd_keys": [ 9058 + "css.selectors.has-slotted" 9059 + ], 9060 + "firefox_usage": null, 9061 + "firefox_observable": null 9062 + }, 9063 + { 9064 + "name": "webxr-depth-sensing", 9065 + "usage": 0, 9066 + "source": "chrome_popularity", 9067 + "observable": null, 9068 + "observable_type": "blink_api", 9069 + "bcd_key_count": 14, 9070 + "bcd_keys": [ 9071 + "api.XRCPUDepthInformation", 9072 + "api.XRCPUDepthInformation.data", 9073 + "api.XRCPUDepthInformation.getDepthInMeters", 9074 + "api.XRDepthInformation", 9075 + "api.XRDepthInformation.height", 9076 + "api.XRDepthInformation.normDepthBufferFromNormView", 9077 + "api.XRDepthInformation.rawValueToMeters", 9078 + "api.XRDepthInformation.width", 9079 + "api.XRFrame.getDepthInformation", 9080 + "api.XRSession.depthDataFormat", 9081 + "api.XRSession.depthUsage", 9082 + "api.XRWebGLBinding.getDepthInformation", 9083 + "api.XRWebGLDepthInformation", 9084 + "api.XRWebGLDepthInformation.texture" 9085 + ], 9086 + "firefox_usage": null, 9087 + "firefox_observable": null 9088 + }, 9089 + { 9090 + "name": "text-decoration-selection", 9091 + "usage": 0, 9092 + "source": "chrome_popularity", 9093 + "observable": null, 9094 + "observable_type": "css_selector", 9095 + "bcd_key_count": 1, 9096 + "bcd_keys": [ 9097 + "css.selectors.selection.text-decoration" 9098 + ], 9099 + "firefox_usage": null, 9100 + "firefox_observable": null 9101 + }, 9102 + { 9103 + "name": "wasm-extended-constant-expressions", 9104 + "usage": 0, 9105 + "source": "chrome_popularity", 9106 + "observable": null, 9107 + "observable_type": "webassembly", 9108 + "bcd_key_count": 1, 9109 + "bcd_keys": [ 9110 + "webassembly.extended-constant-expressions" 9111 + ], 9112 + "firefox_usage": null, 9113 + "firefox_observable": null 9114 + }, 9115 + { 9116 + "name": "avif", 9117 + "usage": null, 9118 + "source": null, 9119 + "observable": null, 9120 + "observable_type": null, 9121 + "bcd_key_count": 0, 9122 + "bcd_keys": [], 9123 + "firefox_usage": null, 9124 + "firefox_observable": null 9125 + }, 9126 + { 9127 + "name": "draft_crash-report-storage-apiinitialize", 9128 + "usage": null, 9129 + "source": null, 9130 + "observable": null, 9131 + "observable_type": null, 9132 + "bcd_key_count": 0, 9133 + "bcd_keys": [], 9134 + "firefox_usage": null, 9135 + "firefox_observable": null 9136 + }, 9137 + { 9138 + "name": "draft_meta-text-scale", 9139 + "usage": null, 9140 + "source": null, 9141 + "observable": null, 9142 + "observable_type": null, 9143 + "bcd_key_count": 0, 9144 + "bcd_keys": [], 9145 + "firefox_usage": null, 9146 + "firefox_observable": null 9147 + }, 9148 + { 9149 + "name": "draft_reference-target", 9150 + "usage": null, 9151 + "source": null, 9152 + "observable": null, 9153 + "observable_type": null, 9154 + "bcd_key_count": 0, 9155 + "bcd_keys": [], 9156 + "firefox_usage": null, 9157 + "firefox_observable": null 9158 + }, 9159 + { 9160 + "name": "draft_wasm-branch-hinting", 9161 + "usage": null, 9162 + "source": null, 9163 + "observable": null, 9164 + "observable_type": null, 9165 + "bcd_key_count": 0, 9166 + "bcd_keys": [], 9167 + "firefox_usage": null, 9168 + "firefox_observable": null 9169 + }, 9170 + { 9171 + "name": "draft_wasm-custom-descriptors", 9172 + "usage": null, 9173 + "source": null, 9174 + "observable": null, 9175 + "observable_type": null, 9176 + "bcd_key_count": 0, 9177 + "bcd_keys": [], 9178 + "firefox_usage": null, 9179 + "firefox_observable": null 9180 + }, 9181 + { 9182 + "name": "draft_web-app-manifest-update", 9183 + "usage": null, 9184 + "source": null, 9185 + "observable": null, 9186 + "observable_type": null, 9187 + "bcd_key_count": 0, 9188 + "bcd_keys": [], 9189 + "firefox_usage": null, 9190 + "firefox_observable": null 9191 + }, 9192 + { 9193 + "name": "draft_web-install-api", 9194 + "usage": null, 9195 + "source": null, 9196 + "observable": null, 9197 + "observable_type": null, 9198 + "bcd_key_count": 0, 9199 + "bcd_keys": [], 9200 + "firefox_usage": null, 9201 + "firefox_observable": null 9202 + }, 9203 + { 9204 + "name": "float16-array", 9205 + "usage": null, 9206 + "source": null, 9207 + "observable": null, 9208 + "observable_type": null, 9209 + "bcd_key_count": 0, 9210 + "bcd_keys": [], 9211 + "firefox_usage": null, 9212 + "firefox_observable": null 9213 + }, 9214 + { 9215 + "name": "function", 9216 + "usage": null, 9217 + "source": null, 9218 + "observable": null, 9219 + "observable_type": null, 9220 + "bcd_key_count": 0, 9221 + "bcd_keys": [], 9222 + "firefox_usage": null, 9223 + "firefox_observable": null 9224 + }, 9225 + { 9226 + "name": "http3", 9227 + "usage": null, 9228 + "source": null, 9229 + "observable": null, 9230 + "observable_type": null, 9231 + "bcd_key_count": 0, 9232 + "bcd_keys": [], 9233 + "firefox_usage": null, 9234 + "firefox_observable": null 9235 + }, 9236 + { 9237 + "name": "intersection-observer-v2", 9238 + "usage": null, 9239 + "source": null, 9240 + "observable": null, 9241 + "observable_type": null, 9242 + "bcd_key_count": 0, 9243 + "bcd_keys": [], 9244 + "firefox_usage": null, 9245 + "firefox_observable": null 9246 + }, 9247 + { 9248 + "name": "jpegxl", 9249 + "usage": null, 9250 + "source": null, 9251 + "observable": null, 9252 + "observable_type": null, 9253 + "bcd_key_count": 0, 9254 + "bcd_keys": [], 9255 + "firefox_usage": null, 9256 + "firefox_observable": null 9257 + }, 9258 + { 9259 + "name": "obsolete_canvas-2d", 9260 + "usage": null, 9261 + "source": null, 9262 + "observable": null, 9263 + "observable_type": null, 9264 + "bcd_key_count": 0, 9265 + "bcd_keys": [], 9266 + "firefox_usage": null, 9267 + "firefox_observable": null 9268 + }, 9269 + { 9270 + "name": "obsolete_canvas-alpha", 9271 + "usage": null, 9272 + "source": null, 9273 + "observable": null, 9274 + "observable_type": null, 9275 + "bcd_key_count": 0, 9276 + "bcd_keys": [], 9277 + "firefox_usage": null, 9278 + "firefox_observable": null 9279 + }, 9280 + { 9281 + "name": "obsolete_canvas-color-management", 9282 + "usage": null, 9283 + "source": null, 9284 + "observable": null, 9285 + "observable_type": null, 9286 + "bcd_key_count": 0, 9287 + "bcd_keys": [], 9288 + "firefox_usage": null, 9289 + "firefox_observable": null 9290 + }, 9291 + { 9292 + "name": "obsolete_canvas-desynchronized", 9293 + "usage": null, 9294 + "source": null, 9295 + "observable": null, 9296 + "observable_type": null, 9297 + "bcd_key_count": 0, 9298 + "bcd_keys": [], 9299 + "firefox_usage": null, 9300 + "firefox_observable": null 9301 + }, 9302 + { 9303 + "name": "obsolete_canvas-element", 9304 + "usage": null, 9305 + "source": null, 9306 + "observable": null, 9307 + "observable_type": null, 9308 + "bcd_key_count": 0, 9309 + "bcd_keys": [], 9310 + "firefox_usage": null, 9311 + "firefox_observable": null 9312 + }, 9313 + { 9314 + "name": "obsolete_canvas-fill-text", 9315 + "usage": null, 9316 + "source": null, 9317 + "observable": null, 9318 + "observable_type": null, 9319 + "bcd_key_count": 0, 9320 + "bcd_keys": [], 9321 + "firefox_usage": null, 9322 + "firefox_observable": null 9323 + }, 9324 + { 9325 + "name": "obsolete_canvas-measure-text", 9326 + "usage": null, 9327 + "source": null, 9328 + "observable": null, 9329 + "observable_type": null, 9330 + "bcd_key_count": 0, 9331 + "bcd_keys": [], 9332 + "firefox_usage": null, 9333 + "firefox_observable": null 9334 + }, 9335 + { 9336 + "name": "obsolete_canvas-text-baselines", 9337 + "usage": null, 9338 + "source": null, 9339 + "observable": null, 9340 + "observable_type": null, 9341 + "bcd_key_count": 0, 9342 + "bcd_keys": [], 9343 + "firefox_usage": null, 9344 + "firefox_observable": null 9345 + }, 9346 + { 9347 + "name": "obsolete_element-check-visibility", 9348 + "usage": null, 9349 + "source": null, 9350 + "observable": null, 9351 + "observable_type": null, 9352 + "bcd_key_count": 0, 9353 + "bcd_keys": [], 9354 + "firefox_usage": null, 9355 + "firefox_observable": null 9356 + }, 9357 + { 9358 + "name": "obsolete_hidden-until-found-attribute", 9359 + "usage": null, 9360 + "source": null, 9361 + "observable": null, 9362 + "observable_type": null, 9363 + "bcd_key_count": 0, 9364 + "bcd_keys": [], 9365 + "firefox_usage": null, 9366 + "firefox_observable": null 9367 + }, 9368 + { 9369 + "name": "obsolete_locale-info-obsoleted-getters", 9370 + "usage": null, 9371 + "source": null, 9372 + "observable": null, 9373 + "observable_type": null, 9374 + "bcd_key_count": 0, 9375 + "bcd_keys": [], 9376 + "firefox_usage": null, 9377 + "firefox_observable": null 9378 + }, 9379 + { 9380 + "name": "obsolete_popover", 9381 + "usage": null, 9382 + "source": null, 9383 + "observable": null, 9384 + "observable_type": null, 9385 + "bcd_key_count": 0, 9386 + "bcd_keys": [], 9387 + "firefox_usage": null, 9388 + "firefox_observable": null 9389 + }, 9390 + { 9391 + "name": "obsolete_will-read-frequently", 9392 + "usage": null, 9393 + "source": null, 9394 + "observable": null, 9395 + "observable_type": null, 9396 + "bcd_key_count": 0, 9397 + "bcd_keys": [], 9398 + "firefox_usage": null, 9399 + "firefox_observable": null 9400 + }, 9401 + { 9402 + "name": "prompt", 9403 + "usage": null, 9404 + "source": null, 9405 + "observable": null, 9406 + "observable_type": null, 9407 + "bcd_key_count": 0, 9408 + "bcd_keys": [], 9409 + "firefox_usage": null, 9410 + "firefox_observable": null 9411 + }, 9412 + { 9413 + "name": "text-detect", 9414 + "usage": null, 9415 + "source": null, 9416 + "observable": null, 9417 + "observable_type": null, 9418 + "bcd_key_count": 0, 9419 + "bcd_keys": [], 9420 + "firefox_usage": null, 9421 + "firefox_observable": null 9422 + }, 9423 + { 9424 + "name": "translation-api", 9425 + "usage": null, 9426 + "source": null, 9427 + "observable": null, 9428 + "observable_type": null, 9429 + "bcd_key_count": 0, 9430 + "bcd_keys": [], 9431 + "firefox_usage": null, 9432 + "firefox_observable": null 9433 + }, 9434 + { 9435 + "name": "uint8-array-base64-hex", 9436 + "usage": null, 9437 + "source": null, 9438 + "observable": null, 9439 + "observable_type": null, 9440 + "bcd_key_count": 0, 9441 + "bcd_keys": [], 9442 + "firefox_usage": null, 9443 + "firefox_observable": null 9444 + }, 9445 + { 9446 + "name": "view-transitions-element-scoped", 9447 + "usage": null, 9448 + "source": null, 9449 + "observable": null, 9450 + "observable_type": null, 9451 + "bcd_key_count": 0, 9452 + "bcd_keys": [], 9453 + "firefox_usage": null, 9454 + "firefox_observable": null 9455 + }, 9456 + { 9457 + "name": "webp", 9458 + "usage": null, 9459 + "source": null, 9460 + "observable": null, 9461 + "observable_type": null, 9462 + "bcd_key_count": 0, 9463 + "bcd_keys": [], 9464 + "firefox_usage": null, 9465 + "firefox_observable": null 9466 + } 9467 + ] 9468 + }
+13
package.json
··· 1 1 { 2 + "type": "module", 3 + "scripts": { 4 + "collect": "node data/collect-httparchive.mjs", 5 + "collect:dry": "node data/collect-httparchive.mjs --dry-run", 6 + "collect:reprocess": "node data/collect-httparchive.mjs --reprocess", 7 + "collect:firefox": "node data/collect-firefox.mjs", 8 + "collect:firefox:dry": "node data/collect-firefox.mjs --dry-run", 9 + "collect:firefox:reprocess": "node data/collect-firefox.mjs --reprocess", 10 + "integrate": "node data/integrate-usage.mjs", 11 + "usage-report": "node data/build-usage-report.mjs", 12 + "usage-json": "node data/build-usage-json.mjs" 13 + }, 2 14 "dependencies": { 15 + "@google-cloud/bigquery": "^8.1.1", 3 16 "puppeteer": "^24.37.3" 4 17 } 5 18 }
+497
web-feature-usage.html
··· 1 + <!DOCTYPE html> 2 + <html lang="en"> 3 + <head> 4 + <meta charset="UTF-8"> 5 + <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 + <title>Servo BWA Feature Usage &amp; Prioritization Report</title> 7 + <link rel="preconnect" href="https://fonts.googleapis.com"> 8 + <link href="https://fonts.googleapis.com/css2?family=Pragati+Narrow:wght@400;700&display=swap" rel="stylesheet"> 9 + <script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.7/dist/chart.umd.min.js"></script> 10 + <style> 11 + * { margin: 0; padding: 0; box-sizing: border-box; } 12 + body { 13 + font-family: "Pragati Narrow", sans-serif; 14 + background: rgb(247, 226, 231); color: #1d1d1d; 15 + padding: 24px; font-size: 1.1rem; line-height: 1.3; 16 + } 17 + h1 { font-size: 28px; margin-bottom: 8px; color: rgb(71, 11, 0); } 18 + h2 { font-size: 20px; margin-bottom: 12px; color: rgb(71, 11, 0); font-weight: 700; } 19 + .byline { font-size: 13px; color: #1d1d1d; } 20 + .byline a { color: rgb(71, 11, 0); } 21 + .subtitle { color: #666; margin-bottom: 24px; font-size: 14px; } 22 + a { color: rgb(71, 11, 0); } 23 + 24 + .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; margin-bottom: 24px; } 25 + .card { background: #fff; border-radius: 12px; padding: 20px; border: 1px solid rgba(71, 11, 0, 0.15); } 26 + .card.full { grid-column: 1 / -1; } 27 + .card h3 { 28 + font-size: 15px; color: rgb(71, 11, 0); margin-bottom: 16px; 29 + font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; 30 + } 31 + 32 + .metric { display: flex; gap: 32px; margin-bottom: 20px; flex-wrap: wrap; } 33 + .metric-item { text-align: center; } 34 + .metric-value { font-size: 36px; font-weight: 700; color: rgb(71, 11, 0); } 35 + .metric-label { font-size: 12px; color: #666; margin-top: 4px; } 36 + 37 + .chart-container { position: relative; height: 300px; } 38 + .chart-container.tall { height: 500px; } 39 + canvas { max-width: 100%; } 40 + 41 + .notes { 42 + background: #fff; border-radius: 12px; padding: 20px; 43 + border: 1px solid rgba(71, 11, 0, 0.15); margin-bottom: 24px; 44 + border-left: 3px solid rgb(71, 11, 0); 45 + } 46 + .notes h3 { 47 + font-size: 15px; color: rgb(71, 11, 0); margin-bottom: 12px; 48 + font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; 49 + } 50 + .notes p, .notes li { 51 + font-size: 13px; line-height: 1.6; color: #1d1d1d; margin-bottom: 8px; 52 + } 53 + .notes ul { margin-left: 20px; } 54 + .notes strong { color: rgb(71, 11, 0); } 55 + .notes code { 56 + background: rgba(71, 11, 0, 0.06); padding: 1px 5px; border-radius: 3px; 57 + font-family: monospace; font-size: 12px; 58 + } 59 + 60 + /* Table styles */ 61 + .feature-table-wrap { 62 + max-height: 800px; overflow-y: auto; border: 1px solid rgba(71, 11, 0, 0.15); 63 + border-radius: 8px; background: #fff; 64 + } 65 + table.ftable { width: 100%; border-collapse: collapse; font-size: 13px; } 66 + table.ftable thead { position: sticky; top: 0; z-index: 1; } 67 + table.ftable th { 68 + text-align: left; padding: 8px 10px; background: rgba(71, 11, 0, 0.05); 69 + border-bottom: 2px solid rgba(71, 11, 0, 0.2); color: rgb(71, 11, 0); 70 + font-weight: 700; cursor: pointer; user-select: none; white-space: nowrap; 71 + } 72 + table.ftable th:hover { background: rgba(71, 11, 0, 0.1); } 73 + table.ftable th .sort-arrow { font-size: 10px; margin-left: 4px; color: #999; } 74 + table.ftable td { 75 + padding: 5px 10px; border-bottom: 1px solid rgba(71, 11, 0, 0.08); 76 + } 77 + table.ftable tr:hover td { background: rgba(71, 11, 0, 0.03); } 78 + 79 + .tier-high { color: #1f6e1f; font-weight: 700; } 80 + .tier-med { color: #8a5a00; font-weight: 700; } 81 + .tier-low { color: #666; } 82 + .tier-vlow { color: #999; } 83 + .tier-none { color: #ccc; font-style: italic; } 84 + 85 + .source-tag { 86 + display: inline-block; padding: 1px 6px; border-radius: 4px; 87 + font-size: 11px; font-weight: 600; 88 + } 89 + .source-tag.custom_metrics { background: rgba(31, 110, 31, 0.12); color: #1f6e1f; } 90 + .source-tag.blink_features { background: rgba(138, 90, 0, 0.12); color: #8a5a00; } 91 + .source-tag.chrome_popularity { background: rgba(100, 100, 180, 0.12); color: #4a4a8a; } 92 + .source-tag.firefox_use_counters { background: rgba(184, 110, 0, 0.12); color: #b86e00; } 93 + .source-tag.none { background: rgba(0,0,0,0.05); color: #999; } 94 + 95 + .filter-bar { 96 + display: flex; gap: 12px; align-items: center; margin-bottom: 16px; flex-wrap: wrap; 97 + } 98 + .filter-bar input[type="text"] { 99 + padding: 6px 12px; border: 1px solid rgba(71, 11, 0, 0.2); border-radius: 6px; 100 + font-family: inherit; font-size: 13px; flex: 1; min-width: 200px; 101 + } 102 + .filter-bar select { 103 + padding: 6px 8px; border: 1px solid rgba(71, 11, 0, 0.2); border-radius: 6px; 104 + font-family: inherit; font-size: 13px; background: #fff; 105 + } 106 + .filter-bar .count { font-size: 12px; color: #666; } 107 + 108 + @media (max-width: 900px) { .grid { grid-template-columns: 1fr; } } 109 + 110 + .footer { 111 + font-size: 11px; color: #686868; text-align: center; margin-top: 24px; 112 + padding-top: 12px; border-top: 1px solid rgba(71, 11, 0, 0.15); 113 + } 114 + </style> 115 + </head> 116 + <body> 117 + 118 + <div style="background:#a33;color:#fff;text-align:center;padding:6px;font-size:13px;font-weight:700;letter-spacing:0.1em;text-transform:uppercase;margin-bottom:10px;">DRAFT &mdash; Do not circulate without permission</div> 119 + 120 + <h1>Web Feature Usage &amp; Prioritization</h1> 121 + <div class="byline">Servo Baseline Readiness Project &mdash; <a href="https://webtransitions.org">webtransitions.org</a></div> 122 + <p class="subtitle">Data as of 2026-02-01 (HTTP Archive) &mdash; 415 Baseline "Widely Available" features analyzed</p> 123 + 124 + <!-- Summary metrics --> 125 + <div class="metric"> 126 + <div class="metric-item"> 127 + <div class="metric-value">415</div> 128 + <div class="metric-label">Total BWA Features</div> 129 + </div> 130 + <div class="metric-item"> 131 + <div class="metric-value" style="color:#1f6e1f">383</div> 132 + <div class="metric-label">With Usage Data<br>(92.3%)</div> 133 + </div> 134 + <div class="metric-item"> 135 + <div class="metric-value" style="color:#1f6e1f">107</div> 136 + <div class="metric-label">HTTP Archive<br>(page content scanning)</div> 137 + </div> 138 + <div class="metric-item"> 139 + <div class="metric-value" style="color:#8a5a00">46</div> 140 + <div class="metric-label">web.dev<br>(UseCounters via HA)</div> 141 + </div> 142 + <div class="metric-item"> 143 + <div class="metric-value" style="color:#4a4a8a">230</div> 144 + <div class="metric-label">ChromeStatus<br>(UseCounters, all Chrome traffic)</div> 145 + </div> 146 + <div class="metric-item"> 147 + <div class="metric-value" style="color:#b86e00">83</div> 148 + <div class="metric-label">Firefox<br>(use-counter telemetry)</div> 149 + </div> 150 + <div class="metric-item"> 151 + <div class="metric-value" style="color:#999">32</div> 152 + <div class="metric-label">No Usage Data</div> 153 + </div> 154 + </div> 155 + 156 + <!-- Usage tier summary --> 157 + <div class="grid"> 158 + <div class="card"> 159 + <h3>Usage Tier Distribution</h3> 160 + <table style="width:100%;border-collapse:collapse;font-size:14px;"> 161 + <tr style="border-bottom:1px solid rgba(71,11,0,0.15);"> 162 + <td style="padding:6px 0;"><span class="tier-high">&gt;50%</span></td> 163 + <td style="text-align:right;font-weight:700;">26 features</td> 164 + <td style="text-align:right;color:#666;">6.3%</td> 165 + </tr> 166 + <tr style="border-bottom:1px solid rgba(71,11,0,0.15);"> 167 + <td style="padding:6px 0;"><span class="tier-med">10&ndash;50%</span></td> 168 + <td style="text-align:right;font-weight:700;">62 features</td> 169 + <td style="text-align:right;color:#666;">14.9%</td> 170 + </tr> 171 + <tr style="border-bottom:1px solid rgba(71,11,0,0.15);"> 172 + <td style="padding:6px 0;"><span class="tier-low">1&ndash;10%</span></td> 173 + <td style="text-align:right;font-weight:700;">83 features</td> 174 + <td style="text-align:right;color:#666;">20.0%</td> 175 + </tr> 176 + <tr style="border-bottom:1px solid rgba(71,11,0,0.15);"> 177 + <td style="padding:6px 0;"><span class="tier-vlow">&lt;1%</span></td> 178 + <td style="text-align:right;font-weight:700;">212 features</td> 179 + <td style="text-align:right;color:#666;">51.1%</td> 180 + </tr> 181 + <tr> 182 + <td style="padding:6px 0;"><span class="tier-none">No data</span></td> 183 + <td style="text-align:right;font-weight:700;">32 features</td> 184 + <td style="text-align:right;color:#666;">7.7%</td> 185 + </tr> 186 + </table> 187 + </div> 188 + 189 + <div class="card"> 190 + <h3>Data Source Coverage</h3> 191 + <table style="width:100%;border-collapse:collapse;font-size:14px;"> 192 + <tr style="border-bottom:1px solid rgba(71,11,0,0.15);"> 193 + <td style="padding:6px 0;"><span class="source-tag custom_metrics">HTTP Archive</span></td> 194 + <td style="text-align:right;font-weight:700;">107</td> 195 + <td style="color:#666;">Static analysis of CSS properties, HTML elements, selectors, at-rules in ~10.9M crawled pages</td> 196 + </tr> 197 + <tr style="border-bottom:1px solid rgba(71,11,0,0.15);"> 198 + <td style="padding:6px 0;"><span class="source-tag blink_features">web.dev</span></td> 199 + <td style="text-align:right;font-weight:700;">46</td> 200 + <td style="color:#666;">Blink UseCounter data published by Google, queried via HTTP Archive&rsquo;s BigQuery mirror (<code>httparchive.blink_features.usage</code>)</td> 201 + </tr> 202 + <tr style="border-bottom:1px solid rgba(71,11,0,0.15);"> 203 + <td style="padding:6px 0;"><span class="source-tag chrome_popularity">ChromeStatus</span></td> 204 + <td style="text-align:right;font-weight:700;">230</td> 205 + <td style="color:#666;">Usage percentages from chromestatus.com (<code>day_percentage</code>) &mdash; aggregated across all Chrome page loads globally</td> 206 + </tr> 207 + <tr style="border-bottom:1px solid rgba(71,11,0,0.15);"> 208 + <td style="padding:6px 0;"><span class="source-tag firefox_use_counters">Firefox</span></td> 209 + <td style="text-align:right;font-weight:700;">83</td> 210 + <td style="color:#666;">Firefox use-counter telemetry &mdash; fraction of Firefox page loads triggering CSS/API use-counters (public Mozilla data)</td> 211 + </tr> 212 + <tr> 213 + <td style="padding:6px 0;"><span class="source-tag none">none</span></td> 214 + <td style="text-align:right;font-weight:700;">32</td> 215 + <td style="color:#666;">No usage signal available</td> 216 + </tr> 217 + </table> 218 + <p style="font-size:12px;color:#888;margin-top:12px;line-height:1.5;"> 219 + <strong>Note:</strong> web.dev and ChromeStatus both report Blink UseCounter data, but with different denominators. 220 + web.dev data is queried via HTTP Archive&rsquo;s BigQuery tables (denominator = ~10.9M crawled pages). 221 + ChromeStatus aggregates across all real Chrome user traffic globally (denominator = all Chrome page loads). 222 + HTTP Archive page scanning is an independent measurement &mdash; direct content analysis, not UseCounters. 223 + Firefox use-counters provide an independent non-Chrome signal (denominator = all Firefox page loads). 224 + Values across sources are <em>not directly comparable</em>. 225 + </p> 226 + </div> 227 + </div> 228 + 229 + <!-- Charts --> 230 + <div class="grid"> 231 + <div class="card"> 232 + <h3>Usage Distribution Histogram</h3> 233 + <div class="chart-container"><canvas id="histogram"></canvas></div> 234 + </div> 235 + <div class="card"> 236 + <h3>Top 30 Features by Usage</h3> 237 + <div style="font-size:11px;margin-bottom:8px;display:flex;gap:16px;"> 238 + <span><span style="display:inline-block;width:12px;height:12px;border-radius:2px;background:rgba(31,110,31,0.7);vertical-align:middle;margin-right:4px;"></span>HTTP Archive</span> 239 + <span><span style="display:inline-block;width:12px;height:12px;border-radius:2px;background:rgba(138,90,0,0.7);vertical-align:middle;margin-right:4px;"></span>web.dev</span> 240 + <span><span style="display:inline-block;width:12px;height:12px;border-radius:2px;background:rgba(74,74,138,0.7);vertical-align:middle;margin-right:4px;"></span>ChromeStatus</span> 241 + </div> 242 + <div class="chart-container tall"><canvas id="topChart"></canvas></div> 243 + </div> 244 + </div> 245 + 246 + <!-- Normalization notes --> 247 + <div class="notes"> 248 + <h3>Data Quality &amp; Normalization Notes</h3> 249 + <ul> 250 + <li><strong>Observable selection:</strong> Each BWA feature maps to multiple BCD keys and HTTP Archive observables. The representative observable is chosen as the one with the <strong>highest usage percentage</strong> among all queryable observables for that feature. This means the reported usage is an upper bound for the feature.</li> 251 + <li><strong>Source priority:</strong> HTTP Archive &gt; web.dev &gt; ChromeStatus. 252 + <strong>HTTP Archive</strong> is preferred because it directly analyzes page content (CSS properties, selectors, at-rules, HTML elements) &mdash; ground truth for what&rsquo;s on the page. 253 + <strong>web.dev</strong> provides Blink UseCounter data published by Google and queryable via HTTP Archive&rsquo;s BigQuery mirror. Covers JS API features that can&rsquo;t be detected by static page analysis. 254 + <strong>ChromeStatus</strong> provides usage percentages aggregated across all real Chrome user traffic globally (chromestatus.com <code>day_percentage</code>). This is the fallback source, with a different denominator (all Chrome page loads vs. crawled pages).</li> 255 + <li><strong>Scale normalization:</strong> All usage values are on a 0&ndash;1 scale. HTTP Archive and web.dev values = fraction of ~10.9M crawled pages. ChromeStatus = fraction of all Chrome page loads globally. The different denominators mean values across sources are <em>not directly comparable</em>.</li> 256 + <li><strong>Specific vs generic filtering:</strong> When multiple observables map to the same HTTP Archive path, only the most specific match is kept. For example, <code>css.properties.display.flex</code> is preferred over <code>css.properties.display</code> when measuring flexbox usage.</li> 257 + <li><strong>ChromeStatus integration:</strong> Chrome popularity data is already integrated as a fallback. It covers features that HTTP Archive cannot directly observe (e.g., JS APIs not detectable via static analysis). The different denominator means these values are not directly comparable to HA values, but both reflect real-world usage signals.</li> 258 + <li><strong>Firefox use-counters:</strong> 83 features have Firefox telemetry data, shown in the &ldquo;Firefox %&rdquo; column. This is an independent, non-Chrome signal from public Mozilla telemetry. The denominator is all Firefox page loads (traffic-weighted, like ChromeStatus). Firefox data is supplementary &mdash; it does not affect the primary usage ranking but enables cross-browser validation.</li> 259 + <li><strong>Coverage gap:</strong> 32 BWA features (7.7%) have no usage data from any source. Many of these are fundamental features (e.g., core HTML elements, basic CSS) that are universally used but not tracked by use counters, or JS built-ins provided by SpiderMonkey.</li> 260 + </ul> 261 + </div> 262 + 263 + <!-- Feature table --> 264 + <div class="card full" style="grid-column:auto;"> 265 + <h3>Full Prioritized Feature Table</h3> 266 + <div class="filter-bar"> 267 + <input type="text" id="searchBox" placeholder="Filter by feature name..."> 268 + <select id="sourceFilter"> 269 + <option value="all">All sources</option> 270 + <option value="custom_metrics">HTTP Archive</option> 271 + <option value="blink_features">web.dev</option> 272 + <option value="chrome_popularity">ChromeStatus</option> 273 + <option value="none">No data</option> 274 + </select> 275 + <select id="tierFilter"> 276 + <option value="all">All tiers</option> 277 + <option value="high">&gt;50%</option> 278 + <option value="med">10-50%</option> 279 + <option value="low">1-10%</option> 280 + <option value="vlow">&lt;1%</option> 281 + <option value="none">No data</option> 282 + </select> 283 + <span class="count" id="rowCount"></span> 284 + </div> 285 + <div class="feature-table-wrap"> 286 + <table class="ftable" id="featureTable"> 287 + <thead> 288 + <tr> 289 + <th data-col="rank"># <span class="sort-arrow"></span></th> 290 + <th data-col="name">Feature <span class="sort-arrow"></span></th> 291 + <th data-col="usage">Usage % <span class="sort-arrow"></span></th> 292 + <th data-col="firefox">Firefox % <span class="sort-arrow"></span></th> 293 + <th data-col="source">Source <span class="sort-arrow"></span></th> 294 + <th data-col="type">Observable Type <span class="sort-arrow"></span></th> 295 + <th data-col="bcd">BCD Keys <span class="sort-arrow"></span></th> 296 + </tr> 297 + </thead> 298 + <tbody id="featureBody"></tbody> 299 + </table> 300 + </div> 301 + </div> 302 + 303 + <div class="footer"> 304 + Servo Baseline Readiness &mdash; Web Feature Usage Report &mdash; Generated 2026-02-25 &mdash; <a href="https://webtransitions.org">webtransitions.org</a> 305 + </div> 306 + 307 + <script> 308 + // Embedded data 309 + const features = [{"name":"overflow-shorthand","usage":0.9575161742804598,"source":"custom_metrics","observable":"overflow","observableType":"css_property","bcdKeyCount":17,"popularity":0.14706705,"firefoxUsage":0.8063506878784442},{"name":"outline","usage":0.9238862061213736,"source":"custom_metrics","observable":"outline","observableType":"css_property","bcdKeyCount":1,"popularity":0.77425712,"firefoxUsage":0.7837416631916435},{"name":"not","usage":0.8798817078194864,"source":"custom_metrics","observable":"not","observableType":"css_selector","bcdKeyCount":2,"popularity":0.83249479,"firefoxUsage":null},{"name":"flexbox","usage":0.877012225315162,"source":"custom_metrics","observable":"align-items","observableType":"css_property","bcdKeyCount":74,"popularity":0.82612114,"firefoxUsage":0.7430886553448814},{"name":"slot","usage":0.8186960228291648,"source":"blink_features","observable":"api.HTMLSlotElement","observableType":"blink_api","bcdKeyCount":12,"popularity":0.6054261,"firefoxUsage":null},{"name":"slot-assign","usage":0.8186960228291648,"source":"blink_features","observable":"api.HTMLSlotElement.assign","observableType":"blink_api","bcdKeyCount":2,"popularity":0.00026427,"firefoxUsage":null},{"name":"ua-client-hints","usage":0.74314817,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":26,"popularity":0.74314817,"firefoxUsage":null},{"name":"intersection-observer","usage":0.7126436781609196,"source":"blink_features","observable":"api.IntersectionObserver","observableType":"blink_api","bcdKeyCount":23,"popularity":0.53644874,"firefoxUsage":null},{"name":"text-indent","usage":0.700350456135601,"source":"custom_metrics","observable":"text-indent","observableType":"css_property","bcdKeyCount":1,"popularity":0.36534817,"firefoxUsage":0.5356411530621198},{"name":"grid","usage":0.6608178847582399,"source":"custom_metrics","observable":"gap","observableType":"css_property","bcdKeyCount":62,"popularity":0.39705513,"firefoxUsage":0.538874478177919},{"name":"appearance","usage":0.6496636388713634,"source":"custom_metrics","observable":"appearance","observableType":"css_property","bcdKeyCount":14,"popularity":0.46656152,"firefoxUsage":0.5277942372604344},{"name":"request-animation-frame","usage":0.61653786,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":2,"popularity":0.61653786,"firefoxUsage":null},{"name":"beforeunload","usage":0.57920782,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":4,"popularity":0.57920782,"firefoxUsage":null},{"name":"flexbox-gap","usage":0.559277,"source":"chrome_popularity","observable":null,"observableType":"css_property","bcdKeyCount":3,"popularity":0.559277,"firefoxUsage":null},{"name":"canvas","usage":0.535303776683087,"source":"blink_features","observable":"api.HTMLCanvasElement","observableType":"blink_api","bcdKeyCount":9,"popularity":0.47806843,"firefoxUsage":null},{"name":"canvas-2d","usage":0.535303776683087,"source":"blink_features","observable":"api.HTMLCanvasElement.getContext.2d_context","observableType":"blink_api","bcdKeyCount":117,"popularity":0.33874604,"firefoxUsage":null},{"name":"canvas-2d-alpha","usage":0.535303776683087,"source":"blink_features","observable":"api.HTMLCanvasElement.getContext.2d_context.options_alpha_parameter","observableType":"blink_api","bcdKeyCount":1,"popularity":0.33803192,"firefoxUsage":null},{"name":"offscreen-canvas","usage":0.535303776683087,"source":"blink_features","observable":"api.HTMLCanvasElement.transferControlToOffscreen","observableType":"blink_api","bcdKeyCount":80,"popularity":0.08091865,"firefoxUsage":null},{"name":"canvas-2d-willreadfrequently","usage":0.535303776683087,"source":"blink_features","observable":"api.HTMLCanvasElement.getContext.2d_context.options_willReadFrequently_parameter","observableType":"blink_api","bcdKeyCount":1,"popularity":0.04049436,"firefoxUsage":null},{"name":"webgpu","usage":0.535303776683087,"source":"blink_features","observable":"api.HTMLCanvasElement.getContext.webgpu_context","observableType":"blink_api","bcdKeyCount":300,"popularity":0.01330171,"firefoxUsage":null},{"name":"canvas-2d-desynchronized","usage":0.535303776683087,"source":"blink_features","observable":"api.HTMLCanvasElement.getContext.2d_context.options_desynchronized_parameter","observableType":"blink_api","bcdKeyCount":1,"popularity":0.00317185,"firefoxUsage":null},{"name":"webgl2-desynchronized","usage":0.535303776683087,"source":"blink_features","observable":"api.HTMLCanvasElement.getContext.webgl2_context.options_desynchronized_parameter","observableType":"blink_api","bcdKeyCount":1,"popularity":0.00198243,"firefoxUsage":null},{"name":"webgl-desynchronized","usage":0.535303776683087,"source":"blink_features","observable":"api.HTMLCanvasElement.getContext.webgl_context.options_desynchronized_parameter","observableType":"blink_api","bcdKeyCount":1,"popularity":0.00081102,"firefoxUsage":null},{"name":"canvas-context-lost","usage":0.535303776683087,"source":"blink_features","observable":"api.HTMLCanvasElement.contextlost_event","observableType":"blink_api","bcdKeyCount":6,"popularity":0.00075565,"firefoxUsage":null},{"name":"canvas-2d-color-management","usage":0.535303776683087,"source":"blink_features","observable":"api.HTMLCanvasElement.getContext.2d_context.options_colorSpace_parameter","observableType":"blink_api","bcdKeyCount":1,"popularity":0.0004229,"firefoxUsage":null},{"name":"focus-visible","usage":0.5063683718253383,"source":"custom_metrics","observable":"focus-visible","observableType":"css_selector","bcdKeyCount":1,"popularity":0.53702473,"firefoxUsage":null},{"name":"remote-playback","usage":0.4729064039408867,"source":"blink_features","observable":"api.HTMLMediaElement.disableRemotePlayback","observableType":"blink_api","bcdKeyCount":12,"popularity":0.00297394,"firefoxUsage":0.005795596476471643},{"name":"preserves-pitch","usage":0.4729064039408867,"source":"blink_features","observable":"api.HTMLMediaElement.preservesPitch","observableType":"blink_api","bcdKeyCount":1,"popularity":0.00010409,"firefoxUsage":null},{"name":"aborting","usage":0.47132189,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":13,"popularity":0.47132189,"firefoxUsage":null},{"name":"clip-path","usage":0.458419918523108,"source":"custom_metrics","observable":"clip-path","observableType":"css_property","bcdKeyCount":12,"popularity":0.42760881,"firefoxUsage":0.42532172060029144},{"name":"requestidlecallback","usage":0.4484389,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":5,"popularity":0.4484389,"firefoxUsage":null},{"name":"background-clip-text","usage":0.43783789,"source":"chrome_popularity","observable":null,"observableType":"css_property","bcdKeyCount":1,"popularity":0.43783789,"firefoxUsage":null},{"name":"logical-properties","usage":0.43079710809405064,"source":"custom_metrics","observable":"inset","observableType":"css_property","bcdKeyCount":86,"popularity":0.33723293,"firefoxUsage":0.31312940289211894},{"name":"layout-instability","usage":0.41411571,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":11,"popularity":0.41411571,"firefoxUsage":null},{"name":"nullish-coalescing","usage":0.40702124,"source":"chrome_popularity","observable":null,"observableType":"js_operators","bcdKeyCount":2,"popularity":0.40702124,"firefoxUsage":null},{"name":"will-change","usage":0.39817534415545003,"source":"custom_metrics","observable":"will-change","observableType":"css_property","bcdKeyCount":4,"popularity":0.37383549,"firefoxUsage":0.3273864871503988},{"name":"scrollbar-width","usage":0.3914532264142132,"source":"custom_metrics","observable":"scrollbar-width","observableType":"css_property","bcdKeyCount":4,"popularity":0.38189097,"firefoxUsage":0.4195911256037384},{"name":"is","usage":0.3881473753508862,"source":"custom_metrics","observable":"is","observableType":"css_selector","bcdKeyCount":2,"popularity":0.28952303,"firefoxUsage":null},{"name":"where","usage":0.3850358860200786,"source":"custom_metrics","observable":"where","observableType":"css_selector","bcdKeyCount":2,"popularity":0.29521406,"firefoxUsage":null},{"name":"zstd","usage":0.37684414,"source":"chrome_popularity","observable":null,"observableType":"http","bcdKeyCount":2,"popularity":0.37684414,"firefoxUsage":null},{"name":"has","usage":0.3711455449851932,"source":"custom_metrics","observable":"has","observableType":"css_selector","bcdKeyCount":1,"popularity":0.4648451,"firefoxUsage":null},{"name":"referrer-policy","usage":0.34388238,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":56,"popularity":0.34388238,"firefoxUsage":null},{"name":"fetch-priority","usage":0.34052556,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":12,"popularity":0.34052556,"firefoxUsage":null},{"name":"template","usage":0.33825944170771755,"source":"blink_features","observable":"api.HTMLTemplateElement","observableType":"blink_api","bcdKeyCount":3,"popularity":0.31742914,"firefoxUsage":null},{"name":"declarative-shadow-dom","usage":0.33825944170771755,"source":"blink_features","observable":"api.HTMLTemplateElement.shadowRootClonable","observableType":"blink_api","bcdKeyCount":8,"popularity":0.00259946,"firefoxUsage":null},{"name":"masks","usage":0.3208719354703923,"source":"custom_metrics","observable":"mask-image","observableType":"css_property","bcdKeyCount":28,"popularity":0.35352348,"firefoxUsage":0.20986158177318934},{"name":"string-replaceall","usage":0.31667797,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":1,"popularity":0.31667797,"firefoxUsage":null},{"name":"backdrop-filter","usage":0.30837606423919955,"source":"custom_metrics","observable":"backdrop-filter","observableType":"css_property","bcdKeyCount":1,"popularity":0.30397541,"firefoxUsage":0.3011676122707288},{"name":"js-modules","usage":0.30317967,"source":"chrome_popularity","observable":null,"observableType":"js_operators","bcdKeyCount":15,"popularity":0.30317967,"firefoxUsage":null},{"name":"aspect-ratio","usage":0.27891107137745563,"source":"custom_metrics","observable":"aspect-ratio","observableType":"css_property","bcdKeyCount":4,"popularity":0.32116127,"firefoxUsage":0.30242028597984927},{"name":"barprop","usage":0.2581453634085213,"source":"blink_features","observable":"api.BarProp","observableType":"blink_api","bcdKeyCount":9,"popularity":0.13311616,"firefoxUsage":null},{"name":"quotes","usage":0.2555461630857534,"source":"custom_metrics","observable":"quotes","observableType":"css_property","bcdKeyCount":3,"popularity":0.08592328,"firefoxUsage":0.18226455119275337},{"name":"contain-intrinsic-size","usage":0.25382914355863856,"source":"custom_metrics","observable":"contain-intrinsic-size","observableType":"css_property","bcdKeyCount":11,"popularity":0.07224658,"firefoxUsage":0.038033493872670625},{"name":"scrollend","usage":0.2420052,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":2,"popularity":0.2420052,"firefoxUsage":null},{"name":"prefers-contrast","usage":0.2347656,"source":"chrome_popularity","observable":null,"observableType":"css_atrule","bcdKeyCount":1,"popularity":0.2347656,"firefoxUsage":null},{"name":"attribution-reporting","usage":0.22759915,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":18,"popularity":0.22759915,"firefoxUsage":null},{"name":"structured-clone","usage":0.22604681,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":1,"popularity":0.22604681,"firefoxUsage":null},{"name":"reporting","usage":0.22305764411027568,"source":"blink_features","observable":"api.ReportingObserver","observableType":"blink_api","bcdKeyCount":22,"popularity":0.2435557,"firefoxUsage":0.03560495218443147},{"name":"beforeinstallprompt","usage":0.21839080459770116,"source":"blink_features","observable":"api.BeforeInstallPromptEvent","observableType":"blink_api","bcdKeyCount":7,"popularity":0.13545407,"firefoxUsage":0.0015969816761600565},{"name":"compression-streams","usage":0.2157301,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":14,"popularity":0.2157301,"firefoxUsage":null},{"name":"manifest","usage":0.21375105,"source":"chrome_popularity","observable":null,"observableType":"html_element","bcdKeyCount":16,"popularity":0.21375105,"firefoxUsage":null},{"name":"scheduler","usage":0.21334586466165414,"source":"blink_features","observable":"api.Scheduler","observableType":"blink_api","bcdKeyCount":14,"popularity":0.10098207,"firefoxUsage":0.00000853933091549038},{"name":"device-posture","usage":0.20676691729323307,"source":"blink_features","observable":"api.DevicePosture","observableType":"blink_api","bcdKeyCount":5,"popularity":0.01046461,"firefoxUsage":null},{"name":"scroll-snap","usage":0.2030726547978704,"source":"custom_metrics","observable":"scroll-snap-type","observableType":"css_property","bcdKeyCount":44,"popularity":0.15407488,"firefoxUsage":0.19465274034125996},{"name":"logical-assignments","usage":0.20278456,"source":"chrome_popularity","observable":null,"observableType":"js_operators","bcdKeyCount":2,"popularity":0.20278456,"firefoxUsage":null},{"name":"view-transitions","usage":0.19987468671679198,"source":"blink_features","observable":"api.ViewTransition","observableType":"blink_api","bcdKeyCount":25,"popularity":0.00599659,"firefoxUsage":0.00002122324310054048},{"name":"active-view-transition","usage":0.19987468671679198,"source":"blink_features","observable":"api.ViewTransition.types","observableType":"blink_api","bcdKeyCount":14,"popularity":0.0008697,"firefoxUsage":null},{"name":"broadcast-channel","usage":0.18719211822660098,"source":"blink_features","observable":"api.BroadcastChannel","observableType":"blink_api","bcdKeyCount":7,"popularity":0.14206369,"firefoxUsage":null},{"name":"overflow-clip","usage":0.18427132,"source":"chrome_popularity","observable":null,"observableType":"css_property","bcdKeyCount":4,"popularity":0.18427132,"firefoxUsage":null},{"name":"scrollbar-color","usage":0.1755639468061433,"source":"custom_metrics","observable":"scrollbar-color","observableType":"css_property","bcdKeyCount":2,"popularity":0.15974709,"firefoxUsage":0.15183089845968892},{"name":"hyphens","usage":0.17118523032337973,"source":"custom_metrics","observable":"hyphens","observableType":"css_property","bcdKeyCount":65,"popularity":0.10514599,"firefoxUsage":0.16177519202724724},{"name":"aria-attribute-reflection","usage":0.163643,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":103,"popularity":0.163643,"firefoxUsage":null},{"name":"display-mode","usage":0.15434049,"source":"chrome_popularity","observable":null,"observableType":"css_atrule","bcdKeyCount":2,"popularity":0.15434049,"firefoxUsage":null},{"name":"line-break","usage":0.15422215886349055,"source":"custom_metrics","observable":"line-break","observableType":"css_property","bcdKeyCount":6,"popularity":0.05248045,"firefoxUsage":0.15049230910709957},{"name":"web-animations","usage":0.15133355,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":63,"popularity":0.15133355,"firefoxUsage":null},{"name":"bfcache-blocking-reasons","usage":0.14919106,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":12,"popularity":0.14919106,"firefoxUsage":null},{"name":"weak-references","usage":0.14744593,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":10,"popularity":0.14744593,"firefoxUsage":null},{"name":"long-animation-frames","usage":0.14519841,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":19,"popularity":0.14519841,"firefoxUsage":null},{"name":"individual-transforms","usage":0.14430176965601188,"source":"custom_metrics","observable":"rotate","observableType":"css_property","bcdKeyCount":7,"popularity":0.1605152,"firefoxUsage":0.06621634085738833},{"name":"viewport-unit-variants","usage":0.14325774,"source":"chrome_popularity","observable":null,"observableType":"css_type","bcdKeyCount":5,"popularity":0.14325774,"firefoxUsage":null},{"name":"linear-easing","usage":0.12953064,"source":"chrome_popularity","observable":null,"observableType":"css_type","bcdKeyCount":1,"popularity":0.12953064,"firefoxUsage":null},{"name":"offline-audio-context","usage":0.12643678160919541,"source":"blink_features","observable":"api.OfflineAudioContext","observableType":"blink_api","bcdKeyCount":12,"popularity":0.05917523,"firefoxUsage":null},{"name":"text-underline-offset","usage":0.12165928955492865,"source":"custom_metrics","observable":"text-underline-offset","observableType":"css_property","bcdKeyCount":3,"popularity":0.15530603,"firefoxUsage":0.09599819827777563},{"name":"speculation-rules","usage":0.11717813,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":24,"popularity":0.11717813,"firefoxUsage":null},{"name":"nesting","usage":0.11288380061133192,"source":"custom_metrics","observable":"nesting","observableType":"css_selector","bcdKeyCount":6,"popularity":0.09648398,"firefoxUsage":null},{"name":"blocking-render","usage":0.105139,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":6,"popularity":0.105139,"firefoxUsage":null},{"name":"link-rel-expect","usage":0.10418346,"source":"chrome_popularity","observable":null,"observableType":"html_element","bcdKeyCount":1,"popularity":0.10418346,"firefoxUsage":null},{"name":"scrollbar-gutter","usage":0.10151694794603322,"source":"custom_metrics","observable":"scrollbar-gutter","observableType":"css_property","bcdKeyCount":3,"popularity":0.12996548,"firefoxUsage":0.10131216827806148},{"name":"constructed-stylesheets","usage":0.09915322,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":6,"popularity":0.09915322,"firefoxUsage":null},{"name":"text-wrap","usage":0.09580587044277986,"source":"custom_metrics","observable":"text-wrap","observableType":"css_property","bcdKeyCount":2,"popularity":0.21516161,"firefoxUsage":0.20867073416959023},{"name":"media-query-range-syntax","usage":0.09326128,"source":"chrome_popularity","observable":null,"observableType":"css_atrule","bcdKeyCount":1,"popularity":0.09326128,"firefoxUsage":null},{"name":"font-metric-overrides","usage":0.09134683,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":6,"popularity":0.09134683,"firefoxUsage":null},{"name":"container-queries","usage":0.08816762451582091,"source":"custom_metrics","observable":"container-type","observableType":"css_property","bcdKeyCount":12,"popularity":0.15099183,"firefoxUsage":0.06717193484928506},{"name":"compression-dictionary-transport","usage":0.08578132,"source":"chrome_popularity","observable":null,"observableType":"html_element","bcdKeyCount":8,"popularity":0.08578132,"firefoxUsage":null},{"name":"html-wrapper-methods","usage":0.08386845,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":14,"popularity":0.08386845,"firefoxUsage":null},{"name":"with","usage":0.08150589,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":3,"popularity":0.08150589,"firefoxUsage":null},{"name":"keyboard-map","usage":0.08067136,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":10,"popularity":0.08067136,"firefoxUsage":0.0021185823633944087},{"name":"align-content-block","usage":0.07071306,"source":"chrome_popularity","observable":null,"observableType":"css_property","bcdKeyCount":1,"popularity":0.07071306,"firefoxUsage":null},{"name":"color-mix","usage":0.07040583,"source":"chrome_popularity","observable":null,"observableType":"css_type","bcdKeyCount":1,"popularity":0.07040583,"firefoxUsage":null},{"name":"string-wellformed","usage":0.06918426,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":2,"popularity":0.06918426,"firefoxUsage":null},{"name":"border-image","usage":0.06777580790103131,"source":"custom_metrics","observable":"border-image","observableType":"css_property","bcdKeyCount":14,"popularity":0.05744271,"firefoxUsage":0.09215214482209379},{"name":"file-selector-button","usage":0.06517640879641876,"source":"custom_metrics","observable":"file-selector-button","observableType":"css_selector","bcdKeyCount":1,"popularity":0.07340876,"firefoxUsage":null},{"name":"regexp-static-properties","usage":0.06357131,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":6,"popularity":0.06357131,"firefoxUsage":null},{"name":"device-orientation-events","usage":0.06257137,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":25,"popularity":0.06257137,"firefoxUsage":0.0010748491130807137},{"name":"pdf-viewer","usage":0.06130341,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":1,"popularity":0.06130341,"firefoxUsage":null},{"name":"partitioned-cookies","usage":0.06046365914786967,"source":"blink_features","observable":"api.CookieStore.delete.partitioned_option","observableType":"blink_api","bcdKeyCount":6,"popularity":0.207555,"firefoxUsage":null},{"name":"cookie-store","usage":0.06046365914786967,"source":"blink_features","observable":"api.CookieStore","observableType":"blink_api","bcdKeyCount":29,"popularity":0.03352848,"firefoxUsage":0.01066651608106001},{"name":"media-playback-quality","usage":0.06044252,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":5,"popularity":0.06044252,"firefoxUsage":null},{"name":"print-color-adjust","usage":0.05995463884546106,"source":"custom_metrics","observable":"print-color-adjust","observableType":"css_property","bcdKeyCount":3,"popularity":0.02900669,"firefoxUsage":0.05068898745354016},{"name":"webvtt","usage":0.05747126436781609,"source":"blink_features","observable":"api.VTTCue","observableType":"blink_api","bcdKeyCount":7,"popularity":0.05408048,"firefoxUsage":null},{"name":"set-methods","usage":0.05532563,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":7,"popularity":0.05532563,"firefoxUsage":null},{"name":"url-canparse","usage":0.05433871,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":1,"popularity":0.05433871,"firefoxUsage":null},{"name":"marker","usage":0.05262183200302054,"source":"custom_metrics","observable":"marker","observableType":"css_selector","bcdKeyCount":2,"popularity":0.11323208,"firefoxUsage":null},{"name":"color-scheme","usage":0.05074268680894525,"source":"custom_metrics","observable":"color-scheme","observableType":"css_property","bcdKeyCount":6,"popularity":0.16925511,"firefoxUsage":0.1470620434729665},{"name":"document-caretpositionfrompoint","usage":0.05060111,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":6,"popularity":0.05060111,"firefoxUsage":null},{"name":"content-visibility","usage":0.04842528237753556,"source":"custom_metrics","observable":"content-visibility","observableType":"css_property","bcdKeyCount":8,"popularity":0.08045185,"firefoxUsage":0.05769310135650326},{"name":"ch","usage":0.04761499,"source":"chrome_popularity","observable":null,"observableType":"css_type","bcdKeyCount":1,"popularity":0.04761499,"firefoxUsage":null},{"name":"dynamic-range","usage":0.04497831,"source":"chrome_popularity","observable":null,"observableType":"css_atrule","bcdKeyCount":1,"popularity":0.04497831,"firefoxUsage":null},{"name":"promise-try","usage":0.04373023,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":1,"popularity":0.04373023,"firefoxUsage":null},{"name":"web-locks","usage":0.04315989,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":8,"popularity":0.04315989,"firefoxUsage":null},{"name":"relative-color","usage":0.04151111,"source":"chrome_popularity","observable":null,"observableType":"css_type","bcdKeyCount":9,"popularity":0.04151111,"firefoxUsage":null},{"name":"iterator-methods","usage":0.04029988,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":13,"popularity":0.04029988,"firefoxUsage":null},{"name":"box-decoration-break","usage":0.038174969801140345,"source":"custom_metrics","observable":"box-decoration-break","observableType":"css_property","bcdKeyCount":3,"popularity":0.0264631,"firefoxUsage":0.04966524108691367},{"name":"fetchlater","usage":0.03797306,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":5,"popularity":0.03797306,"firefoxUsage":null},{"name":"nth-child-of","usage":0.03511571,"source":"chrome_popularity","observable":null,"observableType":"css_selector","bcdKeyCount":2,"popularity":0.03511571,"firefoxUsage":null},{"name":"prefers-reduced-transparency","usage":0.03507494,"source":"chrome_popularity","observable":null,"observableType":"css_atrule","bcdKeyCount":2,"popularity":0.03507494,"firefoxUsage":null},{"name":"web-audio","usage":0.03420405,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":204,"popularity":0.03420405,"firefoxUsage":null},{"name":"check-visibility","usage":0.0337996,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":6,"popularity":0.0337996,"firefoxUsage":null},{"name":"text-justify","usage":0.03362911735383686,"source":"custom_metrics","observable":"text-justify","observableType":"css_property","bcdKeyCount":5,"popularity":0.003514,"firefoxUsage":0.006176128100129998},{"name":"font-synthesis","usage":0.033622216377925424,"source":"custom_metrics","observable":"font-synthesis","observableType":"css_property","bcdKeyCount":5,"popularity":0.01621963,"firefoxUsage":0.009887290558682694},{"name":"revert-value","usage":0.03130349,"source":"chrome_popularity","observable":null,"observableType":"css_type","bcdKeyCount":1,"popularity":0.03130349,"firefoxUsage":null},{"name":"storage-access","usage":0.03044302,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":7,"popularity":0.03044302,"firefoxUsage":null},{"name":"wasm-sign-extension-operators","usage":0.02832971,"source":"chrome_popularity","observable":null,"observableType":"webassembly","bcdKeyCount":1,"popularity":0.02832971,"firefoxUsage":null},{"name":"font-size-adjust","usage":0.028212985670359854,"source":"custom_metrics","observable":"font-size-adjust","observableType":"css_property","bcdKeyCount":6,"popularity":0.0177987,"firefoxUsage":0.015357887722063339},{"name":"array-group","usage":0.02780728,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":2,"popularity":0.02780728,"firefoxUsage":null},{"name":"accent-color","usage":0.02767782916851559,"source":"custom_metrics","observable":"accent-color","observableType":"css_property","bcdKeyCount":2,"popularity":0.0227585,"firefoxUsage":0.02441068629599739},{"name":"media-session","usage":0.027540548872309792,"source":"blink_features","observable":"api.MediaSession","observableType":"blink_api","bcdKeyCount":34,"popularity":0.02581852,"firefoxUsage":null},{"name":"inert","usage":0.02643255,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":4,"popularity":0.02643255,"firefoxUsage":null},{"name":"forced-colors","usage":0.024843418747247884,"source":"custom_metrics","observable":"forced-color-adjust","observableType":"css_property","bcdKeyCount":5,"popularity":0.33540027,"firefoxUsage":0.12474127531701686},{"name":"array-by-copy","usage":0.02466694,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":7,"popularity":0.02466694,"firefoxUsage":null},{"name":"promise-any","usage":0.02450899,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":5,"popularity":0.02450899,"firefoxUsage":null},{"name":"oklab","usage":0.0235478,"source":"chrome_popularity","observable":null,"observableType":"css_type","bcdKeyCount":4,"popularity":0.0235478,"firefoxUsage":null},{"name":"font-language-override","usage":0.02324711903162481,"source":"custom_metrics","observable":"font-language-override","observableType":"css_property","bcdKeyCount":1,"popularity":0.00434608,"firefoxUsage":0.004197127472031811},{"name":"promise-withresolvers","usage":0.02264879,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":1,"popularity":0.02264879,"firefoxUsage":null},{"name":"time-relative-selectors","usage":0.022610905772940497,"source":"custom_metrics","observable":"future","observableType":"css_selector","bcdKeyCount":2,"popularity":0.0021782,"firefoxUsage":null},{"name":"fedcm","usage":0.02156798,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":5,"popularity":0.02156798,"firefoxUsage":null},{"name":"intl-segmenter","usage":0.02113988,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":8,"popularity":0.02113988,"firefoxUsage":null},{"name":"regexp-escape","usage":0.02067627,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":1,"popularity":0.02067627,"firefoxUsage":null},{"name":"urlpattern","usage":0.02026776,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":14,"popularity":0.02026776,"firefoxUsage":null},{"name":"intl-display-names","usage":0.01860004,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":5,"popularity":0.01860004,"firefoxUsage":null},{"name":"dir-pseudo","usage":0.01793176050323807,"source":"custom_metrics","observable":"dir","observableType":"css_selector","bcdKeyCount":1,"popularity":0.07198347,"firefoxUsage":null},{"name":"text-wrap-balance","usage":0.01791117,"source":"chrome_popularity","observable":null,"observableType":"css_property","bcdKeyCount":1,"popularity":0.01791117,"firefoxUsage":null},{"name":"display-animation","usage":0.01727396,"source":"chrome_popularity","observable":null,"observableType":"css_property","bcdKeyCount":4,"popularity":0.01727396,"firefoxUsage":null},{"name":"app-shortcuts","usage":0.01711546,"source":"chrome_popularity","observable":null,"observableType":"manifests","bcdKeyCount":1,"popularity":0.01711546,"firefoxUsage":null},{"name":"intl-locale-info","usage":0.01664468,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":7,"popularity":0.01664468,"firefoxUsage":null},{"name":"dialog","usage":0.01655531159895756,"source":"custom_metrics","observable":"dialog","observableType":"html_element","bcdKeyCount":12,"popularity":0.08430903,"firefoxUsage":0.0002049191930551606},{"name":"text-wrap-pretty","usage":0.01584412,"source":"chrome_popularity","observable":null,"observableType":"css_property","bcdKeyCount":1,"popularity":0.01584412,"firefoxUsage":null},{"name":"page-orientation","usage":0.01564981,"source":"chrome_popularity","observable":null,"observableType":"css_atrule","bcdKeyCount":1,"popularity":0.01564981,"firefoxUsage":null},{"name":"webgl-multi-draw","usage":0.01556559,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":5,"popularity":0.01556559,"firefoxUsage":null},{"name":"wasm-bulk-memory","usage":0.01516315,"source":"chrome_popularity","observable":null,"observableType":"webassembly","bcdKeyCount":1,"popularity":0.01516315,"firefoxUsage":null},{"name":"array-findlast","usage":0.01438432,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":4,"popularity":0.01438432,"firefoxUsage":null},{"name":"animation-composition","usage":0.014162220579012676,"source":"custom_metrics","observable":"animation-composition","observableType":"css_property","bcdKeyCount":1,"popularity":0.00381363,"firefoxUsage":0.005657318566947336},{"name":"is-error","usage":0.01397917,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":1,"popularity":0.01397917,"firefoxUsage":null},{"name":"array-fromasync","usage":0.01360043,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":1,"popularity":0.01360043,"firefoxUsage":null},{"name":"screen-wake-lock","usage":0.0134776,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":11,"popularity":0.0134776,"firefoxUsage":0.03391379975720428},{"name":"modal","usage":0.013454067009799574,"source":"custom_metrics","observable":"modal","observableType":"css_selector","bcdKeyCount":1,"popularity":0.0265169,"firefoxUsage":null},{"name":"gradient-interpolation","usage":0.01340491,"source":"chrome_popularity","observable":null,"observableType":"css_type","bcdKeyCount":12,"popularity":0.01340491,"firefoxUsage":null},{"name":"oes-fbo-render-mipmap","usage":0.01333392,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":1,"popularity":0.01333392,"firefoxUsage":null},{"name":"light-dark","usage":0.0114018,"source":"chrome_popularity","observable":null,"observableType":"css_type","bcdKeyCount":1,"popularity":0.0114018,"firefoxUsage":null},{"name":"state","usage":0.010734042627611805,"source":"custom_metrics","observable":"state","observableType":"css_selector","bcdKeyCount":13,"popularity":0.00154303,"firefoxUsage":null},{"name":"wasm-non-trapping-float-to-int","usage":0.01018516,"source":"chrome_popularity","observable":null,"observableType":"webassembly","bcdKeyCount":1,"popularity":0.01018516,"firefoxUsage":null},{"name":"image-orientation","usage":0.009831243724129612,"source":"custom_metrics","observable":"image-orientation","observableType":"css_property","bcdKeyCount":3,"popularity":0.00269156,"firefoxUsage":0.004249868383050822},{"name":"color-function","usage":0.00966794,"source":"chrome_popularity","observable":null,"observableType":"css_type","bcdKeyCount":2,"popularity":0.00966794,"firefoxUsage":null},{"name":"lh","usage":0.00964605,"source":"chrome_popularity","observable":null,"observableType":"css_type","bcdKeyCount":1,"popularity":0.00964605,"firefoxUsage":null},{"name":"app-launch-handler","usage":0.00954695,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":7,"popularity":0.00954695,"firefoxUsage":null},{"name":"ext-texture-compression-bptc","usage":0.00951907,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":1,"popularity":0.00951907,"firefoxUsage":null},{"name":"ext-texture-compression-rgtc","usage":0.0092537,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":1,"popularity":0.0092537,"firefoxUsage":null},{"name":"top-level-await","usage":0.00914585,"source":"chrome_popularity","observable":null,"observableType":"js_operators","bcdKeyCount":1,"popularity":0.00914585,"firefoxUsage":null},{"name":"lab","usage":0.00903723,"source":"chrome_popularity","observable":null,"observableType":"css_type","bcdKeyCount":4,"popularity":0.00903723,"firefoxUsage":null},{"name":"search","usage":0.008804281670388818,"source":"custom_metrics","observable":"search","observableType":"html_element","bcdKeyCount":1,"popularity":0.00247992,"firefoxUsage":null},{"name":"js-modules-workers","usage":0.00879745,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":4,"popularity":0.00879745,"firefoxUsage":null},{"name":"transform-box","usage":0.008591809543652643,"source":"custom_metrics","observable":"transform-box","observableType":"css_property","bcdKeyCount":6,"popularity":0.04144955,"firefoxUsage":0.01890592920934985},{"name":"paint-order","usage":0.00846097460308517,"source":"custom_metrics","observable":"paint-order","observableType":"css_property","bcdKeyCount":2,"popularity":0.01415221,"firefoxUsage":0.0076230531599109485},{"name":"sizes-auto","usage":0.00810491,"source":"chrome_popularity","observable":null,"observableType":"html_element","bcdKeyCount":1,"popularity":0.00810491,"firefoxUsage":null},{"name":"font-optical-sizing","usage":0.007394632023893637,"source":"custom_metrics","observable":"font-optical-sizing","observableType":"css_property","bcdKeyCount":3,"popularity":0.02053013,"firefoxUsage":0.0114290182595152},{"name":"wasm-reference-types","usage":0.00738685,"source":"chrome_popularity","observable":null,"observableType":"webassembly","bcdKeyCount":1,"popularity":0.00738685,"firefoxUsage":null},{"name":"js-modules-shared-workers","usage":0.00736653,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":2,"popularity":0.00736653,"firefoxUsage":null},{"name":"update","usage":0.00735874,"source":"chrome_popularity","observable":null,"observableType":"css_atrule","bcdKeyCount":1,"popularity":0.00735874,"firefoxUsage":null},{"name":"user-pseudos","usage":0.00732902548577671,"source":"custom_metrics","observable":"user-invalid","observableType":"css_selector","bcdKeyCount":2,"popularity":0.00306007,"firefoxUsage":null},{"name":"request-video-frame-callback","usage":0.00705877,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":2,"popularity":0.00705877,"firefoxUsage":null},{"name":"import-maps","usage":0.0069852,"source":"chrome_popularity","observable":null,"observableType":"html_element","bcdKeyCount":1,"popularity":0.0069852,"firefoxUsage":null},{"name":"round-mod-rem","usage":0.0068346,"source":"chrome_popularity","observable":null,"observableType":"css_type","bcdKeyCount":3,"popularity":0.0068346,"firefoxUsage":null},{"name":"scripting","usage":0.00676775,"source":"chrome_popularity","observable":null,"observableType":"css_atrule","bcdKeyCount":1,"popularity":0.00676775,"firefoxUsage":null},{"name":"autofill","usage":0.00650941642889811,"source":"custom_metrics","observable":"autofill","observableType":"css_selector","bcdKeyCount":1,"popularity":0.02397937,"firefoxUsage":null},{"name":"page-visibility-state","usage":0.00639106,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":5,"popularity":0.00639106,"firefoxUsage":null},{"name":"motion-path","usage":0.005965657340643704,"source":"custom_metrics","observable":"offset-distance","observableType":"css_property","bcdKeyCount":36,"popularity":0.00407579,"firefoxUsage":0.005585450401624134},{"name":"scroll-driven-animations","usage":0.005898632793777853,"source":"custom_metrics","observable":"animation-timeline","observableType":"css_property","bcdKeyCount":37,"popularity":0.03333611,"firefoxUsage":0.000023635832864202826},{"name":"interpolate-size","usage":0.005877362662543979,"source":"custom_metrics","observable":"interpolate-size","observableType":"css_property","bcdKeyCount":3,"popularity":0.03307441,"firefoxUsage":null},{"name":"abortsignal-any","usage":0.00565574,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":1,"popularity":0.00565574,"firefoxUsage":null},{"name":"container-style-queries","usage":0.00528891,"source":"chrome_popularity","observable":null,"observableType":"css_atrule","bcdKeyCount":1,"popularity":0.00528891,"firefoxUsage":null},{"name":"webtransport","usage":0.005136506552937148,"source":"blink_features","observable":"api.WebTransport","observableType":"blink_api","bcdKeyCount":44,"popularity":0.00001927,"firefoxUsage":null},{"name":"wasm-exception-handling","usage":0.00495209,"source":"chrome_popularity","observable":null,"observableType":"webassembly","bcdKeyCount":10,"popularity":0.00495209,"firefoxUsage":null},{"name":"popover","usage":0.004579222919861519,"source":"custom_metrics","observable":"popover-open","observableType":"css_selector","bcdKeyCount":25,"popularity":0.02163921,"firefoxUsage":null},{"name":"container-scroll-state-queries","usage":0.00440579,"source":"chrome_popularity","observable":null,"observableType":"css_atrule","bcdKeyCount":5,"popularity":0.00440579,"firefoxUsage":null},{"name":"wasm-garbage-collection","usage":0.00437336,"source":"chrome_popularity","observable":null,"observableType":"webassembly","bcdKeyCount":1,"popularity":0.00437336,"firefoxUsage":null},{"name":"wasm-typed-fun-refs","usage":0.0043695,"source":"chrome_popularity","observable":null,"observableType":"webassembly","bcdKeyCount":1,"popularity":0.0043695,"firefoxUsage":null},{"name":"wasm-string-builtins","usage":0.00436758,"source":"chrome_popularity","observable":null,"observableType":"webassembly","bcdKeyCount":7,"popularity":0.00436758,"firefoxUsage":null},{"name":"calc-constants","usage":0.00435489,"source":"chrome_popularity","observable":null,"observableType":"css_type","bcdKeyCount":5,"popularity":0.00435489,"firefoxUsage":null},{"name":"webgl-compressed-texture-pvrtc","usage":0.00418888,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":1,"popularity":0.00418888,"firefoxUsage":null},{"name":"image-set","usage":0.00416529,"source":"chrome_popularity","observable":null,"observableType":"css_property","bcdKeyCount":3,"popularity":0.00416529,"firefoxUsage":null},{"name":"async-clipboard","usage":0.00414589,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":15,"popularity":0.00414589,"firefoxUsage":0.03183925212180658},{"name":"two-value-display","usage":0.00411289,"source":"chrome_popularity","observable":null,"observableType":"css_property","bcdKeyCount":1,"popularity":0.00411289,"firefoxUsage":null},{"name":"regexp-compile","usage":0.00408444,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":1,"popularity":0.00408444,"firefoxUsage":null},{"name":"subgrid","usage":0.00397497,"source":"chrome_popularity","observable":null,"observableType":"css_property","bcdKeyCount":2,"popularity":0.00397497,"firefoxUsage":null},{"name":"app-protocol-handlers","usage":0.00397116,"source":"chrome_popularity","observable":null,"observableType":"manifests","bcdKeyCount":3,"popularity":0.00397116,"firefoxUsage":null},{"name":"trig-functions","usage":0.00384141,"source":"chrome_popularity","observable":null,"observableType":"css_type","bcdKeyCount":7,"popularity":0.00384141,"firefoxUsage":null},{"name":"origin-private-file-system","usage":0.00349643,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":27,"popularity":0.00349643,"firefoxUsage":null},{"name":"wasm-multi-value","usage":0.00344456,"source":"chrome_popularity","observable":null,"observableType":"webassembly","bcdKeyCount":1,"popularity":0.00344456,"firefoxUsage":null},{"name":"transition-behavior","usage":0.003385543155016527,"source":"custom_metrics","observable":"transition-behavior","observableType":"css_property","bcdKeyCount":2,"popularity":0.00669378,"firefoxUsage":0.021863287566919316},{"name":"wasm-simd","usage":0.00325589,"source":"chrome_popularity","observable":null,"observableType":"webassembly","bcdKeyCount":1,"popularity":0.00325589,"firefoxUsage":null},{"name":"webgl-oes-draw-buffers-indexed","usage":0.00301681,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":8,"popularity":0.00301681,"firefoxUsage":null},{"name":"window-controls-overlay","usage":0.002956738250855898,"source":"blink_features","observable":"api.WindowControlsOverlay","observableType":"blink_api","bcdKeyCount":14,"popularity":0.00131923,"firefoxUsage":null},{"name":"overflow","usage":0.00284646,"source":"chrome_popularity","observable":null,"observableType":"css_atrule","bcdKeyCount":2,"popularity":0.00284646,"firefoxUsage":null},{"name":"white-space-collapse","usage":0.0027088693800295586,"source":"custom_metrics","observable":"white-space-collapse","observableType":"css_property","bcdKeyCount":6,"popularity":0.00770083,"firefoxUsage":0.006235146062892904},{"name":"clear-site-data","usage":0.00265028,"source":"chrome_popularity","observable":null,"observableType":"http","bcdKeyCount":8,"popularity":0.00265028,"firefoxUsage":null},{"name":"fencedframe","usage":0.0026455026455026454,"source":"blink_features","observable":"api.HTMLFencedFrameElement","observableType":"blink_api","bcdKeyCount":21,"popularity":0.00526188,"firefoxUsage":null},{"name":"app-share-targets","usage":0.00262989,"source":"chrome_popularity","observable":null,"observableType":"manifests","bcdKeyCount":1,"popularity":0.00262989,"firefoxUsage":null},{"name":"async-iterable-streams","usage":0.00261857,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":2,"popularity":0.00261857,"firefoxUsage":null},{"name":"explicit-resource-management","usage":0.00250648,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":28,"popularity":0.00250648,"firefoxUsage":null},{"name":"details-content","usage":0.002391235420270378,"source":"custom_metrics","observable":"details-content","observableType":"css_selector","bcdKeyCount":1,"popularity":0.00311123,"firefoxUsage":null},{"name":"ruby-position","usage":0.002376204527531774,"source":"custom_metrics","observable":"ruby-position","observableType":"css_property","bcdKeyCount":4,"popularity":0.00208086,"firefoxUsage":0.0018783516929650789},{"name":"ruby-align","usage":0.002371477831702025,"source":"custom_metrics","observable":"ruby-align","observableType":"css_property","bcdKeyCount":5,"popularity":0.00194969,"firefoxUsage":0.0019857776600019895},{"name":"ext-texture-norm16","usage":0.00232164,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":1,"popularity":0.00232164,"firefoxUsage":null},{"name":"writingsuggestions","usage":0.00231929,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":2,"popularity":0.00231929,"firefoxUsage":null},{"name":"compute-pressure","usage":0.00230595,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":14,"popularity":0.00230595,"firefoxUsage":null},{"name":"font-variant-position","usage":0.0021256896485550396,"source":"custom_metrics","observable":"font-variant-position","observableType":"css_property","bcdKeyCount":4,"popularity":0.00302283,"firefoxUsage":0.0019919431666883414},{"name":"hwb","usage":0.00207603,"source":"chrome_popularity","observable":null,"observableType":"css_type","bcdKeyCount":2,"popularity":0.00207603,"firefoxUsage":null},{"name":"font-variant-alternates","usage":0.0020589487034389734,"source":"custom_metrics","observable":"font-variant-alternates","observableType":"css_property","bcdKeyCount":37,"popularity":0.00363047,"firefoxUsage":0.0020768539574350466},{"name":"text-emphasis","usage":0.0020304939945438804,"source":"custom_metrics","observable":"text-emphasis-position","observableType":"css_property","bcdKeyCount":16,"popularity":0.00290502,"firefoxUsage":0.0021205177010981927},{"name":"target-text","usage":0.0019983524629015826,"source":"custom_metrics","observable":"target-text","observableType":"css_selector","bcdKeyCount":1,"popularity":0.0005516,"firefoxUsage":null},{"name":"calc-size","usage":0.00193455,"source":"chrome_popularity","observable":null,"observableType":"css_type","bcdKeyCount":1,"popularity":0.00193455,"firefoxUsage":null},{"name":"hyphenate-character","usage":0.0019032513428070184,"source":"custom_metrics","observable":"hyphenate-character","observableType":"css_property","bcdKeyCount":2,"popularity":0.00322282,"firefoxUsage":0.0013077285671131114},{"name":"field-sizing","usage":0.0018966339686453688,"source":"custom_metrics","observable":"field-sizing","observableType":"css_property","bcdKeyCount":3,"popularity":0.01457689,"firefoxUsage":0.0000037735603095554436},{"name":"anchor-positioning","usage":0.0018963503668955836,"source":"custom_metrics","observable":"anchor-name","observableType":"css_property","bcdKeyCount":195,"popularity":0.00374536,"firefoxUsage":6.562456728800945e-7},{"name":"transferable-streams","usage":0.00186906,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":3,"popularity":0.00186906,"firefoxUsage":null},{"name":"wasm-threads","usage":0.00185714,"source":"chrome_popularity","observable":null,"observableType":"webassembly","bcdKeyCount":2,"popularity":0.00185714,"firefoxUsage":null},{"name":"clipboard-supports","usage":0.0018446,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":1,"popularity":0.0018446,"firefoxUsage":null},{"name":"accelerometer","usage":0.0016420361247947454,"source":"blink_features","observable":"api.Accelerometer","observableType":"blink_api","bcdKeyCount":12,"popularity":0.00182136,"firefoxUsage":0.006750321441889268},{"name":"hidden-until-found","usage":0.00155541,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":2,"popularity":0.00155541,"firefoxUsage":null},{"name":"request-animation-frame-workers","usage":0.00154096,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":2,"popularity":0.00154096,"firefoxUsage":null},{"name":"canvas-roundrect","usage":0.00149207,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":2,"popularity":0.00149207,"firefoxUsage":null},{"name":"if","usage":0.0013824,"source":"chrome_popularity","observable":null,"observableType":"css_type","bcdKeyCount":1,"popularity":0.0013824,"firefoxUsage":null},{"name":"badging","usage":0.00138026,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":2,"popularity":0.00138026,"firefoxUsage":null},{"name":"storage-buckets","usage":0.00134866,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":16,"popularity":0.00134866,"firefoxUsage":null},{"name":"gethtml","usage":0.00134143,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":2,"popularity":0.00134143,"firefoxUsage":null},{"name":"counter-set","usage":0.0012994632175147903,"source":"custom_metrics","observable":"counter-set","observableType":"css_property","bcdKeyCount":3,"popularity":0.00589986,"firefoxUsage":0.0030680933134647},{"name":"transferable-arraybuffer","usage":0.00125764,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":3,"popularity":0.00125764,"firefoxUsage":null},{"name":"webgl-color-management","usage":0.00106145,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":2,"popularity":0.00106145,"firefoxUsage":null},{"name":"text-box","usage":0.0009685945094323106,"source":"custom_metrics","observable":"text-box","observableType":"css_property","bcdKeyCount":14,"popularity":0.00823886,"firefoxUsage":null},{"name":"text-wrap-style","usage":0.0009597083212723812,"source":"custom_metrics","observable":"text-wrap-style","observableType":"css_property","bcdKeyCount":5,"popularity":0.00100934,"firefoxUsage":0.00038005773274383636},{"name":"scroll-to-text-fragment","usage":0.00091902,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":3,"popularity":0.00091902,"firefoxUsage":null},{"name":"hyphenate-limit-chars","usage":0.0009110233542259591,"source":"custom_metrics","observable":"hyphenate-limit-chars","observableType":"css_property","bcdKeyCount":2,"popularity":0.00122925,"firefoxUsage":0.002412664032214245},{"name":"webgl2-color-management","usage":0.00089057,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":2,"popularity":0.00089057,"firefoxUsage":null},{"name":"webcodecs","usage":0.00083981,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":125,"popularity":0.00083981,"firefoxUsage":0.04085757684838708},{"name":"datalist","usage":0.0007617234555212754,"source":"custom_metrics","observable":"datalist","observableType":"html_element","bcdKeyCount":3,"popularity":0.02113218,"firefoxUsage":null},{"name":"resizable-buffers","usage":0.0007511,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":8,"popularity":0.0007511,"firefoxUsage":null},{"name":"clip-path-boxes","usage":0.00073744,"source":"chrome_popularity","observable":null,"observableType":"css_property","bcdKeyCount":3,"popularity":0.00073744,"firefoxUsage":null},{"name":"virtual-keyboard","usage":0.0006226068549014725,"source":"blink_features","observable":"api.VirtualKeyboard","observableType":"blink_api","bcdKeyCount":9,"popularity":0.00390438,"firefoxUsage":null},{"name":"non-cookie-storage-access","usage":0.00054668,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":28,"popularity":0.00054668,"firefoxUsage":null},{"name":"pointer-lock","usage":0.00050105,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":5,"popularity":0.00050105,"firefoxUsage":null},{"name":"details-name","usage":0.00049566,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":2,"popularity":0.00049566,"firefoxUsage":null},{"name":"font-family-math","usage":0.00048724,"source":"chrome_popularity","observable":null,"observableType":"css_property","bcdKeyCount":1,"popularity":0.00048724,"firefoxUsage":null},{"name":"window-management","usage":0.00046148,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":27,"popularity":0.00046148,"firefoxUsage":null},{"name":"word-break-auto-phrase","usage":0.00045117,"source":"chrome_popularity","observable":null,"observableType":"css_property","bcdKeyCount":1,"popularity":0.00045117,"firefoxUsage":null},{"name":"document-picture-in-picture","usage":0.00043707,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":10,"popularity":0.00043707,"firefoxUsage":null},{"name":"contain-inline-size","usage":0.00041088,"source":"chrome_popularity","observable":null,"observableType":"css_property","bcdKeyCount":1,"popularity":0.00041088,"firefoxUsage":null},{"name":"iframe-credentialless","usage":0.00039457,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":3,"popularity":0.00039457,"firefoxUsage":null},{"name":"font-synthesis-weight","usage":0.0003828623622097265,"source":"custom_metrics","observable":"font-synthesis-weight","observableType":"css_property","bcdKeyCount":3,"popularity":0.00101276,"firefoxUsage":0.0006092822176012978},{"name":"idle-detection","usage":0.000344,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":9,"popularity":0.000344,"firefoxUsage":null},{"name":"exp-functions","usage":0.00034045,"source":"chrome_popularity","observable":null,"observableType":"css_type","bcdKeyCount":5,"popularity":0.00034045,"firefoxUsage":null},{"name":"dialog-closedby","usage":0.00033714,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":2,"popularity":0.00033714,"firefoxUsage":null},{"name":"scroll-snap-events","usage":0.0003132832080200501,"source":"blink_features","observable":"api.SnapEvent","observableType":"blink_api","bcdKeyCount":10,"popularity":0.00063945,"firefoxUsage":null},{"name":"profiler","usage":0.00031130342745073624,"source":"blink_features","observable":"api.Profiler","observableType":"blink_api","bcdKeyCount":5,"popularity":0.00082119,"firefoxUsage":null},{"name":"parse-html-unsafe","usage":0.00030858,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":3,"popularity":0.00030858,"firefoxUsage":null},{"name":"vertical-form-controls","usage":0.00030828,"source":"chrome_popularity","observable":null,"observableType":"css_property","bcdKeyCount":2,"popularity":0.00030828,"firefoxUsage":null},{"name":"scroll-buttons","usage":0.0002965528963584968,"source":"custom_metrics","observable":"scroll-button","observableType":"css_selector","bcdKeyCount":12,"popularity":0.00003963,"firefoxUsage":null},{"name":"wasm-mutable-globals","usage":0.00025636,"source":"chrome_popularity","observable":null,"observableType":"webassembly","bcdKeyCount":1,"popularity":0.00025636,"firefoxUsage":null},{"name":"initial-letter","usage":0.00024834059889504976,"source":"custom_metrics","observable":"initial-letter","observableType":"css_property","bcdKeyCount":2,"popularity":0.00086944,"firefoxUsage":0.0000031287055606483928},{"name":"popover-hint","usage":0.00024751,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":2,"popularity":0.00024751,"firefoxUsage":null},{"name":"atomics-wait-async","usage":0.0002406,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":1,"popularity":0.0002406,"firefoxUsage":null},{"name":"wasm-simd-relaxed","usage":0.00023477,"source":"chrome_popularity","observable":null,"observableType":"webassembly","bcdKeyCount":1,"popularity":0.00023477,"firefoxUsage":null},{"name":"web-otp","usage":0.00021695,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":5,"popularity":0.00021695,"firefoxUsage":null},{"name":"spelling-grammar-error","usage":0.00021213410883916698,"source":"custom_metrics","observable":"spelling-error","observableType":"css_selector","bcdKeyCount":2,"popularity":0.00551235,"firefoxUsage":null},{"name":"customizable-select","usage":0.0001986157587660828,"source":"custom_metrics","observable":"picker","observableType":"css_selector","bcdKeyCount":5,"popularity":0.00013347,"firefoxUsage":null},{"name":"measure-memory","usage":0.00017899,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":1,"popularity":0.00017899,"firefoxUsage":null},{"name":"audio-worklet","usage":0.0001556178026766262,"source":"blink_features","observable":"api.AudioWorklet","observableType":"blink_api","bcdKeyCount":19,"popularity":0.00159057,"firefoxUsage":null},{"name":"readable-byte-streams","usage":0.0001556178026766262,"source":"blink_features","observable":"api.ReadableStreamBYOBReader","observableType":"blink_api","bcdKeyCount":18,"popularity":0.00028009,"firefoxUsage":null},{"name":"cap","usage":0.00015506,"source":"chrome_popularity","observable":null,"observableType":"css_type","bcdKeyCount":1,"popularity":0.00015506,"firefoxUsage":null},{"name":"overlay","usage":0.00015030892738604078,"source":"custom_metrics","observable":"overlay","observableType":"css_property","bcdKeyCount":3,"popularity":0.0004503,"firefoxUsage":null},{"name":"closewatcher","usage":0.00014292,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":7,"popularity":0.00014292,"firefoxUsage":null},{"name":"scroll-markers","usage":0.00014246261230865627,"source":"custom_metrics","observable":"scroll-marker-group","observableType":"css_property","bcdKeyCount":6,"popularity":0.0004613,"firefoxUsage":null},{"name":"canvas-reset","usage":0.0001043,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":2,"popularity":0.0001043,"firefoxUsage":null},{"name":"highlight","usage":0.00009840980717538897,"source":"custom_metrics","observable":"highlight","observableType":"css_selector","bcdKeyCount":29,"popularity":0.00051141,"firefoxUsage":null},{"name":"reading-flow","usage":0.00007921942210660515,"source":"custom_metrics","observable":"reading-flow","observableType":"css_property","bcdKeyCount":9,"popularity":0.00037852,"firefoxUsage":null},{"name":"web-midi","usage":0.00007885,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":50,"popularity":0.00007885,"firefoxUsage":0.04876490460930782},{"name":"clipboard-custom-format","usage":0.00007652,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":1,"popularity":0.00007652,"firefoxUsage":null},{"name":"speech-synthesis","usage":0.00007372454242502551,"source":"blink_features","observable":"api.SpeechSynthesis","observableType":"blink_api","bcdKeyCount":42,"popularity":0.00037091,"firefoxUsage":null},{"name":"font-variant-emoji","usage":0.00007364192102750048,"source":"custom_metrics","observable":"font-variant-emoji","observableType":"css_property","bcdKeyCount":5,"popularity":0.00061416,"firefoxUsage":0.00018562524716405192},{"name":"keyboard-lock","usage":0.00007345,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":4,"popularity":0.00007345,"firefoxUsage":0.0019317707845346104},{"name":"intl-duration-format","usage":0.00006863,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":6,"popularity":0.00006863,"firefoxUsage":null},{"name":"context-fill-stroke","usage":0.00006596,"source":"chrome_popularity","observable":null,"observableType":"svg","bcdKeyCount":10,"popularity":0.00006596,"firefoxUsage":null},{"name":"clipboard-unsanitized-formats","usage":0.00006171,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":1,"popularity":0.00006171,"firefoxUsage":null},{"name":"text-spacing-trim","usage":0.000058327426539111424,"source":"custom_metrics","observable":"text-spacing-trim","observableType":"css_property","bcdKeyCount":5,"popularity":0.01781867,"firefoxUsage":null},{"name":"composed-ranges","usage":0.00005221,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":1,"popularity":0.00005221,"firefoxUsage":null},{"name":"canvas-createconicgradient","usage":0.00005058,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":2,"popularity":0.00005058,"firefoxUsage":null},{"name":"edit-context","usage":0.000046549155908639525,"source":"blink_features","observable":"api.EditContext","observableType":"blink_api","bcdKeyCount":39,"popularity":0.02163283,"firefoxUsage":null},{"name":"file-system-access","usage":0.0000457,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":11,"popularity":0.0000457,"firefoxUsage":null},{"name":"font-synthesis-style","usage":0.000032614201225273,"source":"custom_metrics","observable":"font-synthesis-style","observableType":"css_property","bcdKeyCount":3,"popularity":0.00033296,"firefoxUsage":0.00012184293996603901},{"name":"object-view-box","usage":0.000031574328142728064,"source":"custom_metrics","observable":"object-view-box","observableType":"css_property","bcdKeyCount":2,"popularity":0.00043471,"firefoxUsage":null},{"name":"navigation","usage":0.000031130342745073624,"source":"blink_features","observable":"api.Navigation","observableType":"blink_api","bcdKeyCount":59,"popularity":0.00083679,"firefoxUsage":null},{"name":"observable","usage":0.000031130342745073624,"source":"blink_features","observable":"api.Observable","observableType":"blink_api","bcdKeyCount":30,"popularity":0.00000237,"firefoxUsage":null},{"name":"eyedropper","usage":0.00003057,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":4,"popularity":0.00003057,"firefoxUsage":null},{"name":"rcap","usage":0.00002799,"source":"chrome_popularity","observable":null,"observableType":"css_type","bcdKeyCount":1,"popularity":0.00002799,"firefoxUsage":null},{"name":"region-capture","usage":0.00002563,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":5,"popularity":0.00002563,"firefoxUsage":null},{"name":"font-palette","usage":0.000025429623564053443,"source":"custom_metrics","observable":"font-palette","observableType":"css_property","bcdKeyCount":13,"popularity":0.0005115,"firefoxUsage":0.00007914660776523708},{"name":"show-picker-input","usage":0.00002069,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":5,"popularity":0.00002069,"firefoxUsage":null},{"name":"rlh","usage":0.00001831,"source":"chrome_popularity","observable":null,"observableType":"css_type","bcdKeyCount":1,"popularity":0.00001831,"firefoxUsage":null},{"name":"webusb","usage":0.00001743,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":106,"popularity":0.00001743,"firefoxUsage":0.008336814375660667},{"name":"serial","usage":0.00001522,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":24,"popularity":0.00001522,"firefoxUsage":null},{"name":"web-nfc","usage":0.00001477,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":27,"popularity":0.00001477,"firefoxUsage":null},{"name":"view-transition-class","usage":0.000014558223155629108,"source":"custom_metrics","observable":"view-transition-class","observableType":"css_property","bcdKeyCount":2,"popularity":0.00080576,"firefoxUsage":null},{"name":"json-modules","usage":0.00001446,"source":"chrome_popularity","observable":null,"observableType":"js_grammar","bcdKeyCount":2,"popularity":0.00001446,"firefoxUsage":null},{"name":"mathml","usage":0.000014369155322439119,"source":"custom_metrics","observable":"math-depth","observableType":"css_property","bcdKeyCount":108,"popularity":0.01226562,"firefoxUsage":0.000168060776396631},{"name":"interactivity","usage":0.000013045680490109199,"source":"custom_metrics","observable":"interactivity","observableType":"css_property","bcdKeyCount":3,"popularity":0.00028818,"firefoxUsage":null},{"name":"baseline-source","usage":0.000011533137824589292,"source":"custom_metrics","observable":"baseline-source","observableType":"css_property","bcdKeyCount":4,"popularity":0.00024812,"firefoxUsage":0.00011938224347137631},{"name":"fetch-request-streams","usage":0.00001116,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":1,"popularity":0.00001116,"firefoxUsage":null},{"name":"webhid","usage":0.00001063,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":33,"popularity":0.00001063,"firefoxUsage":null},{"name":"font-synthesis-small-caps","usage":0.000010115129075664381,"source":"custom_metrics","observable":"font-synthesis-small-caps","observableType":"css_property","bcdKeyCount":3,"popularity":0.00014909,"firefoxUsage":0.000054121022672508584},{"name":"local-fonts","usage":0.00000968,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":10,"popularity":0.00000968,"firefoxUsage":null},{"name":"gamepad","usage":0.00000954,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":22,"popularity":0.00000954,"firefoxUsage":null},{"name":"scroll-initial-target","usage":0.000008508052493549479,"source":"custom_metrics","observable":"scroll-initial-target","observableType":"css_property","bcdKeyCount":3,"popularity":0.0002177,"firefoxUsage":null},{"name":"column-pseudo","usage":0.000008508052493549479,"source":"custom_metrics","observable":"column","observableType":"css_selector","bcdKeyCount":2,"popularity":7e-8,"firefoxUsage":null},{"name":"web-bluetooth","usage":0.00000832,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":61,"popularity":0.00000832,"firefoxUsage":0.005845832514362171},{"name":"speech-recognition","usage":0.000005922802196175054,"source":"blink_features","observable":"api.SpeechRecognition","observableType":"blink_api","bcdKeyCount":38,"popularity":0.000811,"firefoxUsage":0.0001717835242398396},{"name":"move-before","usage":0.00000538,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":4,"popularity":0.00000538,"firefoxUsage":null},{"name":"picture-in-picture","usage":0.000005104831496129686,"source":"custom_metrics","observable":"picture-in-picture","observableType":"css_selector","bcdKeyCount":19,"popularity":0.00013722,"firefoxUsage":0.0020374242416180406},{"name":"webauthn-public-key-easy","usage":0.00000327,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":3,"popularity":0.00000327,"firefoxUsage":null},{"name":"ic","usage":0.00000273,"source":"chrome_popularity","observable":null,"observableType":"css_type","bcdKeyCount":1,"popularity":0.00000273,"firefoxUsage":null},{"name":"meta-application-title","usage":0.00000212,"source":"chrome_popularity","observable":null,"observableType":"html_element","bcdKeyCount":1,"popularity":0.00000212,"firefoxUsage":null},{"name":"clipboard-svg","usage":0.00000204,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":1,"popularity":0.00000204,"firefoxUsage":null},{"name":"show-picker-select","usage":0.00000161,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":1,"popularity":0.00000161,"firefoxUsage":null},{"name":"wasm-memory64","usage":0.00000143,"source":"chrome_popularity","observable":null,"observableType":"webassembly","bcdKeyCount":1,"popularity":0.00000143,"firefoxUsage":null},{"name":"css-modules","usage":9.9e-7,"source":"chrome_popularity","observable":null,"observableType":"js_statements","bcdKeyCount":1,"popularity":9.9e-7,"firefoxUsage":null},{"name":"rch","usage":9e-7,"source":"chrome_popularity","observable":null,"observableType":"css_type","bcdKeyCount":1,"popularity":9e-7,"firefoxUsage":null},{"name":"atomics-pause","usage":9e-7,"source":"chrome_popularity","observable":null,"observableType":"js_builtin","bcdKeyCount":1,"popularity":9e-7,"firefoxUsage":null},{"name":"wasm-multi-memory","usage":8.3e-7,"source":"chrome_popularity","observable":null,"observableType":"webassembly","bcdKeyCount":1,"popularity":8.3e-7,"firefoxUsage":null},{"name":"requestclose","usage":7.1e-7,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":1,"popularity":7.1e-7,"firefoxUsage":null},{"name":"font-palette-animation","usage":6.9e-7,"source":"chrome_popularity","observable":null,"observableType":"css_property","bcdKeyCount":2,"popularity":6.9e-7,"firefoxUsage":null},{"name":"webxr-dom-overlays","usage":5.672034995699652e-7,"source":"custom_metrics","observable":"xr-overlay","observableType":"css_selector","bcdKeyCount":3,"popularity":1.4e-7,"firefoxUsage":null},{"name":"app-file-handlers","usage":5.3e-7,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":2,"popularity":5.3e-7,"firefoxUsage":null},{"name":"wasm-tail-call-optimization","usage":5.1e-7,"source":"chrome_popularity","observable":null,"observableType":"webassembly","bcdKeyCount":1,"popularity":5.1e-7,"firefoxUsage":null},{"name":"element-capture","usage":1.8e-7,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":3,"popularity":1.8e-7,"firefoxUsage":null},{"name":"webxr-ar","usage":1.5e-7,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":3,"popularity":1.5e-7,"firefoxUsage":null},{"name":"webxr-hit-test","usage":1.4e-7,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":18,"popularity":1.4e-7,"firefoxUsage":null},{"name":"ink","usage":9.101726078638731e-8,"source":"blink_features","observable":"api.Ink","observableType":"blink_api","bcdKeyCount":6,"popularity":0.00004952,"firefoxUsage":null},{"name":"webxr-hand-input","usage":9e-8,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":16,"popularity":9e-8,"firefoxUsage":null},{"name":"webxr-lighting-estimation","usage":8e-8,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":11,"popularity":8e-8,"firefoxUsage":null},{"name":"wasm-exnref-exceptions","usage":6e-8,"source":"chrome_popularity","observable":null,"observableType":"webassembly","bcdKeyCount":1,"popularity":6e-8,"firefoxUsage":null},{"name":"webnn","usage":4e-8,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":103,"popularity":4e-8,"firefoxUsage":null},{"name":"webxr-anchors","usage":3e-8,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":14,"popularity":3e-8,"firefoxUsage":null},{"name":"webxr-camera","usage":2e-8,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":5,"popularity":2e-8,"firefoxUsage":null},{"name":"summarizer","usage":1e-8,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":16,"popularity":1e-8,"firefoxUsage":null},{"name":"ric","usage":1e-8,"source":"chrome_popularity","observable":null,"observableType":"css_type","bcdKeyCount":1,"popularity":1e-8,"firefoxUsage":null},{"name":"cross-document-view-transitions","usage":0,"source":"custom_metrics","observable":"view-transition","observableType":"css_atrule","bcdKeyCount":4,"popularity":0.11000801,"firefoxUsage":null},{"name":"registered-custom-properties","usage":0,"source":"custom_metrics","observable":"property","observableType":"css_atrule","bcdKeyCount":10,"popularity":0.07901827,"firefoxUsage":0.028970720927724423},{"name":"cascade-layers","usage":0,"source":"custom_metrics","observable":"layer","observableType":"css_atrule","bcdKeyCount":8,"popularity":0.03859074,"firefoxUsage":null},{"name":"starting-style","usage":0,"source":"custom_metrics","observable":"starting-style","observableType":"css_atrule","bcdKeyCount":2,"popularity":0.02297605,"firefoxUsage":null},{"name":"counter-style","usage":0,"source":"custom_metrics","observable":"counter-style","observableType":"css_atrule","bcdKeyCount":23,"popularity":0.00325059,"firefoxUsage":null},{"name":"scope","usage":0,"source":"custom_metrics","observable":"scope","observableType":"css_atrule","bcdKeyCount":4,"popularity":0.00126933,"firefoxUsage":null},{"name":"has-slotted","usage":0,"source":"custom_metrics","observable":"has-slotted","observableType":"css_selector","bcdKeyCount":1,"popularity":4e-8,"firefoxUsage":null},{"name":"webxr-depth-sensing","usage":0,"source":"chrome_popularity","observable":null,"observableType":"blink_api","bcdKeyCount":14,"popularity":0,"firefoxUsage":null},{"name":"text-decoration-selection","usage":0,"source":"chrome_popularity","observable":null,"observableType":"css_selector","bcdKeyCount":1,"popularity":0,"firefoxUsage":null},{"name":"wasm-extended-constant-expressions","usage":0,"source":"chrome_popularity","observable":null,"observableType":"webassembly","bcdKeyCount":1,"popularity":0,"firefoxUsage":null},{"name":"avif","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"draft_crash-report-storage-apiinitialize","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"draft_meta-text-scale","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"draft_reference-target","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"draft_wasm-branch-hinting","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"draft_wasm-custom-descriptors","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"draft_web-app-manifest-update","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"draft_web-install-api","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"float16-array","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"function","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"http3","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"intersection-observer-v2","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"jpegxl","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"obsolete_canvas-2d","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"obsolete_canvas-alpha","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"obsolete_canvas-color-management","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"obsolete_canvas-desynchronized","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"obsolete_canvas-element","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"obsolete_canvas-fill-text","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"obsolete_canvas-measure-text","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"obsolete_canvas-text-baselines","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"obsolete_element-check-visibility","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"obsolete_hidden-until-found-attribute","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"obsolete_locale-info-obsoleted-getters","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"obsolete_popover","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"obsolete_will-read-frequently","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"prompt","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"text-detect","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"translation-api","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"uint8-array-base64-hex","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"view-transitions-element-scoped","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null},{"name":"webp","usage":null,"source":null,"observable":null,"observableType":null,"bcdKeyCount":0,"popularity":null,"firefoxUsage":null}]; 310 + 311 + // ── Histogram chart ────────────────────────────────────────────────── 312 + const histLabels = ["0-1%","1-5%","5-10%","10-20%","20-30%","30-40%","40-50%","50-60%","60-70%","70-80%","80-90%","90-100%"]; 313 + const histCounts = [212,56,27,23,16,14,9,14,3,3,4,2]; 314 + 315 + new Chart(document.getElementById('histogram'), { 316 + type: 'bar', 317 + data: { 318 + labels: histLabels, 319 + datasets: [{ 320 + label: 'Features', 321 + data: histCounts, 322 + backgroundColor: histLabels.map((_, i) => { 323 + const t = i / (histLabels.length - 1); 324 + if (t > 0.7) return 'rgba(31, 110, 31, 0.7)'; 325 + if (t > 0.3) return 'rgba(138, 90, 0, 0.7)'; 326 + return 'rgba(71, 11, 0, 0.4)'; 327 + }), 328 + borderRadius: 4, 329 + }] 330 + }, 331 + options: { 332 + responsive: true, maintainAspectRatio: false, 333 + plugins: { legend: { display: false } }, 334 + scales: { 335 + y: { beginAtZero: true, title: { display: true, text: 'Number of features' } }, 336 + x: { title: { display: true, text: 'Usage range' } } 337 + } 338 + } 339 + }); 340 + 341 + // ── Top-N bar chart ────────────────────────────────────────────────── 342 + const topData = [{"name":"overflow-shorthand","usage":0.9575161742804598,"source":"custom_metrics"},{"name":"outline","usage":0.9238862061213736,"source":"custom_metrics"},{"name":"not","usage":0.8798817078194864,"source":"custom_metrics"},{"name":"flexbox","usage":0.877012225315162,"source":"custom_metrics"},{"name":"slot","usage":0.8186960228291648,"source":"blink_features"},{"name":"slot-assign","usage":0.8186960228291648,"source":"blink_features"},{"name":"ua-client-hints","usage":0.74314817,"source":"chrome_popularity"},{"name":"intersection-observer","usage":0.7126436781609196,"source":"blink_features"},{"name":"text-indent","usage":0.700350456135601,"source":"custom_metrics"},{"name":"grid","usage":0.6608178847582399,"source":"custom_metrics"},{"name":"appearance","usage":0.6496636388713634,"source":"custom_metrics"},{"name":"request-animation-frame","usage":0.61653786,"source":"chrome_popularity"},{"name":"beforeunload","usage":0.57920782,"source":"chrome_popularity"},{"name":"flexbox-gap","usage":0.559277,"source":"chrome_popularity"},{"name":"canvas","usage":0.535303776683087,"source":"blink_features"},{"name":"canvas-2d","usage":0.535303776683087,"source":"blink_features"},{"name":"canvas-2d-alpha","usage":0.535303776683087,"source":"blink_features"},{"name":"offscreen-canvas","usage":0.535303776683087,"source":"blink_features"},{"name":"canvas-2d-willreadfrequently","usage":0.535303776683087,"source":"blink_features"},{"name":"webgpu","usage":0.535303776683087,"source":"blink_features"},{"name":"canvas-2d-desynchronized","usage":0.535303776683087,"source":"blink_features"},{"name":"webgl2-desynchronized","usage":0.535303776683087,"source":"blink_features"},{"name":"webgl-desynchronized","usage":0.535303776683087,"source":"blink_features"},{"name":"canvas-context-lost","usage":0.535303776683087,"source":"blink_features"},{"name":"canvas-2d-color-management","usage":0.535303776683087,"source":"blink_features"},{"name":"focus-visible","usage":0.5063683718253383,"source":"custom_metrics"},{"name":"remote-playback","usage":0.4729064039408867,"source":"blink_features"},{"name":"preserves-pitch","usage":0.4729064039408867,"source":"blink_features"},{"name":"aborting","usage":0.47132189,"source":"chrome_popularity"},{"name":"clip-path","usage":0.458419918523108,"source":"custom_metrics"}]; 343 + 344 + new Chart(document.getElementById('topChart'), { 345 + type: 'bar', 346 + data: { 347 + labels: topData.map(d => d.name), 348 + datasets: [{ 349 + label: 'Usage %', 350 + data: topData.map(d => +(d.usage * 100).toFixed(2)), 351 + backgroundColor: topData.map(d => { 352 + if (d.source === 'custom_metrics') return 'rgba(31, 110, 31, 0.7)'; 353 + if (d.source === 'blink_features') return 'rgba(138, 90, 0, 0.7)'; 354 + return 'rgba(74, 74, 138, 0.7)'; 355 + }), 356 + borderRadius: 3, 357 + }] 358 + }, 359 + options: { 360 + indexAxis: 'y', 361 + responsive: true, maintainAspectRatio: false, 362 + plugins: { legend: { display: false } }, 363 + scales: { 364 + x: { beginAtZero: true, max: 100, title: { display: true, text: 'Usage %' } }, 365 + y: { ticks: { font: { size: 11 } } } 366 + } 367 + } 368 + }); 369 + 370 + // ── Sortable, filterable table ─────────────────────────────────────── 371 + const tbody = document.getElementById('featureBody'); 372 + const searchBox = document.getElementById('searchBox'); 373 + const sourceFilter = document.getElementById('sourceFilter'); 374 + const tierFilter = document.getElementById('tierFilter'); 375 + const rowCountEl = document.getElementById('rowCount'); 376 + 377 + let sortCol = 'usage'; 378 + let sortAsc = false; 379 + 380 + function usageTier(u) { 381 + if (u == null) return 'none'; 382 + if (u > 0.5) return 'high'; 383 + if (u >= 0.1) return 'med'; 384 + if (u >= 0.01) return 'low'; 385 + return 'vlow'; 386 + } 387 + 388 + function tierClass(t) { 389 + return { high: 'tier-high', med: 'tier-med', low: 'tier-low', vlow: 'tier-vlow', none: 'tier-none' }[t] || ''; 390 + } 391 + 392 + function fmtUsage(u) { 393 + if (u == null) return '<span class="tier-none">--</span>'; 394 + const pct = (u * 100); 395 + const cls = tierClass(usageTier(u)); 396 + if (pct < 0.01) return '<span class="' + cls + '">' + pct.toFixed(4) + '%</span>'; 397 + if (pct < 1) return '<span class="' + cls + '">' + pct.toFixed(3) + '%</span>'; 398 + return '<span class="' + cls + '">' + pct.toFixed(2) + '%</span>'; 399 + } 400 + 401 + const sourceLabels = { 402 + custom_metrics: 'HTTP Archive', 403 + blink_features: 'web.dev', 404 + chrome_popularity: 'ChromeStatus' 405 + }; 406 + 407 + function sourceTag(s) { 408 + if (!s) return '<span class="source-tag none">none</span>'; 409 + return '<span class="source-tag ' + s + '">' + (sourceLabels[s] || s) + '</span>'; 410 + } 411 + 412 + function sortFeatures(arr) { 413 + const dir = sortAsc ? 1 : -1; 414 + return [...arr].sort((a, b) => { 415 + if (sortCol === 'name') return dir * a.name.localeCompare(b.name); 416 + if (sortCol === 'usage') { 417 + if (a.usage == null && b.usage == null) return a.name.localeCompare(b.name); 418 + if (a.usage == null) return 1; 419 + if (b.usage == null) return -1; 420 + return dir * (a.usage - b.usage); 421 + } 422 + if (sortCol === 'firefox') { 423 + if (a.firefoxUsage == null && b.firefoxUsage == null) return a.name.localeCompare(b.name); 424 + if (a.firefoxUsage == null) return 1; 425 + if (b.firefoxUsage == null) return -1; 426 + return dir * (a.firefoxUsage - b.firefoxUsage); 427 + } 428 + if (sortCol === 'source') return dir * (a.source || 'zzz').localeCompare(b.source || 'zzz'); 429 + if (sortCol === 'type') return dir * (a.observableType || 'zzz').localeCompare(b.observableType || 'zzz'); 430 + if (sortCol === 'bcd') return dir * (a.bcdKeyCount - b.bcdKeyCount); 431 + if (sortCol === 'rank') return dir * (features.indexOf(a) - features.indexOf(b)); 432 + return 0; 433 + }); 434 + } 435 + 436 + function render() { 437 + const search = searchBox.value.toLowerCase(); 438 + const srcVal = sourceFilter.value; 439 + const tierVal = tierFilter.value; 440 + 441 + let filtered = features.filter(f => { 442 + if (search && !f.name.toLowerCase().includes(search)) return false; 443 + if (srcVal !== 'all') { 444 + if (srcVal === 'none' && f.source != null) return false; 445 + if (srcVal !== 'none' && f.source !== srcVal) return false; 446 + } 447 + if (tierVal !== 'all' && usageTier(f.usage) !== tierVal) return false; 448 + return true; 449 + }); 450 + 451 + filtered = sortFeatures(filtered); 452 + 453 + rowCountEl.textContent = filtered.length + ' of ' + features.length + ' features'; 454 + 455 + const rows = filtered.map((f, i) => { 456 + return '<tr>' 457 + + '<td>' + (i + 1) + '</td>' 458 + + '<td><strong>' + f.name + '</strong>' + (f.observable ? ' <span style="color:#999;font-size:11px;">(' + f.observable + ')</span>' : '') + '</td>' 459 + + '<td>' + fmtUsage(f.usage) + '</td>' 460 + + '<td>' + fmtUsage(f.firefoxUsage) + '</td>' 461 + + '<td>' + sourceTag(f.source) + '</td>' 462 + + '<td style="color:#666;font-size:12px;">' + (f.observableType || '--') + '</td>' 463 + + '<td style="text-align:center;">' + f.bcdKeyCount + '</td>' 464 + + '</tr>'; 465 + }); 466 + 467 + tbody.innerHTML = rows.join(''); 468 + } 469 + 470 + // Sort click handler 471 + document.querySelectorAll('th[data-col]').forEach(th => { 472 + th.addEventListener('click', () => { 473 + const col = th.dataset.col; 474 + if (sortCol === col) { sortAsc = !sortAsc; } 475 + else { sortCol = col; sortAsc = col === 'name'; } 476 + 477 + // Update arrows 478 + document.querySelectorAll('th[data-col] .sort-arrow').forEach(el => el.textContent = ''); 479 + th.querySelector('.sort-arrow').textContent = sortAsc ? ' \u25B2' : ' \u25BC'; 480 + 481 + render(); 482 + }); 483 + }); 484 + 485 + searchBox.addEventListener('input', render); 486 + sourceFilter.addEventListener('change', render); 487 + tierFilter.addEventListener('change', render); 488 + 489 + // Initial render 490 + render(); 491 + 492 + // Set initial sort arrow 493 + document.querySelector('th[data-col="usage"] .sort-arrow').textContent = ' \u25BC'; 494 + </script> 495 + 496 + </body> 497 + </html>