├── .nvmrc ├── .npmrc ├── .mocharc.json ├── .gitattributes ├── .babelrc.json ├── docs └── matching-browser-releases │ ├── hg-changeset.png │ ├── bugzilla-target.png │ ├── dxr-navigation-box.png │ ├── find-releases-tool.png │ ├── hg-tooltip-revision.png │ ├── bugzilla-fixedin-top.png │ ├── hg-revisions-ontrack.png │ └── bugzilla-relnote-firefox.png ├── .vscode ├── extensions.json └── settings.json ├── .editorconfig ├── .gitignore ├── .prettierignore ├── .c8rc.json ├── .prettierrc ├── scripts ├── bulk-editor │ ├── index.ts │ └── tags │ │ ├── index.ts │ │ ├── add.ts │ │ └── remove.ts ├── lib │ ├── data-folders.ts │ ├── ajv.ts │ ├── pluralize.test.ts │ ├── pluralize.ts │ └── compare-features.test.ts └── release │ └── semver-pulls.ts ├── .npmignore ├── .github ├── workflows │ ├── auto-merge.yml │ ├── issue-regex-labeler.yml │ ├── pr-rebase-needed.yml │ └── add-push-artifacts.yml ├── PULL_REQUEST_TEMPLATE.md ├── dependabot.yml ├── issue-regex-labeler.yml ├── CODEOWNERS └── ISSUE_TEMPLATE │ └── config.yml ├── utils ├── index.ts ├── README.md ├── normalize-path.ts ├── iter-support.ts ├── spawn.ts ├── normalize-path.test.ts ├── query.ts └── iter-support.test.ts ├── types ├── external.d.ts └── index.d.ts ├── index.test.ts ├── tsconfig.json ├── lint ├── fixer │ ├── property-order.ts │ └── links.ts └── linter │ └── test-overlap.ts ├── CODE_OF_CONDUCT.md ├── webextensions └── manifest │ ├── dictionaries.json │ ├── offline_enabled.json │ ├── developer.json │ ├── version_name.json │ ├── name.json │ ├── short_name.json │ ├── description.json │ ├── default_locale.json │ ├── devtools_page.json │ ├── options_page.json │ ├── version.json │ ├── homepage_url.json │ ├── host_permissions.json │ ├── optional_host_permissions.json │ ├── author.json │ ├── externally_connectable.json │ └── side_panel.json ├── api ├── MouseScrollEvent.json ├── EntrySync.json ├── XRLayer.json ├── WebGLObject.json ├── MediaSourceHandle.json ├── SharedStorageModifierMethod.json ├── SVGDiscardElement.json ├── _globals │ ├── scheduler.json │ ├── origin.json │ └── trustedTypes.json ├── EXT_texture_norm16.json ├── WebGLSync.json ├── WebGLQuery.json ├── WorkletGlobalScope.json ├── WebGLSampler.json ├── CSSStartingStyleRule.json ├── EXT_color_buffer_float.json ├── OES_fbo_render_mipmap.json ├── FileEntrySync.json ├── CSSImageValue.json ├── WebGLTransformFeedback.json ├── WebGLVertexArrayObject.json ├── DirectoryEntrySync.json ├── DirectoryReaderSync.json ├── HTMLSelectedContentElement.json └── KHR_parallel_shader_compile.json ├── css ├── properties │ ├── -webkit-locale.json │ ├── -webkit-text-zoom.json │ ├── -webkit-user-drag.json │ ├── -webkit-app-region.json │ ├── -webkit-rtl-ordering.json │ ├── -webkit-logical-height.json │ ├── -webkit-logical-width.json │ ├── -webkit-margin-after.json │ ├── -webkit-margin-before.json │ ├── -webkit-text-combine.json │ ├── -webkit-cursor-visibility.json │ ├── -webkit-mask-source-type.json │ ├── -webkit-column-break-after.json │ ├── -webkit-column-break-before.json │ ├── -webkit-column-break-inside.json │ ├── -webkit-max-logical-height.json │ ├── -webkit-max-logical-width.json │ ├── -webkit-min-logical-height.json │ ├── -webkit-min-logical-width.json │ ├── -webkit-transform-origin-x.json │ ├── -webkit-transform-origin-y.json │ ├── -webkit-transform-origin-z.json │ ├── -webkit-perspective-origin-x.json │ ├── -webkit-perspective-origin-y.json │ ├── -webkit-border-vertical-spacing.json │ ├── -webkit-border-horizontal-spacing.json │ ├── -webkit-line-align.json │ ├── -webkit-line-grid.json │ ├── -webkit-line-snap.json │ ├── -webkit-nbsp-mode.json │ ├── -webkit-column-axis.json │ ├── -webkit-column-progression.json │ ├── -webkit-line-box-contain.json │ ├── -webkit-hyphenate-limit-after.json │ ├── -webkit-hyphenate-limit-lines.json │ ├── -webkit-hyphenate-limit-before.json │ ├── -webkit-text-decorations-in-effect.json │ ├── -moz-float-edge.json │ ├── -moz-force-broken-image-icon.json │ ├── -moz-user-focus.json │ ├── background-repeat-x.json │ ├── background-repeat-y.json │ ├── -webkit-box-reflect.json │ ├── -webkit-text-security.json │ ├── -webkit-mask-box-image.json │ ├── -webkit-touch-callout.json │ ├── glyph-orientation-vertical.json │ ├── r.json │ ├── x.json │ └── y.json ├── selectors │ ├── search-text.json │ ├── -moz-first-node.json │ ├── -moz-last-node.json │ ├── -moz-list-bullet.json │ ├── -moz-list-number.json │ ├── -moz-progress-bar.json │ ├── -moz-range-thumb.json │ ├── -moz-range-track.json │ ├── -webkit-meter-bar.json │ ├── -moz-color-swatch.json │ ├── -moz-range-progress.json │ ├── -webkit-progress-bar.json │ ├── -webkit-slider-thumb.json │ ├── -moz-broken.json │ ├── -webkit-progress-value.json │ ├── target-after.json │ ├── -webkit-inner-spin-button.json │ ├── target-before.json │ ├── interest-source.json │ ├── interest-target.json │ ├── -webkit-meter-inner-element.json │ ├── -webkit-meter-optimum-value.json │ ├── -webkit-slider-runnable-track.json │ └── view-transition-group-children.json └── types │ └── type.json ├── webassembly ├── jspi.json ├── fixed-width-SIMD.json ├── branch-hinting.json ├── multi-value.json ├── mutable-globals.json ├── BigInt-to-i64-integration.json ├── garbage-collection.json ├── relaxed-SIMD.json ├── tail-calls.json ├── reference-types.json ├── bulk-memory-operations.json ├── jsStringBuiltins.json ├── extended-constant-expressions.json ├── memory64.json ├── sign-extension-operations.json ├── exception-handling.json ├── typedFunctionReferences.json └── threads-and-atomics.json ├── http └── headers │ ├── Sec-Browsing-Topics.json │ ├── DPR.json │ ├── X-DNS-Prefetch-Control.json │ ├── Observe-Browsing-Topics.json │ ├── Snapshot-Content-Location.json │ ├── Width.json │ ├── Content-DPR.json │ ├── Priority.json │ ├── Viewport-Width.json │ └── NEL.json ├── mathml └── elements │ └── mfenced.json ├── html └── elements │ └── rtc.json ├── .lefthook.yml └── mediatypes └── image └── heif.json /.nvmrc: -------------------------------------------------------------------------------- 1 | v24 2 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | -------------------------------------------------------------------------------- /.mocharc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extensions": ["ts", "tsx"] 3 | } 4 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | *.json linguist-detectable 3 | -------------------------------------------------------------------------------- /.babelrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": ["@babel/plugin-syntax-import-assertions"] 3 | } 4 | -------------------------------------------------------------------------------- /docs/matching-browser-releases/hg-changeset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/browser-compat-data/main/docs/matching-browser-releases/hg-changeset.png -------------------------------------------------------------------------------- /docs/matching-browser-releases/bugzilla-target.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/browser-compat-data/main/docs/matching-browser-releases/bugzilla-target.png -------------------------------------------------------------------------------- /docs/matching-browser-releases/dxr-navigation-box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/browser-compat-data/main/docs/matching-browser-releases/dxr-navigation-box.png -------------------------------------------------------------------------------- /docs/matching-browser-releases/find-releases-tool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/browser-compat-data/main/docs/matching-browser-releases/find-releases-tool.png -------------------------------------------------------------------------------- /docs/matching-browser-releases/hg-tooltip-revision.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/browser-compat-data/main/docs/matching-browser-releases/hg-tooltip-revision.png -------------------------------------------------------------------------------- /docs/matching-browser-releases/bugzilla-fixedin-top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/browser-compat-data/main/docs/matching-browser-releases/bugzilla-fixedin-top.png -------------------------------------------------------------------------------- /docs/matching-browser-releases/hg-revisions-ontrack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/browser-compat-data/main/docs/matching-browser-releases/hg-revisions-ontrack.png -------------------------------------------------------------------------------- /docs/matching-browser-releases/bugzilla-relnote-firefox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/browser-compat-data/main/docs/matching-browser-releases/bugzilla-relnote-firefox.png -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "dbaeumer.vscode-eslint", 4 | "editorconfig.editorconfig", 5 | "richie5um2.vscode-sort-json" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | __enumerating__*/ 2 | .features.json 3 | .idea 4 | *.log 5 | /node_modules/ 6 | /build/ 7 | !/scripts/build/ 8 | yarn.lock 9 | .eslintcache 10 | .nyc_output/ 11 | coverage.lcov 12 | coverage/ 13 | types/types.d.ts 14 | .DS_Store 15 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | *.json 2 | !/*.json 3 | !/schemas/*.json 4 | !/scripts/build/ 5 | 6 | LICENSE 7 | .*ignore 8 | .editorconfig 9 | /package-lock.json 10 | /CODE_OF_CONDUCT.md 11 | /build/ 12 | coverage/ 13 | .features.json 14 | types.d.ts 15 | -------------------------------------------------------------------------------- /.c8rc.json: -------------------------------------------------------------------------------- 1 | { 2 | "all": true, 3 | "include": ["index.ts", "**/scripts/**", "**/test/**", "**/utils/**"], 4 | "exclude": [ 5 | "**/.nyc_output/**", 6 | "**/coverage/**", 7 | "**/node_modules/**", 8 | "**/**.test.ts" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/prettierrc", 3 | "singleQuote": true, 4 | "trailingComma": "all", 5 | "overrides": [ 6 | { 7 | "files": ["**/*.yml"], 8 | "options": { 9 | "singleQuote": false 10 | } 11 | } 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /scripts/bulk-editor/index.ts: -------------------------------------------------------------------------------- 1 | /* This file is a part of @mdn/browser-compat-data 2 | * See LICENSE file for more information. */ 3 | 4 | import yargs from 'yargs'; 5 | import { hideBin } from 'yargs/helpers'; 6 | 7 | import tags from './tags/index.js'; 8 | 9 | yargs(hideBin(process.argv)).command([tags]).demandCommand().help().parse(); 10 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .gitattributes 2 | .github 3 | .prettierignore 4 | .prettierrc 5 | .vscode 6 | build 7 | !/build/data.json 8 | !/build/import.d.mts 9 | !/build/legacynode.mjs 10 | !/build/require.d.ts 11 | !/build/types.d.ts 12 | docs 13 | test 14 | schemas 15 | .editorconfig 16 | CODE_OF_CONDUCT.md 17 | CONTRIBUTING.md 18 | GOVERNANCE.md 19 | utils 20 | scripts 21 | -------------------------------------------------------------------------------- /.github/workflows/auto-merge.yml: -------------------------------------------------------------------------------- 1 | name: auto-merge 2 | 3 | on: 4 | pull_request_target: 5 | branches: 6 | - main 7 | 8 | permissions: {} # No GITHUB_TOKEN permissions, as we use GH_TOKEN instead. 9 | 10 | jobs: 11 | auto-merge: 12 | uses: mdn/workflows/.github/workflows/auto-merge.yml@main 13 | with: 14 | target-repo: "mdn/browser-compat-data" 15 | secrets: 16 | GH_TOKEN: ${{ secrets.GH_TOKEN }} 17 | -------------------------------------------------------------------------------- /utils/index.ts: -------------------------------------------------------------------------------- 1 | /* This file is a part of @mdn/browser-compat-data 2 | * See LICENSE file for more information. */ 3 | 4 | import iterSupport from './iter-support.js'; 5 | import query from './query.js'; 6 | import spawn from './spawn.js'; 7 | import spawnAsync from './spawn-async.js'; 8 | import walk from './walk.js'; 9 | import normalizePath from './normalize-path.js'; 10 | 11 | export { iterSupport, normalizePath, query, spawn, spawnAsync, walk }; 12 | -------------------------------------------------------------------------------- /scripts/lib/data-folders.ts: -------------------------------------------------------------------------------- 1 | /* This file is a part of @mdn/browser-compat-data 2 | * See LICENSE file for more information. */ 3 | 4 | export const dataFoldersMinusBrowsers = [ 5 | 'api', 6 | 'css', 7 | 'html', 8 | 'http', 9 | 'javascript', 10 | 'manifests', 11 | 'mathml', 12 | 'mediatypes', 13 | 'svg', 14 | 'webassembly', 15 | 'webdriver', 16 | 'webextensions', 17 | ]; 18 | 19 | export default [...dataFoldersMinusBrowsers, 'browsers']; 20 | -------------------------------------------------------------------------------- /types/external.d.ts: -------------------------------------------------------------------------------- 1 | /* This file is a part of @mdn/browser-compat-data 2 | * See LICENSE file for more information. */ 3 | 4 | /* eslint no-unused-vars: 0 */ 5 | 6 | // XXX Remove once https://github.com/tschaub/es-main/pull/10 merged 7 | declare module 'es-main' { 8 | export default function (meta: ImportMeta): boolean; 9 | export function stripExt(name: string): string; 10 | } 11 | 12 | declare module '@desertnet/html-parser'; 13 | 14 | declare module 'better-ajv-errors'; 15 | -------------------------------------------------------------------------------- /types/index.d.ts: -------------------------------------------------------------------------------- 1 | /* This file is a part of @mdn/browser-compat-data 2 | * See LICENSE file for more information. */ 3 | 4 | import { SupportStatement } from '../types'; 5 | 6 | export type InternalSupportStatement = SupportStatement | 'mirror'; 7 | 8 | export type InternalSupportBlock = Partial< 9 | Record 10 | >; 11 | 12 | export type DataType = 13 | | CompatData 14 | | BrowserStatement 15 | | CompatStatement 16 | | Identifier; 17 | -------------------------------------------------------------------------------- /utils/README.md: -------------------------------------------------------------------------------- 1 | # Experimental utilities 2 | 3 | These are experimental utilities for working with compat data, which may inform future work on the project's API. The modules in this directory are NOT included in the released `@mdn/browser-compat-data` package. They are NOT covered by the [_Semantic versioning policy_](../README.md#Semantic-versioning-policy); backwards compatibility is not assured. With those limitations in mind, you're free to experiment with these utilities and [provide feedback](https://github.com/mdn/browser-compat-data/issues/new/choose). 4 | -------------------------------------------------------------------------------- /.github/workflows/issue-regex-labeler.yml: -------------------------------------------------------------------------------- 1 | # Labels issues by BCD key, MDN URL or other regex match in issue description. 2 | name: Issue Labeler 3 | on: 4 | issues: 5 | types: [opened] 6 | 7 | permissions: 8 | contents: read 9 | issues: write 10 | 11 | jobs: 12 | issue-labeler: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - uses: github/issue-labeler@c1b0f9f52a63158c4adc09425e858e87b32e9685 # v3.4 16 | with: 17 | configuration-path: .github/issue-regex-labeler.yml 18 | enable-versioned-regex: 0 19 | include-title: 1 20 | repo-token: "${{ secrets.GITHUB_TOKEN }}" 21 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | #### Summary 4 | 5 | 6 | 7 | #### Test results and supporting details 8 | 9 | 10 | 11 | 12 | 13 | #### Related issues 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /index.test.ts: -------------------------------------------------------------------------------- 1 | /* This file is a part of @mdn/browser-compat-data 2 | * See LICENSE file for more information. */ 3 | 4 | import assert from 'node:assert/strict'; 5 | 6 | import { CompatStatement } from './types/types.js'; 7 | 8 | import bcd from './index.js'; 9 | 10 | describe('Using BCD', () => { 11 | it('subscript notation', () => { 12 | const data: CompatStatement | undefined = 13 | bcd['api']['AbortController']['__compat']; 14 | assert.ok(data); 15 | }); 16 | 17 | it('dot notation', () => { 18 | const data: CompatStatement | undefined = bcd.api.AbortController.__compat; 19 | assert.ok(data); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /.github/workflows/pr-rebase-needed.yml: -------------------------------------------------------------------------------- 1 | name: PR Needs Rebase 2 | on: 3 | push: 4 | pull_request_target: 5 | branches: 6 | - main 7 | types: [synchronize] 8 | 9 | permissions: 10 | contents: read 11 | pull-requests: write # To add labels and comment on PRs 12 | 13 | concurrency: 14 | group: pr-rebase-needed-${{ github.event.pull_request.number || github.ref_name }} 15 | cancel-in-progress: true 16 | 17 | jobs: 18 | label-rebase-needed: 19 | uses: mdn/workflows/.github/workflows/pr-rebase-needed.yml@main 20 | with: 21 | target-repo: "mdn/browser-compat-data" 22 | secrets: 23 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 24 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: npm 4 | directory: / 5 | schedule: 6 | interval: daily 7 | time: "11:00" 8 | groups: 9 | minor-patch: 10 | update-types: 11 | - minor 12 | - patch 13 | exclude-patterns: 14 | - "@ddbeck/mdn-content-inventory" 15 | - web-features 16 | - web-specs 17 | commit-message: 18 | prefix: chore 19 | include: scope 20 | 21 | - package-ecosystem: github-actions 22 | directory: / 23 | schedule: 24 | interval: weekly 25 | commit-message: 26 | prefix: ci 27 | include: scope 28 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */ 4 | 5 | "target": "ES2022", 6 | "module": "NodeNext", 7 | "moduleResolution": "nodenext", 8 | "noFallthroughCasesInSwitch": true, 9 | "noImplicitAny": false, 10 | "esModuleInterop": true, 11 | "resolveJsonModule": true, 12 | "allowSyntheticDefaultImports": true, 13 | "allowUnreachableCode": false, 14 | "forceConsistentCasingInFileNames": true, 15 | "strict": true, 16 | "skipLibCheck": true 17 | }, 18 | "exclude": ["build", "**/*.test.ts"], 19 | "typeRoots": ["./node_modules/@types", "./types"] 20 | } 21 | -------------------------------------------------------------------------------- /lint/fixer/property-order.ts: -------------------------------------------------------------------------------- 1 | /* This file is a part of @mdn/browser-compat-data 2 | * See LICENSE file for more information. */ 3 | 4 | import stringifyAndOrderProperties from '../../scripts/lib/stringify-and-order-properties.js'; 5 | 6 | /** 7 | * Fix issues with the property order throughout the BCD files 8 | * @param filename The name of the file to fix 9 | * @param actual The current content of the file 10 | * @returns expected content of the file 11 | */ 12 | const fixPropertyOrder = (filename: string, actual: string): string => { 13 | const expected = stringifyAndOrderProperties(actual); 14 | 15 | return expected; 16 | }; 17 | 18 | export default fixPropertyOrder; 19 | -------------------------------------------------------------------------------- /scripts/bulk-editor/tags/index.ts: -------------------------------------------------------------------------------- 1 | /* This file is a part of @mdn/browser-compat-data 2 | * See LICENSE file for more information. */ 3 | 4 | import addCommand from './add.js'; 5 | import removeCommand from './remove.js'; 6 | 7 | const command = { 8 | command: 'tags', 9 | description: 'Modify tags', 10 | // Yargs requires a handler method present, regardless if it does anything 11 | // eslint-disable-next-line @typescript-eslint/no-empty-function,jsdoc/require-jsdoc 12 | handler: () => {}, 13 | // eslint-disable-next-line jsdoc/require-jsdoc 14 | builder: (yargs) => 15 | yargs.command([addCommand, removeCommand]).demandCommand().help(), 16 | }; 17 | 18 | export default command; 19 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Community Participation Guidelines 2 | 3 | This repository is governed by Mozilla's code of conduct and etiquette guidelines. 4 | For more details, please read the 5 | [Mozilla Community Participation Guidelines](https://www.mozilla.org/about/governance/policies/participation/). 6 | 7 | ## How to Report 8 | 9 | For more information on how to report violations of the Community Participation Guidelines, please read our [How to Report](https://www.mozilla.org/about/governance/policies/participation/reporting/) page. 10 | 11 | ## Project Specific Etiquette 12 | 13 | For more specific information about how and by whom this project is governed, please see the BCD [governance](./GOVERNANCE.md) doc. 14 | -------------------------------------------------------------------------------- /.github/issue-regex-labeler.yml: -------------------------------------------------------------------------------- 1 | data:api: 2 | - 'api\.' 3 | - '\/docs\/Web\/API' 4 | data:css: 5 | - 'css\.' 6 | - '\/docs\/Web\/CSS' 7 | data:html: 8 | - 'html\.' 9 | - '\/docs\/Web\/HTML' 10 | data:http: 11 | - 'http\.' 12 | - '\/docs\/Web\/HTTP' 13 | data:js: 14 | - 'js\.' 15 | - '\/docs\/Web\/JavaScript' 16 | data:manifests: 17 | - 'manifests\.' 18 | - '\/docs\/Web\/Progressive_web_apps\/Manifest' 19 | data:mathml: 20 | - 'mathml\.' 21 | - '\/docs\/Web\/MathML' 22 | data:svg: 23 | - 'svg\.' 24 | - '\/docs\/Web\/SVG' 25 | data:wasm: 26 | - 'webassembly\.' 27 | - '\/docs\/WebAssembly' 28 | data:webdriver: 29 | - 'webdriver\.' 30 | - '\/docs\/Web\/WebDriver' 31 | data:webext: 32 | - 'webextensions\.' 33 | - '\/docs\/Mozilla\/Add-ons' 34 | -------------------------------------------------------------------------------- /webextensions/manifest/dictionaries.json: -------------------------------------------------------------------------------- 1 | { 2 | "webextensions": { 3 | "manifest": { 4 | "dictionaries": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/manifest.json/dictionaries", 7 | "support": { 8 | "chrome": { 9 | "version_added": false 10 | }, 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": "61" 14 | }, 15 | "firefox_android": "mirror", 16 | "opera": "mirror", 17 | "safari": { 18 | "version_added": false 19 | }, 20 | "safari_ios": "mirror" 21 | } 22 | } 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /utils/normalize-path.ts: -------------------------------------------------------------------------------- 1 | /* This file is a part of @mdn/browser-compat-data 2 | * See LICENSE file for more information. */ 3 | 4 | import path from 'node:path'; 5 | 6 | /** 7 | * Normalize a file path for cross-platform compatibility 8 | * @param p The file path 9 | * @param testPath The path handler 10 | * @returns The normalized path 11 | */ 12 | export const normalizePathInternal = ( 13 | p: string, 14 | testPath: any = path, 15 | ): string => { 16 | if (testPath.sep === '/') { 17 | return p; 18 | } 19 | return p.replace(/\\/gi, '/'); 20 | }; 21 | 22 | /** 23 | * Normalize a file path for cross-platform compatibility 24 | * @param p The file path 25 | * @returns The normalized path 26 | */ 27 | export default (p: string): string => normalizePathInternal(p, path); 28 | -------------------------------------------------------------------------------- /webextensions/manifest/offline_enabled.json: -------------------------------------------------------------------------------- 1 | { 2 | "webextensions": { 3 | "manifest": { 4 | "offline_enabled": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/manifest.json/offline_enabled", 7 | "support": { 8 | "chrome": { 9 | "version_added": "≤72" 10 | }, 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "opera": "mirror", 17 | "safari": { 18 | "version_added": false 19 | }, 20 | "safari_ios": "mirror" 21 | } 22 | } 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /webextensions/manifest/developer.json: -------------------------------------------------------------------------------- 1 | { 2 | "webextensions": { 3 | "manifest": { 4 | "developer": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/manifest.json/developer", 7 | "support": { 8 | "chrome": { 9 | "version_added": false 10 | }, 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": "52" 14 | }, 15 | "firefox_android": "mirror", 16 | "opera": { 17 | "version_added": "≤45" 18 | }, 19 | "safari": { 20 | "version_added": false 21 | }, 22 | "safari_ios": "mirror" 23 | } 24 | } 25 | } 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /scripts/lib/ajv.ts: -------------------------------------------------------------------------------- 1 | import { Ajv } from 'ajv'; 2 | import ajvErrors from 'ajv-errors'; 3 | import ajvFormats from 'ajv-formats'; 4 | 5 | /** 6 | * Returns a new pre-configured Ajv instance. 7 | * @returns the Ajv instance. 8 | */ 9 | export const createAjv = (): Ajv => { 10 | const ajv = new Ajv({ allErrors: true }); 11 | // We use 'fast' because as a side effect that makes the "uri" format more lax. 12 | // By default the "uri" format rejects ① and similar in URLs. 13 | ajvFormats.default(ajv, { mode: 'fast' }); 14 | // Allow for custom error messages to provide better directions for contributors 15 | ajvErrors.default(ajv); 16 | 17 | // Define keywords for schema->TS converter 18 | ajv.addKeyword('tsEnumNames'); 19 | ajv.addKeyword('tsName'); 20 | ajv.addKeyword('tsType'); 21 | 22 | return ajv; 23 | }; 24 | -------------------------------------------------------------------------------- /scripts/lib/pluralize.test.ts: -------------------------------------------------------------------------------- 1 | /* This file is a part of @mdn/browser-compat-data 2 | * See LICENSE file for more information. */ 3 | 4 | import assert from 'node:assert/strict'; 5 | 6 | import pluralize from './pluralize.js'; 7 | 8 | describe('Pluralize', () => { 9 | it('should return singular form when quantifier is 1', () => { 10 | const result = pluralize('apple', 1); 11 | assert.equal(result, '1 apple'); 12 | }); 13 | 14 | it('should return plural form when quantifier is not 1', () => { 15 | const result = pluralize('apple', 2); 16 | assert.equal(result, '2 apples'); 17 | }); 18 | 19 | it('should return formatted string with chalk when useChalk is true', () => { 20 | const result = pluralize('apple', 2, true); 21 | assert.equal(result, '\u001b[1m2\u001b[22m apples'); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /utils/iter-support.ts: -------------------------------------------------------------------------------- 1 | /* This file is a part of @mdn/browser-compat-data 2 | * See LICENSE file for more information. */ 3 | 4 | import { 5 | CompatStatement, 6 | BrowserName, 7 | SimpleSupportStatement, 8 | } from '../types/types.js'; 9 | 10 | /** 11 | * Get support for a specific browser in array form 12 | * @param compat The compatibility data 13 | * @param browser The browser to get data for 14 | * @returns The array of support statements for the browser 15 | */ 16 | export default ( 17 | compat: CompatStatement, 18 | browser: BrowserName, 19 | ): SimpleSupportStatement[] => { 20 | if (browser in compat.support) { 21 | const data = compat.support[browser]; 22 | if (data) { 23 | return Array.isArray(data) ? data : [data]; 24 | } 25 | } 26 | 27 | return [{ version_added: false }]; 28 | }; 29 | -------------------------------------------------------------------------------- /webextensions/manifest/version_name.json: -------------------------------------------------------------------------------- 1 | { 2 | "webextensions": { 3 | "manifest": { 4 | "version_name": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/manifest.json/version_name", 7 | "support": { 8 | "chrome": { 9 | "version_added": "≤65" 10 | }, 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "opera": "mirror", 17 | "safari": { 18 | "version_added": "14" 19 | }, 20 | "safari_ios": { 21 | "version_added": "15" 22 | } 23 | } 24 | } 25 | } 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /scripts/bulk-editor/tags/add.ts: -------------------------------------------------------------------------------- 1 | /* This file is a part of @mdn/browser-compat-data 2 | * See LICENSE file for more information. */ 3 | 4 | import { updateFeatures } from '../utils.js'; 5 | 6 | const command = { 7 | command: 'add ', 8 | desc: 'Add the following tag to the BCD features', 9 | /** 10 | * handler - Action to perform for 'tags add' 11 | * @param argv Parameter list 12 | */ 13 | handler: (argv) => { 14 | updateFeatures(argv['bcd-id'], (json) => { 15 | // If there is no tags entry, create one 16 | if (!json['tags']) { 17 | json['tags'] = []; 18 | } 19 | 20 | // Add the tag 21 | if (!json['tags'].includes(argv['tag'])) { 22 | json['tags'].push(argv['tag']); 23 | } 24 | 25 | return json; 26 | }); 27 | }, 28 | }; 29 | 30 | export default command; 31 | -------------------------------------------------------------------------------- /webextensions/manifest/name.json: -------------------------------------------------------------------------------- 1 | { 2 | "webextensions": { 3 | "manifest": { 4 | "name": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/manifest.json/name", 7 | "support": { 8 | "chrome": { 9 | "version_added": "≤54" 10 | }, 11 | "edge": { 12 | "version_added": "14" 13 | }, 14 | "firefox": { 15 | "version_added": "48" 16 | }, 17 | "firefox_android": "mirror", 18 | "opera": "mirror", 19 | "safari": { 20 | "version_added": "14" 21 | }, 22 | "safari_ios": { 23 | "version_added": "15" 24 | } 25 | } 26 | } 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "sortJSON.orderOverride": [ 3 | "version_added", 4 | "version_removed" 5 | ], 6 | "sortJSON.orderUnderride": [ 7 | "status", 8 | "standard_track", 9 | "deprecated" 10 | ], 11 | "json.schemas": [ 12 | { 13 | "fileMatch": [ 14 | "/api/*.json", 15 | "/css/*.json", 16 | "/html/*.json", 17 | "/http/*.json", 18 | "/javascript/*.json", 19 | "/manifests/*.json", 20 | "/mathml/*.json", 21 | "/mediatypes/*.json", 22 | "/svg/*.json", 23 | "/webdriver/*.json", 24 | "/webextensions/*.json" 25 | ], 26 | "url": "/schemas/compat-data.schema.json" 27 | }, 28 | { 29 | "fileMatch": [ 30 | "/browsers/*.json" 31 | ], 32 | "url": "/schemas/browsers.schema.json" 33 | } 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /webextensions/manifest/short_name.json: -------------------------------------------------------------------------------- 1 | { 2 | "webextensions": { 3 | "manifest": { 4 | "short_name": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/manifest.json/short_name", 7 | "support": { 8 | "chrome": { 9 | "version_added": "≤54" 10 | }, 11 | "edge": { 12 | "version_added": "14" 13 | }, 14 | "firefox": { 15 | "version_added": "48" 16 | }, 17 | "firefox_android": "mirror", 18 | "opera": "mirror", 19 | "safari": { 20 | "version_added": "14" 21 | }, 22 | "safari_ios": { 23 | "version_added": "15" 24 | } 25 | } 26 | } 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /webextensions/manifest/description.json: -------------------------------------------------------------------------------- 1 | { 2 | "webextensions": { 3 | "manifest": { 4 | "description": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/manifest.json/description", 7 | "support": { 8 | "chrome": { 9 | "version_added": "≤54" 10 | }, 11 | "edge": { 12 | "version_added": "14" 13 | }, 14 | "firefox": { 15 | "version_added": "48" 16 | }, 17 | "firefox_android": "mirror", 18 | "opera": "mirror", 19 | "safari": { 20 | "version_added": "14" 21 | }, 22 | "safari_ios": { 23 | "version_added": "15" 24 | } 25 | } 26 | } 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /scripts/release/semver-pulls.ts: -------------------------------------------------------------------------------- 1 | /* This file is a part of @mdn/browser-compat-data 2 | * See LICENSE file for more information. */ 3 | 4 | import { queryPRs } from './utils.js'; 5 | 6 | const releaseNotesLabels = { 7 | major: 'semver-major-bump', 8 | minor: 'semver-minor-bump', 9 | }; 10 | 11 | /** 12 | * Get pull requests that have been merged since the specified date that perform a major/minor semver bump 13 | * @param fromDate The date to check PRs from 14 | * @returns The PRs that perform semver bumps higher than a patch 15 | */ 16 | export const getSemverBumpPulls = ( 17 | fromDate: string, 18 | ): { major: any; minor: any } => 19 | Object.fromEntries( 20 | ['major', 'minor'].map((l) => [ 21 | l, 22 | queryPRs({ 23 | search: `merged:>=${fromDate} label:"${releaseNotesLabels[l]}"`, 24 | }), 25 | ]), 26 | ) as { major: any; minor: any }; 27 | -------------------------------------------------------------------------------- /webextensions/manifest/default_locale.json: -------------------------------------------------------------------------------- 1 | { 2 | "webextensions": { 3 | "manifest": { 4 | "default_locale": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/manifest.json/default_locale", 7 | "support": { 8 | "chrome": { 9 | "version_added": "≤54" 10 | }, 11 | "edge": { 12 | "version_added": "14" 13 | }, 14 | "firefox": { 15 | "version_added": "48" 16 | }, 17 | "firefox_android": "mirror", 18 | "opera": "mirror", 19 | "safari": { 20 | "version_added": "14" 21 | }, 22 | "safari_ios": { 23 | "version_added": "15" 24 | } 25 | } 26 | } 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /webextensions/manifest/devtools_page.json: -------------------------------------------------------------------------------- 1 | { 2 | "webextensions": { 3 | "manifest": { 4 | "devtools_page": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/manifest.json/devtools_page", 7 | "support": { 8 | "chrome": { 9 | "version_added": "≤58" 10 | }, 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": "54" 14 | }, 15 | "firefox_android": { 16 | "version_added": false 17 | }, 18 | "opera": "mirror", 19 | "safari": { 20 | "version_added": "16" 21 | }, 22 | "safari_ios": { 23 | "version_added": false 24 | } 25 | } 26 | } 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # See GOVERNANCE.md for more about this repository's owners 2 | # and this project's governance. 3 | 4 | # Order is important: The last matching pattern takes precedence. 5 | # For more detailed information, see: 6 | # https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/about-code-owners 7 | 8 | /schemas/ @mdn/bcd-owners 9 | 10 | /.github/ @mdn/engineering 11 | /.vscode/ @mdn/engineering 12 | /lint/ @mdn/engineering 13 | /scripts/ @mdn/engineering 14 | /types/ @mdn/engineering 15 | /utils/ @mdn/engineering 16 | /* @mdn/engineering 17 | /package.json @mdn/engineering @mdn-bot @mdn/bcd-releasers 18 | /package-lock.json @mdn/engineering @mdn-bot @mdn/bcd-releasers 19 | /SECURITY.md @mdn/engineering 20 | 21 | # Exclude some paths 22 | /.github/ISSUE_TEMPLATE/ 23 | /.github/PULL_REQUESET_TEMPLATE.md 24 | /*.md 25 | -------------------------------------------------------------------------------- /webextensions/manifest/options_page.json: -------------------------------------------------------------------------------- 1 | { 2 | "webextensions": { 3 | "manifest": { 4 | "options_page": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/manifest.json/options_page", 7 | "support": { 8 | "chrome": { 9 | "version_added": "≤65" 10 | }, 11 | "edge": { 12 | "version_added": "14" 13 | }, 14 | "firefox": { 15 | "version_added": "126" 16 | }, 17 | "firefox_android": "mirror", 18 | "opera": { 19 | "version_added": "15" 20 | }, 21 | "safari": { 22 | "version_added": "14" 23 | }, 24 | "safari_ios": { 25 | "version_added": "15" 26 | } 27 | } 28 | } 29 | } 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /lint/linter/test-overlap.ts: -------------------------------------------------------------------------------- 1 | /* This file is a part of @mdn/browser-compat-data 2 | * See LICENSE file for more information. */ 3 | 4 | import { Linter, Logger, LinterData } from '../utils.js'; 5 | import { BrowserName, SupportStatement } from '../../types/types.js'; 6 | import { checkOverlap } from '../common/overlap.js'; 7 | 8 | export default { 9 | name: 'Overlap', 10 | description: 'Ensure there are no statements with overlapping version ranges', 11 | scope: 'feature', 12 | /** 13 | * Test the data 14 | * @param logger The logger to output errors to 15 | * @param root The data to test 16 | * @param root.data The data to test 17 | */ 18 | check: (logger: Logger, { data }: LinterData) => { 19 | for (const [browser, support] of Object.entries(data.support)) { 20 | checkOverlap(support as SupportStatement, browser as BrowserName, { 21 | logger, 22 | }); 23 | } 24 | }, 25 | } as Linter; 26 | -------------------------------------------------------------------------------- /utils/spawn.ts: -------------------------------------------------------------------------------- 1 | import { 2 | spawnSync, 3 | SpawnSyncOptionsWithStringEncoding, 4 | } from 'node:child_process'; 5 | 6 | /** 7 | * Execute a command 8 | * @param command The command to execute 9 | * @param args The arguments to pass 10 | * @param opts The options to pass to spawnSync 11 | * @returns The output from the command 12 | */ 13 | export default ( 14 | command: string, 15 | args: readonly string[], 16 | opts?: Omit, 17 | ): string => { 18 | const result = spawnSync(command, args, { 19 | ...opts, 20 | encoding: 'utf8', 21 | shell: false, 22 | }); 23 | 24 | if (result.error) { 25 | throw result.error; 26 | } 27 | 28 | if (result.status !== 0) { 29 | throw new Error( 30 | `The command '${command}' returned non-zero exit status ${result.status}: ${result.stderr}`, 31 | ); 32 | } 33 | 34 | return result.stdout?.trim() || ''; 35 | }; 36 | -------------------------------------------------------------------------------- /webextensions/manifest/version.json: -------------------------------------------------------------------------------- 1 | { 2 | "webextensions": { 3 | "manifest": { 4 | "version": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/manifest.json/version", 7 | "support": { 8 | "chrome": { 9 | "version_added": "≤54", 10 | "notes": "Valid Chrome versions are a subset of valid Firefox versions." 11 | }, 12 | "edge": { 13 | "version_added": "14" 14 | }, 15 | "firefox": { 16 | "version_added": "48" 17 | }, 18 | "firefox_android": "mirror", 19 | "opera": "mirror", 20 | "safari": { 21 | "version_added": "14" 22 | }, 23 | "safari_ios": { 24 | "version_added": "15" 25 | } 26 | } 27 | } 28 | } 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /webextensions/manifest/homepage_url.json: -------------------------------------------------------------------------------- 1 | { 2 | "webextensions": { 3 | "manifest": { 4 | "homepage_url": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/manifest.json/homepage_url", 7 | "support": { 8 | "chrome": { 9 | "version_added": "≤54" 10 | }, 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": "48" 14 | }, 15 | "firefox_android": "mirror", 16 | "opera": "mirror", 17 | "safari": { 18 | "version_added": "14", 19 | "notes": "Not displayed in Safari Extensions settings." 20 | }, 21 | "safari_ios": { 22 | "version_added": "15", 23 | "notes": "Not displayed in Safari Extensions settings." 24 | } 25 | } 26 | } 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /utils/normalize-path.test.ts: -------------------------------------------------------------------------------- 1 | /* This file is a part of @mdn/browser-compat-data 2 | * See LICENSE file for more information. */ 3 | 4 | import assert from 'node:assert/strict'; 5 | 6 | import { normalizePathInternal } from './normalize-path.js'; 7 | 8 | describe('normalizePath()', () => { 9 | const pathWindows = { 10 | sep: '\\', 11 | }; 12 | 13 | const pathPOSIX = { 14 | sep: '/', 15 | }; 16 | 17 | describe('On Windows should replace "\\" with "/"', () => { 18 | assert.equal(normalizePathInternal('\\', pathWindows), '/'); 19 | assert.equal(normalizePathInternal('\\a\\b', pathWindows), '/a/b'); 20 | assert.equal(normalizePathInternal('a\\b', pathWindows), 'a/b'); 21 | }); 22 | 23 | describe('should do nothing with anything else', () => { 24 | assert.equal(normalizePathInternal('/', pathPOSIX), '/'); 25 | assert.equal(normalizePathInternal('/a-b', pathPOSIX), '/a-b'); 26 | assert.equal(normalizePathInternal('ab', pathPOSIX), 'ab'); 27 | }); 28 | }); 29 | -------------------------------------------------------------------------------- /webextensions/manifest/host_permissions.json: -------------------------------------------------------------------------------- 1 | { 2 | "webextensions": { 3 | "manifest": { 4 | "host_permissions": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/manifest.json/host_permissions", 7 | "support": { 8 | "chrome": { 9 | "version_added": "88", 10 | "notes": "Available for use in Manifest V3 or later." 11 | }, 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": "109", 15 | "notes": "Available for use in Manifest V3 or later." 16 | }, 17 | "firefox_android": "mirror", 18 | "opera": "mirror", 19 | "safari": { 20 | "version_added": "15.4", 21 | "notes": "Available for use in Manifest V3 or later." 22 | }, 23 | "safari_ios": "mirror" 24 | } 25 | } 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /scripts/bulk-editor/tags/remove.ts: -------------------------------------------------------------------------------- 1 | /* This file is a part of @mdn/browser-compat-data 2 | * See LICENSE file for more information. */ 3 | 4 | import { updateFeatures } from '../utils.js'; 5 | 6 | const command = { 7 | command: 'remove [bcd-id..]', 8 | desc: 'Remove the following tag from the BCD features', 9 | /** 10 | * handler - Action to perform for 'tags remove' 11 | * @param argv Parameter list 12 | */ 13 | handler: (argv) => { 14 | updateFeatures(argv['bcd-id'], (json) => { 15 | // If there is no tags entry, create one 16 | if (json['tags']) { 17 | const index = json['tags'].indexOf(argv['tag']); 18 | // Actually remove it if found 19 | if (index !== -1) { 20 | json['tags'].splice(index, 1); 21 | } 22 | 23 | // Remove the tags array if empty 24 | if (json['tags'].length === 0) { 25 | delete json.tags; 26 | } 27 | } 28 | 29 | return json; 30 | }); 31 | }, 32 | }; 33 | 34 | export default command; 35 | -------------------------------------------------------------------------------- /webextensions/manifest/optional_host_permissions.json: -------------------------------------------------------------------------------- 1 | { 2 | "webextensions": { 3 | "manifest": { 4 | "optional_host_permissions": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/manifest.json/optional_host_permissions", 7 | "support": { 8 | "chrome": { 9 | "version_added": "102", 10 | "notes": "Available for use in Manifest V3 or later." 11 | }, 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": "128", 15 | "notes": "Available for use in Manifest V3 or later." 16 | }, 17 | "firefox_android": "mirror", 18 | "opera": "mirror", 19 | "safari": { 20 | "version_added": "15.5", 21 | "notes": "Available for use in Manifest V3 or later." 22 | }, 23 | "safari_ios": "mirror" 24 | } 25 | } 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /utils/query.ts: -------------------------------------------------------------------------------- 1 | /* This file is a part of @mdn/browser-compat-data 2 | * See LICENSE file for more information. */ 3 | 4 | import { DataType } from '../types/index.js'; 5 | import bcd from '../index.js'; 6 | 7 | /** 8 | * Get a subtree of compat data. 9 | * @param path Dotted path to a given feature (e.g., `css.properties.background`) 10 | * @param data A tree to query. All of BCD, by default. 11 | * @returns A BCD subtree 12 | * @throws {ReferenceError} For invalid identifiers 13 | */ 14 | export default (path: string, data: DataType = bcd): DataType => { 15 | const pathElements = path.split('.'); 16 | let lookup = data; 17 | while (pathElements.length) { 18 | // "as string" cast performed because we know that pathElements.length > 0 19 | const next = pathElements.shift() as string; 20 | lookup = lookup[next]; 21 | if (lookup === undefined) { 22 | throw new ReferenceError( 23 | `${path} is not a valid tree identifier (failed at '${next}')`, 24 | ); 25 | } 26 | } 27 | return lookup; 28 | }; 29 | -------------------------------------------------------------------------------- /api/MouseScrollEvent.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "MouseScrollEvent": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/MouseScrollEvent", 6 | "support": { 7 | "chrome": { 8 | "version_added": false 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": "3.5" 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": false 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": false, 29 | "standard_track": false, 30 | "deprecated": true 31 | } 32 | } 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /css/properties/-webkit-locale.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-locale": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "11" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": "≤5.1" 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": false, 29 | "standard_track": false, 30 | "deprecated": false 31 | } 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /css/properties/-webkit-text-zoom.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-text-zoom": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": false 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": "10" 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": true, 29 | "standard_track": false, 30 | "deprecated": false 31 | } 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /css/properties/-webkit-user-drag.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-user-drag": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "1" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": "≤4" 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": false, 29 | "standard_track": false, 30 | "deprecated": false 31 | } 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: Baseline issue 4 | url: https://github.com/web-platform-dx/web-features 5 | about: Baseline issues should be reported directly to the repository hosting Baseline data. 6 | - name: Content or feature request 7 | url: https://github.com/mdn/mdn/issues/new/choose 8 | about: Propose new content for MDN Web Docs or submit a feature request using this link. 9 | - name: MDN GitHub Discussions 10 | url: https://github.com/orgs/mdn/discussions 11 | about: Does the issue involve a lot of pages, or are you not sure how it can be split into actionable tasks? Consider starting a discussion first. 12 | - name: MDN Web Docs on Discourse 13 | url: https://discourse.mozilla.org/c/mdn/learn/250 14 | about: Need help with assessments on MDN Web Docs? We have a support community for this purpose on Discourse. 15 | - name: Help with code 16 | url: https://stackoverflow.com/ 17 | about: If you are stuck and need help with code, StackOverflow is a great resource. 18 | -------------------------------------------------------------------------------- /css/properties/-webkit-app-region.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-app-region": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "24" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": false 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": true, 29 | "standard_track": false, 30 | "deprecated": false 31 | } 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /css/properties/-webkit-rtl-ordering.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-rtl-ordering": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "1" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": "≤4" 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": false, 29 | "standard_track": false, 30 | "deprecated": false 31 | } 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /scripts/lib/pluralize.ts: -------------------------------------------------------------------------------- 1 | /* This file is a part of @mdn/browser-compat-data 2 | * See LICENSE file for more information. */ 3 | 4 | import chalk from 'chalk-template'; 5 | 6 | const formatter = new Intl.NumberFormat('en-US'); 7 | 8 | /** 9 | * Format a number using Intl.NumberFormat 10 | * @param n The number to format 11 | * @returns The formatted number 12 | */ 13 | const formatNumber = (n: number): string => formatter.format(n); 14 | 15 | /** 16 | * Pluralizes a string 17 | * @param word Word in singular form 18 | * @param quantifier The quantifier 19 | * @param useChalk Use chalk formatting 20 | * @returns The pluralized string 21 | */ 22 | const pluralize = ( 23 | word: string, 24 | quantifier: number, 25 | useChalk = false, 26 | ): string => { 27 | const formattedQuantifier = formatNumber(quantifier); 28 | const formattedWord = `${word}${quantifier === 1 ? '' : 's'}`; 29 | return useChalk 30 | ? chalk`{bold ${formattedQuantifier}} ${formattedWord}` 31 | : `${formattedQuantifier} ${formattedWord}`; 32 | }; 33 | 34 | export default pluralize; 35 | -------------------------------------------------------------------------------- /css/properties/-webkit-logical-height.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-logical-height": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "8" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": "5.1" 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": false, 29 | "standard_track": false, 30 | "deprecated": false 31 | } 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /css/properties/-webkit-logical-width.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-logical-width": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "8" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": "5.1" 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": false, 29 | "standard_track": false, 30 | "deprecated": false 31 | } 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /css/properties/-webkit-margin-after.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-margin-after": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "8" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": "5.1" 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": false, 29 | "standard_track": false, 30 | "deprecated": false 31 | } 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /css/properties/-webkit-margin-before.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-margin-before": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "8" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": "5.1" 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": false, 29 | "standard_track": false, 30 | "deprecated": false 31 | } 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /css/properties/-webkit-text-combine.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-text-combine": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "9" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": "≤5.1" 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": false, 29 | "standard_track": false, 30 | "deprecated": false 31 | } 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /lint/fixer/links.ts: -------------------------------------------------------------------------------- 1 | /* This file is a part of @mdn/browser-compat-data 2 | * See LICENSE file for more information. */ 3 | 4 | import { IS_WINDOWS } from '../utils.js'; 5 | import { processData } from '../linter/test-links.js'; 6 | 7 | /** 8 | * Fix issues with links throughout the BCD files 9 | * @param filename The name of the file to fix 10 | * @param actual The current content of the file 11 | * @returns expected content of the file 12 | */ 13 | const fixLinks = async (filename: string, actual: string): Promise => { 14 | if (filename.includes('/browsers/')) { 15 | return actual; 16 | } 17 | 18 | const errors = await processData(actual); 19 | let expected = actual; 20 | 21 | if (IS_WINDOWS) { 22 | // prevent false positives from git.core.autocrlf on Windows 23 | expected = expected.replace(/\r/g, ''); 24 | } 25 | 26 | for (const error of errors) { 27 | if (error.expected) { 28 | expected = expected.replace(error.actual, error.expected); 29 | } 30 | } 31 | 32 | return expected; 33 | }; 34 | 35 | export default fixLinks; 36 | -------------------------------------------------------------------------------- /webextensions/manifest/author.json: -------------------------------------------------------------------------------- 1 | { 2 | "webextensions": { 3 | "manifest": { 4 | "author": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/manifest.json/author", 7 | "support": { 8 | "chrome": { 9 | "version_added": "≤58" 10 | }, 11 | "edge": { 12 | "version_added": "14", 13 | "notes": "Before Edge 79, this property was required." 14 | }, 15 | "firefox": { 16 | "version_added": "52" 17 | }, 18 | "firefox_android": "mirror", 19 | "opera": "mirror", 20 | "safari": { 21 | "version_added": "14", 22 | "notes": "Not displayed in Safari Extensions settings." 23 | }, 24 | "safari_ios": { 25 | "version_added": "15", 26 | "notes": "Not displayed in Safari Extensions settings." 27 | } 28 | } 29 | } 30 | } 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /css/properties/-webkit-cursor-visibility.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-cursor-visibility": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": false 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": "7" 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": true, 29 | "standard_track": false, 30 | "deprecated": false 31 | } 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /css/properties/-webkit-mask-source-type.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-mask-source-type": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": false 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": "7" 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": true, 29 | "standard_track": false, 30 | "deprecated": false 31 | } 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /css/properties/-webkit-column-break-after.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-column-break-after": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "1" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": "≤4" 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": false, 29 | "standard_track": false, 30 | "deprecated": false 31 | } 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /css/properties/-webkit-column-break-before.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-column-break-before": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "1" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": "≤4" 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": false, 29 | "standard_track": false, 30 | "deprecated": false 31 | } 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /css/properties/-webkit-column-break-inside.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-column-break-inside": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "1" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": "≤4" 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": false, 29 | "standard_track": false, 30 | "deprecated": false 31 | } 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /css/properties/-webkit-max-logical-height.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-max-logical-height": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "8" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": "5.1" 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": false, 29 | "standard_track": false, 30 | "deprecated": false 31 | } 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /css/properties/-webkit-max-logical-width.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-max-logical-width": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "8" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": "5.1" 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": false, 29 | "standard_track": false, 30 | "deprecated": false 31 | } 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /css/properties/-webkit-min-logical-height.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-min-logical-height": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "8" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": "5.1" 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": false, 29 | "standard_track": false, 30 | "deprecated": false 31 | } 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /css/properties/-webkit-min-logical-width.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-min-logical-width": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "8" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": "5.1" 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": false, 29 | "standard_track": false, 30 | "deprecated": false 31 | } 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /css/properties/-webkit-transform-origin-x.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-transform-origin-x": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "1" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": "≤4" 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": false, 29 | "standard_track": false, 30 | "deprecated": false 31 | } 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /css/properties/-webkit-transform-origin-y.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-transform-origin-y": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "1" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": "≤4" 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": false, 29 | "standard_track": false, 30 | "deprecated": false 31 | } 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /css/properties/-webkit-transform-origin-z.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-transform-origin-z": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "2" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": "≤4" 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": false, 29 | "standard_track": false, 30 | "deprecated": false 31 | } 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /css/properties/-webkit-perspective-origin-x.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-perspective-origin-x": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "2" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": "≤4" 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": false, 29 | "standard_track": false, 30 | "deprecated": false 31 | } 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /css/properties/-webkit-perspective-origin-y.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-perspective-origin-y": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "2" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": "≤4" 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": false, 29 | "standard_track": false, 30 | "deprecated": false 31 | } 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /webextensions/manifest/externally_connectable.json: -------------------------------------------------------------------------------- 1 | { 2 | "webextensions": { 3 | "manifest": { 4 | "externally_connectable": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/manifest.json/externally_connectable", 7 | "support": { 8 | "chrome": { 9 | "version_added": "≤67" 10 | }, 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false, 14 | "impl_url": "https://bugzil.la/1319168" 15 | }, 16 | "firefox_android": { 17 | "version_added": false 18 | }, 19 | "opera": "mirror", 20 | "safari": { 21 | "version_added": "15.4", 22 | "impl_url": "https://webkit.org/b/269299", 23 | "partial_implementation": true, 24 | "notes": "Only supports the `matches` property." 25 | }, 26 | "safari_ios": "mirror" 27 | } 28 | } 29 | } 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /css/properties/-webkit-border-vertical-spacing.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-border-vertical-spacing": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "1" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": "≤4" 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": false, 29 | "standard_track": false, 30 | "deprecated": false 31 | } 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /css/properties/-webkit-border-horizontal-spacing.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-border-horizontal-spacing": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "1" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": "≤4" 21 | }, 22 | "safari_ios": "mirror", 23 | "samsunginternet_android": "mirror", 24 | "webview_android": "mirror", 25 | "webview_ios": "mirror" 26 | }, 27 | "status": { 28 | "experimental": false, 29 | "standard_track": false, 30 | "deprecated": false 31 | } 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /css/properties/-webkit-line-align.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-line-align": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "19", 9 | "version_removed": "34" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": false 15 | }, 16 | "firefox_android": "mirror", 17 | "oculus": "mirror", 18 | "opera": "mirror", 19 | "opera_android": "mirror", 20 | "safari": { 21 | "version_added": "6" 22 | }, 23 | "safari_ios": "mirror", 24 | "samsunginternet_android": "mirror", 25 | "webview_android": "mirror", 26 | "webview_ios": "mirror" 27 | }, 28 | "status": { 29 | "experimental": true, 30 | "standard_track": false, 31 | "deprecated": false 32 | } 33 | } 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /css/properties/-webkit-line-grid.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-line-grid": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "17", 9 | "version_removed": "34" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": false 15 | }, 16 | "firefox_android": "mirror", 17 | "oculus": "mirror", 18 | "opera": "mirror", 19 | "opera_android": "mirror", 20 | "safari": { 21 | "version_added": "6" 22 | }, 23 | "safari_ios": "mirror", 24 | "samsunginternet_android": "mirror", 25 | "webview_android": "mirror", 26 | "webview_ios": "mirror" 27 | }, 28 | "status": { 29 | "experimental": true, 30 | "standard_track": false, 31 | "deprecated": false 32 | } 33 | } 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /css/properties/-webkit-line-snap.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-line-snap": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "19", 9 | "version_removed": "34" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": false 15 | }, 16 | "firefox_android": "mirror", 17 | "oculus": "mirror", 18 | "opera": "mirror", 19 | "opera_android": "mirror", 20 | "safari": { 21 | "version_added": "6" 22 | }, 23 | "safari_ios": "mirror", 24 | "samsunginternet_android": "mirror", 25 | "webview_android": "mirror", 26 | "webview_ios": "mirror" 27 | }, 28 | "status": { 29 | "experimental": true, 30 | "standard_track": false, 31 | "deprecated": false 32 | } 33 | } 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /css/properties/-webkit-nbsp-mode.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-nbsp-mode": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "1", 9 | "version_removed": "28" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": false 15 | }, 16 | "firefox_android": "mirror", 17 | "oculus": "mirror", 18 | "opera": "mirror", 19 | "opera_android": "mirror", 20 | "safari": { 21 | "version_added": "≤4" 22 | }, 23 | "safari_ios": "mirror", 24 | "samsunginternet_android": "mirror", 25 | "webview_android": "mirror", 26 | "webview_ios": "mirror" 27 | }, 28 | "status": { 29 | "experimental": true, 30 | "standard_track": false, 31 | "deprecated": false 32 | } 33 | } 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /css/properties/-webkit-column-axis.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-column-axis": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "17", 9 | "version_removed": "35" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": false 15 | }, 16 | "firefox_android": "mirror", 17 | "oculus": "mirror", 18 | "opera": "mirror", 19 | "opera_android": "mirror", 20 | "safari": { 21 | "version_added": "6" 22 | }, 23 | "safari_ios": "mirror", 24 | "samsunginternet_android": "mirror", 25 | "webview_android": "mirror", 26 | "webview_ios": "mirror" 27 | }, 28 | "status": { 29 | "experimental": true, 30 | "standard_track": false, 31 | "deprecated": false 32 | } 33 | } 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /css/properties/-webkit-column-progression.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-column-progression": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "22", 9 | "version_removed": "35" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": false 15 | }, 16 | "firefox_android": "mirror", 17 | "oculus": "mirror", 18 | "opera": "mirror", 19 | "opera_android": "mirror", 20 | "safari": { 21 | "version_added": "7" 22 | }, 23 | "safari_ios": "mirror", 24 | "samsunginternet_android": "mirror", 25 | "webview_android": "mirror", 26 | "webview_ios": "mirror" 27 | }, 28 | "status": { 29 | "experimental": true, 30 | "standard_track": false, 31 | "deprecated": false 32 | } 33 | } 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /css/properties/-webkit-line-box-contain.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-line-box-contain": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "12", 9 | "version_removed": "47" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": false 15 | }, 16 | "firefox_android": "mirror", 17 | "oculus": "mirror", 18 | "opera": "mirror", 19 | "opera_android": "mirror", 20 | "safari": { 21 | "version_added": "≤5.1" 22 | }, 23 | "safari_ios": "mirror", 24 | "samsunginternet_android": "mirror", 25 | "webview_android": "mirror", 26 | "webview_ios": "mirror" 27 | }, 28 | "status": { 29 | "experimental": true, 30 | "standard_track": false, 31 | "deprecated": false 32 | } 33 | } 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /css/properties/-webkit-hyphenate-limit-after.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-hyphenate-limit-after": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "11", 9 | "version_removed": "30" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": false 15 | }, 16 | "firefox_android": "mirror", 17 | "oculus": "mirror", 18 | "opera": "mirror", 19 | "opera_android": "mirror", 20 | "safari": { 21 | "version_added": "≤5.1" 22 | }, 23 | "safari_ios": "mirror", 24 | "samsunginternet_android": "mirror", 25 | "webview_android": "mirror", 26 | "webview_ios": "mirror" 27 | }, 28 | "status": { 29 | "experimental": true, 30 | "standard_track": false, 31 | "deprecated": false 32 | } 33 | } 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /css/properties/-webkit-hyphenate-limit-lines.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-hyphenate-limit-lines": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "16", 9 | "version_removed": "30" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": false 15 | }, 16 | "firefox_android": "mirror", 17 | "oculus": "mirror", 18 | "opera": "mirror", 19 | "opera_android": "mirror", 20 | "safari": { 21 | "version_added": "6" 22 | }, 23 | "safari_ios": "mirror", 24 | "samsunginternet_android": "mirror", 25 | "webview_android": "mirror", 26 | "webview_ios": "mirror" 27 | }, 28 | "status": { 29 | "experimental": true, 30 | "standard_track": false, 31 | "deprecated": false 32 | } 33 | } 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /css/properties/-webkit-hyphenate-limit-before.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-hyphenate-limit-before": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "11", 9 | "version_removed": "30" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": false 15 | }, 16 | "firefox_android": "mirror", 17 | "oculus": "mirror", 18 | "opera": "mirror", 19 | "opera_android": "mirror", 20 | "safari": { 21 | "version_added": "≤5.1" 22 | }, 23 | "safari_ios": "mirror", 24 | "samsunginternet_android": "mirror", 25 | "webview_android": "mirror", 26 | "webview_ios": "mirror" 27 | }, 28 | "status": { 29 | "experimental": true, 30 | "standard_track": false, 31 | "deprecated": false 32 | } 33 | } 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /css/properties/-webkit-text-decorations-in-effect.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-text-decorations-in-effect": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "1" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": "mirror", 18 | "opera_android": "mirror", 19 | "safari": { 20 | "version_added": "≤4", 21 | "version_removed": "13.1" 22 | }, 23 | "safari_ios": "mirror", 24 | "samsunginternet_android": "mirror", 25 | "webview_android": "mirror", 26 | "webview_ios": "mirror" 27 | }, 28 | "status": { 29 | "experimental": false, 30 | "standard_track": false, 31 | "deprecated": false 32 | } 33 | } 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /webassembly/jspi.json: -------------------------------------------------------------------------------- 1 | { 2 | "webassembly": { 3 | "jspi": { 4 | "__compat": { 5 | "description": "JavaScript-Promise Integration", 6 | "spec_url": "https://github.com/WebAssembly/js-promise-integration", 7 | "support": { 8 | "chrome": { 9 | "version_added": "137" 10 | }, 11 | "chrome_android": { 12 | "version_added": false 13 | }, 14 | "edge": "mirror", 15 | "firefox": { 16 | "version_added": false 17 | }, 18 | "firefox_android": "mirror", 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": false 24 | }, 25 | "safari_ios": "mirror", 26 | "samsunginternet_android": "mirror", 27 | "webview_android": "mirror", 28 | "webview_ios": "mirror" 29 | }, 30 | "status": { 31 | "experimental": true, 32 | "standard_track": true, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /webassembly/fixed-width-SIMD.json: -------------------------------------------------------------------------------- 1 | { 2 | "webassembly": { 3 | "fixed-width-SIMD": { 4 | "__compat": { 5 | "spec_url": "https://github.com/WebAssembly/spec/blob/main/proposals/simd/SIMD.md", 6 | "tags": [ 7 | "web-features:wasm-simd" 8 | ], 9 | "support": { 10 | "chrome": { 11 | "version_added": "91" 12 | }, 13 | "chrome_android": "mirror", 14 | "edge": "mirror", 15 | "firefox": { 16 | "version_added": "89" 17 | }, 18 | "firefox_android": "mirror", 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "16.4" 24 | }, 25 | "safari_ios": "mirror", 26 | "samsunginternet_android": "mirror", 27 | "webview_android": "mirror", 28 | "webview_ios": "mirror" 29 | }, 30 | "status": { 31 | "experimental": false, 32 | "standard_track": true, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /webassembly/branch-hinting.json: -------------------------------------------------------------------------------- 1 | { 2 | "webassembly": { 3 | "branch-hinting": { 4 | "__compat": { 5 | "spec_url": "https://github.com/WebAssembly/branch-hinting/blob/main/proposals/branch-hinting/Overview.md", 6 | "support": { 7 | "chrome": { 8 | "version_added": "137" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": "preview", 14 | "impl_url": "https://bugzil.la/1950729" 15 | }, 16 | "firefox_android": "mirror", 17 | "oculus": "mirror", 18 | "opera": "mirror", 19 | "opera_android": "mirror", 20 | "safari": { 21 | "version_added": "16" 22 | }, 23 | "safari_ios": "mirror", 24 | "samsunginternet_android": "mirror", 25 | "webview_android": "mirror", 26 | "webview_ios": "mirror" 27 | }, 28 | "status": { 29 | "experimental": false, 30 | "standard_track": true, 31 | "deprecated": false 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /webassembly/multi-value.json: -------------------------------------------------------------------------------- 1 | { 2 | "webassembly": { 3 | "multi-value": { 4 | "__compat": { 5 | "spec_url": "https://github.com/WebAssembly/spec/blob/main/proposals/multi-value/Overview.md", 6 | "tags": [ 7 | "web-features:wasm-multi-value" 8 | ], 9 | "support": { 10 | "chrome": { 11 | "version_added": "86" 12 | }, 13 | "chrome_android": "mirror", 14 | "edge": "mirror", 15 | "firefox": { 16 | "version_added": "78" 17 | }, 18 | "firefox_android": "mirror", 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "13.1" 24 | }, 25 | "safari_ios": "mirror", 26 | "samsunginternet_android": "mirror", 27 | "webview_android": "mirror", 28 | "webview_ios": "mirror" 29 | }, 30 | "status": { 31 | "experimental": false, 32 | "standard_track": true, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /webassembly/mutable-globals.json: -------------------------------------------------------------------------------- 1 | { 2 | "webassembly": { 3 | "mutable-globals": { 4 | "__compat": { 5 | "spec_url": "https://webassembly.github.io/spec/js-api/#dom-globaldescriptor-mutable", 6 | "tags": [ 7 | "web-features:wasm-mutable-globals" 8 | ], 9 | "support": { 10 | "chrome": { 11 | "version_added": "69" 12 | }, 13 | "chrome_android": "mirror", 14 | "edge": "mirror", 15 | "firefox": { 16 | "version_added": "62" 17 | }, 18 | "firefox_android": "mirror", 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "13.1" 24 | }, 25 | "safari_ios": "mirror", 26 | "samsunginternet_android": "mirror", 27 | "webview_android": "mirror", 28 | "webview_ios": "mirror" 29 | }, 30 | "status": { 31 | "experimental": false, 32 | "standard_track": true, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /api/EntrySync.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "EntrySync": { 4 | "__compat": { 5 | "support": { 6 | "chrome": { 7 | "prefix": "webkit", 8 | "version_added": "13" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": { 18 | "version_added": false 19 | }, 20 | "opera_android": { 21 | "version_added": false 22 | }, 23 | "safari": { 24 | "version_added": false 25 | }, 26 | "safari_ios": "mirror", 27 | "samsunginternet_android": "mirror", 28 | "webview_android": { 29 | "prefix": "webkit", 30 | "version_added": "37" 31 | }, 32 | "webview_ios": "mirror" 33 | }, 34 | "status": { 35 | "experimental": false, 36 | "standard_track": false, 37 | "deprecated": true 38 | } 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /css/properties/-moz-float-edge.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-moz-float-edge": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Properties/-moz-float-edge", 7 | "support": { 8 | "chrome": { 9 | "version_added": false 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": "1" 15 | }, 16 | "firefox_android": "mirror", 17 | "oculus": "mirror", 18 | "opera": "mirror", 19 | "opera_android": "mirror", 20 | "safari": { 21 | "version_added": false 22 | }, 23 | "safari_ios": "mirror", 24 | "samsunginternet_android": "mirror", 25 | "webview_android": "mirror", 26 | "webview_ios": "mirror" 27 | }, 28 | "status": { 29 | "experimental": false, 30 | "standard_track": false, 31 | "deprecated": true 32 | } 33 | } 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /webassembly/BigInt-to-i64-integration.json: -------------------------------------------------------------------------------- 1 | { 2 | "webassembly": { 3 | "BigInt-to-i64-integration": { 4 | "__compat": { 5 | "spec_url": "https://webassembly.github.io/spec/js-api/#ref-for-syntax-numtype①⓪", 6 | "tags": [ 7 | "web-features:wasm-bigint" 8 | ], 9 | "support": { 10 | "chrome": { 11 | "version_added": "85" 12 | }, 13 | "chrome_android": "mirror", 14 | "edge": "mirror", 15 | "firefox": { 16 | "version_added": "78" 17 | }, 18 | "firefox_android": "mirror", 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "14.1" 24 | }, 25 | "safari_ios": "mirror", 26 | "samsunginternet_android": "mirror", 27 | "webview_android": "mirror", 28 | "webview_ios": "mirror" 29 | }, 30 | "status": { 31 | "experimental": false, 32 | "standard_track": true, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /webassembly/garbage-collection.json: -------------------------------------------------------------------------------- 1 | { 2 | "webassembly": { 3 | "garbage-collection": { 4 | "__compat": { 5 | "spec_url": "https://webassembly.github.io/gc/core/bikeshed/#garbage-collection①", 6 | "tags": [ 7 | "web-features:wasm-garbage-collection" 8 | ], 9 | "support": { 10 | "chrome": { 11 | "version_added": "119" 12 | }, 13 | "chrome_android": "mirror", 14 | "edge": "mirror", 15 | "firefox": { 16 | "version_added": "120" 17 | }, 18 | "firefox_android": "mirror", 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "18.2" 24 | }, 25 | "safari_ios": "mirror", 26 | "samsunginternet_android": "mirror", 27 | "webview_android": "mirror", 28 | "webview_ios": "mirror" 29 | }, 30 | "status": { 31 | "experimental": false, 32 | "standard_track": true, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /webassembly/relaxed-SIMD.json: -------------------------------------------------------------------------------- 1 | { 2 | "webassembly": { 3 | "relaxed-SIMD": { 4 | "__compat": { 5 | "spec_url": "https://github.com/WebAssembly/relaxed-simd/blob/main/proposals/relaxed-simd/Overview.md", 6 | "tags": [ 7 | "web-features:wasm-simd-relaxed" 8 | ], 9 | "support": { 10 | "chrome": { 11 | "version_added": "114" 12 | }, 13 | "chrome_android": "mirror", 14 | "edge": "mirror", 15 | "firefox": { 16 | "version_added": "146" 17 | }, 18 | "firefox_android": "mirror", 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": false 24 | }, 25 | "safari_ios": "mirror", 26 | "samsunginternet_android": "mirror", 27 | "webview_android": "mirror", 28 | "webview_ios": "mirror" 29 | }, 30 | "status": { 31 | "experimental": false, 32 | "standard_track": true, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /webassembly/tail-calls.json: -------------------------------------------------------------------------------- 1 | { 2 | "webassembly": { 3 | "tail-calls": { 4 | "__compat": { 5 | "spec_url": "https://github.com/WebAssembly/tail-call/blob/main/proposals/tail-call/Overview.md", 6 | "tags": [ 7 | "web-features:wasm-tail-call-optimization" 8 | ], 9 | "support": { 10 | "chrome": { 11 | "version_added": "112" 12 | }, 13 | "chrome_android": "mirror", 14 | "edge": "mirror", 15 | "firefox": { 16 | "version_added": "121" 17 | }, 18 | "firefox_android": "mirror", 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "18.2" 24 | }, 25 | "safari_ios": "mirror", 26 | "samsunginternet_android": "mirror", 27 | "webview_android": "mirror", 28 | "webview_ios": "mirror" 29 | }, 30 | "status": { 31 | "experimental": false, 32 | "standard_track": true, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /webassembly/reference-types.json: -------------------------------------------------------------------------------- 1 | { 2 | "webassembly": { 3 | "reference-types": { 4 | "__compat": { 5 | "spec_url": "https://github.com/WebAssembly/spec/blob/main/proposals/reference-types/Overview.md", 6 | "tags": [ 7 | "web-features:wasm-reference-types" 8 | ], 9 | "support": { 10 | "chrome": { 11 | "version_added": "96" 12 | }, 13 | "chrome_android": "mirror", 14 | "edge": "mirror", 15 | "firefox": { 16 | "version_added": "79" 17 | }, 18 | "firefox_android": "mirror", 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "15.1" 24 | }, 25 | "safari_ios": "mirror", 26 | "samsunginternet_android": "mirror", 27 | "webview_android": "mirror", 28 | "webview_ios": "mirror" 29 | }, 30 | "status": { 31 | "experimental": false, 32 | "standard_track": true, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /http/headers/Sec-Browsing-Topics.json: -------------------------------------------------------------------------------- 1 | { 2 | "http": { 3 | "headers": { 4 | "Sec-Browsing-Topics": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/HTTP/Reference/Headers/Sec-Browsing-Topics", 7 | "support": { 8 | "chrome": { 9 | "version_added": "115" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": false 15 | }, 16 | "firefox_android": "mirror", 17 | "oculus": "mirror", 18 | "opera": "mirror", 19 | "opera_android": "mirror", 20 | "safari": { 21 | "version_added": false 22 | }, 23 | "safari_ios": "mirror", 24 | "samsunginternet_android": "mirror", 25 | "webview_android": "mirror", 26 | "webview_ios": "mirror" 27 | }, 28 | "status": { 29 | "experimental": false, 30 | "standard_track": false, 31 | "deprecated": true 32 | } 33 | } 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /api/XRLayer.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "XRLayer": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/XRLayer", 6 | "spec_url": "https://immersive-web.github.io/webxr/#xrlayer-interface", 7 | "tags": [ 8 | "web-features:webxr-device" 9 | ], 10 | "support": { 11 | "chrome": { 12 | "version_added": "84" 13 | }, 14 | "chrome_android": "mirror", 15 | "edge": "mirror", 16 | "firefox": { 17 | "version_added": false 18 | }, 19 | "firefox_android": "mirror", 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": false 25 | }, 26 | "safari_ios": "mirror", 27 | "samsunginternet_android": "mirror", 28 | "webview_android": "mirror", 29 | "webview_ios": "mirror" 30 | }, 31 | "status": { 32 | "experimental": true, 33 | "standard_track": true, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /http/headers/DPR.json: -------------------------------------------------------------------------------- 1 | { 2 | "http": { 3 | "headers": { 4 | "DPR": { 5 | "__compat": { 6 | "description": "`DPR` request header", 7 | "mdn_url": "https://developer.mozilla.org/docs/Web/HTTP/Reference/Headers/DPR", 8 | "support": { 9 | "chrome": { 10 | "version_added": "46" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": false 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": false 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": false, 31 | "standard_track": false, 32 | "deprecated": true 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /http/headers/X-DNS-Prefetch-Control.json: -------------------------------------------------------------------------------- 1 | { 2 | "http": { 3 | "headers": { 4 | "X-DNS-Prefetch-Control": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/HTTP/Reference/Headers/X-DNS-Prefetch-Control", 7 | "support": { 8 | "chrome": { 9 | "version_added": "1" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": "2" 15 | }, 16 | "firefox_android": "mirror", 17 | "oculus": "mirror", 18 | "opera": "mirror", 19 | "opera_android": "mirror", 20 | "safari": { 21 | "version_added": false 22 | }, 23 | "safari_ios": "mirror", 24 | "samsunginternet_android": "mirror", 25 | "webview_android": "mirror", 26 | "webview_ios": "mirror" 27 | }, 28 | "status": { 29 | "experimental": false, 30 | "standard_track": false, 31 | "deprecated": false 32 | } 33 | } 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /api/WebGLObject.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "WebGLObject": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/WebGLObject", 6 | "spec_url": "https://registry.khronos.org/webgl/specs/latest/1.0/#5.3", 7 | "tags": [ 8 | "web-features:webgl" 9 | ], 10 | "support": { 11 | "chrome": { 12 | "version_added": "126" 13 | }, 14 | "chrome_android": "mirror", 15 | "edge": "mirror", 16 | "firefox": { 17 | "version_added": false 18 | }, 19 | "firefox_android": "mirror", 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": false 25 | }, 26 | "safari_ios": "mirror", 27 | "samsunginternet_android": "mirror", 28 | "webview_android": "mirror", 29 | "webview_ios": "mirror" 30 | }, 31 | "status": { 32 | "experimental": true, 33 | "standard_track": true, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /http/headers/Observe-Browsing-Topics.json: -------------------------------------------------------------------------------- 1 | { 2 | "http": { 3 | "headers": { 4 | "Observe-Browsing-Topics": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/HTTP/Reference/Headers/Observe-Browsing-Topics", 7 | "support": { 8 | "chrome": { 9 | "version_added": "115" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": false 15 | }, 16 | "firefox_android": "mirror", 17 | "oculus": "mirror", 18 | "opera": "mirror", 19 | "opera_android": "mirror", 20 | "safari": { 21 | "version_added": false 22 | }, 23 | "safari_ios": "mirror", 24 | "samsunginternet_android": "mirror", 25 | "webview_android": "mirror", 26 | "webview_ios": "mirror" 27 | }, 28 | "status": { 29 | "experimental": false, 30 | "standard_track": false, 31 | "deprecated": true 32 | } 33 | } 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /http/headers/Snapshot-Content-Location.json: -------------------------------------------------------------------------------- 1 | { 2 | "http": { 3 | "headers": { 4 | "Snapshot-Content-Location": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "63" 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": false 14 | }, 15 | "firefox_android": "mirror", 16 | "oculus": "mirror", 17 | "opera": { 18 | "version_added": false 19 | }, 20 | "opera_android": { 21 | "version_added": false 22 | }, 23 | "safari": { 24 | "version_added": false 25 | }, 26 | "safari_ios": "mirror", 27 | "samsunginternet_android": "mirror", 28 | "webview_android": "mirror", 29 | "webview_ios": "mirror" 30 | }, 31 | "status": { 32 | "experimental": false, 33 | "standard_track": false, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /http/headers/Width.json: -------------------------------------------------------------------------------- 1 | { 2 | "http": { 3 | "headers": { 4 | "Width": { 5 | "__compat": { 6 | "description": "`Width` request header", 7 | "mdn_url": "https://developer.mozilla.org/docs/Web/HTTP/Reference/Headers/Width", 8 | "support": { 9 | "chrome": { 10 | "version_added": "46" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": false 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": false 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": false, 31 | "standard_track": false, 32 | "deprecated": true 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /mathml/elements/mfenced.json: -------------------------------------------------------------------------------- 1 | { 2 | "mathml": { 3 | "elements": { 4 | "mfenced": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/MathML/Reference/Element/mfenced", 7 | "support": { 8 | "chrome": { 9 | "version_added": false 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": "1", 15 | "version_removed": "73" 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": "6" 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": false, 31 | "standard_track": false, 32 | "deprecated": true 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /webassembly/bulk-memory-operations.json: -------------------------------------------------------------------------------- 1 | { 2 | "webassembly": { 3 | "bulk-memory-operations": { 4 | "__compat": { 5 | "spec_url": "https://github.com/WebAssembly/spec/blob/main/proposals/bulk-memory-operations/Overview.md", 6 | "tags": [ 7 | "web-features:wasm-bulk-memory" 8 | ], 9 | "support": { 10 | "chrome": { 11 | "version_added": "75" 12 | }, 13 | "chrome_android": "mirror", 14 | "edge": "mirror", 15 | "firefox": { 16 | "version_added": "78" 17 | }, 18 | "firefox_android": "mirror", 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "15.1" 24 | }, 25 | "safari_ios": "mirror", 26 | "samsunginternet_android": "mirror", 27 | "webview_android": "mirror", 28 | "webview_ios": "mirror" 29 | }, 30 | "status": { 31 | "experimental": false, 32 | "standard_track": true, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /css/selectors/search-text.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "selectors": { 4 | "search-text": { 5 | "__compat": { 6 | "description": "`::search-text`", 7 | "spec_url": "https://drafts.csswg.org/css-pseudo-4/#selectordef-search-text", 8 | "support": { 9 | "chrome": { 10 | "version_added": "144" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": false 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": false 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": true, 31 | "standard_track": true, 32 | "deprecated": false 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /webassembly/jsStringBuiltins.json: -------------------------------------------------------------------------------- 1 | { 2 | "webassembly": { 3 | "jsStringBuiltins": { 4 | "__compat": { 5 | "spec_url": "https://github.com/WebAssembly/js-string-builtins/blob/main/proposals/js-string-builtins/Overview.md", 6 | "tags": [ 7 | "web-features:wasm-string-builtins" 8 | ], 9 | "support": { 10 | "chrome": { 11 | "version_added": "130" 12 | }, 13 | "chrome_android": "mirror", 14 | "edge": "mirror", 15 | "firefox": { 16 | "version_added": "134" 17 | }, 18 | "firefox_android": "mirror", 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "26.2" 24 | }, 25 | "safari_ios": "mirror", 26 | "samsunginternet_android": "mirror", 27 | "webview_android": "mirror", 28 | "webview_ios": "mirror" 29 | }, 30 | "status": { 31 | "experimental": false, 32 | "standard_track": true, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /scripts/lib/compare-features.test.ts: -------------------------------------------------------------------------------- 1 | /* This file is a part of @mdn/browser-compat-data 2 | * See LICENSE file for more information. */ 3 | 4 | import assert from 'node:assert/strict'; 5 | 6 | import compareFeatures from './compare-features.js'; 7 | 8 | describe('compare-features script', () => { 9 | it('`compareFeatures()` works correctly', () => { 10 | const input = [ 11 | 'foobar', 12 | 'Foo', 13 | '__compat', 14 | 'toString', 15 | 'secure_context_required', 16 | 'protocol-r30', 17 | '$0', 18 | 'Bar', 19 | '_updated_spec', 20 | 'worker_support', 21 | '43', 22 | '--variable', 23 | 'ZOO_Pals', 24 | '2-factor-auth', 25 | ]; 26 | const actual = input.sort(compareFeatures); 27 | const expected = [ 28 | '__compat', 29 | 'Bar', 30 | 'Foo', 31 | 'ZOO_Pals', 32 | 'secure_context_required', 33 | 'worker_support', 34 | 'foobar', 35 | 'protocol-r30', 36 | 'toString', 37 | '_updated_spec', 38 | '--variable', 39 | '$0', 40 | '2-factor-auth', 41 | '43', 42 | ]; 43 | 44 | assert.deepEqual(actual, expected); 45 | }); 46 | }); 47 | -------------------------------------------------------------------------------- /api/MediaSourceHandle.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "MediaSourceHandle": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/MediaSourceHandle", 6 | "spec_url": "https://w3c.github.io/media-source/#mediasourcehandle", 7 | "tags": [ 8 | "web-features:media-source" 9 | ], 10 | "support": { 11 | "chrome": { 12 | "version_added": "108" 13 | }, 14 | "chrome_android": "mirror", 15 | "edge": "mirror", 16 | "firefox": { 17 | "version_added": false 18 | }, 19 | "firefox_android": "mirror", 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": "18" 25 | }, 26 | "safari_ios": "mirror", 27 | "samsunginternet_android": "mirror", 28 | "webview_android": "mirror", 29 | "webview_ios": "mirror" 30 | }, 31 | "status": { 32 | "experimental": false, 33 | "standard_track": true, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /css/properties/-moz-force-broken-image-icon.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-moz-force-broken-image-icon": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Properties/-moz-force-broken-image-icon", 7 | "support": { 8 | "chrome": { 9 | "version_added": false 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": "1" 15 | }, 16 | "firefox_android": "mirror", 17 | "oculus": "mirror", 18 | "opera": "mirror", 19 | "opera_android": "mirror", 20 | "safari": { 21 | "version_added": false 22 | }, 23 | "safari_ios": "mirror", 24 | "samsunginternet_android": "mirror", 25 | "webview_android": "mirror", 26 | "webview_ios": "mirror" 27 | }, 28 | "status": { 29 | "experimental": false, 30 | "standard_track": false, 31 | "deprecated": true 32 | } 33 | } 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /api/SharedStorageModifierMethod.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "SharedStorageModifierMethod": { 4 | "__compat": { 5 | "spec_url": "https://wicg.github.io/shared-storage/#sharedstoragemodifiermethod", 6 | "tags": [ 7 | "web-features:shared-storage-locks" 8 | ], 9 | "support": { 10 | "chrome": { 11 | "version_added": "134" 12 | }, 13 | "chrome_android": "mirror", 14 | "edge": "mirror", 15 | "firefox": { 16 | "version_added": false 17 | }, 18 | "firefox_android": "mirror", 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": false 24 | }, 25 | "safari_ios": "mirror", 26 | "samsunginternet_android": "mirror", 27 | "webview_android": { 28 | "version_added": false 29 | }, 30 | "webview_ios": "mirror" 31 | }, 32 | "status": { 33 | "experimental": false, 34 | "standard_track": true, 35 | "deprecated": true 36 | } 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /css/properties/-moz-user-focus.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-moz-user-focus": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Properties/-moz-user-focus", 7 | "support": { 8 | "chrome": { 9 | "version_added": false 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": "1", 15 | "version_removed": "122" 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": false 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": false, 31 | "standard_track": false, 32 | "deprecated": true 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /css/properties/background-repeat-x.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "background-repeat-x": { 5 | "__compat": { 6 | "spec_url": "https://drafts.csswg.org/css-backgrounds-4/#background-repeat-longhands", 7 | "support": { 8 | "chrome": { 9 | "version_added": "5", 10 | "version_removed": "120" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": false 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": "5" 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": true, 31 | "standard_track": true, 32 | "deprecated": false 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /css/properties/background-repeat-y.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "background-repeat-y": { 5 | "__compat": { 6 | "spec_url": "https://drafts.csswg.org/css-backgrounds-4/#background-repeat-longhands", 7 | "support": { 8 | "chrome": { 9 | "version_added": "5", 10 | "version_removed": "120" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": false 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": "5" 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": true, 31 | "standard_track": true, 32 | "deprecated": false 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /html/elements/rtc.json: -------------------------------------------------------------------------------- 1 | { 2 | "html": { 3 | "elements": { 4 | "rtc": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/HTML/Reference/Elements/rtc", 7 | "spec_url": "https://html.spec.whatwg.org/multipage/obsolete.html#rtc", 8 | "support": { 9 | "chrome": { 10 | "version_added": "47" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": "33" 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": "8" 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": false, 31 | "standard_track": true, 32 | "deprecated": true 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /http/headers/Content-DPR.json: -------------------------------------------------------------------------------- 1 | { 2 | "http": { 3 | "headers": { 4 | "Content-DPR": { 5 | "__compat": { 6 | "description": "`Content-DPR` request header", 7 | "mdn_url": "https://developer.mozilla.org/docs/Web/HTTP/Reference/Headers/Content-DPR", 8 | "support": { 9 | "chrome": { 10 | "version_added": "46" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": false 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": false 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": false, 31 | "standard_track": false, 32 | "deprecated": true 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /css/selectors/-moz-first-node.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "selectors": { 4 | "-moz-first-node": { 5 | "__compat": { 6 | "description": "`:-moz-first-node`", 7 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Selectors/:-moz-first-node", 8 | "support": { 9 | "chrome": { 10 | "version_added": false 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": "55" 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": false 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": true, 31 | "standard_track": false, 32 | "deprecated": false 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /css/selectors/-moz-last-node.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "selectors": { 4 | "-moz-last-node": { 5 | "__compat": { 6 | "description": "`:-moz-last-node`", 7 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Selectors/:-moz-last-node", 8 | "support": { 9 | "chrome": { 10 | "version_added": false 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": "55" 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": false 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": true, 31 | "standard_track": false, 32 | "deprecated": false 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /api/SVGDiscardElement.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "SVGDiscardElement": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/SVGDiscardElement", 6 | "spec_url": "https://svgwg.org/specs/animations/#InterfaceSVGDiscardElement", 7 | "support": { 8 | "chrome": { 9 | "version_added": "34", 10 | "version_removed": "81" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": "136", 16 | "version_removed": "139" 17 | }, 18 | "firefox_android": "mirror", 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": false 24 | }, 25 | "safari_ios": "mirror", 26 | "samsunginternet_android": "mirror", 27 | "webview_android": "mirror", 28 | "webview_ios": "mirror" 29 | }, 30 | "status": { 31 | "experimental": false, 32 | "standard_track": true, 33 | "deprecated": true 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /api/_globals/scheduler.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "scheduler": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/Window/scheduler", 6 | "spec_url": "https://wicg.github.io/scheduling-apis/#dom-windoworworkerglobalscope-scheduler", 7 | "tags": [ 8 | "web-features:scheduler" 9 | ], 10 | "support": { 11 | "chrome": { 12 | "version_added": "94" 13 | }, 14 | "chrome_android": "mirror", 15 | "edge": "mirror", 16 | "firefox": { 17 | "version_added": "142" 18 | }, 19 | "firefox_android": "mirror", 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": false 25 | }, 26 | "safari_ios": "mirror", 27 | "samsunginternet_android": "mirror", 28 | "webview_android": "mirror", 29 | "webview_ios": "mirror" 30 | }, 31 | "status": { 32 | "experimental": false, 33 | "standard_track": true, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /css/selectors/-moz-list-bullet.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "selectors": { 4 | "-moz-list-bullet": { 5 | "__compat": { 6 | "description": "`::-moz-list-bullet`", 7 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Selectors/::-moz-list-bullet", 8 | "support": { 9 | "chrome": { 10 | "version_added": false 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": "1" 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": false 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": true, 31 | "standard_track": false, 32 | "deprecated": false 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /css/selectors/-moz-list-number.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "selectors": { 4 | "-moz-list-number": { 5 | "__compat": { 6 | "description": "`::-moz-list-number`", 7 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Selectors/::-moz-list-number", 8 | "support": { 9 | "chrome": { 10 | "version_added": false 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": "1" 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": false 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": true, 31 | "standard_track": false, 32 | "deprecated": false 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /http/headers/Priority.json: -------------------------------------------------------------------------------- 1 | { 2 | "http": { 3 | "headers": { 4 | "Priority": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/HTTP/Reference/Headers/Priority", 7 | "spec_url": "https://httpwg.org/specs/rfc9218.html#header-field", 8 | "support": { 9 | "chrome": { 10 | "version_added": "124" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": "128" 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": false 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": false, 31 | "standard_track": true, 32 | "deprecated": false 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /webassembly/extended-constant-expressions.json: -------------------------------------------------------------------------------- 1 | { 2 | "webassembly": { 3 | "extended-constant-expressions": { 4 | "__compat": { 5 | "spec_url": "https://github.com/WebAssembly/extended-const/blob/main/proposals/extended-const/Overview.md", 6 | "tags": [ 7 | "web-features:wasm-extended-constant-expressions" 8 | ], 9 | "support": { 10 | "chrome": { 11 | "version_added": "114" 12 | }, 13 | "chrome_android": "mirror", 14 | "edge": "mirror", 15 | "firefox": { 16 | "version_added": "112" 17 | }, 18 | "firefox_android": "mirror", 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "17.4" 24 | }, 25 | "safari_ios": "mirror", 26 | "samsunginternet_android": "mirror", 27 | "webview_android": "mirror", 28 | "webview_ios": "mirror" 29 | }, 30 | "status": { 31 | "experimental": false, 32 | "standard_track": true, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /api/EXT_texture_norm16.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "EXT_texture_norm16": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/EXT_texture_norm16", 6 | "spec_url": "https://registry.khronos.org/webgl/extensions/EXT_texture_norm16/", 7 | "tags": [ 8 | "web-features:ext-texture-norm16" 9 | ], 10 | "support": { 11 | "chrome": { 12 | "version_added": "87" 13 | }, 14 | "chrome_android": "mirror", 15 | "edge": "mirror", 16 | "firefox": { 17 | "version_added": false 18 | }, 19 | "firefox_android": "mirror", 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": "16" 25 | }, 26 | "safari_ios": "mirror", 27 | "samsunginternet_android": "mirror", 28 | "webview_android": "mirror", 29 | "webview_ios": "mirror" 30 | }, 31 | "status": { 32 | "experimental": false, 33 | "standard_track": true, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /api/WebGLSync.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "WebGLSync": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/WebGLSync", 6 | "spec_url": "https://registry.khronos.org/webgl/specs/latest/2.0/#3.4", 7 | "tags": [ 8 | "web-features:webgl2" 9 | ], 10 | "support": { 11 | "chrome": { 12 | "version_added": "56" 13 | }, 14 | "chrome_android": { 15 | "version_added": "58" 16 | }, 17 | "edge": "mirror", 18 | "firefox": { 19 | "version_added": "51" 20 | }, 21 | "firefox_android": "mirror", 22 | "oculus": "mirror", 23 | "opera": "mirror", 24 | "opera_android": "mirror", 25 | "safari": { 26 | "version_added": "15" 27 | }, 28 | "safari_ios": "mirror", 29 | "samsunginternet_android": "mirror", 30 | "webview_android": "mirror", 31 | "webview_ios": "mirror" 32 | }, 33 | "status": { 34 | "experimental": false, 35 | "standard_track": true, 36 | "deprecated": false 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /css/selectors/-moz-progress-bar.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "selectors": { 4 | "-moz-progress-bar": { 5 | "__compat": { 6 | "description": "`::-moz-progress-bar`", 7 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Selectors/::-moz-progress-bar", 8 | "support": { 9 | "chrome": { 10 | "version_added": false 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": "6" 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": false 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": true, 31 | "standard_track": false, 32 | "deprecated": false 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /css/selectors/-moz-range-thumb.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "selectors": { 4 | "-moz-range-thumb": { 5 | "__compat": { 6 | "description": "`::-moz-range-thumb`", 7 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Selectors/::-moz-range-thumb", 8 | "support": { 9 | "chrome": { 10 | "version_added": false 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": "21" 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": false 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": false, 31 | "standard_track": false, 32 | "deprecated": false 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /css/selectors/-moz-range-track.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "selectors": { 4 | "-moz-range-track": { 5 | "__compat": { 6 | "description": "`::-moz-range-track`", 7 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Selectors/::-moz-range-track", 8 | "support": { 9 | "chrome": { 10 | "version_added": false 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": "21" 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": false 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": false, 31 | "standard_track": false, 32 | "deprecated": false 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /css/selectors/-webkit-meter-bar.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "selectors": { 4 | "-webkit-meter-bar": { 5 | "__compat": { 6 | "description": "`::-webkit-meter-bar`", 7 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Selectors/::-webkit-meter-bar", 8 | "support": { 9 | "chrome": { 10 | "version_added": "12" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": false 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": "5.1" 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": false, 31 | "standard_track": false, 32 | "deprecated": true 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /http/headers/Viewport-Width.json: -------------------------------------------------------------------------------- 1 | { 2 | "http": { 3 | "headers": { 4 | "Viewport-Width": { 5 | "__compat": { 6 | "description": "`Viewport-Width` request header", 7 | "mdn_url": "https://developer.mozilla.org/docs/Web/HTTP/Reference/Headers/Viewport-Width", 8 | "support": { 9 | "chrome": { 10 | "version_added": "46" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": false 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": false 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": false, 31 | "standard_track": false, 32 | "deprecated": true 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /api/WebGLQuery.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "WebGLQuery": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/WebGLQuery", 6 | "spec_url": "https://registry.khronos.org/webgl/specs/latest/2.0/#3.2", 7 | "tags": [ 8 | "web-features:webgl2" 9 | ], 10 | "support": { 11 | "chrome": { 12 | "version_added": "56" 13 | }, 14 | "chrome_android": { 15 | "version_added": "58" 16 | }, 17 | "edge": "mirror", 18 | "firefox": { 19 | "version_added": "51" 20 | }, 21 | "firefox_android": "mirror", 22 | "oculus": "mirror", 23 | "opera": "mirror", 24 | "opera_android": "mirror", 25 | "safari": { 26 | "version_added": "15" 27 | }, 28 | "safari_ios": "mirror", 29 | "samsunginternet_android": "mirror", 30 | "webview_android": "mirror", 31 | "webview_ios": "mirror" 32 | }, 33 | "status": { 34 | "experimental": false, 35 | "standard_track": true, 36 | "deprecated": false 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /api/WorkletGlobalScope.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "WorkletGlobalScope": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/WorkletGlobalScope", 6 | "spec_url": "https://html.spec.whatwg.org/multipage/worklets.html#workletglobalscope", 7 | "tags": [ 8 | "web-features:audio-worklet" 9 | ], 10 | "support": { 11 | "chrome": { 12 | "version_added": "65" 13 | }, 14 | "chrome_android": "mirror", 15 | "edge": "mirror", 16 | "firefox": { 17 | "version_added": "76" 18 | }, 19 | "firefox_android": "mirror", 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": "14.1" 25 | }, 26 | "safari_ios": "mirror", 27 | "samsunginternet_android": "mirror", 28 | "webview_android": "mirror", 29 | "webview_ios": "mirror" 30 | }, 31 | "status": { 32 | "experimental": false, 33 | "standard_track": true, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /css/properties/-webkit-box-reflect.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-box-reflect": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Properties/-webkit-box-reflect", 7 | "support": { 8 | "chrome": { 9 | "version_added": "4" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": false 15 | }, 16 | "firefox_android": "mirror", 17 | "oculus": "mirror", 18 | "opera": "mirror", 19 | "opera_android": "mirror", 20 | "safari": { 21 | "version_added": "4" 22 | }, 23 | "safari_ios": "mirror", 24 | "samsunginternet_android": "mirror", 25 | "webview_android": { 26 | "version_added": "2.2" 27 | }, 28 | "webview_ios": "mirror" 29 | }, 30 | "status": { 31 | "experimental": false, 32 | "standard_track": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /css/selectors/-moz-color-swatch.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "selectors": { 4 | "-moz-color-swatch": { 5 | "__compat": { 6 | "description": "`::-moz-color-swatch`", 7 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Selectors/::-moz-color-swatch", 8 | "support": { 9 | "chrome": { 10 | "version_added": false 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": "27" 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": false 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": false, 31 | "standard_track": false, 32 | "deprecated": false 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /api/WebGLSampler.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "WebGLSampler": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/WebGLSampler", 6 | "spec_url": "https://registry.khronos.org/webgl/specs/latest/2.0/#3.3", 7 | "tags": [ 8 | "web-features:webgl2" 9 | ], 10 | "support": { 11 | "chrome": { 12 | "version_added": "56" 13 | }, 14 | "chrome_android": { 15 | "version_added": "58" 16 | }, 17 | "edge": "mirror", 18 | "firefox": { 19 | "version_added": "51" 20 | }, 21 | "firefox_android": "mirror", 22 | "oculus": "mirror", 23 | "opera": "mirror", 24 | "opera_android": "mirror", 25 | "safari": { 26 | "version_added": "15" 27 | }, 28 | "safari_ios": "mirror", 29 | "samsunginternet_android": "mirror", 30 | "webview_android": "mirror", 31 | "webview_ios": "mirror" 32 | }, 33 | "status": { 34 | "experimental": false, 35 | "standard_track": true, 36 | "deprecated": false 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /css/properties/-webkit-text-security.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-text-security": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Properties/-webkit-text-security", 7 | "support": { 8 | "chrome": { 9 | "version_added": "1" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": "114" 15 | }, 16 | "firefox_android": "mirror", 17 | "oculus": "mirror", 18 | "opera": "mirror", 19 | "opera_android": "mirror", 20 | "safari": { 21 | "version_added": "3" 22 | }, 23 | "safari_ios": { 24 | "version_added": "1" 25 | }, 26 | "samsunginternet_android": "mirror", 27 | "webview_android": "mirror", 28 | "webview_ios": "mirror" 29 | }, 30 | "status": { 31 | "experimental": false, 32 | "standard_track": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /css/selectors/-moz-range-progress.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "selectors": { 4 | "-moz-range-progress": { 5 | "__compat": { 6 | "description": "`::-moz-range-progress`", 7 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Selectors/::-moz-range-progress", 8 | "support": { 9 | "chrome": { 10 | "version_added": false 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": "22" 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": false 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": false, 31 | "standard_track": false, 32 | "deprecated": false 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /webassembly/memory64.json: -------------------------------------------------------------------------------- 1 | { 2 | "webassembly": { 3 | "memory64": { 4 | "__compat": { 5 | "spec_url": "https://github.com/WebAssembly/memory64/blob/main/proposals/memory64/Overview.md", 6 | "tags": [ 7 | "web-features:wasm-memory64" 8 | ], 9 | "support": { 10 | "chrome": { 11 | "version_added": "133" 12 | }, 13 | "chrome_android": "mirror", 14 | "edge": "mirror", 15 | "firefox": { 16 | "version_added": "134" 17 | }, 18 | "firefox_android": "mirror", 19 | "nodejs": { 20 | "version_added": "24.0.0" 21 | }, 22 | "oculus": "mirror", 23 | "opera": "mirror", 24 | "opera_android": "mirror", 25 | "safari": { 26 | "version_added": false 27 | }, 28 | "safari_ios": "mirror", 29 | "samsunginternet_android": "mirror", 30 | "webview_android": "mirror", 31 | "webview_ios": "mirror" 32 | }, 33 | "status": { 34 | "experimental": false, 35 | "standard_track": true, 36 | "deprecated": false 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /webextensions/manifest/side_panel.json: -------------------------------------------------------------------------------- 1 | { 2 | "webextensions": { 3 | "manifest": { 4 | "side_panel": { 5 | "__compat": { 6 | "support": { 7 | "chrome": { 8 | "version_added": "114" 9 | }, 10 | "edge": "mirror", 11 | "firefox": { 12 | "version_added": false 13 | }, 14 | "firefox_android": "mirror", 15 | "opera": "mirror", 16 | "safari": { 17 | "version_added": false 18 | }, 19 | "safari_ios": "mirror" 20 | } 21 | }, 22 | "default_path": { 23 | "__compat": { 24 | "support": { 25 | "chrome": { 26 | "version_added": "114" 27 | }, 28 | "edge": "mirror", 29 | "firefox": { 30 | "version_added": false 31 | }, 32 | "firefox_android": "mirror", 33 | "opera": "mirror", 34 | "safari": { 35 | "version_added": false 36 | }, 37 | "safari_ios": "mirror" 38 | } 39 | } 40 | } 41 | } 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /css/properties/-webkit-mask-box-image.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-mask-box-image": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Properties/-webkit-mask-box-image", 7 | "support": { 8 | "chrome": { 9 | "version_added": "1" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": false 15 | }, 16 | "firefox_android": "mirror", 17 | "oculus": "mirror", 18 | "opera": "mirror", 19 | "opera_android": "mirror", 20 | "safari": { 21 | "version_added": "3.1" 22 | }, 23 | "safari_ios": "mirror", 24 | "samsunginternet_android": "mirror", 25 | "webview_android": { 26 | "version_added": "2" 27 | }, 28 | "webview_ios": "mirror" 29 | }, 30 | "status": { 31 | "experimental": false, 32 | "standard_track": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /css/properties/-webkit-touch-callout.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-touch-callout": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Properties/-webkit-touch-callout", 7 | "support": { 8 | "chrome": { 9 | "version_added": false 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": false 15 | }, 16 | "firefox_android": "mirror", 17 | "oculus": "mirror", 18 | "opera": "mirror", 19 | "opera_android": "mirror", 20 | "safari": { 21 | "version_added": false 22 | }, 23 | "safari_ios": { 24 | "version_added": "2" 25 | }, 26 | "samsunginternet_android": "mirror", 27 | "webview_android": "mirror", 28 | "webview_ios": "mirror" 29 | }, 30 | "status": { 31 | "experimental": false, 32 | "standard_track": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /css/selectors/-webkit-progress-bar.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "selectors": { 4 | "-webkit-progress-bar": { 5 | "__compat": { 6 | "description": "`::-webkit-progress-bar`", 7 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Selectors/::-webkit-progress-bar", 8 | "support": { 9 | "chrome": { 10 | "version_added": "25" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": false 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": "7" 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": false, 31 | "standard_track": false, 32 | "deprecated": false 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /css/selectors/-webkit-slider-thumb.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "selectors": { 4 | "-webkit-slider-thumb": { 5 | "__compat": { 6 | "description": "`::-webkit-slider-thumb`", 7 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Selectors/::-webkit-slider-thumb", 8 | "support": { 9 | "chrome": { 10 | "version_added": "32" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": false 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": "18" 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": false, 31 | "standard_track": false, 32 | "deprecated": false 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /utils/iter-support.test.ts: -------------------------------------------------------------------------------- 1 | /* This file is a part of @mdn/browser-compat-data 2 | * See LICENSE file for more information. */ 3 | 4 | import assert from 'node:assert/strict'; 5 | 6 | import iterSupport from './iter-support.js'; 7 | 8 | describe('iterSupport()', () => { 9 | it('returns a `"version_added": false` support statement for non-existent browsers', () => { 10 | assert.deepEqual(iterSupport({ support: { firefox: [] } }, 'chrome'), [ 11 | { version_added: false }, 12 | ]); 13 | }); 14 | 15 | it('returns a single support statement as an array', () => { 16 | assert.deepEqual( 17 | iterSupport({ support: { firefox: { version_added: '1' } } }, 'firefox'), 18 | [{ version_added: '1' }], 19 | ); 20 | }); 21 | 22 | it('returns an array of support statements as an array', () => { 23 | const compatObj = { 24 | support: { 25 | firefox: [ 26 | { version_added: '1' }, 27 | { version_added: '2', prefix: '-moz-' }, 28 | ], 29 | }, 30 | }; 31 | const support = [ 32 | { version_added: '1' }, 33 | { version_added: '2', prefix: '-moz-' }, 34 | ]; 35 | 36 | assert.deepEqual(iterSupport(compatObj, 'firefox'), support); 37 | }); 38 | }); 39 | -------------------------------------------------------------------------------- /api/CSSStartingStyleRule.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "CSSStartingStyleRule": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/CSSStartingStyleRule", 6 | "spec_url": "https://drafts.csswg.org/css-transitions-2/#the-cssstartingstylerule-interface", 7 | "tags": [ 8 | "web-features:starting-style" 9 | ], 10 | "support": { 11 | "chrome": { 12 | "version_added": "117" 13 | }, 14 | "chrome_android": "mirror", 15 | "edge": "mirror", 16 | "firefox": { 17 | "version_added": "129" 18 | }, 19 | "firefox_android": "mirror", 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": "17.5" 25 | }, 26 | "safari_ios": "mirror", 27 | "samsunginternet_android": "mirror", 28 | "webview_android": "mirror", 29 | "webview_ios": "mirror" 30 | }, 31 | "status": { 32 | "experimental": false, 33 | "standard_track": true, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /api/EXT_color_buffer_float.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "EXT_color_buffer_float": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/EXT_color_buffer_float", 6 | "spec_url": "https://registry.khronos.org/webgl/extensions/EXT_color_buffer_float/", 7 | "tags": [ 8 | "web-features:ext-color-buffer-float" 9 | ], 10 | "support": { 11 | "chrome": { 12 | "version_added": "56" 13 | }, 14 | "chrome_android": "mirror", 15 | "edge": "mirror", 16 | "firefox": { 17 | "version_added": "51" 18 | }, 19 | "firefox_android": "mirror", 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": "15" 25 | }, 26 | "safari_ios": "mirror", 27 | "samsunginternet_android": "mirror", 28 | "webview_android": "mirror", 29 | "webview_ios": "mirror" 30 | }, 31 | "status": { 32 | "experimental": false, 33 | "standard_track": true, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /api/OES_fbo_render_mipmap.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "OES_fbo_render_mipmap": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/OES_fbo_render_mipmap", 6 | "spec_url": "https://registry.khronos.org/webgl/extensions/OES_fbo_render_mipmap/", 7 | "tags": [ 8 | "web-features:oes-fbo-render-mipmap" 9 | ], 10 | "support": { 11 | "chrome": { 12 | "version_added": "80" 13 | }, 14 | "chrome_android": "mirror", 15 | "edge": "mirror", 16 | "firefox": { 17 | "version_added": "71" 18 | }, 19 | "firefox_android": "mirror", 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": "14.1" 25 | }, 26 | "safari_ios": "mirror", 27 | "samsunginternet_android": "mirror", 28 | "webview_android": "mirror", 29 | "webview_ios": "mirror" 30 | }, 31 | "status": { 32 | "experimental": false, 33 | "standard_track": true, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /css/selectors/-moz-broken.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "selectors": { 4 | "-moz-broken": { 5 | "__compat": { 6 | "description": "`:-moz-broken`", 7 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Selectors/:-moz-broken", 8 | "support": { 9 | "chrome": { 10 | "version_added": false 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": "3", 16 | "version_removed": "119" 17 | }, 18 | "firefox_android": "mirror", 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": false 24 | }, 25 | "safari_ios": "mirror", 26 | "samsunginternet_android": "mirror", 27 | "webview_android": "mirror", 28 | "webview_ios": "mirror" 29 | }, 30 | "status": { 31 | "experimental": false, 32 | "standard_track": false, 33 | "deprecated": true 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /css/selectors/-webkit-progress-value.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "selectors": { 4 | "-webkit-progress-value": { 5 | "__compat": { 6 | "description": "`::-webkit-progress-value`", 7 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Selectors/::-webkit-progress-value", 8 | "support": { 9 | "chrome": { 10 | "version_added": "25" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": false 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": "7" 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": false, 31 | "standard_track": false, 32 | "deprecated": false 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /css/selectors/target-after.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "selectors": { 4 | "target-after": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Selectors/:target-after", 7 | "spec_url": "https://drafts.csswg.org/css-overflow-5/#selectordef-target-after", 8 | "support": { 9 | "chrome": { 10 | "version_added": "142" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": false 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": false 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": true, 31 | "standard_track": true, 32 | "deprecated": false 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /webassembly/sign-extension-operations.json: -------------------------------------------------------------------------------- 1 | { 2 | "webassembly": { 3 | "sign-extension-operations": { 4 | "__compat": { 5 | "spec_url": "https://github.com/WebAssembly/spec/blob/main/proposals/sign-extension-ops/Overview.md", 6 | "tags": [ 7 | "web-features:wasm-sign-extension-operators" 8 | ], 9 | "support": { 10 | "chrome": { 11 | "version_added": "69" 12 | }, 13 | "chrome_android": "mirror", 14 | "edge": { 15 | "version_added": "18" 16 | }, 17 | "firefox": { 18 | "version_added": "62" 19 | }, 20 | "firefox_android": "mirror", 21 | "oculus": "mirror", 22 | "opera": "mirror", 23 | "opera_android": "mirror", 24 | "safari": { 25 | "version_added": "14.1" 26 | }, 27 | "safari_ios": "mirror", 28 | "samsunginternet_android": "mirror", 29 | "webview_android": "mirror", 30 | "webview_ios": "mirror" 31 | }, 32 | "status": { 33 | "experimental": false, 34 | "standard_track": true, 35 | "deprecated": false 36 | } 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /.github/workflows/add-push-artifacts.yml: -------------------------------------------------------------------------------- 1 | name: Add artifacts on push 2 | 3 | on: 4 | push: 5 | 6 | permissions: 7 | contents: read 8 | 9 | jobs: 10 | test: 11 | name: Enumerate and diff features 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 15 | with: 16 | fetch-depth: 0 # get the full repository checkout, not just the inciting commit 17 | persist-credentials: false 18 | - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 19 | with: 20 | node-version-file: ".nvmrc" 21 | cache: npm 22 | package-manager-cache: true 23 | - run: npm ci 24 | - run: npx tsx ./scripts/enumerate-features.ts features.json 25 | - run: npx tsx ./scripts/diff-features.ts --no-github --format=json > features.diff.json 26 | - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 27 | with: 28 | name: enumerate-features 29 | path: features.json 30 | - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 31 | with: 32 | name: diff-features 33 | path: features.diff.json 34 | -------------------------------------------------------------------------------- /api/FileEntrySync.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "FileEntrySync": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/FileEntrySync", 6 | "support": { 7 | "chrome": { 8 | "prefix": "webkit", 9 | "version_added": "13" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": false 15 | }, 16 | "firefox_android": "mirror", 17 | "oculus": "mirror", 18 | "opera": { 19 | "version_added": false 20 | }, 21 | "opera_android": { 22 | "version_added": false 23 | }, 24 | "safari": { 25 | "version_added": false 26 | }, 27 | "safari_ios": "mirror", 28 | "samsunginternet_android": "mirror", 29 | "webview_android": { 30 | "prefix": "webkit", 31 | "version_added": "37" 32 | }, 33 | "webview_ios": "mirror" 34 | }, 35 | "status": { 36 | "experimental": false, 37 | "standard_track": false, 38 | "deprecated": true 39 | } 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /api/_globals/origin.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "origin": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/Window/origin", 6 | "spec_url": "https://html.spec.whatwg.org/multipage/webappapis.html#dom-origin-dev", 7 | "support": { 8 | "chrome": { 9 | "version_added": "59" 10 | }, 11 | "chrome_android": "mirror", 12 | "deno": { 13 | "version_added": false 14 | }, 15 | "edge": { 16 | "version_added": "18" 17 | }, 18 | "firefox": { 19 | "version_added": "54" 20 | }, 21 | "firefox_android": "mirror", 22 | "oculus": "mirror", 23 | "opera": "mirror", 24 | "opera_android": "mirror", 25 | "safari": { 26 | "version_added": "11" 27 | }, 28 | "safari_ios": "mirror", 29 | "samsunginternet_android": "mirror", 30 | "webview_android": "mirror", 31 | "webview_ios": "mirror" 32 | }, 33 | "status": { 34 | "experimental": false, 35 | "standard_track": true, 36 | "deprecated": false 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /css/selectors/-webkit-inner-spin-button.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "selectors": { 4 | "-webkit-inner-spin-button": { 5 | "__compat": { 6 | "description": "`::-webkit-inner-spin-button`", 7 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Selectors/::-webkit-inner-spin-button", 8 | "support": { 9 | "chrome": { 10 | "version_added": "6" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": false 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": "5" 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": false, 31 | "standard_track": false, 32 | "deprecated": false 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /css/selectors/target-before.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "selectors": { 4 | "target-before": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Selectors/:target-before", 7 | "spec_url": "https://drafts.csswg.org/css-overflow-5/#selectordef-target-before", 8 | "support": { 9 | "chrome": { 10 | "version_added": "142" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": false 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": false 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": true, 31 | "standard_track": true, 32 | "deprecated": false 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /css/types/type.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "types": { 4 | "type": { 5 | "__compat": { 6 | "description": "`type()`", 7 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Values/type", 8 | "spec_url": "https://drafts.csswg.org/css-mixins-1/#funcdef-function-type", 9 | "support": { 10 | "chrome": { 11 | "version_added": "139" 12 | }, 13 | "chrome_android": "mirror", 14 | "edge": "mirror", 15 | "firefox": { 16 | "version_added": false 17 | }, 18 | "firefox_android": "mirror", 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": false 24 | }, 25 | "safari_ios": "mirror", 26 | "samsunginternet_android": "mirror", 27 | "webview_android": "mirror", 28 | "webview_ios": "mirror" 29 | }, 30 | "status": { 31 | "experimental": true, 32 | "standard_track": true, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /api/_globals/trustedTypes.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "trustedTypes": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/Window/trustedTypes", 6 | "spec_url": "https://w3c.github.io/trusted-types/dist/spec/#extensions-to-the-windoworworkerglobalscope-interface", 7 | "tags": [ 8 | "web-features:trusted-types" 9 | ], 10 | "support": { 11 | "chrome": { 12 | "version_added": "83" 13 | }, 14 | "chrome_android": "mirror", 15 | "edge": "mirror", 16 | "firefox": { 17 | "version_added": "preview" 18 | }, 19 | "firefox_android": "mirror", 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": "26" 25 | }, 26 | "safari_ios": "mirror", 27 | "samsunginternet_android": "mirror", 28 | "webview_android": "mirror", 29 | "webview_ios": "mirror" 30 | }, 31 | "status": { 32 | "experimental": false, 33 | "standard_track": true, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /css/selectors/interest-source.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "selectors": { 4 | "interest-source": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Selectors/:interest-source", 7 | "spec_url": "https://drafts.csswg.org/selectors/#selectordef-interest-source", 8 | "support": { 9 | "chrome": { 10 | "version_added": "142" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": false 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": false 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": true, 31 | "standard_track": true, 32 | "deprecated": false 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /css/selectors/interest-target.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "selectors": { 4 | "interest-target": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Selectors/:interest-target", 7 | "spec_url": "https://drafts.csswg.org/selectors/#selectordef-interest-target", 8 | "support": { 9 | "chrome": { 10 | "version_added": "142" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": false 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": false 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": true, 31 | "standard_track": true, 32 | "deprecated": false 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /webassembly/exception-handling.json: -------------------------------------------------------------------------------- 1 | { 2 | "webassembly": { 3 | "exception-handling": { 4 | "__compat": { 5 | "description": "Legacy exception handling", 6 | "spec_url": "https://github.com/WebAssembly/exception-handling/blob/main/proposals/exception-handling/legacy/Exceptions.md", 7 | "tags": [ 8 | "web-features:wasm-exception-handling" 9 | ], 10 | "support": { 11 | "chrome": { 12 | "version_added": "95" 13 | }, 14 | "chrome_android": "mirror", 15 | "edge": "mirror", 16 | "firefox": { 17 | "version_added": "100" 18 | }, 19 | "firefox_android": "mirror", 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": "15.2" 25 | }, 26 | "safari_ios": "mirror", 27 | "samsunginternet_android": "mirror", 28 | "webview_android": "mirror", 29 | "webview_ios": "mirror" 30 | }, 31 | "status": { 32 | "experimental": false, 33 | "standard_track": true, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /webassembly/typedFunctionReferences.json: -------------------------------------------------------------------------------- 1 | { 2 | "webassembly": { 3 | "typedFunctionReferences": { 4 | "__compat": { 5 | "description": "Typed function references", 6 | "spec_url": "https://github.com/WebAssembly/function-references/blob/main/proposals/function-references/Overview.md", 7 | "tags": [ 8 | "web-features:wasm-typed-fun-refs" 9 | ], 10 | "support": { 11 | "chrome": { 12 | "version_added": "119" 13 | }, 14 | "chrome_android": "mirror", 15 | "edge": "mirror", 16 | "firefox": { 17 | "version_added": "120" 18 | }, 19 | "firefox_android": "mirror", 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": "18" 25 | }, 26 | "safari_ios": "mirror", 27 | "samsunginternet_android": "mirror", 28 | "webview_android": "mirror", 29 | "webview_ios": "mirror" 30 | }, 31 | "status": { 32 | "experimental": false, 33 | "standard_track": true, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /.lefthook.yml: -------------------------------------------------------------------------------- 1 | # Lefthook config docs: https://lefthook.dev/configuration/ 2 | 3 | pre-commit: 4 | parallel: true 5 | jobs: 6 | - name: prettier 7 | run: npx prettier --ignore-unknown --write --cache {staged_files} 8 | stage_fixed: true 9 | 10 | - name: eslint 11 | glob: "*.{js,jsx,tsx}" 12 | run: npx eslint --fix --cache {staged_files} 13 | stage_fixed: true 14 | 15 | - name: lint:fix 16 | glob: "**/*.json" 17 | exclude: 18 | - .vscode/*.json 19 | - browsers/*.json 20 | - schemas/*.json 21 | run: npm run lint:fix {staged_files} 22 | stage_fixed: true 23 | 24 | pre-push: 25 | piped: true 26 | jobs: 27 | - name: lint 28 | group: 29 | parallel: true 30 | jobs: 31 | - name: eslint 32 | run: npx eslint --cache 33 | 34 | - name: prettier 35 | run: npx prettier --check . 36 | 37 | - name: tsc 38 | run: npx tsc --noEmit 39 | 40 | post-merge: 41 | only: 42 | - ref: main 43 | piped: true 44 | jobs: 45 | - name: install 46 | run: npm install --ignore-scripts 47 | 48 | - name: gentypes 49 | run: npm run gentypes 50 | 51 | output: 52 | - summary 53 | - failure 54 | -------------------------------------------------------------------------------- /api/CSSImageValue.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "CSSImageValue": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/CSSImageValue", 6 | "spec_url": "https://drafts.css-houdini.org/css-typed-om/#imagevalue-objects", 7 | "tags": [ 8 | "web-features:css-typed-om" 9 | ], 10 | "support": { 11 | "chrome": { 12 | "version_added": "66" 13 | }, 14 | "chrome_android": "mirror", 15 | "edge": "mirror", 16 | "firefox": { 17 | "version_added": false, 18 | "impl_url": "https://bugzil.la/1278697" 19 | }, 20 | "firefox_android": "mirror", 21 | "oculus": "mirror", 22 | "opera": "mirror", 23 | "opera_android": "mirror", 24 | "safari": { 25 | "version_added": "16.4" 26 | }, 27 | "safari_ios": "mirror", 28 | "samsunginternet_android": "mirror", 29 | "webview_android": "mirror", 30 | "webview_ios": "mirror" 31 | }, 32 | "status": { 33 | "experimental": false, 34 | "standard_track": true, 35 | "deprecated": false 36 | } 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /api/WebGLTransformFeedback.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "WebGLTransformFeedback": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/WebGLTransformFeedback", 6 | "spec_url": "https://registry.khronos.org/webgl/specs/latest/2.0/#3.5", 7 | "tags": [ 8 | "web-features:webgl2" 9 | ], 10 | "support": { 11 | "chrome": { 12 | "version_added": "56" 13 | }, 14 | "chrome_android": { 15 | "version_added": "58" 16 | }, 17 | "edge": "mirror", 18 | "firefox": { 19 | "version_added": "51" 20 | }, 21 | "firefox_android": "mirror", 22 | "oculus": "mirror", 23 | "opera": "mirror", 24 | "opera_android": "mirror", 25 | "safari": { 26 | "version_added": "15" 27 | }, 28 | "safari_ios": "mirror", 29 | "samsunginternet_android": "mirror", 30 | "webview_android": "mirror", 31 | "webview_ios": "mirror" 32 | }, 33 | "status": { 34 | "experimental": false, 35 | "standard_track": true, 36 | "deprecated": false 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /api/WebGLVertexArrayObject.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "WebGLVertexArrayObject": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/WebGLVertexArrayObject", 6 | "spec_url": "https://registry.khronos.org/webgl/specs/latest/2.0/#3.6", 7 | "tags": [ 8 | "web-features:webgl2" 9 | ], 10 | "support": { 11 | "chrome": { 12 | "version_added": "56" 13 | }, 14 | "chrome_android": { 15 | "version_added": "58" 16 | }, 17 | "edge": "mirror", 18 | "firefox": { 19 | "version_added": "51" 20 | }, 21 | "firefox_android": "mirror", 22 | "oculus": "mirror", 23 | "opera": "mirror", 24 | "opera_android": "mirror", 25 | "safari": { 26 | "version_added": "15" 27 | }, 28 | "safari_ios": "mirror", 29 | "samsunginternet_android": "mirror", 30 | "webview_android": "mirror", 31 | "webview_ios": "mirror" 32 | }, 33 | "status": { 34 | "experimental": false, 35 | "standard_track": true, 36 | "deprecated": false 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /css/selectors/-webkit-meter-inner-element.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "selectors": { 4 | "-webkit-meter-inner-element": { 5 | "__compat": { 6 | "description": "`::-webkit-meter-inner-element`", 7 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Selectors/::-webkit-meter-inner-element", 8 | "support": { 9 | "chrome": { 10 | "version_added": "23" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": false 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": "7" 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": false, 31 | "standard_track": false, 32 | "deprecated": false 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /webassembly/threads-and-atomics.json: -------------------------------------------------------------------------------- 1 | { 2 | "webassembly": { 3 | "threads-and-atomics": { 4 | "__compat": { 5 | "spec_url": "https://github.com/WebAssembly/threads/blob/main/proposals/threads/Overview.md", 6 | "tags": [ 7 | "web-features:wasm-threads" 8 | ], 9 | "support": { 10 | "chrome": { 11 | "version_added": "74" 12 | }, 13 | "chrome_android": { 14 | "version_added": "88" 15 | }, 16 | "edge": "mirror", 17 | "firefox": { 18 | "version_added": "79" 19 | }, 20 | "firefox_android": "mirror", 21 | "oculus": "mirror", 22 | "opera": "mirror", 23 | "opera_android": "mirror", 24 | "safari": { 25 | "version_added": "15.2" 26 | }, 27 | "safari_ios": "mirror", 28 | "samsunginternet_android": "mirror", 29 | "webview_android": { 30 | "version_added": false 31 | }, 32 | "webview_ios": "mirror" 33 | }, 34 | "status": { 35 | "experimental": false, 36 | "standard_track": true, 37 | "deprecated": false 38 | } 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /api/DirectoryEntrySync.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "DirectoryEntrySync": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/DirectoryEntrySync", 6 | "support": { 7 | "chrome": { 8 | "prefix": "webkit", 9 | "version_added": "13" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": false 15 | }, 16 | "firefox_android": "mirror", 17 | "oculus": "mirror", 18 | "opera": { 19 | "version_added": false 20 | }, 21 | "opera_android": { 22 | "version_added": false 23 | }, 24 | "safari": { 25 | "version_added": false 26 | }, 27 | "safari_ios": "mirror", 28 | "samsunginternet_android": "mirror", 29 | "webview_android": { 30 | "prefix": "webkit", 31 | "version_added": "37" 32 | }, 33 | "webview_ios": "mirror" 34 | }, 35 | "status": { 36 | "experimental": false, 37 | "standard_track": false, 38 | "deprecated": true 39 | } 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /api/DirectoryReaderSync.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "DirectoryReaderSync": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/DirectoryReaderSync", 6 | "support": { 7 | "chrome": { 8 | "prefix": "webkit", 9 | "version_added": "13" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": false 15 | }, 16 | "firefox_android": "mirror", 17 | "oculus": "mirror", 18 | "opera": { 19 | "version_added": false 20 | }, 21 | "opera_android": { 22 | "version_added": false 23 | }, 24 | "safari": { 25 | "version_added": false 26 | }, 27 | "safari_ios": "mirror", 28 | "samsunginternet_android": "mirror", 29 | "webview_android": { 30 | "prefix": "webkit", 31 | "version_added": "37" 32 | }, 33 | "webview_ios": "mirror" 34 | }, 35 | "status": { 36 | "experimental": false, 37 | "standard_track": false, 38 | "deprecated": true 39 | } 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /api/HTMLSelectedContentElement.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "HTMLSelectedContentElement": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/HTMLSelectedContentElement", 6 | "spec_url": "https://html.spec.whatwg.org/multipage/form-elements.html#htmlselectedcontentelement", 7 | "tags": [ 8 | "web-features:customizable-select" 9 | ], 10 | "support": { 11 | "chrome": { 12 | "version_added": "135" 13 | }, 14 | "chrome_android": "mirror", 15 | "edge": "mirror", 16 | "firefox": { 17 | "version_added": false 18 | }, 19 | "firefox_android": "mirror", 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": false 25 | }, 26 | "safari_ios": "mirror", 27 | "samsunginternet_android": "mirror", 28 | "webview_android": "mirror", 29 | "webview_ios": "mirror" 30 | }, 31 | "status": { 32 | "experimental": true, 33 | "standard_track": true, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /css/selectors/-webkit-meter-optimum-value.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "selectors": { 4 | "-webkit-meter-optimum-value": { 5 | "__compat": { 6 | "description": "`::-webkit-meter-optimum-value`", 7 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Selectors/::-webkit-meter-optimum-value", 8 | "support": { 9 | "chrome": { 10 | "version_added": "12" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": false 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": "5.1" 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": false, 31 | "standard_track": false, 32 | "deprecated": false 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /api/KHR_parallel_shader_compile.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "KHR_parallel_shader_compile": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/KHR_parallel_shader_compile", 6 | "spec_url": "https://registry.khronos.org/webgl/extensions/KHR_parallel_shader_compile/", 7 | "tags": [ 8 | "web-features:khr-parallel-shader-compile" 9 | ], 10 | "support": { 11 | "chrome": { 12 | "version_added": "76" 13 | }, 14 | "chrome_android": "mirror", 15 | "edge": "mirror", 16 | "firefox": { 17 | "version_added": false 18 | }, 19 | "firefox_android": "mirror", 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": "14.1" 25 | }, 26 | "safari_ios": "mirror", 27 | "samsunginternet_android": "mirror", 28 | "webview_android": "mirror", 29 | "webview_ios": "mirror" 30 | }, 31 | "status": { 32 | "experimental": false, 33 | "standard_track": true, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /css/properties/glyph-orientation-vertical.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "glyph-orientation-vertical": { 5 | "__compat": { 6 | "spec_url": "https://drafts.csswg.org/css-writing-modes-4/#glyph-orientation", 7 | "tags": [ 8 | "web-features:glyph-orientation-vertical" 9 | ], 10 | "support": { 11 | "chrome": { 12 | "version_added": false 13 | }, 14 | "chrome_android": "mirror", 15 | "edge": "mirror", 16 | "firefox": { 17 | "version_added": false 18 | }, 19 | "firefox_android": "mirror", 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": "4" 25 | }, 26 | "safari_ios": "mirror", 27 | "samsunginternet_android": "mirror", 28 | "webview_android": "mirror", 29 | "webview_ios": "mirror" 30 | }, 31 | "status": { 32 | "experimental": false, 33 | "standard_track": true, 34 | "deprecated": true 35 | } 36 | } 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /css/properties/r.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "r": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Properties/r", 7 | "spec_url": "https://svgwg.org/svg2-draft/geometry.html#R", 8 | "tags": [ 9 | "web-features:svg" 10 | ], 11 | "support": { 12 | "chrome": { 13 | "version_added": "43" 14 | }, 15 | "chrome_android": "mirror", 16 | "edge": "mirror", 17 | "firefox": { 18 | "version_added": "69" 19 | }, 20 | "firefox_android": "mirror", 21 | "oculus": "mirror", 22 | "opera": "mirror", 23 | "opera_android": "mirror", 24 | "safari": { 25 | "version_added": "9" 26 | }, 27 | "safari_ios": "mirror", 28 | "samsunginternet_android": "mirror", 29 | "webview_android": "mirror", 30 | "webview_ios": "mirror" 31 | }, 32 | "status": { 33 | "experimental": false, 34 | "standard_track": true, 35 | "deprecated": false 36 | } 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /css/properties/x.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "x": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Properties/x", 7 | "spec_url": "https://svgwg.org/svg2-draft/geometry.html#X", 8 | "tags": [ 9 | "web-features:svg" 10 | ], 11 | "support": { 12 | "chrome": { 13 | "version_added": "42" 14 | }, 15 | "chrome_android": "mirror", 16 | "edge": "mirror", 17 | "firefox": { 18 | "version_added": "69" 19 | }, 20 | "firefox_android": "mirror", 21 | "oculus": "mirror", 22 | "opera": "mirror", 23 | "opera_android": "mirror", 24 | "safari": { 25 | "version_added": "9" 26 | }, 27 | "safari_ios": "mirror", 28 | "samsunginternet_android": "mirror", 29 | "webview_android": "mirror", 30 | "webview_ios": "mirror" 31 | }, 32 | "status": { 33 | "experimental": false, 34 | "standard_track": true, 35 | "deprecated": false 36 | } 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /css/properties/y.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "y": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Properties/y", 7 | "spec_url": "https://svgwg.org/svg2-draft/geometry.html#Y", 8 | "tags": [ 9 | "web-features:svg" 10 | ], 11 | "support": { 12 | "chrome": { 13 | "version_added": "42" 14 | }, 15 | "chrome_android": "mirror", 16 | "edge": "mirror", 17 | "firefox": { 18 | "version_added": "69" 19 | }, 20 | "firefox_android": "mirror", 21 | "oculus": "mirror", 22 | "opera": "mirror", 23 | "opera_android": "mirror", 24 | "safari": { 25 | "version_added": "9" 26 | }, 27 | "safari_ios": "mirror", 28 | "samsunginternet_android": "mirror", 29 | "webview_android": "mirror", 30 | "webview_ios": "mirror" 31 | }, 32 | "status": { 33 | "experimental": false, 34 | "standard_track": true, 35 | "deprecated": false 36 | } 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /css/selectors/-webkit-slider-runnable-track.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "selectors": { 4 | "-webkit-slider-runnable-track": { 5 | "__compat": { 6 | "description": "`::-webkit-slider-runnable-track`", 7 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/Reference/Selectors/::-webkit-slider-runnable-track", 8 | "support": { 9 | "chrome": { 10 | "version_added": "26" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": false 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": "18" 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": false, 31 | "standard_track": false, 32 | "deprecated": false 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /css/selectors/view-transition-group-children.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "selectors": { 4 | "view-transition-group-children": { 5 | "__compat": { 6 | "description": "`::view-transition-group-children()`", 7 | "spec_url": "https://drafts.csswg.org/css-view-transitions-2/#view-transition-group-children-pseudo", 8 | "support": { 9 | "chrome": { 10 | "version_added": "140" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": false 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": false 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": "mirror", 26 | "webview_android": "mirror", 27 | "webview_ios": "mirror" 28 | }, 29 | "status": { 30 | "experimental": true, 31 | "standard_track": true, 32 | "deprecated": false 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /http/headers/NEL.json: -------------------------------------------------------------------------------- 1 | { 2 | "http": { 3 | "headers": { 4 | "NEL": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/HTTP/Reference/Headers/NEL", 7 | "spec_url": "https://w3c.github.io/network-error-logging/#nel-response-header", 8 | "support": { 9 | "chrome": { 10 | "version_added": "71" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": false 16 | }, 17 | "firefox_android": "mirror", 18 | "oculus": "mirror", 19 | "opera": "mirror", 20 | "opera_android": "mirror", 21 | "safari": { 22 | "version_added": false 23 | }, 24 | "safari_ios": "mirror", 25 | "samsunginternet_android": { 26 | "version_added": "10.2" 27 | }, 28 | "webview_android": "mirror", 29 | "webview_ios": "mirror" 30 | }, 31 | "status": { 32 | "experimental": true, 33 | "standard_track": true, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /mediatypes/image/heif.json: -------------------------------------------------------------------------------- 1 | { 2 | "mediatypes": { 3 | "image": { 4 | "heif": { 5 | "__compat": { 6 | "description": "High Efficiency Image File Format (HEIF)", 7 | "spec_url": "https://www.iso.org/standard/89035.html#content", 8 | "support": { 9 | "chrome": { 10 | "version_added": false, 11 | "impl_url": "https://crbug.com/411125808" 12 | }, 13 | "chrome_android": "mirror", 14 | "edge": "mirror", 15 | "firefox": { 16 | "version_added": false, 17 | "impl_url": "https://bugzil.la/1402293" 18 | }, 19 | "firefox_android": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "17" 24 | }, 25 | "safari_ios": "mirror", 26 | "samsunginternet_android": "mirror", 27 | "webview_android": "mirror", 28 | "webview_ios": "mirror" 29 | }, 30 | "status": { 31 | "experimental": false, 32 | "standard_track": true, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | --------------------------------------------------------------------------------