browser-specs 2.27.0 → 2.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. package/README.md +550 -589
  2. package/index.json +17991 -16706
  3. package/package.json +17 -32
  4. package/LICENSE.md +0 -54
package/README.md CHANGED
@@ -1,589 +1,550 @@
1
- # Web browser specifications
2
-
3
- This repository contains a curated list of technical Web specifications that are
4
- directly implemented or that will be implemented by Web browsers (see [Spec
5
- selection criteria](#spec-selection-criteria)).
6
-
7
- This list is meant to be an up-to-date input source for projects that run
8
- analyses on browser technologies to create reports on test coverage,
9
- cross-references, WebIDL, quality, etc.
10
-
11
-
12
- ## Table of Contents
13
-
14
- - [Installation and usage](#installation-and-usage)
15
- - [Spec object](#spec-object)
16
- - [`url`](#url)
17
- - [`shortname`](#shortname)
18
- - [`title`](#title)
19
- - [`shortTitle`](#shorttitle)
20
- - [`series`](#series)
21
- - [`series.shortname`](#seriesshortname)
22
- - [`series.currentSpecification`](#seriescurrentspecification)
23
- - [`series.title`](#seriestitle)
24
- - [`series.shortTitle`](#seriesshorttitle)
25
- - [`series.releaseUrl`](#seriesreleaseurl)
26
- - [`series.nightlyUrl`](#seriesnightlyurl)
27
- - [`seriesVersion`](#seriesversion)
28
- - [`seriesComposition`](#seriescomposition)
29
- - [`seriesPrevious`](#seriesprevious)
30
- - [`seriesNext`](#seriesnext)
31
- - [`organization`](#organization)
32
- - [`groups`](#groups)
33
- - [`release`](#release)
34
- - [`release.url`](#releaseurl)
35
- - [`release.filename`](#releasefilename)
36
- - [`release.pages`](#releasepages)
37
- - [`nightly`](#nightly)
38
- - [`nightly.url`](#nightlyurl)
39
- - [`nightly.filename`](#nightlyfilename)
40
- - [`nightly.pages`](#nightlypages)
41
- - [`nightly.repository`](#nightlyrepository)
42
- - [`nightly.sourcePath`](#nightlysourcepath)
43
- - [`tests`](#tests)
44
- - [`tests.repository`](#testsrepository)
45
- - [`tests.testPaths`](#teststestpaths)
46
- - [`tests.excludePaths`](#testsexcludepaths)
47
- - [`source`](#source)
48
- - [How to add/update/delete a spec](#how-to-addupdatedelete-a-spec)
49
- - [Spec selection criteria](#spec-selection-criteria)
50
- - [Versioning](#versioning)
51
- - [Development notes](#development-notes)
52
- - [How to generate `index.json` manually](#how-to-generate-indexjson-manually)
53
- - [Debugging tool](#debugging-tool)
54
- - [Tests](#tests)
55
- - [How to release a new version](#how-to-release-a-new-version)
56
-
57
-
58
- ## Installation and usage
59
-
60
- The list is distributed as an NPM package. To incorporate it to your project,
61
- run:
62
-
63
- ```bash
64
- npm install browser-specs
65
- ```
66
-
67
- You can then retrieve the list from your Node.js program:
68
-
69
- ```js
70
- const specs = require("browser-specs");
71
- console.log(JSON.stringify(specs, null, 2));
72
- ```
73
-
74
- Alternatively, you can either retrieve the [latest
75
- release](https://github.com/w3c/browser-specs/releases/latest) or fetch
76
- [`index.json`](https://w3c.github.io/browser-specs/index.json).
77
-
78
- **Note:** If you choose to fetch the `index.json` file directly, keep in mind
79
- that it may contain (possibly incorrect) updates that have not yet been included
80
- in the NPM package and the latest GitHub release (see also #38).
81
-
82
-
83
- ## Spec object
84
-
85
- Each specification in the list comes with the following properties:
86
-
87
- ```json
88
- {
89
- "url": "https://www.w3.org/TR/css-color-4/",
90
- "seriesComposition": "full",
91
- "shortname": "css-color-4",
92
- "series": {
93
- "shortname": "css-color",
94
- "currentSpecification": "css-color-4",
95
- "title": "CSS Color",
96
- "shortTitle": "CSS Color",
97
- "releaseUrl": "https://www.w3.org/TR/css-color/",
98
- "nightlyUrl": "https://drafts.csswg.org/css-color/"
99
- },
100
- "seriesVersion": "4",
101
- "seriesNext": "css-color-5",
102
- "organization": "W3C",
103
- "groups": [
104
- {
105
- "name": "Cascading Style Sheets (CSS) Working Group",
106
- "url": "https://www.w3.org/Style/CSS/"
107
- }
108
- ],
109
- "release": {
110
- "url": "https://www.w3.org/TR/css-color-4/",
111
- "filename": "Overview.html"
112
- },
113
- "nightly": {
114
- "url": "https://drafts.csswg.org/css-color/",
115
- "repository": "https://github.com/w3c/csswg-drafts",
116
- "sourcePath": "css-color-4/Overview.bs",
117
- "filename": "Overview.html"
118
- },
119
- "title": "CSS Color Module Level 4",
120
- "source": "w3c",
121
- "shortTitle": "CSS Color 4",
122
- "tests": {
123
- "repository": "https://github.com/web-platform-tests/wpt",
124
- "testPaths": [
125
- "css/css-color"
126
- ]
127
- }
128
- }
129
- ```
130
-
131
-
132
- ### `url`
133
-
134
- The versioned (but not dated) URL for the spec. For W3C specs published as
135
- TR documents, this is the TR URL. For WHATWG specs, this is the URL of the
136
- living standard. In other cases, this is the URL of the latest Editor's Draft.
137
-
138
- The `url` property is always set.
139
-
140
-
141
- ### `shortname`
142
-
143
- A shortname that uniquely identifies the spec in the list. The value matches the
144
- "well-known" shortname of the spec, that usually appears in the versioned URL.
145
- For instance, for W3C specs published as TR documents, this is the TR shortname.
146
- For WHATWG specs, this is the shortname that appears at the beginning of the URL
147
- (e.g. `compat` for `https://compat.spec.whatwg.org/`). For specs developed on
148
- GitHub, this is usually the name of repository that holds the spec.
149
-
150
- The `shortname` property is always set.
151
-
152
-
153
- ### `title`
154
-
155
- The title of the spec. The title is either retrieved from the
156
- [W3C API](https://w3c.github.io/w3c-api/) for W3C specs,
157
- [Specref](https://www.specref.org/) or from the spec itself. The
158
- [`source`](#source) property details the actual provenance.
159
-
160
- The `title` property is always set.
161
-
162
-
163
- ### `shortTitle`
164
-
165
- The short title of the spec. In most cases, the short title is generated from
166
- `title` by dropping terms such as "Module", "Level", or "Standard". In some
167
- cases, the short title is set manually.
168
-
169
- The `shortTitle` property is always set. When there is no meaningful short
170
- title, the property is set to the actual (possibly long) title of the spec.
171
-
172
-
173
- ### `series`
174
-
175
- An object that describes the series that the spec is part of. A series includes
176
- existing levels/versions of the spec. For instance, CSS Color Module Level 4
177
- belongs to the same series as CSS Color Module Level 3 and CSS Color Module
178
- Level 5.
179
-
180
- Please note that the list only contains specs that are deemed to be
181
- [of interest](#spec-selection-criteria). In particular, the list does not
182
- contain levels and versions that have been fully superseded, and may not contain
183
- early drafts of new levels and versions either.
184
-
185
- The `series` property is always set.
186
-
187
-
188
- #### `series.shortname`
189
-
190
- A shortname that uniquely identifies the series. In most cases, the shortname
191
- is the shortname of the spec without the level or version number. For instance,
192
- the series' shortname for `css-color-5` is `css-color`. When a specification is
193
- not versioned, the series' shortname is identical to the spec's shortname.
194
-
195
- The `shortname` property is always set.
196
-
197
-
198
- #### `series.currentSpecification`
199
-
200
- The shortname of the spec that should be regarded as the current level or
201
- version in the series. The current spec in a series is up to the group who
202
- develops the series. In most cases, the current spec is the latest level or
203
- version in the series that is a "full" spec (see
204
- [`seriesComposition`](#seriescomposition)).
205
-
206
- The `currentSpecification` property is always set.
207
-
208
-
209
- #### `series.title`
210
-
211
-
212
- The version-less version of the title of the spec which can be used to refer to
213
- all specs in the series. The title is either retrieved from the
214
- [W3C API](https://w3c.github.io/w3c-api/) for W3C specs, or derived from the
215
- spec's [`title`](#title).
216
-
217
- The `title` property is always set.
218
-
219
-
220
- #### `series.shortTitle`
221
-
222
-
223
- The short title of the series title. In most cases, the short title is generated
224
- from [`series.title`](#seriestitle) by dropping terms such as "Module", "Level",
225
- or "Standard". In some cases, the short title is set manually.
226
-
227
- The `shortTitle` property is always set. When there is no meaningful short
228
- title, the property is set to the actual (possibly long) series title.
229
-
230
-
231
- #### `series.releaseUrl`
232
-
233
- The URL of the latest published snapshot for the spec series. For leveled specs
234
- (those that create a series), this matches the unversioned URL. That
235
- unversioned URL should return the specification identified by the
236
- [`currentSpecification`](#seriescurrentspecification) property.
237
-
238
- For instance, this property will be set to `https://www.w3.org/TR/css-fonts/`
239
- for all specifications in the CSS Fonts series.
240
-
241
- For non-leveled specs, this matches the [`url`](#url) property.
242
-
243
- The `releaseUrl` property is only set for W3C specs published as TR documents.
244
-
245
-
246
- #### `series.nightlyUrl`
247
-
248
- For leveled specs (those that create a series), this matches the unversioned URL
249
- that allows to access the latest Editor's Draft of the current specification in
250
- the series.
251
-
252
- For instance, this property will be set to `https://drafts.csswg.org/css-fonts/`
253
- for all specifications in the CSS Fonts series.
254
-
255
- For specs that are not part of a series of specs, this matches the
256
- [`nightly.url`](#nightlyurl) property.
257
-
258
- The `nightlyUrl` property is always set.
259
-
260
-
261
- ### `seriesVersion`
262
-
263
- The level or version of the spec, represented as an `x`, `x.y` or `x.y.z` string
264
- with `x`, `y` and `z` numbers, and `x` always greater than or equal to `1`. For
265
- instance, this property will have the value `1.2` (as a string, so enclosed
266
- in `"`) for the WAI-ARIA 1.2 spec.
267
-
268
- The `seriesVersion` property is only set for specs that have a level or version
269
- number.
270
-
271
-
272
- ### `seriesComposition`
273
-
274
- Whether the spec is a standalone spec, or whether it is a delta spec over the
275
- previous level or version in the series. Possible values are `full` or `delta`.
276
-
277
- The `seriesComposition` property is always set.
278
-
279
-
280
- ### `seriesPrevious`
281
-
282
- The `shortname` of the previous spec in the series.
283
-
284
- The `seriesPrevious` property is only set where there is a previous level or
285
- version.
286
-
287
-
288
- ### `seriesNext`
289
-
290
- The `shortname` of the next spec in the series.
291
-
292
- The `seriesNext` property is only set where there is a next level or version.
293
-
294
-
295
- ### `organization`
296
-
297
- The name of the standardization organization that owns the spec such as `W3C`,
298
- `WHATWG`, `IETF`, `Ecma International`, `Khronos Group`.
299
-
300
- The `organization` property is always set.
301
-
302
-
303
- ### `groups`
304
-
305
- The list the groups that develop (or developed) the spec. Each item in the array
306
- is an object with a `name` property that contains the human-readable name of the
307
- group and a `url` property that targets the homepage of the group.
308
-
309
- The `groups` property is always set. In most cases, a spec is developed by one
310
- and only one group.
311
-
312
-
313
- ### `release`
314
-
315
- An object that represents the latest published snapshot of the spec, when it
316
- exists.
317
-
318
- The `release` property is only set for W3C specs published as TR documents.
319
-
320
-
321
- #### `release.url`
322
-
323
- The URL of the latest published snapshot of the spec. Matches the versioned
324
- URL (see [`url`](#url)).
325
-
326
- The `url` property is always set.
327
-
328
-
329
- #### `release.filename`
330
-
331
- The filename of the resource that gets served when the default URL is fetched.
332
- For instance, the filename for `https://www.w3.org/TR/presentation-api/` is
333
- `Overview.html`, meaning that the specification could also be retrieved from
334
- `https://www.w3.org/TR/presentation-api/Overview.html`. The filename may be
335
- useful to distinguish links to self in a spec.
336
-
337
- The `filename` property is always set.
338
-
339
-
340
- #### `release.pages`
341
-
342
- The list of absolute page URLs when the spec is a multipage spec.
343
-
344
- The `pages` property is only set for specs identified as multipage specs.
345
-
346
-
347
- ### `nightly`
348
-
349
- An object that represents the latest Editor's Draft of the spec, or the living
350
- standard when the concept of Editor's Draft does not exist.
351
-
352
- The `nightly` property is always set.
353
-
354
-
355
- #### `nightly.url`
356
-
357
- The URL of the latest Editor's Draft or of the living standard.
358
-
359
- The URL is either retrieved from the [W3C API](https://w3c.github.io/w3c-api/)
360
- for W3C specs, or [Specref](https://www.specref.org/). The document at the
361
- versioned URL is considered to be the latest Editor's Draft if the spec does
362
- neither exist in the W3C API nor in Specref. The [`source`](#source) property
363
- details the actual provenance.
364
-
365
- The `url` property is always set.
366
-
367
-
368
- #### `nightly.filename`
369
-
370
- The filename of the resource that gets served when the default URL is fetched.
371
- For instance, the filename for `https://w3c.github.io/presentation-api/` is
372
- `index.html`, meaning that the specification could also be retrieved from
373
- `https://w3c.github.io/presentation-api/index.html`. The filename may be
374
- useful to distinguish links to self in a spec.
375
-
376
- The `filename` property is always set.
377
-
378
-
379
- #### `nightly.pages`
380
-
381
- The list of absolute page URLs when the spec is a multipage spec.
382
-
383
- The `pages` property is only set for specs identified as multipage specs.
384
-
385
-
386
- #### `nightly.repository`
387
-
388
- The URL of the repository that contains the source of the Editor's Draft or of
389
- the living standard.
390
-
391
- The URL is either retrieved from the [Specref](https://www.specref.org/) or
392
- computed from `nightly.url`.
393
-
394
- The `repository` property is always set except for IETF specs where such a repo does not always exist.
395
-
396
-
397
- #### `nightly.sourcePath`
398
-
399
- The relative path to the filename that contains the source of the Editor's Draft
400
- or of the living standard at the HEAD of the default branch of the repository.
401
-
402
- That path is computed by parsing the contents of the repository for common
403
- patterns. The info must be specified in `specs.json` for specifications that do
404
- not follow a common pattern.
405
-
406
- The `sourcePath` property is always set when `repository` is set.
407
-
408
- **Note:** The path is relative to the root of the repository, and only valid in
409
- the default branch of the repository. If needed, the source may be fetched from
410
- the absolute HTTPS URL `${nightly.repository}/blob/HEAD/${nightly.sourcePath}`.
411
-
412
-
413
- ### `tests`
414
-
415
- An object that links the specification with its test suite when it has one.
416
-
417
-
418
- #### `tests.repository`
419
-
420
- The URL of the repository that contains the test suite of the specification,
421
- typically `https://github.com/web-platform-tests/wpt`.
422
-
423
- The `repository` property is always set when the `tests` object is present.
424
-
425
- #### `tests.testPaths`
426
-
427
- The list of relative paths to the actual tests at the HEAD of the default branch
428
- of the test repository.
429
-
430
- For test suites within [Web Platform
431
- Tests](https://github.com/web-platform-tests/wpt), the list is determined by
432
- looking at `META.yml` files within each folder.
433
-
434
- The `testPaths` array typically only contains one entry, but tests of a given
435
- spec are sometimes spread over multiple folders. For instance, that is the case
436
- for DOM and HTML tests.
437
-
438
- The `testPaths` property is usually set when the `tests` object is present. When
439
- absent, that means that the entire repository is the test suite.
440
-
441
- #### `tests.excludePaths`
442
-
443
- The list of relative sub-paths of paths listed in the `testPaths` property that
444
- do not contain tests for the underlying spec. For instance, tests for the
445
- WebXR Device API are under the
446
- [`webxr`](https://github.com/web-platform-tests/wpt/tree/master/webxr) folder,
447
- but several folders under `webxr` actually contain test suites for WebXR module
448
- specs and as such need to be excluded from the test suite of the WebXR Device
449
- API spec.
450
-
451
- The `excludePaths` property is seldom set.
452
-
453
-
454
- ### `source`
455
-
456
- The provenance for the `title` and `nightly` property values. Can be one of:
457
- - `w3c`: information retrieved from the [W3C API](https://w3c.github.io/w3c-api/)
458
- - `specref`: information retrieved from [Specref](https://www.specref.org/)
459
- - `spec`: information retrieved from the spec itself
460
-
461
- The `source` property is always set.
462
-
463
-
464
- ## How to add/update/delete a spec
465
-
466
- If you believe that a spec should be added, modified, or removed from the list,
467
- or if you would like to otherwise contribute to this project, please check
468
- [contributing instructions](CONTRIBUTING.md).
469
-
470
-
471
- ## Spec selection criteria
472
-
473
- This repository contains a curated list of technical Web specifications that are
474
- deemed relevant for Web browsers. Roughly speaking, this list should match the
475
- list of specs that appear in projects such as [Web Platform
476
- Tests](https://github.com/web-platform-tests/wpt) or
477
- [MDN](https://developer.mozilla.org/).
478
-
479
- To try to make things more concrete, the following criteria are used to assess
480
- whether a spec should a priori appear in the list:
481
-
482
- 1. The spec is stable or in development. Superseded and abandoned specs will not
483
- appear in the list. For instance, the list contains the HTML LS spec, but not
484
- HTML 4.01 or HTML 5).
485
- 2. The spec is being developed by a well-known standardization or
486
- pre-standardization group. Today, this means a W3C Working Group or Community
487
- Group, the WHATWG, or the Khronos Group.
488
- 3. Web browsers expressed some level of support for the spec, e.g. through a
489
- public intent to implement.
490
- 4. The spec sits at the application layer or is "close to it". For instance,
491
- most IETF specs are likely out of scope, but some that are exposed to Web developers are in scope.
492
- 5. The spec defines normative content (terms, CSS, IDL), or it contains
493
- informative content that other specs often need to refer to (e.g. guidelines
494
- from horizontal activities such as accessibility, internationalization, privacy
495
- and security).
496
-
497
- There are and there will be exceptions to the rule. Besides, some of these
498
- criteria remain fuzzy and/or arbitrary, and we expect them to evolve over time,
499
- typically driven by needs expressed by projects that may want to use the list.
500
-
501
-
502
- ## Versioning
503
-
504
- This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html)
505
- with the following increment rules given a `major.minor.patch` version:
506
- - `major`: A property disappeared, its meaning has changed, or some other
507
- incompatible API change was made. When the `major` number gets incremented, code
508
- that parses the list likely needs to be updated.
509
- - `minor`: A new property was added, the list of specs changed (a new spec
510
- added, or a spec was removed). Code that parses the list should continue to work
511
- undisturbed, but please note that there is no guarantee that a spec that was
512
- present in the previous version will continue to appear in the new version.
513
- Situations where a spec gets dropped should remain scarce. If you believe that
514
- removal of a spec should rather trigger a `major` update, please
515
- [raise an issue](https://github.com/w3c/browser-specs/issues/new) and explain
516
- how it affects your project.
517
- - `patch`: Info about one or more specs changed. Minor updates were made to the
518
- code that don't affect the list.
519
-
520
-
521
- ## Development notes
522
-
523
- ### How to generate `index.json` manually
524
-
525
- To re-generate the `index.json` file locally, run:
526
-
527
- ```bash
528
- npm run build
529
- ```
530
-
531
- **Important:** The generation process will try to retrieve information about W3C
532
- specification from the W3C API. For that to work, the code requires the presence
533
- of a `config.json` file in the root folder with a `w3cApiKey` field set to a
534
- valid [W3C API key](https://w3c.github.io/w3c-api/) and a `githubToken` field
535
- set to a valid [GitHub Personal Token](https://github.com/settings/tokens)
536
- (default read permissions are enough).
537
-
538
-
539
- ### Tests
540
-
541
- To run all tests or to test a given module locally, use one of:
542
-
543
- ```bash
544
- npm test
545
- npm test test/compute-shortname
546
- ```
547
-
548
- Tests are run automatically on pull requests.
549
-
550
-
551
- ### Debugging tool
552
-
553
- The `index.js` module can be used as a command-line interface (CLI) to quickly
554
- look at a given spec in the `index.json` file. The command outputs the spec or
555
- list of specs that match the provided token as a formatted JSON string.
556
-
557
- For instance, to retrieve all specs, the Compatibility Standard spec, the
558
- CSS Media Queries Module Level 5 spec, all delta specs, and a spec identified by
559
- its URL, run:
560
-
561
- ```bash
562
- node index.js
563
- node index.js compat
564
- node index.js mediaqueries-5
565
- node index.js delta
566
- node index.js https://w3c.github.io/presentation-api/
567
- ```
568
-
569
- **Note:** The `index.js` CLI is not part of the released package, which only
570
- contains the actual list of specifications.
571
-
572
-
573
- ### How to release a new version
574
-
575
- Provided that you have the appropriate admin rights and that a `GITHUB_TOKEN`
576
- environment variable is set to a [GitHub Personal
577
- Token](https://github.com/settings/tokens) with `repo` rights, you may release a
578
- new version through the following command, to be run from an up-to-date local
579
- `main` branch:
580
-
581
- ```bash
582
- npm run release
583
- ```
584
-
585
- The release command should take care of everything including incrementing the
586
- version number, updating the [changelog](CHANGELOG.md), creating a GitHub
587
- Release, and publishing a new NPM package. The command is interactive and will
588
- ask you to confirm the different steps. Please check the [versioning
589
- rules](#versioning) to select the right version part to increment!
1
+ # Web browser specifications
2
+
3
+ This repository contains a curated list of technical Web specifications that are
4
+ directly implemented or that will be implemented by Web browsers.
5
+
6
+ This list is meant to be an up-to-date input source for projects that run
7
+ analyses on browser technologies to create reports on test coverage,
8
+ cross-references, WebIDL, quality, etc.
9
+
10
+
11
+ ## Table of Contents
12
+
13
+ - [Installation and usage](#installation-and-usage)
14
+ <!-- COMMON-TOC: start -->
15
+ - [Spec object](#spec-object)
16
+ - [`url`](#url)
17
+ - [`shortname`](#shortname)
18
+ - [`title`](#title)
19
+ - [`shortTitle`](#shorttitle)
20
+ - [`categories`](#categories)
21
+ - [`series`](#series)
22
+ - [`series.shortname`](#seriesshortname)
23
+ - [`series.currentSpecification`](#seriescurrentspecification)
24
+ - [`series.title`](#seriestitle)
25
+ - [`series.shortTitle`](#seriesshorttitle)
26
+ - [`series.releaseUrl`](#seriesreleaseurl)
27
+ - [`series.nightlyUrl`](#seriesnightlyurl)
28
+ - [`seriesVersion`](#seriesversion)
29
+ - [`seriesComposition`](#seriescomposition)
30
+ - [`seriesPrevious`](#seriesprevious)
31
+ - [`seriesNext`](#seriesnext)
32
+ - [`organization`](#organization)
33
+ - [`groups`](#groups)
34
+ - [`release`](#release)
35
+ - [`release.url`](#releaseurl)
36
+ - [`release.filename`](#releasefilename)
37
+ - [`release.pages`](#releasepages)
38
+ - [`nightly`](#nightly)
39
+ - [`nightly.url`](#nightlyurl)
40
+ - [`nightly.filename`](#nightlyfilename)
41
+ - [`nightly.pages`](#nightlypages)
42
+ - [`nightly.repository`](#nightlyrepository)
43
+ - [`nightly.sourcePath`](#nightlysourcepath)
44
+ - [`tests`](#tests)
45
+ - [`tests.repository`](#testsrepository)
46
+ - [`tests.testPaths`](#teststestpaths)
47
+ - [`tests.excludePaths`](#testsexcludepaths)
48
+ - [`source`](#source)
49
+ - [How to add/update/delete a spec](#how-to-addupdatedelete-a-spec)
50
+ - [Versioning](#versioning)<!-- COMMON-TOC: end -->
51
+ - [Spec selection criteria](#spec-selection-criteria)
52
+
53
+ ## Installation and usage
54
+
55
+ The list is distributed as an NPM package. To incorporate it to your project,
56
+ run:
57
+
58
+ ```bash
59
+ npm install browser-specs
60
+ ```
61
+
62
+ You can then retrieve the list from your Node.js program:
63
+
64
+ ```js
65
+ const specs = require("browser-specs");
66
+ console.log(JSON.stringify(specs, null, 2));
67
+ ```
68
+
69
+ Alternatively, you can fetch [`index.json`](https://w3c.github.io/browser-specs/index.json)
70
+ or retrieve the list from the [`web-specs@latest` branch](https://github.com/w3c/browser-specs/tree/web-specs%40latest),
71
+ and filter the resulting list to only preserve specs that have `"browser"` in
72
+ their `categories` property.
73
+
74
+ <!-- COMMON-BODY: start -->
75
+ ## Spec object
76
+
77
+ Each specification in the list comes with the following properties:
78
+
79
+ ```json
80
+ {
81
+ "url": "https://www.w3.org/TR/css-color-4/",
82
+ "seriesComposition": "full",
83
+ "shortname": "css-color-4",
84
+ "series": {
85
+ "shortname": "css-color",
86
+ "currentSpecification": "css-color-4",
87
+ "title": "CSS Color",
88
+ "shortTitle": "CSS Color",
89
+ "releaseUrl": "https://www.w3.org/TR/css-color/",
90
+ "nightlyUrl": "https://drafts.csswg.org/css-color/"
91
+ },
92
+ "seriesVersion": "4",
93
+ "seriesNext": "css-color-5",
94
+ "organization": "W3C",
95
+ "groups": [
96
+ {
97
+ "name": "Cascading Style Sheets (CSS) Working Group",
98
+ "url": "https://www.w3.org/Style/CSS/"
99
+ }
100
+ ],
101
+ "release": {
102
+ "url": "https://www.w3.org/TR/css-color-4/",
103
+ "filename": "Overview.html"
104
+ },
105
+ "nightly": {
106
+ "url": "https://drafts.csswg.org/css-color/",
107
+ "repository": "https://github.com/w3c/csswg-drafts",
108
+ "sourcePath": "css-color-4/Overview.bs",
109
+ "filename": "Overview.html"
110
+ },
111
+ "title": "CSS Color Module Level 4",
112
+ "source": "w3c",
113
+ "shortTitle": "CSS Color 4",
114
+ "categories": ["browser"],
115
+ "tests": {
116
+ "repository": "https://github.com/web-platform-tests/wpt",
117
+ "testPaths": [
118
+ "css/css-color"
119
+ ]
120
+ }
121
+ }
122
+ ```
123
+
124
+
125
+ ### `url`
126
+
127
+ The versioned (but not dated) URL for the spec. For W3C specs published as
128
+ TR documents, this is the TR URL. For WHATWG specs, this is the URL of the
129
+ living standard. In other cases, this is the URL of the latest Editor's Draft.
130
+
131
+ The `url` property is always set.
132
+
133
+
134
+ ### `shortname`
135
+
136
+ A shortname that uniquely identifies the spec in the list. The value matches the
137
+ "well-known" shortname of the spec, that usually appears in the versioned URL.
138
+ For instance, for W3C specs published as TR documents, this is the TR shortname.
139
+ For WHATWG specs, this is the shortname that appears at the beginning of the URL
140
+ (e.g. `compat` for `https://compat.spec.whatwg.org/`). For specs developed on
141
+ GitHub, this is usually the name of repository that holds the spec.
142
+
143
+ The `shortname` property is always set.
144
+
145
+
146
+ ### `title`
147
+
148
+ The title of the spec. The title is either retrieved from the
149
+ [W3C API](https://w3c.github.io/w3c-api/) for W3C specs,
150
+ [Specref](https://www.specref.org/) or from the spec itself. The
151
+ [`source`](#source) property details the actual provenance.
152
+
153
+ The `title` property is always set.
154
+
155
+
156
+ ### `shortTitle`
157
+
158
+ The short title of the spec. In most cases, the short title is generated from
159
+ `title` by dropping terms such as "Module", "Level", or "Standard". In some
160
+ cases, the short title is set manually.
161
+
162
+ The `shortTitle` property is always set. When there is no meaningful short
163
+ title, the property is set to the actual (possibly long) title of the spec.
164
+
165
+
166
+ ### `categories`
167
+
168
+ An array that contains the list of categories that the spec belongs to. The only
169
+ possible value so far is `"browser"`, which means that the spec targets web
170
+ browsers.
171
+
172
+ The `categories` property is always set. Value may be an empty array for some of
173
+ the specs in the `web-specs` package. Value always contains `"browser"` for
174
+ specs in the `browser-specs` package.
175
+
176
+
177
+ ### `series`
178
+
179
+ An object that describes the series that the spec is part of. A series includes
180
+ existing levels/versions of the spec. For instance, CSS Color Module Level 4
181
+ belongs to the same series as CSS Color Module Level 3 and CSS Color Module
182
+ Level 5.
183
+
184
+ Please note that the list only contains specs that are deemed to be
185
+ [of interest](#spec-selection-criteria). In particular, the list does not
186
+ contain levels and versions that have been fully superseded, and may not contain
187
+ early drafts of new levels and versions either.
188
+
189
+ The `series` property is always set.
190
+
191
+
192
+ #### `series.shortname`
193
+
194
+ A shortname that uniquely identifies the series. In most cases, the shortname
195
+ is the shortname of the spec without the level or version number. For instance,
196
+ the series' shortname for `css-color-5` is `css-color`. When a specification is
197
+ not versioned, the series' shortname is identical to the spec's shortname.
198
+
199
+ The `shortname` property is always set.
200
+
201
+
202
+ #### `series.currentSpecification`
203
+
204
+ The shortname of the spec that should be regarded as the current level or
205
+ version in the series. The current spec in a series is up to the group who
206
+ develops the series. In most cases, the current spec is the latest level or
207
+ version in the series that is a "full" spec (see
208
+ [`seriesComposition`](#seriescomposition)).
209
+
210
+ The `currentSpecification` property is always set.
211
+
212
+
213
+ #### `series.title`
214
+
215
+
216
+ The version-less version of the title of the spec which can be used to refer to
217
+ all specs in the series. The title is either retrieved from the
218
+ [W3C API](https://w3c.github.io/w3c-api/) for W3C specs, or derived from the
219
+ spec's [`title`](#title).
220
+
221
+ The `title` property is always set.
222
+
223
+
224
+ #### `series.shortTitle`
225
+
226
+
227
+ The short title of the series title. In most cases, the short title is generated
228
+ from [`series.title`](#seriestitle) by dropping terms such as "Module", "Level",
229
+ or "Standard". In some cases, the short title is set manually.
230
+
231
+ The `shortTitle` property is always set. When there is no meaningful short
232
+ title, the property is set to the actual (possibly long) series title.
233
+
234
+
235
+ #### `series.releaseUrl`
236
+
237
+ The URL of the latest published snapshot for the spec series. For leveled specs
238
+ (those that create a series), this matches the unversioned URL. That
239
+ unversioned URL should return the specification identified by the
240
+ [`currentSpecification`](#seriescurrentspecification) property.
241
+
242
+ For instance, this property will be set to `https://www.w3.org/TR/css-fonts/`
243
+ for all specifications in the CSS Fonts series.
244
+
245
+ For non-leveled specs, this matches the [`url`](#url) property.
246
+
247
+ The `releaseUrl` property is only set for W3C specs published as TR documents.
248
+
249
+
250
+ #### `series.nightlyUrl`
251
+
252
+ For leveled specs (those that create a series), this matches the unversioned URL
253
+ that allows to access the latest Editor's Draft of the current specification in
254
+ the series.
255
+
256
+ For instance, this property will be set to `https://drafts.csswg.org/css-fonts/`
257
+ for all specifications in the CSS Fonts series.
258
+
259
+ For specs that are not part of a series of specs, this matches the
260
+ [`nightly.url`](#nightlyurl) property.
261
+
262
+ The `nightlyUrl` property is always set.
263
+
264
+
265
+ ### `seriesVersion`
266
+
267
+ The level or version of the spec, represented as an `x`, `x.y` or `x.y.z` string
268
+ with `x`, `y` and `z` numbers, and `x` always greater than or equal to `1`. For
269
+ instance, this property will have the value `1.2` (as a string, so enclosed
270
+ in `"`) for the WAI-ARIA 1.2 spec.
271
+
272
+ The `seriesVersion` property is only set for specs that have a level or version
273
+ number.
274
+
275
+
276
+ ### `seriesComposition`
277
+
278
+ Whether the spec is a standalone spec, or whether it is a delta spec over the
279
+ previous level or version in the series. Possible values are `full` or `delta`.
280
+
281
+ The `seriesComposition` property is always set.
282
+
283
+
284
+ ### `seriesPrevious`
285
+
286
+ The `shortname` of the previous spec in the series.
287
+
288
+ The `seriesPrevious` property is only set where there is a previous level or
289
+ version.
290
+
291
+
292
+ ### `seriesNext`
293
+
294
+ The `shortname` of the next spec in the series.
295
+
296
+ The `seriesNext` property is only set where there is a next level or version.
297
+
298
+
299
+ ### `organization`
300
+
301
+ The name of the standardization organization that owns the spec such as `W3C`,
302
+ `WHATWG`, `IETF`, `Ecma International`, `Khronos Group`.
303
+
304
+ The `organization` property is always set.
305
+
306
+
307
+ ### `groups`
308
+
309
+ The list the groups that develop (or developed) the spec. Each item in the array
310
+ is an object with a `name` property that contains the human-readable name of the
311
+ group and a `url` property that targets the homepage of the group.
312
+
313
+ The `groups` property is always set. In most cases, a spec is developed by one
314
+ and only one group.
315
+
316
+
317
+ ### `release`
318
+
319
+ An object that represents the latest published snapshot of the spec, when it
320
+ exists.
321
+
322
+ The `release` property is only set for W3C specs published as TR documents.
323
+
324
+
325
+ #### `release.url`
326
+
327
+ The URL of the latest published snapshot of the spec. Matches the versioned
328
+ URL (see [`url`](#url)).
329
+
330
+ The `url` property is always set.
331
+
332
+
333
+ #### `release.filename`
334
+
335
+ The filename of the resource that gets served when the default URL is fetched.
336
+ For instance, the filename for `https://www.w3.org/TR/presentation-api/` is
337
+ `Overview.html`, meaning that the specification could also be retrieved from
338
+ `https://www.w3.org/TR/presentation-api/Overview.html`. The filename may be
339
+ useful to distinguish links to self in a spec.
340
+
341
+ The `filename` property is always set.
342
+
343
+
344
+ #### `release.pages`
345
+
346
+ The list of absolute page URLs when the spec is a multipage spec.
347
+
348
+ The `pages` property is only set for specs identified as multipage specs.
349
+
350
+
351
+ ### `nightly`
352
+
353
+ An object that represents the latest Editor's Draft of the spec, or the living
354
+ standard when the concept of Editor's Draft does not exist.
355
+
356
+ The `nightly` property is always set.
357
+
358
+
359
+ #### `nightly.url`
360
+
361
+ The URL of the latest Editor's Draft or of the living standard.
362
+
363
+ The URL is either retrieved from the [W3C API](https://w3c.github.io/w3c-api/)
364
+ for W3C specs, or [Specref](https://www.specref.org/). The document at the
365
+ versioned URL is considered to be the latest Editor's Draft if the spec does
366
+ neither exist in the W3C API nor in Specref. The [`source`](#source) property
367
+ details the actual provenance.
368
+
369
+ The `url` property is always set.
370
+
371
+
372
+ #### `nightly.filename`
373
+
374
+ The filename of the resource that gets served when the default URL is fetched.
375
+ For instance, the filename for `https://w3c.github.io/presentation-api/` is
376
+ `index.html`, meaning that the specification could also be retrieved from
377
+ `https://w3c.github.io/presentation-api/index.html`. The filename may be
378
+ useful to distinguish links to self in a spec.
379
+
380
+ The `filename` property is always set.
381
+
382
+
383
+ #### `nightly.pages`
384
+
385
+ The list of absolute page URLs when the spec is a multipage spec.
386
+
387
+ The `pages` property is only set for specs identified as multipage specs.
388
+
389
+
390
+ #### `nightly.repository`
391
+
392
+ The URL of the repository that contains the source of the Editor's Draft or of
393
+ the living standard.
394
+
395
+ The URL is either retrieved from the [Specref](https://www.specref.org/) or
396
+ computed from `nightly.url`.
397
+
398
+ The `repository` property is always set except for IETF specs where such a repo does not always exist.
399
+
400
+
401
+ #### `nightly.sourcePath`
402
+
403
+ The relative path to the filename that contains the source of the Editor's Draft
404
+ or of the living standard at the HEAD of the default branch of the repository.
405
+
406
+ That path is computed by parsing the contents of the repository for common
407
+ patterns. The info must be specified in `specs.json` for specifications that do
408
+ not follow a common pattern.
409
+
410
+ The `sourcePath` property is always set when `repository` is set.
411
+
412
+ **Note:** The path is relative to the root of the repository, and only valid in
413
+ the default branch of the repository. If needed, the source may be fetched from
414
+ the absolute HTTPS URL `${nightly.repository}/blob/HEAD/${nightly.sourcePath}`.
415
+
416
+
417
+ ### `tests`
418
+
419
+ An object that links the specification with its test suite when it has one.
420
+
421
+
422
+ #### `tests.repository`
423
+
424
+ The URL of the repository that contains the test suite of the specification,
425
+ typically `https://github.com/web-platform-tests/wpt`.
426
+
427
+ The `repository` property is always set when the `tests` object is present.
428
+
429
+ #### `tests.testPaths`
430
+
431
+ The list of relative paths to the actual tests at the HEAD of the default branch
432
+ of the test repository.
433
+
434
+ For test suites within [Web Platform
435
+ Tests](https://github.com/web-platform-tests/wpt), the list is determined by
436
+ looking at `META.yml` files within each folder.
437
+
438
+ The `testPaths` array typically only contains one entry, but tests of a given
439
+ spec are sometimes spread over multiple folders. For instance, that is the case
440
+ for DOM and HTML tests.
441
+
442
+ The `testPaths` property is usually set when the `tests` object is present. When
443
+ absent, that means that the entire repository is the test suite.
444
+
445
+ #### `tests.excludePaths`
446
+
447
+ The list of relative sub-paths of paths listed in the `testPaths` property that
448
+ do not contain tests for the underlying spec. For instance, tests for the
449
+ WebXR Device API are under the
450
+ [`webxr`](https://github.com/web-platform-tests/wpt/tree/master/webxr) folder,
451
+ but several folders under `webxr` actually contain test suites for WebXR module
452
+ specs and as such need to be excluded from the test suite of the WebXR Device
453
+ API spec.
454
+
455
+ The `excludePaths` property is seldom set.
456
+
457
+
458
+ ### `source`
459
+
460
+ The provenance for the `title` and `nightly` property values. Can be one of:
461
+ - `w3c`: information retrieved from the [W3C API](https://w3c.github.io/w3c-api/)
462
+ - `specref`: information retrieved from [Specref](https://www.specref.org/)
463
+ - `spec`: information retrieved from the spec itself
464
+
465
+ The `source` property is always set.
466
+
467
+
468
+ ## How to add/update/delete a spec
469
+
470
+ If you believe that a spec should be added, modified, or removed from the list,
471
+ or if you would like to otherwise contribute to this project, please check
472
+ [contributing instructions](CONTRIBUTING.md).
473
+
474
+
475
+ ## Spec selection criteria
476
+
477
+ This repository contains a curated list of technical Web specifications that are
478
+ deemed relevant for the Web platform. Roughly speaking, this list should match
479
+ the list of web specs actively developed by W3C, the WHATWG and a few other
480
+ organizations.
481
+
482
+ To try to make things more concrete, the following criteria are used to assess
483
+ whether a spec should a priori appear in the list:
484
+
485
+ 1. The spec is stable or in development. Superseded and abandoned specs will not
486
+ appear in the list. For instance, the list contains the HTML LS spec, but not
487
+ HTML 4.01 or HTML 5).
488
+ 2. The spec is being developed by a well-known standardization or
489
+ pre-standardization group. Today, this means a W3C Working Group or Community
490
+ Group, the WHATWG, the IETF, the TC39 group or the Khronos Group.
491
+ 4. The spec sits at the application layer or is "close to it". For instance,
492
+ most IETF specs are likely out of scope, but some that are exposed to Web developers are in scope.
493
+ 5. The spec defines normative content (terms, CSS, IDL), or it contains
494
+ informative content that other specs often need to refer to (e.g. guidelines
495
+ from horizontal activities such as accessibility, internationalization, privacy
496
+ and security).
497
+
498
+ There are and there will be exceptions to the rule. Besides, some of these
499
+ criteria remain fuzzy and/or arbitrary, and we expect them to evolve over time,
500
+ typically driven by needs expressed by projects that may want to use the list.
501
+
502
+
503
+ ## Versioning
504
+
505
+ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html)
506
+ with the following increment rules given a `major.minor.patch` version:
507
+ - `major`: A property disappeared, its meaning has changed, or some other
508
+ incompatible API change was made. When the `major` number gets incremented, code
509
+ that parses the list likely needs to be updated.
510
+ - `minor`: A new property was added, the list of specs changed (a new spec
511
+ added, or a spec was removed). Code that parses the list should continue to work
512
+ undisturbed, but please note that there is no guarantee that a spec that was
513
+ present in the previous version will continue to appear in the new version.
514
+ Situations where a spec gets dropped should remain scarce. If you believe that
515
+ removal of a spec should rather trigger a `major` update, please
516
+ [raise an issue](https://github.com/w3c/browser-specs/issues/new) and explain
517
+ how it affects your project.
518
+ - `patch`: Info about one or more specs changed. Minor updates were made to the
519
+ code that don't affect the list.
520
+ <!-- COMMON-BODY: end -->
521
+
522
+ ## Spec selection criteria
523
+
524
+ This repository contains a curated list of technical Web specifications that are
525
+ deemed relevant for Web browsers. Roughly speaking, this list should match the
526
+ list of specs that appear in projects such as [Web Platform
527
+ Tests](https://github.com/web-platform-tests/wpt) or
528
+ [MDN](https://developer.mozilla.org/).
529
+
530
+ To try to make things more concrete, the following criteria are used to assess
531
+ whether a spec should a priori appear in the list:
532
+
533
+ 1. The spec is stable or in development. Superseded and abandoned specs will not
534
+ appear in the list. For instance, the list contains the HTML LS spec, but not
535
+ HTML 4.01 or HTML 5).
536
+ 2. The spec is being developed by a well-known standardization or
537
+ pre-standardization group. Today, this means a W3C Working Group or Community
538
+ Group, the WHATWG, the IETF, the TC39 group or the Khronos Group.
539
+ 3. Web browsers expressed some level of support for the spec, e.g. through a
540
+ public intent to implement.
541
+ 4. The spec sits at the application layer or is "close to it". For instance,
542
+ most IETF specs are likely out of scope, but some that are exposed to Web developers are in scope.
543
+ 5. The spec defines normative content (terms, CSS, IDL), or it contains
544
+ informative content that other specs often need to refer to (e.g. guidelines
545
+ from horizontal activities such as accessibility, internationalization, privacy
546
+ and security).
547
+
548
+ There are and there will be exceptions to the rule. Besides, some of these
549
+ criteria remain fuzzy and/or arbitrary, and we expect them to evolve over time,
550
+ typically driven by needs expressed by projects that may want to use the list.