├── .nvmrc ├── .husky ├── pre-commit └── post-merge ├── .mocharc.json ├── .gitattributes ├── .babelrc.json ├── docs └── matching-browser-releases │ ├── hg-changeset.png │ ├── bugzilla-target.png │ ├── dxr-navigation-box.png │ ├── find-releases-tool.png │ ├── bugzilla-fixedin-top.png │ ├── hg-revisions-ontrack.png │ ├── hg-tooltip-revision.png │ └── bugzilla-relnote-firefox.png ├── .lintstagedrc ├── .vscode ├── extensions.json └── settings.json ├── .editorconfig ├── .eslintignore ├── .gitignore ├── .prettierignore ├── .c8rc.json ├── .prettierrc ├── scripts ├── bulk-editor │ ├── index.ts │ └── tags │ │ ├── index.ts │ │ ├── add.ts │ │ └── remove.ts ├── save-git-history.ts ├── lib │ ├── pluralize.test.ts │ ├── pluralize.ts │ └── compare-features.test.ts └── release │ └── semver-pulls.ts ├── utils ├── index.ts ├── README.md ├── normalize-path.ts ├── iter-support.ts ├── normalize-path.test.ts ├── query.ts └── iter-support.test.ts ├── .npmignore ├── .github ├── workflows │ ├── auto-merge.yml │ ├── pr-rebase-needed.yml │ ├── issue-regex-labeler.yml │ ├── node.js.yml │ ├── update_bcd-utils_api.yml │ ├── add-push-artifacts.yml │ ├── release-pr.yml │ └── labeler.yml ├── dependabot.yml ├── CODEOWNERS ├── PULL_REQUEST_TEMPLATE.md ├── issue-regex-labeler.yml └── ISSUE_TEMPLATE │ └── config.yml ├── types ├── external.d.ts └── index.d.ts ├── index.test.ts ├── tsconfig.json ├── 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 ├── lint └── fixer │ ├── property-order.ts │ └── links.ts ├── api ├── MouseScrollEvent.json ├── MediaSourceHandle.json ├── WorkletGlobalScope.json ├── EntrySync.json ├── XRLayer.json ├── WebGLObject.json ├── AudioWorklet.json ├── SVGHKernElement.json ├── WebGLQuery.json ├── WebGLSync.json ├── WebGLSampler.json ├── CSSStartingStyleRule.json ├── EXT_color_buffer_float.json ├── FragmentDirective.json ├── OES_fbo_render_mipmap.json ├── FileEntrySync.json ├── _globals │ └── origin.json ├── CSSImageValue.json ├── HTMLSpanElement.json ├── WebGLTransformFeedback.json ├── WebGLVertexArrayObject.json ├── DirectoryEntrySync.json ├── DirectoryReaderSync.json └── KHR_parallel_shader_compile.json ├── css ├── properties │ ├── -webkit-locale.json │ ├── -webkit-app-region.json │ ├── -webkit-text-zoom.json │ ├── -webkit-user-drag.json │ ├── -webkit-logical-width.json │ ├── -webkit-margin-after.json │ ├── -webkit-margin-before.json │ ├── -webkit-rtl-ordering.json │ ├── -webkit-text-combine.json │ ├── -webkit-logical-height.json │ ├── -webkit-mask-source-type.json │ ├── -webkit-column-break-after.json │ ├── -webkit-cursor-visibility.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-column-break-before.json │ ├── -webkit-column-break-inside.json │ ├── -webkit-perspective-origin-x.json │ ├── -webkit-perspective-origin-y.json │ ├── -webkit-border-vertical-spacing.json │ ├── -webkit-border-horizontal-spacing.json │ ├── -webkit-line-grid.json │ ├── -webkit-line-snap.json │ ├── -webkit-nbsp-mode.json │ ├── -webkit-column-axis.json │ ├── -webkit-line-align.json │ ├── -webkit-column-progression.json │ ├── -webkit-line-box-contain.json │ ├── -webkit-hyphenate-limit-lines.json │ ├── -webkit-hyphenate-limit-after.json │ ├── -webkit-hyphenate-limit-before.json │ ├── -moz-float-edge.json │ ├── -webkit-text-decorations-in-effect.json │ ├── color-adjust.json │ ├── glyph-orientation-vertical.json │ ├── -moz-force-broken-image-icon.json │ ├── -moz-user-focus.json │ ├── -moz-image-region.json │ ├── -webkit-box-reflect.json │ ├── -webkit-text-security.json │ ├── stroke-color.json │ ├── -webkit-mask-box-image.json │ ├── -webkit-touch-callout.json │ ├── cx.json │ ├── cy.json │ ├── r.json │ ├── x.json │ ├── y.json │ └── -webkit-border-before.json └── selectors │ ├── -moz-last-node.json │ ├── -moz-first-node.json │ ├── -moz-focus-inner.json │ ├── -moz-list-bullet.json │ ├── -moz-list-number.json │ ├── -moz-range-thumb.json │ ├── -moz-range-track.json │ ├── -moz-color-swatch.json │ ├── -moz-progress-bar.json │ ├── -moz-range-progress.json │ ├── -webkit-slider-thumb.json │ ├── -moz-broken.json │ └── -webkit-slider-runnable-track.json ├── webassembly ├── memory64.json ├── fixed-width-SIMD.json ├── jsStringBuiltins.json ├── multi-value.json ├── mutable-globals.json ├── BigInt-to-i64-integration.json ├── exceptionsFinal.json ├── garbage-collection.json ├── reference-types.json ├── relaxed-SIMD.json ├── tail-calls.json ├── typedFunctionReferences.json ├── bulk-memory-operations.json ├── extended-constant-expressions.json ├── sign-extension-operations.json ├── exception-handling.json ├── multiMemory.json └── threads-and-atomics.json ├── http └── headers │ ├── Sec-Browsing-Topics.json │ ├── Observe-Browsing-Topics.json │ ├── Snapshot-Content-Location.json │ ├── Attribution-Reporting-Support.json │ ├── DNT.json │ ├── Priority.json │ ├── DPR.json │ ├── X-DNS-Prefetch-Control.json │ ├── Width.json │ ├── Content-DPR.json │ ├── Pragma.json │ ├── Warning.json │ └── NEL.json ├── mathml └── elements │ └── mfenced.json └── html └── elements ├── rtc.json ├── big.json └── nobr.json /.nvmrc: -------------------------------------------------------------------------------- 1 | v20 2 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | npx lint-staged 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/Elchi3/browser-compat-data/main/docs/matching-browser-releases/hg-changeset.png -------------------------------------------------------------------------------- /docs/matching-browser-releases/bugzilla-target.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Elchi3/browser-compat-data/main/docs/matching-browser-releases/bugzilla-target.png -------------------------------------------------------------------------------- /.lintstagedrc: -------------------------------------------------------------------------------- 1 | { 2 | "*": "prettier --ignore-unknown --write", 3 | "*.{js,jsx,tsx}": "eslint --fix", 4 | "./!(browsers)/**/*.json": "npm run lint:fix" 5 | } 6 | -------------------------------------------------------------------------------- /docs/matching-browser-releases/dxr-navigation-box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Elchi3/browser-compat-data/main/docs/matching-browser-releases/dxr-navigation-box.png -------------------------------------------------------------------------------- /docs/matching-browser-releases/find-releases-tool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Elchi3/browser-compat-data/main/docs/matching-browser-releases/find-releases-tool.png -------------------------------------------------------------------------------- /docs/matching-browser-releases/bugzilla-fixedin-top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Elchi3/browser-compat-data/main/docs/matching-browser-releases/bugzilla-fixedin-top.png -------------------------------------------------------------------------------- /docs/matching-browser-releases/hg-revisions-ontrack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Elchi3/browser-compat-data/main/docs/matching-browser-releases/hg-revisions-ontrack.png -------------------------------------------------------------------------------- /docs/matching-browser-releases/hg-tooltip-revision.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Elchi3/browser-compat-data/main/docs/matching-browser-releases/hg-tooltip-revision.png -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "dbaeumer.vscode-eslint", 4 | "editorconfig.editorconfig", 5 | "richie5um2.vscode-sort-json" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /docs/matching-browser-releases/bugzilla-relnote-firefox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Elchi3/browser-compat-data/main/docs/matching-browser-releases/bugzilla-relnote-firefox.png -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | *.json 2 | !/*.json 3 | !/schemas/*.json 4 | 5 | LICENSE 6 | .*ignore 7 | .git* 8 | .editorconfig 9 | /package-lock.json 10 | /CODE_OF_CONDUCT.md 11 | build/ 12 | coverage/ 13 | types.d.ts 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | __enumerating__*/ 2 | .features.json 3 | .idea 4 | *.log 5 | /node_modules/ 6 | /build/ 7 | !/scripts/build/ 8 | yarn.lock 9 | .nyc_output/ 10 | coverage.lcov 11 | coverage/ 12 | types/types.d.ts 13 | .DS_Store 14 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /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 walk from './walk.js'; 7 | import normalizePath from './normalize-path.js'; 8 | 9 | export { iterSupport, normalizePath, query, walk }; 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: 9 | contents: read 10 | pull-requests: write 11 | 12 | jobs: 13 | auto-merge: 14 | uses: mdn/workflows/.github/workflows/auto-merge.yml@main 15 | with: 16 | target-repo: "mdn/browser-compat-data" 17 | secrets: 18 | GH_TOKEN: ${{ secrets.GH_TOKEN }} 19 | -------------------------------------------------------------------------------- /.husky/post-merge: -------------------------------------------------------------------------------- 1 | 2 | BRANCH="$(git rev-parse --abbrev-ref HEAD)" 3 | if [ "$BRANCH" != "main" ]; then 4 | exit 0 5 | fi 6 | 7 | if [ -f ".husky/_/history" ]; then 8 | lastHash=$(cat ./.husky/_/history) 9 | isUpdated=$(git diff $lastHash HEAD -- ./package.json) 10 | if [ "$isUpdated" != "" ]; then 11 | echo "\n⚠🔥 'package.json' has changed. Please run 'npm install'! 🔥" 12 | fi 13 | else 14 | npm install 15 | fi 16 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: npm 4 | directory: "/" 5 | schedule: 6 | interval: daily 7 | time: "11:00" 8 | open-pull-requests-limit: 10 9 | labels: 10 | - "infra" 11 | - "dependencies" 12 | - package-ecosystem: "github-actions" 13 | directory: "/" 14 | schedule: 15 | interval: "daily" 16 | labels: 17 | - "infra :building_construction:" 18 | -------------------------------------------------------------------------------- /.github/workflows/pr-rebase-needed.yml: -------------------------------------------------------------------------------- 1 | name: PR Needs Rebase 2 | on: 3 | push: 4 | pull_request_target: 5 | types: [synchronize] 6 | 7 | permissions: 8 | contents: read 9 | pull-requests: write # To add labels and comment on PRs 10 | 11 | jobs: 12 | idle: 13 | uses: mdn/workflows/.github/workflows/pr-rebase-needed.yml@main 14 | with: 15 | target-repo: "mdn/browser-compat-data" 16 | secrets: 17 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 18 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /.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 | jobs: 8 | issue-labeler: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: github/issue-labeler@v3.4 12 | with: 13 | repo-token: "${{ secrets.GITHUB_TOKEN }}" 14 | configuration-path: .github/issue-regex-labeler.yml 15 | enable-versioned-regex: 0 16 | -------------------------------------------------------------------------------- /.github/workflows/node.js.yml: -------------------------------------------------------------------------------- 1 | name: Node.js CI 2 | 3 | on: 4 | push: 5 | branches: ["main"] 6 | pull_request: 7 | 8 | permissions: 9 | contents: read 10 | 11 | jobs: 12 | test: 13 | name: Active LTS 14 | runs-on: ubuntu-latest 15 | steps: 16 | - uses: actions/checkout@v4 17 | - uses: actions/setup-node@v4 18 | with: 19 | node-version-file: ".nvmrc" 20 | cache: npm 21 | - run: npm ci 22 | - run: npm test 23 | env: 24 | FORCE_COLOR: 3 25 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # See GOVERNANCE.md for more about this repository's owners and this project's 2 | # governance. 3 | 4 | # Schema, linter and infrastructure changes must be reviewed by an owner: 5 | # ====================================================================== 6 | # /test/ TODO: insert @ handles for owners 7 | # /schemas/ TODO: insert @ handles for owners 8 | # /.github/ TODO: insert @ handles for owners 9 | 10 | ## This pattern will only match files in the root directory: 11 | # /* TODO: insert @ handles for owners 12 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /scripts/save-git-history.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * This script stores the 'main' branch's HEAD commit hash in .husky/_/history 3 | * The stored commit hash is used by the post-merge script .husky/post-merge 4 | */ 5 | 6 | import fs from 'node:fs'; 7 | 8 | import { getBranchName, getHashOfHEAD } from './lib/git.js'; 9 | 10 | const HUSKY_ROOT = '.husky/_/'; 11 | const HISTORY_FILE = HUSKY_ROOT + 'history'; 12 | 13 | if ( 14 | 'main' === getBranchName() && 15 | fs.existsSync(HUSKY_ROOT) && 16 | process.env['HUSKY'] !== '0' 17 | ) { 18 | fs.writeFileSync(HISTORY_FILE, getHashOfHEAD()); 19 | } 20 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */ 4 | 5 | "target": "ES2022", 6 | "module": "ESNext", 7 | "moduleResolution": "node", 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 | -------------------------------------------------------------------------------- /.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:mathml: 17 | - 'mathml\.' 18 | - '\/docs\/Web\/MathML' 19 | data:svg: 20 | - 'svg\.' 21 | - '\/docs\/Web\/SVG' 22 | data:wasm: 23 | - 'webassembly\.' 24 | - '\/docs\/WebAssembly' 25 | data:webdriver: 26 | - 'webdriver\.' 27 | - '\/docs\/Web\/WebDriver' 28 | data:webext: 29 | - 'webextensions\.' 30 | - '\/docs\/Mozilla\/Add-ons' 31 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /.github/workflows/update_bcd-utils_api.yml: -------------------------------------------------------------------------------- 1 | name: Trigger mdn/bcd-utils API update 2 | 3 | on: 4 | workflow_run: 5 | workflows: ["Release package"] 6 | types: 7 | - completed 8 | workflow_dispatch: 9 | 10 | jobs: 11 | send_repo_dispatch_event: 12 | runs-on: ubuntu-latest 13 | if: github.repository == 'mdn/browser-compat-data' 14 | steps: 15 | - uses: actions/github-script@v7 16 | with: 17 | github-token: ${{ secrets.DISPATCH_PAT }} 18 | script: | 19 | const result = await github.rest.repos.createDispatchEvent({ 20 | owner: 'mdn', 21 | repo: 'bcd-utils', 22 | event_type: 'bcd_release', 23 | client_payload: {} 24 | }) 25 | console.log(result); 26 | -------------------------------------------------------------------------------- /.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 | "/mathml/*.json", 20 | "/svg/*.json", 21 | "/webdriver/*.json", 22 | "/webextensions/*.json" 23 | ], 24 | "url": "/schemas/compat-data.schema.json" 25 | }, 26 | { 27 | "fileMatch": [ 28 | "/browsers/*.json" 29 | ], 30 | "url": "/schemas/browsers.schema.json" 31 | } 32 | ] 33 | } 34 | -------------------------------------------------------------------------------- /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/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: null }]; 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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /.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@v4 15 | with: 16 | fetch-depth: 0 # get the full repository checkout, not just the inciting commit 17 | - uses: actions/setup-node@v4 18 | with: 19 | node-version-file: ".nvmrc" 20 | cache: npm 21 | - run: npm ci 22 | - run: npx tsx ./scripts/enumerate-features.ts features.json 23 | - run: npx tsx ./scripts/diff-features.ts --no-github --format=json > features.diff.json 24 | - uses: actions/upload-artifact@v4 25 | with: 26 | name: enumerate-features 27 | path: features.json 28 | - uses: actions/upload-artifact@v4 29 | with: 30 | name: diff-features 31 | path: features.diff.json 32 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 fs from 'node:fs'; 5 | 6 | import { IS_WINDOWS } from '../utils.js'; 7 | import stringifyAndOrderProperties from '../../scripts/lib/stringify-and-order-properties.js'; 8 | 9 | /** 10 | * Fix issues with the property order throughout the BCD files 11 | * @param filename The name of the file to fix 12 | */ 13 | const fixPropertyOrder = (filename: string): void => { 14 | if (filename.includes('/browsers/')) { 15 | return; 16 | } 17 | 18 | let actual = fs.readFileSync(filename, 'utf-8').trim(); 19 | let expected = stringifyAndOrderProperties(actual); 20 | 21 | if (IS_WINDOWS) { 22 | // prevent false positives from git.core.autocrlf on Windows 23 | actual = actual.replace(/\r/g, ''); 24 | expected = expected.replace(/\r/g, ''); 25 | } 26 | 27 | if (actual !== expected) { 28 | fs.writeFileSync(filename, expected + '\n', 'utf-8'); 29 | } 30 | }; 31 | 32 | export default fixPropertyOrder; 33 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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": "Safari only supports the `matches` property." 25 | }, 26 | "safari_ios": "mirror" 27 | } 28 | } 29 | } 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /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": null` support statement for non-existent browsers', () => { 10 | assert.deepEqual(iterSupport({ support: { firefox: [] } }, 'chrome'), [ 11 | { version_added: null }, 12 | ]); 13 | }); 14 | 15 | it('returns a single support statement as an array', () => { 16 | assert.deepEqual( 17 | iterSupport({ support: { firefox: { version_added: true } } }, 'firefox'), 18 | [{ version_added: true }], 19 | ); 20 | }); 21 | 22 | it('returns an array of support statements as an array', () => { 23 | const compatObj = { 24 | support: { firefox: [{ version_added: true }, { version_added: '1' }] }, 25 | }; 26 | const support = [{ version_added: true }, { version_added: '1' }]; 27 | 28 | assert.deepEqual(iterSupport(compatObj, 'firefox'), support); 29 | }); 30 | }); 31 | -------------------------------------------------------------------------------- /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 fs from 'node:fs'; 5 | 6 | import { IS_WINDOWS } from '../utils.js'; 7 | import { processData } from '../linter/test-links.js'; 8 | 9 | /** 10 | * Fix issues with links throughout the BCD files 11 | * @param filename The name of the file to fix 12 | */ 13 | const fixLinks = async (filename: string): Promise => { 14 | if (filename.includes('/browsers/')) { 15 | return; 16 | } 17 | 18 | const original = fs.readFileSync(filename, 'utf-8').trim(); 19 | const errors = await processData(original); 20 | let data = original; 21 | 22 | if (IS_WINDOWS) { 23 | // prevent false positives from git.core.autocrlf on Windows 24 | data = data.replace(/\r/g, ''); 25 | } 26 | 27 | for (const error of errors) { 28 | if (error.expected) { 29 | data = data.replace(error.actual, error.expected); 30 | } 31 | } 32 | 33 | if (original !== data) { 34 | fs.writeFileSync(filename, data + '\n', 'utf-8'); 35 | } 36 | }; 37 | 38 | export default fixLinks; 39 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 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 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "≤5.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": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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 | "support": { 7 | "chrome": { 8 | "version_added": false 9 | }, 10 | "chrome_android": "mirror", 11 | "edge": "mirror", 12 | "firefox": { 13 | "version_added": "134" 14 | }, 15 | "firefox_android": "mirror", 16 | "ie": { 17 | "version_added": false 18 | }, 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 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 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": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "10" 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": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "≤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": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "5.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": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "5.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": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "5.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": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "≤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": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "≤5.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": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "5.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": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "7" 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": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "≤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": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "7" 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": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "5.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": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "5.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": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "5.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": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "5.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": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "≤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": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "≤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": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "≤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": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "≤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": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "≤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": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "≤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": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "≤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": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "≤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": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "≤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": false, 33 | "deprecated": false 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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 | "ie": { 18 | "version_added": false 19 | }, 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": "6" 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": false, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /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 | "ie": { 18 | "version_added": false 19 | }, 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": "6" 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": false, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /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 | "ie": { 18 | "version_added": false 19 | }, 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": true, 33 | "standard_track": false, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /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 | "ie": { 18 | "version_added": false 19 | }, 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": "6" 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": false, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /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 | "ie": { 18 | "version_added": false 19 | }, 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": "6" 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": false, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /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 | "support": { 8 | "chrome": { 9 | "version_added": "108" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": false 15 | }, 16 | "firefox_android": "mirror", 17 | "ie": { 18 | "version_added": false 19 | }, 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/-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 | "ie": { 18 | "version_added": false 19 | }, 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": "7" 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": false, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /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 | "ie": { 18 | "version_added": false 19 | }, 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": "≤5.1" 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": false, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /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 | "ie": { 18 | "version_added": false 19 | }, 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": "6" 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": false, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /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 | "ie": { 18 | "version_added": false 19 | }, 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": "≤5.1" 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": false, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /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 | "ie": { 18 | "version_added": false 19 | }, 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": "≤5.1" 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": false, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /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 | "support": { 8 | "chrome": { 9 | "version_added": "65" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": "76" 15 | }, 16 | "firefox_android": "mirror", 17 | "ie": { 18 | "version_added": false 19 | }, 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 | -------------------------------------------------------------------------------- /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 | "ie": { 20 | "version_added": false 21 | }, 22 | "oculus": "mirror", 23 | "opera": "mirror", 24 | "opera_android": "mirror", 25 | "safari": { 26 | "version_added": "16.4" 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/-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/-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 | "ie": { 18 | "version_added": false 19 | }, 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": false, 34 | "deprecated": true 35 | } 36 | } 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": "mirror", 21 | "opera_android": "mirror", 22 | "safari": { 23 | "version_added": "≤4", 24 | "version_removed": "13.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": false, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /css/properties/color-adjust.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "color-adjust": { 5 | "__compat": { 6 | "spec_url": "https://drafts.csswg.org/css-color-adjust-1/#color-adjust", 7 | "support": { 8 | "chrome": { 9 | "version_added": false 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": "≤72" 15 | }, 16 | "firefox_android": "mirror", 17 | "ie": { 18 | "version_added": false 19 | }, 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": "15.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 | -------------------------------------------------------------------------------- /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 | "support": { 7 | "chrome": { 8 | "version_added": "130" 9 | }, 10 | "chrome_android": { 11 | "version_added": false 12 | }, 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": "134" 16 | }, 17 | "firefox_android": "mirror", 18 | "ie": { 19 | "version_added": false 20 | }, 21 | "oculus": "mirror", 22 | "opera": "mirror", 23 | "opera_android": "mirror", 24 | "safari": { 25 | "version_added": false 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 | -------------------------------------------------------------------------------- /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 | "ie": { 20 | "version_added": false 21 | }, 22 | "oculus": "mirror", 23 | "opera": "mirror", 24 | "opera_android": "mirror", 25 | "safari": { 26 | "version_added": "≤13.1" 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 | -------------------------------------------------------------------------------- /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 | "ie": { 20 | "version_added": false 21 | }, 22 | "oculus": "mirror", 23 | "opera": "mirror", 24 | "opera_android": "mirror", 25 | "safari": { 26 | "version_added": "≤13.1" 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/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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": { 21 | "version_added": false 22 | }, 23 | "opera_android": { 24 | "version_added": false 25 | }, 26 | "safari": { 27 | "version_added": false 28 | }, 29 | "safari_ios": "mirror", 30 | "samsunginternet_android": "mirror", 31 | "webview_android": { 32 | "prefix": "webkit", 33 | "version_added": "37" 34 | }, 35 | "webview_ios": "mirror" 36 | }, 37 | "status": { 38 | "experimental": false, 39 | "standard_track": false, 40 | "deprecated": true 41 | } 42 | } 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /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 | "ie": { 20 | "version_added": false 21 | }, 22 | "oculus": "mirror", 23 | "opera": "mirror", 24 | "opera_android": "mirror", 25 | "safari": { 26 | "version_added": "14.1" 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 | -------------------------------------------------------------------------------- /webassembly/exceptionsFinal.json: -------------------------------------------------------------------------------- 1 | { 2 | "webassembly": { 3 | "exceptionsFinal": { 4 | "__compat": { 5 | "description": "Exception handling with `exnref`", 6 | "spec_url": "https://github.com/WebAssembly/exception-handling/blob/main/proposals/exception-handling/Exceptions.md", 7 | "support": { 8 | "chrome": { 9 | "version_added": false 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": "131" 15 | }, 16 | "firefox_android": "mirror", 17 | "ie": { 18 | "version_added": false 19 | }, 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 | -------------------------------------------------------------------------------- /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 | "ie": { 20 | "version_added": false 21 | }, 22 | "oculus": "mirror", 23 | "opera": "mirror", 24 | "opera_android": "mirror", 25 | "safari": { 26 | "version_added": "18.2" 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 | -------------------------------------------------------------------------------- /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/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 | "ie": { 18 | "version_added": false 19 | }, 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": false, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /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 | "ie": { 20 | "version_added": false 21 | }, 22 | "oculus": "mirror", 23 | "opera": "mirror", 24 | "opera_android": "mirror", 25 | "safari": { 26 | "version_added": "15.1" 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 | -------------------------------------------------------------------------------- /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": "preview" 17 | }, 18 | "firefox_android": "mirror", 19 | "ie": { 20 | "version_added": false 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": true, 35 | "standard_track": true, 36 | "deprecated": false 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /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 | "ie": { 20 | "version_added": false 21 | }, 22 | "oculus": "mirror", 23 | "opera": "mirror", 24 | "opera_android": "mirror", 25 | "safari": { 26 | "version_added": "18.2" 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 | -------------------------------------------------------------------------------- /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 | "support": { 8 | "chrome": { 9 | "version_added": "119" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": "120" 15 | }, 16 | "firefox_android": "mirror", 17 | "ie": { 18 | "version_added": false 19 | }, 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 | -------------------------------------------------------------------------------- /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 | "ie": { 21 | "version_added": false 22 | }, 23 | "oculus": "mirror", 24 | "opera": "mirror", 25 | "opera_android": "mirror", 26 | "safari": { 27 | "version_added": false 28 | }, 29 | "safari_ios": "mirror", 30 | "samsunginternet_android": "mirror", 31 | "webview_android": "mirror", 32 | "webview_ios": "mirror" 33 | }, 34 | "status": { 35 | "experimental": true, 36 | "standard_track": true, 37 | "deprecated": false 38 | } 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /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 | "ie": { 21 | "version_added": false 22 | }, 23 | "oculus": "mirror", 24 | "opera": "mirror", 25 | "opera_android": "mirror", 26 | "safari": { 27 | "version_added": false 28 | }, 29 | "safari_ios": "mirror", 30 | "samsunginternet_android": "mirror", 31 | "webview_android": "mirror", 32 | "webview_ios": "mirror" 33 | }, 34 | "status": { 35 | "experimental": true, 36 | "standard_track": true, 37 | "deprecated": false 38 | } 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /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 | "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 | "ie": { 18 | "version_added": false 19 | }, 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": "≤13.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": true 35 | } 36 | } 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /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/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 | "ie": { 18 | "version_added": false 19 | }, 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": false, 34 | "deprecated": false 35 | } 36 | } 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /mathml/elements/mfenced.json: -------------------------------------------------------------------------------- 1 | { 2 | "mathml": { 3 | "elements": { 4 | "mfenced": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/MathML/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 | "ie": { 19 | "version_added": false 20 | }, 21 | "oculus": "mirror", 22 | "opera": "mirror", 23 | "opera_android": "mirror", 24 | "safari": { 25 | "version_added": "6" 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": false, 35 | "deprecated": true 36 | } 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /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 | "ie": { 20 | "version_added": false 21 | }, 22 | "oculus": "mirror", 23 | "opera": "mirror", 24 | "opera_android": "mirror", 25 | "safari": { 26 | "version_added": "15.1" 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/-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/-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 | "ie": { 18 | "version_added": false 19 | }, 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": false, 34 | "deprecated": true 35 | } 36 | } 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /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 | "ie": { 17 | "version_added": false 18 | }, 19 | "oculus": "mirror", 20 | "opera": { 21 | "version_added": false 22 | }, 23 | "opera_android": { 24 | "version_added": false 25 | }, 26 | "safari": { 27 | "version_added": false 28 | }, 29 | "safari_ios": "mirror", 30 | "samsunginternet_android": "mirror", 31 | "webview_android": "mirror", 32 | "webview_ios": "mirror" 33 | }, 34 | "status": { 35 | "experimental": false, 36 | "standard_track": false, 37 | "deprecated": false 38 | } 39 | } 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /.github/workflows/release-pr.yml: -------------------------------------------------------------------------------- 1 | name: Release PR 2 | 3 | on: 4 | workflow_dispatch: 5 | push: 6 | branches: 7 | - main 8 | 9 | env: 10 | GH_TOKEN: ${{ secrets.GH_TOKEN }} 11 | GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} 12 | 13 | concurrency: 14 | group: ${{ github.workflow }} 15 | 16 | jobs: 17 | manage-release-pr: 18 | if: github.repository == 'mdn/browser-compat-data' && github.actor != 'dependabot[bot]' && !startsWith(github.event.head_commit.message, 'Release v') 19 | name: Manage release PR 20 | runs-on: ubuntu-latest 21 | 22 | steps: 23 | - name: Checkout 24 | uses: actions/checkout@v4 25 | with: 26 | fetch-depth: 0 27 | fetch-tags: true 28 | token: ${{ secrets.GH_TOKEN }} 29 | 30 | - name: Setup Node 31 | uses: actions/setup-node@v4 32 | with: 33 | node-version-file: ".nvmrc" 34 | registry-url: "https://registry.npmjs.org/" 35 | cache: npm 36 | 37 | - name: "Setup git" 38 | run: | 39 | git config user.email 108879845+mdn-bot@users.noreply.github.com 40 | git config user.name mdn-bot 41 | 42 | - name: Install 43 | run: npm ci 44 | 45 | - name: Release 46 | run: npm run release 47 | -------------------------------------------------------------------------------- /api/AudioWorklet.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "AudioWorklet": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/AudioWorklet", 6 | "spec_url": "https://webaudio.github.io/web-audio-api/#AudioWorklet", 7 | "tags": [ 8 | "web-features:audio-worklet" 9 | ], 10 | "support": { 11 | "chrome": { 12 | "version_added": "66" 13 | }, 14 | "chrome_android": "mirror", 15 | "edge": "mirror", 16 | "firefox": { 17 | "version_added": "76" 18 | }, 19 | "firefox_android": "mirror", 20 | "ie": { 21 | "version_added": false 22 | }, 23 | "oculus": "mirror", 24 | "opera": "mirror", 25 | "opera_android": "mirror", 26 | "safari": { 27 | "version_added": "14.1" 28 | }, 29 | "safari_ios": "mirror", 30 | "samsunginternet_android": "mirror", 31 | "webview_android": "mirror", 32 | "webview_ios": "mirror" 33 | }, 34 | "status": { 35 | "experimental": false, 36 | "standard_track": true, 37 | "deprecated": false 38 | } 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /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/-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 | "ie": { 19 | "version_added": false 20 | }, 21 | "oculus": "mirror", 22 | "opera": "mirror", 23 | "opera_android": "mirror", 24 | "safari": { 25 | "version_added": false 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": false, 35 | "deprecated": true 36 | } 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /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/:-moz-last-node", 8 | "support": { 9 | "chrome": { 10 | "version_added": false 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": "≤72" 16 | }, 17 | "firefox_android": "mirror", 18 | "ie": { 19 | "version_added": false 20 | }, 21 | "oculus": "mirror", 22 | "opera": "mirror", 23 | "opera_android": "mirror", 24 | "safari": { 25 | "version_added": false 26 | }, 27 | "safari_ios": "mirror", 28 | "samsunginternet_android": "mirror", 29 | "webview_android": "mirror", 30 | "webview_ios": "mirror" 31 | }, 32 | "status": { 33 | "experimental": true, 34 | "standard_track": false, 35 | "deprecated": false 36 | } 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /http/headers/Attribution-Reporting-Support.json: -------------------------------------------------------------------------------- 1 | { 2 | "http": { 3 | "headers": { 4 | "Attribution-Reporting-Support": { 5 | "__compat": { 6 | "spec_url": "https://wicg.github.io/attribution-reporting-api/#attribution-reporting-support", 7 | "support": { 8 | "chrome": { 9 | "version_added": "117" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": false 15 | }, 16 | "firefox_android": "mirror", 17 | "ie": { 18 | "version_added": false 19 | }, 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 | } 41 | -------------------------------------------------------------------------------- /css/properties/-moz-image-region.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-moz-image-region": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/-moz-image-region", 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": "112" 16 | }, 17 | "firefox_android": "mirror", 18 | "ie": { 19 | "version_added": false 20 | }, 21 | "oculus": "mirror", 22 | "opera": "mirror", 23 | "opera_android": "mirror", 24 | "safari": { 25 | "version_added": false 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": false, 35 | "deprecated": false 36 | } 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /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/:-moz-first-node", 8 | "support": { 9 | "chrome": { 10 | "version_added": false 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": "≤72" 16 | }, 17 | "firefox_android": "mirror", 18 | "ie": { 19 | "version_added": false 20 | }, 21 | "oculus": "mirror", 22 | "opera": "mirror", 23 | "opera_android": "mirror", 24 | "safari": { 25 | "version_added": false 26 | }, 27 | "safari_ios": "mirror", 28 | "samsunginternet_android": "mirror", 29 | "webview_android": "mirror", 30 | "webview_ios": "mirror" 31 | }, 32 | "status": { 33 | "experimental": true, 34 | "standard_track": false, 35 | "deprecated": false 36 | } 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /css/selectors/-moz-focus-inner.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "selectors": { 4 | "-moz-focus-inner": { 5 | "__compat": { 6 | "description": "`::-moz-focus-inner`", 7 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/::-moz-focus-inner", 8 | "support": { 9 | "chrome": { 10 | "version_added": false 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": "≤72" 16 | }, 17 | "firefox_android": "mirror", 18 | "ie": { 19 | "version_added": false 20 | }, 21 | "oculus": "mirror", 22 | "opera": "mirror", 23 | "opera_android": "mirror", 24 | "safari": { 25 | "version_added": false 26 | }, 27 | "safari_ios": "mirror", 28 | "samsunginternet_android": "mirror", 29 | "webview_android": "mirror", 30 | "webview_ios": "mirror" 31 | }, 32 | "status": { 33 | "experimental": true, 34 | "standard_track": false, 35 | "deprecated": false 36 | } 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /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/::-moz-list-bullet", 8 | "support": { 9 | "chrome": { 10 | "version_added": false 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": "≤72" 16 | }, 17 | "firefox_android": "mirror", 18 | "ie": { 19 | "version_added": false 20 | }, 21 | "oculus": "mirror", 22 | "opera": "mirror", 23 | "opera_android": "mirror", 24 | "safari": { 25 | "version_added": false 26 | }, 27 | "safari_ios": "mirror", 28 | "samsunginternet_android": "mirror", 29 | "webview_android": "mirror", 30 | "webview_ios": "mirror" 31 | }, 32 | "status": { 33 | "experimental": true, 34 | "standard_track": false, 35 | "deprecated": false 36 | } 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /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/::-moz-list-number", 8 | "support": { 9 | "chrome": { 10 | "version_added": false 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": "≤72" 16 | }, 17 | "firefox_android": "mirror", 18 | "ie": { 19 | "version_added": false 20 | }, 21 | "oculus": "mirror", 22 | "opera": "mirror", 23 | "opera_android": "mirror", 24 | "safari": { 25 | "version_added": false 26 | }, 27 | "safari_ios": "mirror", 28 | "samsunginternet_android": "mirror", 29 | "webview_android": "mirror", 30 | "webview_ios": "mirror" 31 | }, 32 | "status": { 33 | "experimental": true, 34 | "standard_track": false, 35 | "deprecated": false 36 | } 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /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/::-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 | "ie": { 19 | "version_added": false 20 | }, 21 | "oculus": "mirror", 22 | "opera": "mirror", 23 | "opera_android": "mirror", 24 | "safari": { 25 | "version_added": false 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": false, 35 | "deprecated": false 36 | } 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /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/::-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 | "ie": { 19 | "version_added": false 20 | }, 21 | "oculus": "mirror", 22 | "opera": "mirror", 23 | "opera_android": "mirror", 24 | "safari": { 25 | "version_added": false 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": false, 35 | "deprecated": false 36 | } 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /html/elements/rtc.json: -------------------------------------------------------------------------------- 1 | { 2 | "html": { 3 | "elements": { 4 | "rtc": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/HTML/Element/rtc", 7 | "spec_url": "https://html.spec.whatwg.org/multipage/obsolete.html#rtc", 8 | "support": { 9 | "chrome": { 10 | "version_added": "≤80" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": "33" 16 | }, 17 | "firefox_android": "mirror", 18 | "ie": { 19 | "version_added": false 20 | }, 21 | "oculus": "mirror", 22 | "opera": "mirror", 23 | "opera_android": "mirror", 24 | "safari": { 25 | "version_added": "≤13.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": true 36 | } 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /api/SVGHKernElement.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "SVGHKernElement": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/SVGHKernElement", 6 | "spec_url": "https://www.w3.org/TR/SVG11/fonts.html#InterfaceSVGHKernElement", 7 | "support": { 8 | "chrome": { 9 | "version_added": "19", 10 | "version_removed": "40" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": false 16 | }, 17 | "firefox_android": "mirror", 18 | "ie": { 19 | "version_added": false 20 | }, 21 | "oculus": "mirror", 22 | "opera": "mirror", 23 | "opera_android": "mirror", 24 | "safari": { 25 | "version_added": "6", 26 | "version_removed": "16.4" 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": true 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /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/-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 | "ie": { 18 | "version_added": false 19 | }, 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": { 29 | "version_added": "2.2" 30 | }, 31 | "webview_ios": "mirror" 32 | }, 33 | "status": { 34 | "experimental": false, 35 | "standard_track": false, 36 | "deprecated": false 37 | } 38 | } 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /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/::-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 | "ie": { 19 | "version_added": false 20 | }, 21 | "oculus": "mirror", 22 | "opera": "mirror", 23 | "opera_android": "mirror", 24 | "safari": { 25 | "version_added": false 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": false, 35 | "deprecated": false 36 | } 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/::-moz-progress-bar", 8 | "support": { 9 | "chrome": { 10 | "version_added": false 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": "≤72" 16 | }, 17 | "firefox_android": "mirror", 18 | "ie": { 19 | "version_added": false 20 | }, 21 | "oculus": "mirror", 22 | "opera": "mirror", 23 | "opera_android": "mirror", 24 | "safari": { 25 | "version_added": false 26 | }, 27 | "safari_ios": "mirror", 28 | "samsunginternet_android": "mirror", 29 | "webview_android": "mirror", 30 | "webview_ios": "mirror" 31 | }, 32 | "status": { 33 | "experimental": true, 34 | "standard_track": false, 35 | "deprecated": false 36 | } 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /http/headers/DNT.json: -------------------------------------------------------------------------------- 1 | { 2 | "http": { 3 | "headers": { 4 | "DNT": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/HTTP/Headers/DNT", 7 | "support": { 8 | "chrome": { 9 | "version_added": "23" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": { 13 | "version_added": "12" 14 | }, 15 | "firefox": { 16 | "version_added": "4" 17 | }, 18 | "firefox_android": "mirror", 19 | "ie": { 20 | "version_added": "9" 21 | }, 22 | "oculus": "mirror", 23 | "opera": "mirror", 24 | "opera_android": "mirror", 25 | "safari": { 26 | "version_added": "6", 27 | "version_removed": "12.1" 28 | }, 29 | "safari_ios": "mirror", 30 | "samsunginternet_android": "mirror", 31 | "webview_android": "mirror", 32 | "webview_ios": "mirror" 33 | }, 34 | "status": { 35 | "experimental": false, 36 | "standard_track": false, 37 | "deprecated": true 38 | } 39 | } 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /.github/workflows/labeler.yml: -------------------------------------------------------------------------------- 1 | name: Pull Request Labeler 2 | on: 3 | pull_request_target: 4 | 5 | permissions: 6 | contents: read # to determine modified files 7 | issues: write # pr-size-labeler uses the issues API until https://github.com/CodelyTV/pr-size-labeler/pull/89 is merged 8 | pull-requests: write # to add labels to PRs 9 | 10 | jobs: 11 | label-py-path: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/labeler@v5 15 | with: 16 | repo-token: ${{ secrets.GITHUB_TOKEN }} 17 | sync-labels: true 18 | 19 | label-by-size: 20 | if: github.actor != 'dependabot[bot]' && !startsWith(github.event.pull_request.title, 'Release v') 21 | needs: label-py-path 22 | runs-on: ubuntu-latest 23 | steps: 24 | - uses: codelytv/pr-size-labeler@v1 25 | with: 26 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 27 | github_api_url: "https://api.github.com" 28 | xs_label: "size:xs" 29 | xs_max_size: "6" 30 | s_label: "size:s" 31 | s_max_size: "24" 32 | m_label: "size:m" 33 | m_max_size: "100" 34 | l_label: "size:l" 35 | l_max_size: "1000" 36 | xl_label: "size:xl" 37 | fail_if_xl: "false" 38 | message_if_xl: "" 39 | -------------------------------------------------------------------------------- /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/-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 | "ie": { 18 | "version_added": false 19 | }, 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": "3" 25 | }, 26 | "safari_ios": { 27 | "version_added": "1" 28 | }, 29 | "samsunginternet_android": "mirror", 30 | "webview_android": "mirror", 31 | "webview_ios": "mirror" 32 | }, 33 | "status": { 34 | "experimental": false, 35 | "standard_track": false, 36 | "deprecated": false 37 | } 38 | } 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /css/properties/stroke-color.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "stroke-color": { 5 | "__compat": { 6 | "spec_url": "https://drafts.fxtf.org/fill-stroke-3/#stroke-color", 7 | "tags": [ 8 | "web-features:svg" 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 | "ie": { 21 | "version_added": false 22 | }, 23 | "oculus": "mirror", 24 | "opera": "mirror", 25 | "opera_android": "mirror", 26 | "safari": { 27 | "version_added": "≤13.1" 28 | }, 29 | "safari_ios": "mirror", 30 | "samsunginternet_android": "mirror", 31 | "webview_android": "mirror", 32 | "webview_ios": "mirror" 33 | }, 34 | "status": { 35 | "experimental": true, 36 | "standard_track": true, 37 | "deprecated": false 38 | } 39 | } 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /http/headers/Priority.json: -------------------------------------------------------------------------------- 1 | { 2 | "http": { 3 | "headers": { 4 | "Priority": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/HTTP/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 | "ie": { 19 | "version_added": false 20 | }, 21 | "oculus": "mirror", 22 | "opera": "mirror", 23 | "opera_android": "mirror", 24 | "safari": { 25 | "version_added": false 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/-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/-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 | "ie": { 18 | "version_added": false 19 | }, 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": "3.1" 25 | }, 26 | "safari_ios": "mirror", 27 | "samsunginternet_android": "mirror", 28 | "webview_android": { 29 | "version_added": "2" 30 | }, 31 | "webview_ios": "mirror" 32 | }, 33 | "status": { 34 | "experimental": false, 35 | "standard_track": false, 36 | "deprecated": false 37 | } 38 | } 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /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/-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 | "ie": { 18 | "version_added": false 19 | }, 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": "mirror", 23 | "safari": { 24 | "version_added": false 25 | }, 26 | "safari_ios": { 27 | "version_added": "2" 28 | }, 29 | "samsunginternet_android": "mirror", 30 | "webview_android": "mirror", 31 | "webview_ios": "mirror" 32 | }, 33 | "status": { 34 | "experimental": false, 35 | "standard_track": false, 36 | "deprecated": false 37 | } 38 | } 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /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/::-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 | "ie": { 19 | "version_added": false 20 | }, 21 | "oculus": "mirror", 22 | "opera": "mirror", 23 | "opera_android": "mirror", 24 | "safari": { 25 | "version_added": false 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": false, 35 | "deprecated": false 36 | } 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /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/::-webkit-slider-thumb", 8 | "support": { 9 | "chrome": { 10 | "version_added": "≤83" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": false 16 | }, 17 | "firefox_android": "mirror", 18 | "ie": { 19 | "version_added": false 20 | }, 21 | "oculus": "mirror", 22 | "opera": "mirror", 23 | "opera_android": "mirror", 24 | "safari": { 25 | "version_added": false 26 | }, 27 | "safari_ios": "mirror", 28 | "samsunginternet_android": "mirror", 29 | "webview_android": "mirror", 30 | "webview_ios": "mirror" 31 | }, 32 | "status": { 33 | "experimental": true, 34 | "standard_track": false, 35 | "deprecated": false 36 | } 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /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 | "ie": { 20 | "version_added": false 21 | }, 22 | "oculus": "mirror", 23 | "opera": "mirror", 24 | "opera_android": "mirror", 25 | "safari": { 26 | "version_added": "17.4" 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/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 | "ie": { 23 | "version_added": false 24 | }, 25 | "oculus": "mirror", 26 | "opera": "mirror", 27 | "opera_android": "mirror", 28 | "safari": { 29 | "version_added": "15" 30 | }, 31 | "safari_ios": "mirror", 32 | "samsunginternet_android": "mirror", 33 | "webview_android": "mirror", 34 | "webview_ios": "mirror" 35 | }, 36 | "status": { 37 | "experimental": false, 38 | "standard_track": true, 39 | "deprecated": false 40 | } 41 | } 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /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 | "ie": { 23 | "version_added": false 24 | }, 25 | "oculus": "mirror", 26 | "opera": "mirror", 27 | "opera_android": "mirror", 28 | "safari": { 29 | "version_added": "15" 30 | }, 31 | "safari_ios": "mirror", 32 | "samsunginternet_android": "mirror", 33 | "webview_android": "mirror", 34 | "webview_ios": "mirror" 35 | }, 36 | "status": { 37 | "experimental": false, 38 | "standard_track": true, 39 | "deprecated": false 40 | } 41 | } 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /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/:-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 | "ie": { 20 | "version_added": false 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": false, 36 | "deprecated": true 37 | } 38 | } 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /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/Headers/DPR", 8 | "support": { 9 | "chrome": { 10 | "version_added": "46" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": { 14 | "version_added": "≤79" 15 | }, 16 | "firefox": { 17 | "version_added": false 18 | }, 19 | "firefox_android": "mirror", 20 | "ie": { 21 | "version_added": false 22 | }, 23 | "oculus": "mirror", 24 | "opera": "mirror", 25 | "opera_android": "mirror", 26 | "safari": { 27 | "version_added": false 28 | }, 29 | "safari_ios": "mirror", 30 | "samsunginternet_android": "mirror", 31 | "webview_android": "mirror", 32 | "webview_ios": "mirror" 33 | }, 34 | "status": { 35 | "experimental": false, 36 | "standard_track": false, 37 | "deprecated": true 38 | } 39 | } 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /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/Headers/X-DNS-Prefetch-Control", 7 | "support": { 8 | "chrome": { 9 | "version_added": "1" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": { 13 | "version_added": "≤79" 14 | }, 15 | "firefox": { 16 | "version_added": "2" 17 | }, 18 | "firefox_android": "mirror", 19 | "ie": { 20 | "version_added": false 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": false, 36 | "deprecated": false 37 | } 38 | } 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /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 | "ie": { 23 | "version_added": false 24 | }, 25 | "oculus": "mirror", 26 | "opera": "mirror", 27 | "opera_android": "mirror", 28 | "safari": { 29 | "version_added": "15" 30 | }, 31 | "safari_ios": "mirror", 32 | "samsunginternet_android": "mirror", 33 | "webview_android": "mirror", 34 | "webview_ios": "mirror" 35 | }, 36 | "status": { 37 | "experimental": false, 38 | "standard_track": true, 39 | "deprecated": false 40 | } 41 | } 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /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/Headers/Width", 8 | "support": { 9 | "chrome": { 10 | "version_added": "46" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": { 14 | "version_added": "≤79" 15 | }, 16 | "firefox": { 17 | "version_added": false 18 | }, 19 | "firefox_android": "mirror", 20 | "ie": { 21 | "version_added": false 22 | }, 23 | "oculus": "mirror", 24 | "opera": "mirror", 25 | "opera_android": "mirror", 26 | "safari": { 27 | "version_added": false 28 | }, 29 | "safari_ios": "mirror", 30 | "samsunginternet_android": "mirror", 31 | "webview_android": "mirror", 32 | "webview_ios": "mirror" 33 | }, 34 | "status": { 35 | "experimental": false, 36 | "standard_track": false, 37 | "deprecated": true 38 | } 39 | } 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /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 | "ie": { 21 | "version_added": false 22 | }, 23 | "oculus": "mirror", 24 | "opera": "mirror", 25 | "opera_android": "mirror", 26 | "safari": { 27 | "version_added": "17.5" 28 | }, 29 | "safari_ios": "mirror", 30 | "samsunginternet_android": "mirror", 31 | "webview_android": "mirror", 32 | "webview_ios": "mirror" 33 | }, 34 | "status": { 35 | "experimental": false, 36 | "standard_track": true, 37 | "deprecated": false 38 | } 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /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 | "ie": { 21 | "version_added": false 22 | }, 23 | "oculus": "mirror", 24 | "opera": "mirror", 25 | "opera_android": "mirror", 26 | "safari": { 27 | "version_added": "15" 28 | }, 29 | "safari_ios": "mirror", 30 | "samsunginternet_android": "mirror", 31 | "webview_android": "mirror", 32 | "webview_ios": "mirror" 33 | }, 34 | "status": { 35 | "experimental": false, 36 | "standard_track": true, 37 | "deprecated": false 38 | } 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /api/FragmentDirective.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "FragmentDirective": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/FragmentDirective", 6 | "spec_url": "https://wicg.github.io/scroll-to-text-fragment/#fragmentdirective", 7 | "support": { 8 | "chrome": { 9 | "version_added": "81" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": { 13 | "version_added": "83" 14 | }, 15 | "firefox": { 16 | "version_added": "131" 17 | }, 18 | "firefox_android": "mirror", 19 | "ie": { 20 | "version_added": false 21 | }, 22 | "oculus": "mirror", 23 | "opera": "mirror", 24 | "opera_android": "mirror", 25 | "safari": { 26 | "version_added": false, 27 | "impl_url": "https://webkit.org/b/273466" 28 | }, 29 | "safari_ios": "mirror", 30 | "samsunginternet_android": "mirror", 31 | "webview_android": "mirror", 32 | "webview_ios": "mirror" 33 | }, 34 | "status": { 35 | "experimental": false, 36 | "standard_track": true, 37 | "deprecated": false 38 | } 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /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 | "ie": { 21 | "version_added": false 22 | }, 23 | "oculus": "mirror", 24 | "opera": "mirror", 25 | "opera_android": "mirror", 26 | "safari": { 27 | "version_added": "14.1" 28 | }, 29 | "safari_ios": "mirror", 30 | "samsunginternet_android": "mirror", 31 | "webview_android": "mirror", 32 | "webview_ios": "mirror" 33 | }, 34 | "status": { 35 | "experimental": false, 36 | "standard_track": true, 37 | "deprecated": false 38 | } 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /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 | "ie": { 22 | "version_added": false 23 | }, 24 | "oculus": "mirror", 25 | "opera": "mirror", 26 | "opera_android": "mirror", 27 | "safari": { 28 | "version_added": "14.1" 29 | }, 30 | "safari_ios": "mirror", 31 | "samsunginternet_android": "mirror", 32 | "webview_android": "mirror", 33 | "webview_ios": "mirror" 34 | }, 35 | "status": { 36 | "experimental": false, 37 | "standard_track": true, 38 | "deprecated": false 39 | } 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /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 | "ie": { 18 | "version_added": false 19 | }, 20 | "oculus": "mirror", 21 | "opera": { 22 | "version_added": false 23 | }, 24 | "opera_android": { 25 | "version_added": false 26 | }, 27 | "safari": { 28 | "version_added": false 29 | }, 30 | "safari_ios": "mirror", 31 | "samsunginternet_android": "mirror", 32 | "webview_android": { 33 | "prefix": "webkit", 34 | "version_added": "37" 35 | }, 36 | "webview_ios": "mirror" 37 | }, 38 | "status": { 39 | "experimental": false, 40 | "standard_track": false, 41 | "deprecated": true 42 | } 43 | } 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /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 | "ie": { 23 | "version_added": false 24 | }, 25 | "oculus": "mirror", 26 | "opera": "mirror", 27 | "opera_android": "mirror", 28 | "safari": { 29 | "version_added": "11" 30 | }, 31 | "safari_ios": "mirror", 32 | "samsunginternet_android": "mirror", 33 | "webview_android": "mirror", 34 | "webview_ios": "mirror" 35 | }, 36 | "status": { 37 | "experimental": false, 38 | "standard_track": true, 39 | "deprecated": false 40 | } 41 | } 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /html/elements/big.json: -------------------------------------------------------------------------------- 1 | { 2 | "html": { 3 | "elements": { 4 | "big": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/HTML/Element/big", 7 | "spec_url": "https://html.spec.whatwg.org/multipage/obsolete.html#big", 8 | "support": { 9 | "chrome": { 10 | "version_added": "1" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": { 14 | "version_added": "12" 15 | }, 16 | "firefox": { 17 | "version_added": "1" 18 | }, 19 | "firefox_android": "mirror", 20 | "ie": { 21 | "version_added": "≤11" 22 | }, 23 | "oculus": "mirror", 24 | "opera": "mirror", 25 | "opera_android": "mirror", 26 | "safari": { 27 | "version_added": "≤4" 28 | }, 29 | "safari_ios": "mirror", 30 | "samsunginternet_android": "mirror", 31 | "webview_android": "mirror", 32 | "webview_ios": "mirror" 33 | }, 34 | "status": { 35 | "experimental": false, 36 | "standard_track": true, 37 | "deprecated": true 38 | } 39 | } 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /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/Headers/Content-DPR", 8 | "support": { 9 | "chrome": { 10 | "version_added": "46" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": { 14 | "version_added": "≤79" 15 | }, 16 | "firefox": { 17 | "version_added": false 18 | }, 19 | "firefox_android": "mirror", 20 | "ie": { 21 | "version_added": false 22 | }, 23 | "oculus": "mirror", 24 | "opera": "mirror", 25 | "opera_android": "mirror", 26 | "safari": { 27 | "version_added": false 28 | }, 29 | "safari_ios": "mirror", 30 | "samsunginternet_android": "mirror", 31 | "webview_android": "mirror", 32 | "webview_ios": "mirror" 33 | }, 34 | "status": { 35 | "experimental": false, 36 | "standard_track": false, 37 | "deprecated": true 38 | } 39 | } 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /http/headers/Pragma.json: -------------------------------------------------------------------------------- 1 | { 2 | "http": { 3 | "headers": { 4 | "Pragma": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/HTTP/Headers/Pragma", 7 | "spec_url": "https://httpwg.org/specs/rfc9111.html#field.pragma", 8 | "support": { 9 | "chrome": { 10 | "version_added": "1" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": { 14 | "version_added": "12" 15 | }, 16 | "firefox": { 17 | "version_added": "1" 18 | }, 19 | "firefox_android": "mirror", 20 | "ie": { 21 | "version_added": "≤11" 22 | }, 23 | "oculus": "mirror", 24 | "opera": "mirror", 25 | "opera_android": "mirror", 26 | "safari": { 27 | "version_added": "1" 28 | }, 29 | "safari_ios": "mirror", 30 | "samsunginternet_android": "mirror", 31 | "webview_android": "mirror", 32 | "webview_ios": "mirror" 33 | }, 34 | "status": { 35 | "experimental": false, 36 | "standard_track": true, 37 | "deprecated": true 38 | } 39 | } 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /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 | "ie": { 22 | "version_added": false 23 | }, 24 | "oculus": "mirror", 25 | "opera": "mirror", 26 | "opera_android": "mirror", 27 | "safari": { 28 | "version_added": "16.4" 29 | }, 30 | "safari_ios": "mirror", 31 | "samsunginternet_android": "mirror", 32 | "webview_android": "mirror", 33 | "webview_ios": "mirror" 34 | }, 35 | "status": { 36 | "experimental": false, 37 | "standard_track": true, 38 | "deprecated": false 39 | } 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /api/HTMLSpanElement.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "HTMLSpanElement": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/Web/API/HTMLSpanElement", 6 | "spec_url": "https://html.spec.whatwg.org/multipage/text-level-semantics.html#htmlspanelement", 7 | "tags": [ 8 | "web-features:span" 9 | ], 10 | "support": { 11 | "chrome": { 12 | "version_added": "15" 13 | }, 14 | "chrome_android": "mirror", 15 | "edge": { 16 | "version_added": "12" 17 | }, 18 | "firefox": { 19 | "version_added": "1" 20 | }, 21 | "firefox_android": "mirror", 22 | "ie": { 23 | "version_added": "5.5" 24 | }, 25 | "oculus": "mirror", 26 | "opera": "mirror", 27 | "opera_android": "mirror", 28 | "safari": { 29 | "version_added": "6" 30 | }, 31 | "safari_ios": "mirror", 32 | "samsunginternet_android": "mirror", 33 | "webview_android": "mirror", 34 | "webview_ios": "mirror" 35 | }, 36 | "status": { 37 | "experimental": false, 38 | "standard_track": true, 39 | "deprecated": false 40 | } 41 | } 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /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 | "ie": { 23 | "version_added": false 24 | }, 25 | "oculus": "mirror", 26 | "opera": "mirror", 27 | "opera_android": "mirror", 28 | "safari": { 29 | "version_added": "15" 30 | }, 31 | "safari_ios": "mirror", 32 | "samsunginternet_android": "mirror", 33 | "webview_android": "mirror", 34 | "webview_ios": "mirror" 35 | }, 36 | "status": { 37 | "experimental": false, 38 | "standard_track": true, 39 | "deprecated": false 40 | } 41 | } 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /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 | "ie": { 23 | "version_added": false 24 | }, 25 | "oculus": "mirror", 26 | "opera": "mirror", 27 | "opera_android": "mirror", 28 | "safari": { 29 | "version_added": "15" 30 | }, 31 | "safari_ios": "mirror", 32 | "samsunginternet_android": "mirror", 33 | "webview_android": "mirror", 34 | "webview_ios": "mirror" 35 | }, 36 | "status": { 37 | "experimental": false, 38 | "standard_track": true, 39 | "deprecated": false 40 | } 41 | } 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /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/::-webkit-slider-runnable-track", 8 | "support": { 9 | "chrome": { 10 | "version_added": "≤83" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": "mirror", 14 | "firefox": { 15 | "version_added": false 16 | }, 17 | "firefox_android": "mirror", 18 | "ie": { 19 | "version_added": false 20 | }, 21 | "oculus": "mirror", 22 | "opera": "mirror", 23 | "opera_android": "mirror", 24 | "safari": { 25 | "version_added": false 26 | }, 27 | "safari_ios": "mirror", 28 | "samsunginternet_android": "mirror", 29 | "webview_android": "mirror", 30 | "webview_ios": "mirror" 31 | }, 32 | "status": { 33 | "experimental": true, 34 | "standard_track": false, 35 | "deprecated": false 36 | } 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /html/elements/nobr.json: -------------------------------------------------------------------------------- 1 | { 2 | "html": { 3 | "elements": { 4 | "nobr": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/HTML/Element/nobr", 7 | "spec_url": "https://html.spec.whatwg.org/multipage/obsolete.html#nobr", 8 | "support": { 9 | "chrome": { 10 | "version_added": "1" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": { 14 | "version_added": "12" 15 | }, 16 | "firefox": { 17 | "version_added": "1" 18 | }, 19 | "firefox_android": "mirror", 20 | "ie": { 21 | "version_added": "≤11" 22 | }, 23 | "oculus": "mirror", 24 | "opera": "mirror", 25 | "opera_android": "mirror", 26 | "safari": { 27 | "version_added": "≤4" 28 | }, 29 | "safari_ios": "mirror", 30 | "samsunginternet_android": "mirror", 31 | "webview_android": "mirror", 32 | "webview_ios": "mirror" 33 | }, 34 | "status": { 35 | "experimental": false, 36 | "standard_track": true, 37 | "deprecated": true 38 | } 39 | } 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /http/headers/Warning.json: -------------------------------------------------------------------------------- 1 | { 2 | "http": { 3 | "headers": { 4 | "Warning": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/HTTP/Headers/Warning", 7 | "spec_url": "https://httpwg.org/specs/rfc9111.html#field.warning", 8 | "support": { 9 | "chrome": { 10 | "version_added": "1" 11 | }, 12 | "chrome_android": "mirror", 13 | "edge": { 14 | "version_added": "12" 15 | }, 16 | "firefox": { 17 | "version_added": "1" 18 | }, 19 | "firefox_android": "mirror", 20 | "ie": { 21 | "version_added": "≤11" 22 | }, 23 | "oculus": "mirror", 24 | "opera": "mirror", 25 | "opera_android": "mirror", 26 | "safari": { 27 | "version_added": "1" 28 | }, 29 | "safari_ios": "mirror", 30 | "samsunginternet_android": "mirror", 31 | "webview_android": "mirror", 32 | "webview_ios": "mirror" 33 | }, 34 | "status": { 35 | "experimental": false, 36 | "standard_track": true, 37 | "deprecated": true 38 | } 39 | } 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /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 | "ie": { 21 | "version_added": false 22 | }, 23 | "oculus": "mirror", 24 | "opera": "mirror", 25 | "opera_android": "mirror", 26 | "safari": { 27 | "version_added": "15.2" 28 | }, 29 | "safari_ios": "mirror", 30 | "samsunginternet_android": "mirror", 31 | "webview_android": "mirror", 32 | "webview_ios": "mirror" 33 | }, 34 | "status": { 35 | "experimental": false, 36 | "standard_track": true, 37 | "deprecated": false 38 | } 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /webassembly/multiMemory.json: -------------------------------------------------------------------------------- 1 | { 2 | "webassembly": { 3 | "multiMemory": { 4 | "__compat": { 5 | "mdn_url": "https://developer.mozilla.org/docs/WebAssembly/JavaScript_interface/Memory", 6 | "spec_url": "https://github.com/WebAssembly/multi-memory/blob/main/proposals/multi-memory/Overview.md", 7 | "tags": [ 8 | "web-features:wasm-multi-memory" 9 | ], 10 | "support": { 11 | "chrome": { 12 | "version_added": "120" 13 | }, 14 | "chrome_android": "mirror", 15 | "edge": "mirror", 16 | "firefox": { 17 | "version_added": "125" 18 | }, 19 | "firefox_android": "mirror", 20 | "ie": { 21 | "version_added": false 22 | }, 23 | "oculus": "mirror", 24 | "opera": "mirror", 25 | "opera_android": "mirror", 26 | "safari": { 27 | "version_added": false 28 | }, 29 | "safari_ios": "mirror", 30 | "samsunginternet_android": "mirror", 31 | "webview_android": "mirror", 32 | "webview_ios": "mirror" 33 | }, 34 | "status": { 35 | "experimental": false, 36 | "standard_track": true, 37 | "deprecated": false 38 | } 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /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 | "ie": { 22 | "version_added": false 23 | }, 24 | "oculus": "mirror", 25 | "opera": "mirror", 26 | "opera_android": "mirror", 27 | "safari": { 28 | "version_added": "15.2" 29 | }, 30 | "safari_ios": "mirror", 31 | "samsunginternet_android": "mirror", 32 | "webview_android": { 33 | "version_added": false 34 | }, 35 | "webview_ios": "mirror" 36 | }, 37 | "status": { 38 | "experimental": false, 39 | "standard_track": true, 40 | "deprecated": false 41 | } 42 | } 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /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 | "ie": { 18 | "version_added": false 19 | }, 20 | "oculus": "mirror", 21 | "opera": { 22 | "version_added": false 23 | }, 24 | "opera_android": { 25 | "version_added": false 26 | }, 27 | "safari": { 28 | "version_added": false 29 | }, 30 | "safari_ios": "mirror", 31 | "samsunginternet_android": "mirror", 32 | "webview_android": { 33 | "prefix": "webkit", 34 | "version_added": "37" 35 | }, 36 | "webview_ios": "mirror" 37 | }, 38 | "status": { 39 | "experimental": false, 40 | "standard_track": false, 41 | "deprecated": true 42 | } 43 | } 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /css/properties/cx.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "cx": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/cx", 7 | "spec_url": "https://svgwg.org/svg2-draft/geometry.html#CX", 8 | "tags": [ 9 | "web-features:svg" 10 | ], 11 | "support": { 12 | "chrome": { 13 | "version_added": "≤80" 14 | }, 15 | "chrome_android": "mirror", 16 | "edge": "mirror", 17 | "firefox": { 18 | "version_added": "≤72" 19 | }, 20 | "firefox_android": "mirror", 21 | "ie": { 22 | "version_added": false 23 | }, 24 | "oculus": "mirror", 25 | "opera": "mirror", 26 | "opera_android": "mirror", 27 | "safari": { 28 | "version_added": "≤13.1" 29 | }, 30 | "safari_ios": "mirror", 31 | "samsunginternet_android": "mirror", 32 | "webview_android": "mirror", 33 | "webview_ios": "mirror" 34 | }, 35 | "status": { 36 | "experimental": false, 37 | "standard_track": true, 38 | "deprecated": false 39 | } 40 | } 41 | } 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /css/properties/cy.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "cy": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/cy", 7 | "spec_url": "https://svgwg.org/svg2-draft/geometry.html#CY", 8 | "tags": [ 9 | "web-features:svg" 10 | ], 11 | "support": { 12 | "chrome": { 13 | "version_added": "≤80" 14 | }, 15 | "chrome_android": "mirror", 16 | "edge": "mirror", 17 | "firefox": { 18 | "version_added": "≤72" 19 | }, 20 | "firefox_android": "mirror", 21 | "ie": { 22 | "version_added": false 23 | }, 24 | "oculus": "mirror", 25 | "opera": "mirror", 26 | "opera_android": "mirror", 27 | "safari": { 28 | "version_added": "≤13.1" 29 | }, 30 | "safari_ios": "mirror", 31 | "samsunginternet_android": "mirror", 32 | "webview_android": "mirror", 33 | "webview_ios": "mirror" 34 | }, 35 | "status": { 36 | "experimental": false, 37 | "standard_track": true, 38 | "deprecated": false 39 | } 40 | } 41 | } 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /css/properties/r.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "r": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/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": "≤80" 14 | }, 15 | "chrome_android": "mirror", 16 | "edge": "mirror", 17 | "firefox": { 18 | "version_added": "≤72" 19 | }, 20 | "firefox_android": "mirror", 21 | "ie": { 22 | "version_added": false 23 | }, 24 | "oculus": "mirror", 25 | "opera": "mirror", 26 | "opera_android": "mirror", 27 | "safari": { 28 | "version_added": "≤13.1" 29 | }, 30 | "safari_ios": "mirror", 31 | "samsunginternet_android": "mirror", 32 | "webview_android": "mirror", 33 | "webview_ios": "mirror" 34 | }, 35 | "status": { 36 | "experimental": false, 37 | "standard_track": true, 38 | "deprecated": false 39 | } 40 | } 41 | } 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /css/properties/x.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "x": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/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": "≤80" 14 | }, 15 | "chrome_android": "mirror", 16 | "edge": "mirror", 17 | "firefox": { 18 | "version_added": "≤72" 19 | }, 20 | "firefox_android": "mirror", 21 | "ie": { 22 | "version_added": false 23 | }, 24 | "oculus": "mirror", 25 | "opera": "mirror", 26 | "opera_android": "mirror", 27 | "safari": { 28 | "version_added": "≤13.1" 29 | }, 30 | "safari_ios": "mirror", 31 | "samsunginternet_android": "mirror", 32 | "webview_android": "mirror", 33 | "webview_ios": "mirror" 34 | }, 35 | "status": { 36 | "experimental": false, 37 | "standard_track": true, 38 | "deprecated": false 39 | } 40 | } 41 | } 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /css/properties/y.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "y": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/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": "≤80" 14 | }, 15 | "chrome_android": "mirror", 16 | "edge": "mirror", 17 | "firefox": { 18 | "version_added": "≤72" 19 | }, 20 | "firefox_android": "mirror", 21 | "ie": { 22 | "version_added": false 23 | }, 24 | "oculus": "mirror", 25 | "opera": "mirror", 26 | "opera_android": "mirror", 27 | "safari": { 28 | "version_added": "≤13.1" 29 | }, 30 | "safari_ios": "mirror", 31 | "samsunginternet_android": "mirror", 32 | "webview_android": "mirror", 33 | "webview_ios": "mirror" 34 | }, 35 | "status": { 36 | "experimental": false, 37 | "standard_track": true, 38 | "deprecated": false 39 | } 40 | } 41 | } 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /http/headers/NEL.json: -------------------------------------------------------------------------------- 1 | { 2 | "http": { 3 | "headers": { 4 | "NEL": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/HTTP/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 | "ie": { 19 | "version_added": false 20 | }, 21 | "oculus": "mirror", 22 | "opera": "mirror", 23 | "opera_android": "mirror", 24 | "safari": { 25 | "version_added": false 26 | }, 27 | "safari_ios": "mirror", 28 | "samsunginternet_android": { 29 | "version_added": "10.2" 30 | }, 31 | "webview_android": "mirror", 32 | "webview_ios": "mirror" 33 | }, 34 | "status": { 35 | "experimental": true, 36 | "standard_track": true, 37 | "deprecated": false 38 | } 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 | "ie": { 18 | "version_added": false 19 | }, 20 | "oculus": "mirror", 21 | "opera": { 22 | "version_added": false 23 | }, 24 | "opera_android": { 25 | "version_added": false 26 | }, 27 | "safari": { 28 | "version_added": false 29 | }, 30 | "safari_ios": "mirror", 31 | "samsunginternet_android": "mirror", 32 | "webview_android": { 33 | "prefix": "webkit", 34 | "version_added": "37" 35 | }, 36 | "webview_ios": "mirror" 37 | }, 38 | "status": { 39 | "experimental": false, 40 | "standard_track": false, 41 | "deprecated": true 42 | } 43 | } 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /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 | "ie": { 21 | "version_added": false 22 | }, 23 | "oculus": "mirror", 24 | "opera": "mirror", 25 | "opera_android": "mirror", 26 | "safari": { 27 | "version_added": "14.1" 28 | }, 29 | "safari_ios": "mirror", 30 | "samsunginternet_android": "mirror", 31 | "webview_android": "mirror", 32 | "webview_ios": "mirror" 33 | }, 34 | "status": { 35 | "experimental": false, 36 | "standard_track": true, 37 | "deprecated": false 38 | } 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /css/properties/-webkit-border-before.json: -------------------------------------------------------------------------------- 1 | { 2 | "css": { 3 | "properties": { 4 | "-webkit-border-before": { 5 | "__compat": { 6 | "mdn_url": "https://developer.mozilla.org/docs/Web/CSS/-webkit-border-before", 7 | "support": { 8 | "chrome": { 9 | "version_added": "8" 10 | }, 11 | "chrome_android": "mirror", 12 | "edge": "mirror", 13 | "firefox": { 14 | "version_added": false 15 | }, 16 | "firefox_android": "mirror", 17 | "ie": { 18 | "version_added": false 19 | }, 20 | "oculus": "mirror", 21 | "opera": "mirror", 22 | "opera_android": { 23 | "version_added": "15" 24 | }, 25 | "safari": { 26 | "version_added": "5.1" 27 | }, 28 | "safari_ios": "mirror", 29 | "samsunginternet_android": "mirror", 30 | "webview_android": { 31 | "version_added": "3" 32 | }, 33 | "webview_ios": "mirror" 34 | }, 35 | "status": { 36 | "experimental": false, 37 | "standard_track": false, 38 | "deprecated": false 39 | } 40 | } 41 | } 42 | } 43 | } 44 | } 45 | --------------------------------------------------------------------------------