Machine-readable references of terms defined in web browser specifications
465
stars
2,611
commits
JavaScript
primary language
Sep 9, 2026
updated
This repository contains machine-readable references of CSS properties, definitions, IDL, and other useful terms that can be automatically extracted from web browser specifications (see a list of projects known to use the data). The contents of the repository are updated automatically every 6 hours (although note information about published /TR/ versions of specifications are updated only once per day).
Specifications covered by this repository are technical Web specifications that appear in browser-specs.
The main branch of this repository contains automatically-generated raw extracts from web browser specifications. These extracts come with no guarantee on validity or consistency. For instance, if a specification defines invalid IDL snippets or uses an unknown IDL type, the corresponding IDL extract in this repository will be invalid as well.
The curated branch contains curated extracts. Curated extracts are generated from raw extracts in the ed folder by applying manually-maintained patches to fix invalid content and provide validity and consistency guarantees. The curated branch is updated automatically whenever the main branch is updated, unless patches need to be modified (which requires manual intervention). Curated extracts are published under https://w3c.github.io/webref/ed/.
Additionally, subsets of the curated content get manually reviewed and published as NPM packages on a weekly basis:
@webref/idl contains a curated version of the ed/idl folder.@webref/css contains a consolidated and curated version of the ed/css folder.@webref/elements contains a curated version of the ed/elements folder.@webref/events contains a consolidated and curated version of the ed/events folder.Important: The curated extracts only contain data for specifications that are in good standing (to keep the number of manually-maintained patches minimal and manageable). The NPM packages only contain curated extracts of specifications that are in good standing and that target web browsers.
Important: Unless you are ready to deal with invalid content, we strongly recommend that you process contents of the curated branch or NPM packages instead of raw content in the main branch.
This repository contains raw and curated information about nightly versions of Web specifications in the ed folder, as well as raw information about the released version (for /TR/ specifications) in the tr folder.
Note: The tr folder only contains information about released specifications. Specifications that have not been published as /TR/ documents (such as WHATWG specifications or Community Group reports) do not appear under the tr folder in particular.
More often than not, released versions of specifications are much older than their nightly version. Data in the tr folder is more invalid/inconsistent than data in the ed folder as a result. Additionally, no attempt is being made at curating data in the tr folder, use the tr folder at your own risk!
The following subfolders in the curated branch contain individual machine-readable JSON or text files generated from specifications:
ed/backrefs: Back references to definitions of a specification from other specifications. One file per specification. This is a curated, derived view built from dfns and links extracts.ed/cddl: CDDL modules. If the specification defines a single CDDL module, one file gets created for the specification. If it defines multiple CDDL modules, one file gets created per CDDL module, plus one file named [shortname]-all.cddl with all CDDL definitions.ed/css: CSS terms (properties, descriptors, value spaces). One file per specification series.ed/dfns: <dfn> terms, along with metadata such as linking text, access level, namespace. One file per specification.ed/elements: Markup elements defined, along with the interface that they implement. One file per specification.ed/headings: Section headings. One file per specification.ed/idl: Raw WebIDL index. One file per specification series.ed/idlnames: WebIDL definitions per referenceable IDL name. One file per IDL name.ed/idlnamesparsed: Parsed WebIDL structure of definitions in the idlnames folder. One file per IDL name.ed/idlparsed: Parsed WebIDL structure of definitions in the idl folder. One file per specification.ed/ids: Fragments defined in the specification. One file per specification.ed/links: Links to other documents, along with targeted fragments. One file per specification.ed/refs: Normative and informative references to other specifications. One file per specification.Individual files are named after the shortname of the specification, or after the shortname of the specification series for CSS definitions and raw IDL files. Individual files are only created when needed, meaning when the specification actually includes relevant terms.
The ed/index.json file contains the index of specifications that have been crawled, and relative links to individual files that have been created.
This repository uses Reffy, a Web spec exploration tool, to crawl the specifications and generate the data. In particular, the data it contains is the result of running Reffy. The repository does not contain any more data.
Raw WebIDL extracts are used in web-platform-tests, please see their interfaces/README.md for details.
Data curation brings the following guarantees.
package.json.WebIDL2.validate passes with the exception of the "no-nointerfaceobject" rule about [LegacyNoInterfaceObject], which is in wide use.Important: Starting with @webref/css version 7, the package contains the consolidated ed/css.json file, and no longer contains CSS extracts per spec. See the changelog for "How to upgrade" considerations.
The consolidated ed/css.json file, released in the @webref/css package, comes with the following guarantees:
syntax keys) can be parsed by the version of CSSTree set in peerDependencies in package.json.name keys) are unique per type provided that the for key is also taken into account for functions and types.for, legacyAliasOf, longhands and resetLonghands keys are guaranteed to exist in the package.href key that targets the CSS spec that defines the feature. When the feature is extended across CSS specs, this URL targets the base definition.href and extended keys are guaranteed to exist in the version of web-specs that was used to identify the specs to extract data from. The exact version that was used is not yet surfaced in the data though. In most cases, it should be the latest published version at the time when the data is released.The consolidated file is generated from curated extracts in the ed/css folder. These extracts, released in the @webref/css package until version 7, come with the following guarantees:
peerDependencies in package.json.-n.json, where n is a level number). The term "entries" includes CSS properties, at-rules, selectors, types and functions. Please note that specs may still extend entries defined elsewhere (to define new values for CSS properties, or new selectors for at-rules).newValues is set).properties[], properties[].values[], selectors[], atrules[] and values[] have an href key that contains an absolute URL with fragment, except properties that that have a newValues key, at-rules that neither have a prose nor a value key, and definitions of a delta spec that completely override a definition in a previous level.The consolidated ed/events.json file, released in the @webref/events package, comes with the following guarantees:
type attribute that match the name of the eventinterface attribute to describe the interface used by the Event. The Web IDL interface exists in the latest version of the @webref/idl package at the time the @webref/events package is released, and represents an actual interface (i.e. not a mixin).targets attribute with a non-empty list of target interfaces on which the event may fire. All Web IDL interfaces in the list exist in the latest version of the @webref/idl package at the time the @webref/events package is released, and represent an actual interface (i.e. not a mixin).bubbles attribute is always set to a boolean value for target interfaces that belong to a bubbling tree (DOM, IndexedDB, Serial API, Web Bluetooth).bubbles attribute is only set for target interfaces that belong to a bubbling tree.bubblingPath attribute is only set for target interfaces on which the event bubbles.targets attribute contains the top most interfaces in an inheritance chain, unless bubbling conditions differ. For instance, the list may contain { "target": "Element", "bubbles": true } but not also { "target": "HTMLElement", "bubbles": true } since HTMLElement inherits from Element.targets attribute only contains the deepest interface in the bubbling tree on which the event may fire and bubble. For instance, the list may contain { "target": "HTMLElement", "bubbles": true }, but not also { "target": "Document" } since event would de facto fire at Document through bubbling.package.json. Said differently, all CDDL files can be parsed by the version of cddlparser referenced by Strudy.The CDDL extracts are not released in an NPM package for the time being.
backrefs[] entry corresponds to a definition that exists in the defining spec's dfns extract (matched by href).id, href, linkingText, type, for, and access are copied from that definition so the extract is usable on its own.referencedBy is a non-empty list of distinct referencing specifications. The defining specification itself never appears in referencedBy.referencedBy[].shortname identifies a specification present in the crawl (and thus listed in ed/index.json).The backrefs extracts are not released in an NPM package for the time being.
The following projects are known to use webref data:
Using webref data in a project that is not yet in the list? Let us know!
Webref extracts are analyzed with Strudy to detect potential spec content anomalies such as broken links or invalid constructs, and report them as issues in the repository that hosts the spec.
Global analyses used to be published in the w3c/webref-analysis repository. That repository was archived in August 2024.
Feel free to raise issues in this repository as needed. Note that most issues likely more directly apply to underlying tools:
GitHub Actions workflows are used to automate most of the tasks in this repo.
ed folder. Workflow runs every 6 hours. Specifications that have not been modified since last crawl are skipped, unless the version of Reffy changed in the meantime. A typical crawl takes a few minutes to complete. A full crawl takes up to 12mn.tr folder. Workflow runs once per day. A typical crawl takes a few minutes to complete. A full crawl takes up to 8mn.curated branch accordingly (provided all tests pass). The job also creates pull requests to release new versions of NPM packages when needed. Each pull request details the diff that would be released, and bumps the package version in the relevant packages/xxx/package.json file.@webref/xx package if needed - publishes a new version of the @webref/css, @webref/elements, @webref/events or @webref/idl package to NPM, tags the corresponding commits on the main and curated branches, and updates the relevant @webref/xxx@latest tag to point to the right commit on the curated branch. Runs whenever a pre-release PR is merged. Note that the released version is the version that appeared in packages/css/package.json, packages/elements/package.json, packages/events/package.json or packages/idl/package.json before the pre-release PR is merged.@webref/xx release: Request review of pre-release PR - assigns reviewers to NPM package pull requests. Runs once per week.750 commits
688 commits
576 commits
317 commits
JavaScript
97.6%
HTML
2.4%
Machine-readable references of terms defined in web browser specifications
465
stars
2,611
commits
JavaScript
primary language
Sep 9, 2026
updated
This repository contains machine-readable references of CSS properties, definitions, IDL, and other useful terms that can be automatically extracted from web browser specifications (see a list of projects known to use the data). The contents of the repository are updated automatically every 6 hours (although note information about published /TR/ versions of specifications are updated only once per day).
Specifications covered by this repository are technical Web specifications that appear in browser-specs.
The main branch of this repository contains automatically-generated raw extracts from web browser specifications. These extracts come with no guarantee on validity or consistency. For instance, if a specification defines invalid IDL snippets or uses an unknown IDL type, the corresponding IDL extract in this repository will be invalid as well.
The curated branch contains curated extracts. Curated extracts are generated from raw extracts in the ed folder by applying manually-maintained patches to fix invalid content and provide validity and consistency guarantees. The curated branch is updated automatically whenever the main branch is updated, unless patches need to be modified (which requires manual intervention). Curated extracts are published under https://w3c.github.io/webref/ed/.
Additionally, subsets of the curated content get manually reviewed and published as NPM packages on a weekly basis:
@webref/idl contains a curated version of the ed/idl folder.@webref/css contains a consolidated and curated version of the ed/css folder.@webref/elements contains a curated version of the ed/elements folder.@webref/events contains a consolidated and curated version of the ed/events folder.Important: The curated extracts only contain data for specifications that are in good standing (to keep the number of manually-maintained patches minimal and manageable). The NPM packages only contain curated extracts of specifications that are in good standing and that target web browsers.
Important: Unless you are ready to deal with invalid content, we strongly recommend that you process contents of the curated branch or NPM packages instead of raw content in the main branch.
This repository contains raw and curated information about nightly versions of Web specifications in the ed folder, as well as raw information about the released version (for /TR/ specifications) in the tr folder.
Note: The tr folder only contains information about released specifications. Specifications that have not been published as /TR/ documents (such as WHATWG specifications or Community Group reports) do not appear under the tr folder in particular.
More often than not, released versions of specifications are much older than their nightly version. Data in the tr folder is more invalid/inconsistent than data in the ed folder as a result. Additionally, no attempt is being made at curating data in the tr folder, use the tr folder at your own risk!
The following subfolders in the curated branch contain individual machine-readable JSON or text files generated from specifications:
ed/backrefs: Back references to definitions of a specification from other specifications. One file per specification. This is a curated, derived view built from dfns and links extracts.ed/cddl: CDDL modules. If the specification defines a single CDDL module, one file gets created for the specification. If it defines multiple CDDL modules, one file gets created per CDDL module, plus one file named [shortname]-all.cddl with all CDDL definitions.ed/css: CSS terms (properties, descriptors, value spaces). One file per specification series.ed/dfns: <dfn> terms, along with metadata such as linking text, access level, namespace. One file per specification.ed/elements: Markup elements defined, along with the interface that they implement. One file per specification.ed/headings: Section headings. One file per specification.ed/idl: Raw WebIDL index. One file per specification series.ed/idlnames: WebIDL definitions per referenceable IDL name. One file per IDL name.ed/idlnamesparsed: Parsed WebIDL structure of definitions in the idlnames folder. One file per IDL name.ed/idlparsed: Parsed WebIDL structure of definitions in the idl folder. One file per specification.ed/ids: Fragments defined in the specification. One file per specification.ed/links: Links to other documents, along with targeted fragments. One file per specification.ed/refs: Normative and informative references to other specifications. One file per specification.Individual files are named after the shortname of the specification, or after the shortname of the specification series for CSS definitions and raw IDL files. Individual files are only created when needed, meaning when the specification actually includes relevant terms.
The ed/index.json file contains the index of specifications that have been crawled, and relative links to individual files that have been created.
This repository uses Reffy, a Web spec exploration tool, to crawl the specifications and generate the data. In particular, the data it contains is the result of running Reffy. The repository does not contain any more data.
Raw WebIDL extracts are used in web-platform-tests, please see their interfaces/README.md for details.
Data curation brings the following guarantees.
package.json.WebIDL2.validate passes with the exception of the "no-nointerfaceobject" rule about [LegacyNoInterfaceObject], which is in wide use.Important: Starting with @webref/css version 7, the package contains the consolidated ed/css.json file, and no longer contains CSS extracts per spec. See the changelog for "How to upgrade" considerations.
The consolidated ed/css.json file, released in the @webref/css package, comes with the following guarantees:
syntax keys) can be parsed by the version of CSSTree set in peerDependencies in package.json.name keys) are unique per type provided that the for key is also taken into account for functions and types.for, legacyAliasOf, longhands and resetLonghands keys are guaranteed to exist in the package.href key that targets the CSS spec that defines the feature. When the feature is extended across CSS specs, this URL targets the base definition.href and extended keys are guaranteed to exist in the version of web-specs that was used to identify the specs to extract data from. The exact version that was used is not yet surfaced in the data though. In most cases, it should be the latest published version at the time when the data is released.The consolidated file is generated from curated extracts in the ed/css folder. These extracts, released in the @webref/css package until version 7, come with the following guarantees:
peerDependencies in package.json.-n.json, where n is a level number). The term "entries" includes CSS properties, at-rules, selectors, types and functions. Please note that specs may still extend entries defined elsewhere (to define new values for CSS properties, or new selectors for at-rules).newValues is set).properties[], properties[].values[], selectors[], atrules[] and values[] have an href key that contains an absolute URL with fragment, except properties that that have a newValues key, at-rules that neither have a prose nor a value key, and definitions of a delta spec that completely override a definition in a previous level.The consolidated ed/events.json file, released in the @webref/events package, comes with the following guarantees:
type attribute that match the name of the eventinterface attribute to describe the interface used by the Event. The Web IDL interface exists in the latest version of the @webref/idl package at the time the @webref/events package is released, and represents an actual interface (i.e. not a mixin).targets attribute with a non-empty list of target interfaces on which the event may fire. All Web IDL interfaces in the list exist in the latest version of the @webref/idl package at the time the @webref/events package is released, and represent an actual interface (i.e. not a mixin).bubbles attribute is always set to a boolean value for target interfaces that belong to a bubbling tree (DOM, IndexedDB, Serial API, Web Bluetooth).bubbles attribute is only set for target interfaces that belong to a bubbling tree.bubblingPath attribute is only set for target interfaces on which the event bubbles.targets attribute contains the top most interfaces in an inheritance chain, unless bubbling conditions differ. For instance, the list may contain { "target": "Element", "bubbles": true } but not also { "target": "HTMLElement", "bubbles": true } since HTMLElement inherits from Element.targets attribute only contains the deepest interface in the bubbling tree on which the event may fire and bubble. For instance, the list may contain { "target": "HTMLElement", "bubbles": true }, but not also { "target": "Document" } since event would de facto fire at Document through bubbling.package.json. Said differently, all CDDL files can be parsed by the version of cddlparser referenced by Strudy.The CDDL extracts are not released in an NPM package for the time being.
backrefs[] entry corresponds to a definition that exists in the defining spec's dfns extract (matched by href).id, href, linkingText, type, for, and access are copied from that definition so the extract is usable on its own.referencedBy is a non-empty list of distinct referencing specifications. The defining specification itself never appears in referencedBy.referencedBy[].shortname identifies a specification present in the crawl (and thus listed in ed/index.json).The backrefs extracts are not released in an NPM package for the time being.
The following projects are known to use webref data:
Using webref data in a project that is not yet in the list? Let us know!
Webref extracts are analyzed with Strudy to detect potential spec content anomalies such as broken links or invalid constructs, and report them as issues in the repository that hosts the spec.
Global analyses used to be published in the w3c/webref-analysis repository. That repository was archived in August 2024.
Feel free to raise issues in this repository as needed. Note that most issues likely more directly apply to underlying tools:
GitHub Actions workflows are used to automate most of the tasks in this repo.
ed folder. Workflow runs every 6 hours. Specifications that have not been modified since last crawl are skipped, unless the version of Reffy changed in the meantime. A typical crawl takes a few minutes to complete. A full crawl takes up to 12mn.tr folder. Workflow runs once per day. A typical crawl takes a few minutes to complete. A full crawl takes up to 8mn.curated branch accordingly (provided all tests pass). The job also creates pull requests to release new versions of NPM packages when needed. Each pull request details the diff that would be released, and bumps the package version in the relevant packages/xxx/package.json file.@webref/xx package if needed - publishes a new version of the @webref/css, @webref/elements, @webref/events or @webref/idl package to NPM, tags the corresponding commits on the main and curated branches, and updates the relevant @webref/xxx@latest tag to point to the right commit on the curated branch. Runs whenever a pre-release PR is merged. Note that the released version is the version that appeared in packages/css/package.json, packages/elements/package.json, packages/events/package.json or packages/idl/package.json before the pre-release PR is merged.@webref/xx release: Request review of pre-release PR - assigns reviewers to NPM package pull requests. Runs once per week.750 commits
688 commits
576 commits
317 commits
JavaScript
97.6%
HTML
2.4%