• Stars
    star
    224
  • Rank 172,410 (Top 4 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 11 years ago
  • Updated 9 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

WebIDL parser

webidl2.js

NPM version Known Vulnerabilities Financial Contributors on Open Collective

Purpose

This is a parser for Web IDL, a language to specify web APIs in interoperable way. This library supports both Node.js and the browser environment.

Try the online checker here.

Installation

Just the usual. For Node:

npm install webidl2

In the browser without module support:

<script src='./webidl2/dist/webidl2.js'></script>

Documentation

WebIDL2 provides two functions: parse and write.

  • parse: Converts a WebIDL string into a syntax tree.
  • write: Converts a syntax tree into a WebIDL string. Useful for programmatic code modification.

In Node, that happens with:

const { parse, write, validate } = require("webidl2");
const tree = parse("string of WebIDL");
const text = write(tree);
const validation = validate(tree);

In the browser:

<script>
  const tree = WebIDL2.parse("string of WebIDL");
  const text = WebIDL2.write(tree);
  const validation = WebIDL2.validate(tree);
</script>

<!-- Or when module is supported -->
<script type="module">
  import { parse, write, validate } from "./webidl2/index.js";
  const tree = parse("string of WebIDL");
  const text = write(tree);
  const validation = validate(tree);
</script>

parse() optionally takes an option bag with the following fields:

  • concrete: Boolean indicating whether the result should include EOF node or not.
  • productions: An array with custom production functions. See Custom productions for more information.
  • sourceName: The source name, typically a filename. Errors and validation objects can indicate their origin if you pass a value.

write() optionally takes a "templates" object, whose properties are functions that process input in different ways (depending on what is needed for output). Every property is optional. Each property is documented below:

var result = WebIDL2.write(tree, {
  templates: {
    /**
     * A function that receives syntax strings plus anything the templates returned.
     * The items are guaranteed to be ordered.
     * The returned value may be again passed to any template functions,
     * or it may also be the final return value of `write()`.
     * @param {any[]} items
     */
    wrap: items => items.join(""),
    /**
     * @param {string} t A trivia string, which includes whitespaces and comments.
     */
    trivia: t => t,
    /**
     * The identifier for a container type. For example, the `Foo` part of `interface Foo {};`.
     * @param {string} escaped The escaped raw name of the definition.
     * @param data The definition with the name
     * @param parent The parent of the definition, undefined if absent
     */
    name: (escaped, { data, parent }) => escaped,
    /**
     * Called for each type referece, e.g. `Window`, `DOMString`, or `unsigned long`.
     * @param escaped The referenced name. Typically string, but may also be the return
     *            value of `wrap()` if the name contains whitespace.
     * @param unescaped Unescaped reference.
     */
    reference: (escaped, unescaped) => escaped,
    /**
     * Called for each generic-form syntax, e.g. `sequence`, `Promise`, or `maplike`.
     * @param {string} name The keyword for syntax
     */
    generic: name => name,
    /**
     * Called for each nameless members, e.g. `stringifier` for `stringifier;` and `constructor` for `constructor();`
     * @param {string} name The keyword for syntax
     */
    nameless: (keyword, { data, parent }) => keyword,
    /**
     * Called only once for each types, e.g. `Document`, `Promise<DOMString>`, or `sequence<long>`.
     * @param type The `wrap()`ed result of references and syntatic bracket strings.
     */
    type: type => type,
    /**
     * Receives the return value of `reference()`. String if it's absent.
     */
    inheritance: inh => inh,
    /**
     * Called for each IDL type definition, e.g. an interface, an operation, or a typedef.
     * @param content The wrapped value of everything the definition contains.
     * @param data The original definition object
     * @param parent The parent of the definition, undefined if absent
     */
    definition: (content, { data, parent }) => content,
    /**
     * Called for each extended attribute annotation.
     * @param content The wrapped value of everything the annotation contains.
     */
    extendedAttribute: content => content,
    /**
     * The `Foo` part of `[Foo=Whatever]`.
     * @param ref The name of the referenced extended attribute name.
     */
    extendedAttributeReference: ref => ref
  }
});

"Wrapped value" here will all be raw strings when the wrap() callback is absent.

validate() receives an AST or an array of AST, and returns semantic errors as an array of objects. Their fields are same as errors have, with one addition:

  • level: "error" or "warning".
const validations = validate(tree);
for (const validation of validations) {
  console.log(validation.message);
}
// Validation error on line X: ...
// Validation error on line Y: ...

The validator function may provide an autofix function that modifies AST. You can optionally call it to skip manual fixes, but make sure you review the result.

const validations = validate(tree);
for (const validation of validations) {
  if (validation.autofix) {
    validation.autofix();
  }
}
write(tree); // magic!

Errors

When there is a syntax error in the WebIDL, it throws an exception object with the following properties:

  • message: the error message with its context. Below is what it looks like.
    Syntax error at line 1 in callback-noparen.webidl, since `callback YourCall`:
    callback YourCall = undefined;
                                 ^ Callback lacks parentheses for arguments
    
  • bareMessage: the error message without any context description like below.
    Callback lacks parentheses for arguments
    
  • line: the line at which the error occurred.
  • sourceName: the source name you passed to parse().
  • level: "error" by default, can be "warning" for some validations for e.g. potential future deprecations.
  • ruleName: Only for validations. Currently the followings are supported:
    • attr-invalid-type: Attributes cannot have sequences, records, nor dictionaries.
    • dict-arg-default: Optional dictionary type arguments must have a default value of {}.
    • dict-arg-optional: Dictionary type arguments must be optional if the type does not include a required field.
    • no-nullable-dict-arg: Dictionary arguments cannot be nullable.
    • no-nullable-union-dict: Nullable unions cannot include a dictionary type.
    • constructor-member: Constructors must use newer constructor() syntax.
    • no-duplicate: Types cannot have identical names.
    • require-exposed: Interfaces must explicitly expose themselves to specific contexts by [Exposed].
    • incomplete-op: Regular or static operations must have both a return type and an identifier.
    • no-cross-overload: Overloading must be done within a single interface or namespace.
    • no-constructible-global: Interfaces with [Global] cannot have constructors.
    • renamed-legacy: Legacy extended attributes must use their new names.
    • replace-void: void type is replaced by undefined type.
    • migrate-allowshared: [AllowShared] BufferSource is replaced by AllowSharedBufferSource.
  • input: a short peek at the text at the point where the error happened
  • tokens: the five tokens at the point of error, as understood by the tokeniser (this is the same content as input, but seen from the tokeniser's point of view)

The exception also has a toString() method that hopefully should produce a decent error message.

AST (Abstract Syntax Tree)

The parse() method returns a tree object representing the parse tree of the IDL. Comment and white space are not represented in the AST.

The root of this object is always an array of definitions (where definitions are any of interfaces, dictionaries, callbacks, etc. — anything that can occur at the root of the IDL).

IDL Type

This structure is used in many other places (operation return types, argument types, etc.). It captures a WebIDL type with a number of options. Types look like this and are typically attached to a field called idlType:

{
  "type": "attribute-type",
  "generic": "",
  "idlType": "unsigned short",
  "nullable": false,
  "union": false,
  "extAttrs": [...]
}

Where the fields are as follows:

  • type: String indicating where this type is used. Can be null if not applicable.
  • generic: String indicating the generic type (e.g. "Promise", "sequence").
  • idlType: String indicating the type name, or array of subtypes if the type is generic or a union.
  • nullable: true if the type is nullable.
  • union: Boolean indicating whether this is a union type or not.
  • extAttrs: An array of extended attributes.

Interface

Interfaces look like this:

{
  "type": "interface",
  "name": "Animal",
  "partial": false,
  "members": [...],
  "inheritance": null,
  "extAttrs": [...]
}, {
  "type": "interface",
  "name": "Human",
  "partial": false,
  "members": [...],
  "inheritance": "Animal",
  "extAttrs": [...]
}

The fields are as follows:

  • type: Always "interface".
  • name: The name of the interface.
  • partial: true if the type is a partial interface.
  • members: An array of interface members (attributes, operations, etc.). Empty if there are none.
  • inheritance: The name of an interface this one inherits from, null otherwise.
  • extAttrs: An array of extended attributes.

Interface mixins

Interfaces mixins look like this:

{
  "type": "interface mixin",
  "name": "Animal",
  "inheritance": null,
  "partial": false,
  "members": [...],
  "extAttrs": [...]
}, {
  "type": "interface mixin",
  "name": "Human",
  "inheritance": null,
  "partial": false,
  "members": [...],
  "extAttrs": [...]
}

The fields are as follows:

  • type: Always "interface mixin".
  • name: The name of the interface mixin.
  • inheritance: Always null.
  • partial: `true if the type is a partial interface mixin.
  • members: An array of interface members (attributes, operations, etc.). Empty if there are none.
  • extAttrs: An array of extended attributes.

Namespace

Namespaces look like this:

{
  "type": "namespace",
  "name": "console",
  "inheritance": null,
  "partial": false,
  "members": [...],
  "extAttrs": [...]
}

The fields are as follows:

  • type: Always "namespace".
  • name: The name of the namespace.
  • inheritance: Always null.
  • partial: `true if the type is a partial namespace.
  • members: An array of namespace members (attributes, constants, and operations). Empty if there are none.
  • extAttrs: An array of extended attributes.

Callback Interfaces

These are captured by the same structure as Interfaces except that their type field is "callback interface".

Callback

A callback looks like this:

{
  "type": "callback",
  "name": "AsyncOperationCallback",
  "idlType": {
    "type": "return-type",
    "generic": "",
    "nullable": false,
    "union": false,
    "idlType": "undefined",
    "extAttrs": []
  },
  "arguments": [...],
  "extAttrs": []
}

The fields are as follows:

  • type: Always "callback".
  • name: The name of the callback.
  • idlType: An IDL Type describing what the callback returns.
  • arguments: A list of arguments, as in function paramters.
  • extAttrs: An array of extended attributes.

Dictionary

A dictionary looks like this:

{
  "type": "dictionary",
  "name": "PaintOptions",
  "partial": false,
  "members": [{
    "type": "field",
    "name": "fillPattern",
    "required": false,
    "idlType": {
      "type": "dictionary-type",
      "generic": "",
      "nullable": true
      "union": false,
      "idlType": "DOMString",
      "extAttrs": []
    },
    "extAttrs": [],
    "default": {
      "type": "string",
      "value": "black"
    }
  }],
  "inheritance": null,
  "extAttrs": []
}

The fields are as follows:

  • type: Always "dictionary".
  • name: The dictionary name.
  • partial: true if the type is a partial dictionary.
  • members: An array of members (see below).
  • inheritance: An object indicating which dictionary is being inherited from, null otherwise.
  • extAttrs: An array of extended attributes.

All the members are fields as follows:

  • type: Always "field".
  • name: The name of the field.
  • required: true if the field is required.
  • idlType: An IDL Type describing what field's type.
  • extAttrs: An array of extended attributes.
  • default: A default value, or null if there is none.

Enum

An enum looks like this:

{
  "type": "enum",
  "name": "MealType",
  "values": [
    {
      "type": "enum-value",
      "value": "rice"
    },
    {
      "type": "enum-value",
      "value": "noodles"
    },
    {
      "type": "enum-value",
      "value": "other"
    }
  ]
  "extAttrs": []
}

The fields are as follows:

  • type: Always "enum".
  • name: The enum's name.
  • values: An array of values. The type of value is "enum-value".
  • extAttrs: An array of extended attributes.

Typedef

A typedef looks like this:

{
  "type": "typedef",
  "idlType": {
    "type": "typedef-type",
    "generic": "sequence",
    "nullable": false,
    "union": false,
    "idlType": [
      {
        "type": "typedef-type",
        "generic": "",
        "nullable": false,
        "union": false,
        "idlType": "Point",
        "extAttrs": [...]
      }
    ],
    "extAttrs": [...]
  },
  "name": "PointSequence",
  "extAttrs": []
}

The fields are as follows:

  • type: Always "typedef".
  • name: The typedef's name.
  • idlType: An IDL Type describing what typedef's type.
  • extAttrs: An array of extended attributes.

Includes

An includes definition looks like this:

{
  "type": "includes",
  "target": "Node",
  "includes": "EventTarget",
  "extAttrs": []
}

The fields are as follows:

  • type: Always "includes".
  • target: The interface that includes an interface mixin.
  • includes: The interface mixin that is being included by the target.
  • extAttrs: An array of extended attributes.

Operation Member

An operation looks like this:

{
  "type": "operation",
  "special": "",
  "idlType": {
    "type": "return-type",
    "generic": "",
    "nullable": false,
    "union": false,
    "idlType": "undefined",
    "extAttrs": []
  },
  "name": "intersection",
  "arguments": [{
    "default": null,
    "optional": false,
    "variadic": true,
    "extAttrs": [],
    "idlType": {
      "type": "argument-type",
      "generic": "",
      "nullable": false,
      "union": false,
      "idlType": "long",
      "extAttrs": [...]
    },
    "name": "ints"
  }],
  "extAttrs": [],
  "parent": { ... }
}

The fields are as follows:

  • type: Always "operation".
  • special: One of "getter", "setter", "deleter", "static", "stringifier", or "".
  • idlType: An IDL Type of what the operation returns, if exists.
  • name: The name of the operation if exists.
  • arguments: An array of arguments for the operation.
  • extAttrs: An array of extended attributes.
  • parent: The container of this type as an Object.

Constructor Operation Member

A constructor operation member looks like this:

{
  "type": "constructor",
  "arguments": [{
    "default": null,
    "optional": false,
    "variadic": true,
    "extAttrs": [],
    "idlType": {
      "type": "argument-type",
      "generic": "",
      "nullable": false,
      "union": false,
      "idlType": "long",
      "extAttrs": [...]
    },
    "name": "ints"
  }],
  "extAttrs": [],
  "parent": { ... }
}

The fields are as follows:

  • type: Always "constructor".
  • arguments: An array of arguments for the constructor operation.
  • extAttrs: An array of extended attributes.
  • parent: The container of this type as an Object.

Attribute Member

An attribute member looks like this:

{
  "type": "attribute",
  "special": "",
  "readonly": false,
  "idlType": {
    "type": "attribute-type",
    "generic": "",
    "nullable": false,
    "union": false,
    "idlType": "any",
    "extAttrs": [...]
  },
  "name": "regexp",
  "extAttrs": [],
  "parent": { ... }
}

The fields are as follows:

  • type: Always "attribute".
  • name: The attribute's name.
  • special: One of "static", "stringifier", "inherit", or "".
  • readonly: true if the attribute is read-only.
  • idlType: An IDL Type for the attribute.
  • extAttrs: An array of extended attributes.
  • parent: The container of this type as an Object.

Constant Member

A constant member looks like this:

{
  "type": "const",
  "idlType": {
    "type": "const-type",
    "generic": "",
    "nullable": false,
    "union": false,
    "idlType": "boolean",
    "extAttrs": []
  },
  "name": "DEBUG",
  "value": {
    "type": "boolean",
    "value": false
  },
  "extAttrs": [],
  "parent": { ... }
}

The fields are as follows:

  • type: Always "const".
  • idlType: An IDL Type of the constant that represents a simple type, the type name.
  • name: The name of the constant.
  • value: The constant value as described by Const Values
  • extAttrs: An array of extended attributes.
  • parent: The container of this type as an Object.

Arguments

The arguments (e.g. for an operation) look like this:

{
  "arguments": [{
    "type": "argument",
    "default": null,
    "optional": false,
    "variadic": true
    "extAttrs": []
    "idlType": {
      "type": "argument-type",
      "generic": "",
      "nullable": false,
      "union": false,
      "idlType": "float",
      "extAttrs": [...]
    },
    "name": "ints",
    "parent": { ... }
  }]
}

The fields are as follows:

  • default: A default value, or null if there is none.
  • optional: true if the argument is optional.
  • variadic: true if the argument is variadic.
  • idlType: An IDL Type describing the type of the argument.
  • name: The argument's name.
  • extAttrs: An array of extended attributes.
  • parent: The container of this type as an Object.

Extended Attributes

Extended attribute container look like this:

{
  "extAttrs": [{
    "name": "PutForwards",
    "arguments": [...],
    "type": "extended-attribute",
    "rhs": {
      "type": "identifier",
      "value": "foo"
    },
    "parent": { ... }
  }]
}

The fields are as follows:

  • items: An array of extended attributes.

Extended attributes look like this:

  • name: The extended attribute's name.
  • arguments: An array of arguments, if the extended attribute has a signature (e.g. [Foo()]) or if its right-hand side does (e.g. [LegacyFactoryFunction=Name(DOMString blah)]).
  • type: Always "extended-attribute".
  • rhs: If there is a right-hand side, this will capture its type and value. The type can be one of the following:
    • "identifier"
    • "identifier-list"
    • "string"
    • "string-list"
    • "decimal"
    • "decimal-list"
    • "integer"
    • "integer-list"
    • "*"
  • parent: The container of this type as an Object.

Default and Const Values

Dictionary fields and operation arguments can take default values, and constants take values, all of which have the following fields:

  • type: One of "string", "number", "boolean", "null", "Infinity", "NaN", "sequence" or "dictionary".

For "boolean", "string", "number", and "sequence":

  • value: The value of the given type. For string and number types, the value is given as a string. For booleans, the possible values are true and false. For sequence, the only possible value is [].

For "Infinity":

  • negative: Boolean indicating whether this is negative Infinity or not.

iterable<>, async iterable<>, maplike<>, and setlike<> declarations

These appear as members of interfaces that look like this:

{
  "type": "maplike", // or "iterable" / "setlike"
  "idlType": /* One or two types */ ,
  "readonly": false, // only for maplike and setlike
  "async": false, // iterable can be async
  "arguments": [], // only for async iterable
  "extAttrs": [],
  "parent": { ... }
}

The fields are as follows:

  • type: Always one of "iterable", "maplike" or "setlike".
  • idlType: An array with one or more IDL Types representing the declared type arguments.
  • readonly: true if the maplike or setlike is declared as read only.
  • async: true if the type is async iterable.
  • arguments: An array of arguments if exists, empty otherwise. Currently only async iterable supports the syntax.
  • extAttrs: An array of extended attributes.
  • parent: The container of this type as an Object.

End of file

{
  "type": "eof",
  "value": ""
}

This type only appears as the last item of parser results, only if options.concrete is true. This is needed for the writer to keep any comments or whitespaces at the end of file.

The fields are as follows:

  • type: Always "eof"
  • value: Always an empty string.

Testing

Running

The test runs with mocha and expect.js. Normally, running npm test in the root directory should be enough once you're set up.

Contributors

Code Contributors

This project exists thanks to all the people who contribute. [Contribute].

Financial Contributors

Become a financial contributor and help us sustain our community. [Contribute]

Individuals

Organizations

Support this project with your organization. Your logo will show up here with a link to your website. [Contribute]

More Repositories

1

csswg-drafts

CSS Working Group Editor Drafts
Bikeshed
4,283
star
2

IntersectionObserver

Intersection Observer
Bikeshed
3,623
star
3

ServiceWorker

Service Workers
HTML
3,622
star
4

html

Deliverables of the HTML Working Group until October 2018
HTML
1,943
star
5

css-houdini-drafts

Mirror of https://hg.css-houdini.org/drafts
Bikeshed
1,836
star
6

epubcheck

The conformance checker for EPUB publications
Java
1,466
star
7

aria-practices

WAI-ARIA Authoring Practices Guide (APG)
HTML
1,075
star
8

webauthn

Web Authentication: An API for accessing Public Key Credentials
HTML
1,012
star
9

webcodecs

WebCodecs is a flexible web API for encoding and decoding audio and video.
HTML
915
star
10

wcag

Web Content Accessibility Guidelines
HTML
906
star
11

webappsec-change-password-url

A Well-Known URL for Changing Passwords
Bikeshed
892
star
12

webtransport

WebTransport is a web API for flexible data transport
Bikeshed
787
star
13

clreq

Requirements for Chinese Text Layout
HTML
700
star
14

respec

A tool for creating technical documents and web standards
JavaScript
699
star
15

svgwg

SVG Working Group specifications
HTML
656
star
16

webdriver

Remote control interface that enables introspection and control of user agents.
HTML
652
star
17

manifest

Manifest for web apps
HTML
648
star
18

webappsec

Web Application Security Working Group repo
HTML
590
star
19

aria

Accessible Rich Internet Applications (WAI-ARIA)
HTML
582
star
20

trusted-types

A browser API to prevent DOM-Based Cross Site Scripting in modern web applications.
JavaScript
582
star
21

webextensions

Charter and administrivia for the WebExtensions Community Group (WECG)
Bikeshed
567
star
22

chinese-ig

Web中文兴趣组
HTML
534
star
23

payment-request

Payment Request API
HTML
480
star
24

musicxml

MusicXML specification
XSLT
471
star
25

trace-context

Trace Context
Python
434
star
26

webrtc-pc

WebRTC 1.0 API
HTML
423
star
27

web-performance

W3C Web Performance Working Group repo
HTML
395
star
28

webappsec-permissions-policy

A mechanism to selectively enable and disable browser features and APIs
Bikeshed
393
star
29

web-advertising

Web Advertising BG - https://www.w3.org/community/web-adv/
HTML
380
star
30

did-core

W3C Decentralized Identifier Specification v1.0
HTML
369
star
31

miniapp

MiniApps Standardization
JavaScript
359
star
32

web-share

Web API proposal for sharing data from a web page
HTML
353
star
33

Mobile-Checker

The Mobile Checker is a tool for Web developers who want to make their Web page or Web app work better on mobile devices.
JavaScript
320
star
34

webdriver-bidi

Bidirectional WebDriver protocol for browser automation
Bikeshed
309
star
35

picture-in-picture

Picture-in-Picture (PiP)
Bikeshed
307
star
36

web-nfc

Web NFC
HTML
303
star
37

websub

WebSub Spec in Social Web Working Group
HTML
284
star
38

wai-tutorials

W3C WAI’s Web Accessibility Tutorials
JavaScript
284
star
39

epub-specs

Shared workspace for EPUB 3 specifications.
HTML
274
star
40

activitystreams

Activity Streams 2.0
HTML
273
star
41

vc-data-model

W3C Verifiable Credentials Working Group — VC Data Model and Representations specification
HTML
269
star
42

webcrypto

The W3C Web Cryptography API
HTML
263
star
43

EasierRDF

Making RDF easy enough for most developers
Python
260
star
44

danmaku

Bullet Chatting Proposal
HTML
258
star
45

webref

Machine-readable references of terms defined in web browser specifications
JavaScript
253
star
46

paint-timing

Paint Timing
Bikeshed
251
star
47

webpayments

The document repo for the Web Payments Working Group
HTML
250
star
48

media-source

Media Source Extensions
HTML
245
star
49

longtasks

Long Task API
Bikeshed
233
star
50

IndexedDB

Indexed Database API
Bikeshed
231
star
51

web-of-things-framework

JavaScript
209
star
52

wot

Web of Things
HTML
208
star
53

smufl

Standard Music Font Layout
HTML
204
star
54

webappsec-csp

WebAppSec Content Security Policy
HTML
201
star
55

browser-specs

A machine-readable list of Web specifications
JavaScript
198
star
56

css-validator

W3C CSS Validation Service
Java
194
star
57

web-share-target

Web API proposal for receiving shared data
HTML
191
star
58

silver

Accessibility Guidelines "Silver"
HTML
190
star
59

web-roadmaps

Framework for Web technology roadmaps
HTML
189
star
60

webcomponents-cg

Web Components community group
HTML
183
star
61

editing

Specs and explainers maintained by the editing task force
HTML
181
star
62

w3c-api

The W3C API
HTML
178
star
63

html-aria

ARIA in HTML
HTML
172
star
64

encrypted-media

Encrypted Media Extensions
HTML
169
star
65

w3process

W3C Process Document
HTML
166
star
66

csvw

Documents produced by the CSV on the Web Working Group
HTML
160
star
67

p2p-webtransport

Interface to create and manage QUIC streams
HTML
156
star
68

strategy

team-strat, on GitHub, working in public. Current state: DRAFT
148
star
69

sdw

Repository for the Spatial Data on the Web Working Group
HTML
148
star
70

automotive

W3C Automotive Working Group Specifications
HTML
145
star
71

uievents

UI Events
HTML
144
star
72

clipboard-apis

Clipboard API and events
HTML
143
star
73

webvtt.js

WebVTT parser and validator
JavaScript
143
star
74

push-api

Push API
HTML
142
star
75

wcag21

Repository used during WCAG 2.1 development. New issues, Technique ideas, and comments should be filed at the WCAG repository at https://github.com/w3c/wcag.
HTML
140
star
76

web-annotation

Web Annotation Working Group repository, see README for links to specs
HTML
138
star
77

gamepad

Gamepad
HTML
138
star
78

mnx

Music Notation CG next-generation music markup proposal.
HTML
136
star
79

elements-of-html

Elements of HTML per version
HTML
135
star
80

w3c.github.io

The W3C organisation
HTML
134
star
81

webrtc-stats

WebRTC Statistics
HTML
128
star
82

libwww

Libwww is a highly modular, general-purpose client side Web API written in C for Unix and Windows (Win32). It's well suited for both small and large applications, like browser/editors, robots, batch tools, etc. Pluggable modules provided with libwww include complete HTTP/1.1 (with caching, pipelining, PUT, POST, Digest Authentication, deflate, etc), MySQL logging, FTP, HTML/4, XML (expat), RDF (SiRPAC), WebDAV, and much more. The purpose of libwww is to serve as a testbed for protocol experiments. This is a complete mirror of the libwww CVS repository
C
128
star
83

aria-at

Assistive Technology ARIA Experience Assessment
HTML
127
star
84

sensors

Generic Sensor API
HTML
126
star
85

web-locks

Cross-tab resource coordination API
Bikeshed
125
star
86

ortc

ORTC Community Group specification repository (see W3C WebRTC for official standards track)
HTML
124
star
87

dxwg

Data Catalog Vocabulary (DCAT)
HTML
124
star
88

wot-thing-description

Web of Things (WoT) Thing Description
HTML
122
star
89

webrtc-encoded-transform

WebRTC Encoded Transform
Bikeshed
121
star
90

mediasession

Media Session API
Bikeshed
120
star
91

Unicorn

Unicorn - W3C's Unified Validator
Java
118
star
92

mediacapture-main

Media Capture and Streams specification (aka getUserMedia)
HTML
118
star
93

sparql-dev

SPARQL dev Community Group
117
star
94

web-animations

🚫 Old repository for the Web Animations specification 🚫. Updated repository:
HTML
116
star
95

resource-timing

Resource Timing
HTML
116
star
96

csswg-test

The former CSS WG test repository
115
star
97

rdf-star

RDF-star specification
HTML
115
star
98

did-spec-registries

DID Spec Registry (Note)
HTML
114
star
99

performance-timeline

Performance Timeline
HTML
113
star
100

navigation-timing

Navigation Timing
HTML
113
star