{item.name}
50 |{item.description}
51 |52 | 56 | Repository 57 | 58 | {item.specification && ( 59 | 63 | Specification 64 | 65 | )} 66 |
67 |├── static ├── cover.png ├── logos │ ├── alibaba.png │ ├── igalia.png │ ├── bytedance.png │ ├── azion.svg │ ├── vercel.svg │ ├── cloudflare-workers.svg │ ├── matrix.svg │ ├── fastly.svg │ ├── shopify.svg │ ├── netlify.svg │ ├── deno.svg │ ├── cloudflare.svg │ ├── igalia.svg │ ├── ecma.svg │ ├── nodejs.svg │ └── suborbital.svg └── logo.svg ├── .vscode └── settings.json ├── w3c.json ├── CODE_OF_CONDUCT.md ├── deno.jsonc ├── README.md ├── LICENSE.md ├── CONTRIBUTING.md ├── data └── work.json ├── nanossr.ts ├── deno.lock └── main.jsx /static/cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinterTC55/www/HEAD/static/cover.png -------------------------------------------------------------------------------- /static/logos/alibaba.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinterTC55/www/HEAD/static/logos/alibaba.png -------------------------------------------------------------------------------- /static/logos/igalia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinterTC55/www/HEAD/static/logos/igalia.png -------------------------------------------------------------------------------- /static/logos/bytedance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WinterTC55/www/HEAD/static/logos/bytedance.png -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "deno.enable": true, 3 | "deno.lint": true, 4 | "deno.unstable": false 5 | } 6 | -------------------------------------------------------------------------------- /w3c.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": "cg/wintercg", 3 | "contacts": ["lucacasonato"], 4 | "repo-type": "website" 5 | } 6 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Code of Conduct 2 | 3 | All documentation, code and communication under this repository are covered by 4 | the 5 | [W3C Code of Ethics and Professional Conduct](https://www.w3.org/Consortium/cepc/). 6 | -------------------------------------------------------------------------------- /deno.jsonc: -------------------------------------------------------------------------------- 1 | { 2 | "scopes": { 3 | "./nanossr.ts": { 4 | // fix the import path for twind inside nanossr 5 | "twind": "https://esm.sh/twind@0.16.16/shim/server", 6 | "https://esm.sh/@twind/typography@0.0.2": "https://esm.sh/*@twind/typography@0.0.2" 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # www 2 | 3 | The website for this community group. 4 | 5 | ## Start the website locally 6 | 7 | First install Deno. 8 | 9 | Mac, Linux: 10 | 11 | ```sh 12 | curl -fsSL https://deno.land/install.sh | sh 13 | ``` 14 | 15 | Windows: 16 | 17 | ```sh 18 | iwr https://deno.land/install.ps1 -useb | iex 19 | ``` 20 | 21 | Run the command: 22 | 23 | ```sh 24 | deno run -A --no-check main.jsx 25 | ``` 26 | 27 | Open http://localhost:8000 28 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | All Reports in this Repository are licensed by Contributors under the 2 | [W3C Software and Document License](http://www.w3.org/Consortium/Legal/2015/copyright-software-and-document). 3 | 4 | Contributions to Specifications are made under the 5 | [W3C CLA](https://www.w3.org/community/about/agreements/cla/). 6 | 7 | Contributions to Test Suites are made under the 8 | [W3C 3-clause BSD License](https://www.w3.org/Consortium/Legal/2008/03-bsd-license.html) 9 | -------------------------------------------------------------------------------- /static/logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/logos/azion.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # WinterCG Website 2 | 3 | This repository is being used for work in the W3C Web-Interoperable Runtimes 4 | Community Group, governed by the 5 | [W3C Community License Agreement (CLA)](http://www.w3.org/community/about/agreements/cla/). 6 | To make substantive contributions, you must join the CG. 7 | 8 | If you are not the sole contributor to a contribution (pull request), please 9 | identify all contributors in the pull request comment. 10 | 11 | To add a contributor (other than yourself, that's automatic), mark them one per 12 | line as follows: 13 | 14 | ``` 15 | +@github_username 16 | ``` 17 | 18 | If you added a contributor by mistake, you can remove them in a comment with: 19 | 20 | ``` 21 | -@github_username 22 | ``` 23 | 24 | If you are making a pull request on behalf of someone else but you had no part 25 | in designing the feature, you can remove yourself with the above syntax. 26 | -------------------------------------------------------------------------------- /data/work.json: -------------------------------------------------------------------------------- 1 | { 2 | "specs": [ 3 | { 4 | "name": "Minimum Common API", 5 | "description": "The minimal collection of Web Platform APIs that ought to be implemented by Web-interoperable runtimes.", 6 | "repo": "proposal-minimum-common-api", 7 | "specification": "https://min-common-api.proposal.wintertc.org" 8 | }, 9 | { 10 | "name": "Sockets API", 11 | "description": "A proposal incubating an API for establishing TCP connections in non-browser JavaScript environments.", 12 | "repo": "proposal-sockets-api", 13 | "specification": "https://sockets-api.proposal.wintertc.org" 14 | }, 15 | { 16 | "name": "CLI API", 17 | "description": "A proposal standardizing common CLI APIs such as argv and environment variables.", 18 | "repo": "proposal-cli-api" 19 | } 20 | ], 21 | "collaborations": [ 22 | { 23 | "name": "Fetch", 24 | "description": "We are gathering requirements to make the fetch specification more suitable for server-side JavaScript environments, with improvements to be developed in WHATWG.", 25 | "repo": "whatwg/fetch", 26 | "specification": "https://fetch.spec.whatwg.org" 27 | }, 28 | { 29 | "name": "Web Crypto Streams", 30 | "description": "We are gathering requirements in order to define streaming support in the Web Crypto API, with improvements to be developed in the WICG and the Web Application Security Working Group.", 31 | "repo": "WinterTC55/proposal-webcrypto-streams" 32 | } 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /static/logos/vercel.svg: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /nanossr.ts: -------------------------------------------------------------------------------- 1 | // Vendored and modified from https://github.com/AaronO/nanossr 2 | 3 | export * from "https://deno.land/x/nano_jsx@v0.0.30/mod.ts"; 4 | 5 | import { 6 | Helmet, 7 | renderSSR as nanoRender, 8 | } from "https://deno.land/x/nano_jsx@v0.0.30/mod.ts"; 9 | import { setup } from "https://esm.sh/twind@0.16.16"; 10 | import { 11 | Configuration, 12 | getStyleTag, 13 | shim, 14 | TW, 15 | VirtualSheet, 16 | virtualSheet, 17 | } from "https://esm.sh/twind@0.16.16/shim/server"; 18 | import typography from "https://esm.sh/@twind/typography@0.0.2"; 19 | 20 | let SHEET_SINGLETON: VirtualSheet | null = null; 21 | function createSheet(twOptions = {}) { 22 | return SHEET_SINGLETON ??= setupSheet(twOptions); 23 | } 24 | 25 | // Setup TW sheet singleton 26 | function setupSheet(twOptions: Configuration) { 27 | const sheet = virtualSheet(); 28 | setup({ ...twOptions, sheet, plugins: { ...typography() } }); 29 | return sheet; 30 | } 31 | 32 | const html = ({ body, head, footer, styleTag }) => (` 33 | 34 | 35 |
36 | 37 | 38 | ${head} 39 | ${styleTag} 40 | 41 | 42 | ${body} 43 | ${footer.join("\n")} 44 | 45 | 46 | `); 47 | 48 | export interface SSRSettings { 49 | pathname?: string; 50 | clearState?: boolean; 51 | tw?: TW; 52 | } 53 | 54 | export function ssr(render: CallableFunction, options?: SSRSettings) { 55 | const sheet = createSheet(options?.tw ?? {}); 56 | sheet.reset(); 57 | const app = nanoRender(render(), options); 58 | shim(app); 59 | const { body, head, footer } = Helmet.SSR(app); 60 | 61 | const styleTag = getStyleTag(sheet); 62 | return new Response( 63 | html({ body, head, footer, styleTag }), 64 | { headers: { "content-type": "text/html" } }, 65 | ); 66 | } 67 | 68 | export function memoizedSSR(render: CallableFunction, options?: SSRSettings) { 69 | let mresp: Response | null = null; 70 | return () => { 71 | const resp = mresp ?? (mresp = ssr(render, options)); 72 | return resp.clone(); 73 | }; 74 | } 75 | -------------------------------------------------------------------------------- /static/logos/cloudflare-workers.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/logos/matrix.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /static/logos/fastly.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 37 | -------------------------------------------------------------------------------- /static/logos/shopify.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/logos/netlify.svg: -------------------------------------------------------------------------------- 1 | 23 | -------------------------------------------------------------------------------- /static/logos/deno.svg: -------------------------------------------------------------------------------- 1 | 18 | -------------------------------------------------------------------------------- /static/logos/cloudflare.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 51 | -------------------------------------------------------------------------------- /static/logos/igalia.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/logos/ecma.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/logos/nodejs.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/logos/suborbital.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /deno.lock: -------------------------------------------------------------------------------- 1 | { 2 | "version": "5", 3 | "specifiers": { 4 | "jsr:@std/cli@^1.0.12": "1.0.12", 5 | "jsr:@std/encoding@^1.0.7": "1.0.7", 6 | "jsr:@std/fmt@^1.0.5": "1.0.5", 7 | "jsr:@std/html@^1.0.3": "1.0.3", 8 | "jsr:@std/http@*": "1.0.13", 9 | "jsr:@std/media-types@^1.1.0": "1.1.0", 10 | "jsr:@std/net@^1.0.4": "1.0.4", 11 | "jsr:@std/path@^1.0.8": "1.0.8", 12 | "jsr:@std/streams@^1.0.9": "1.0.9" 13 | }, 14 | "jsr": { 15 | "@std/cli@1.0.12": { 16 | "integrity": "e5cfb7814d189da174ecd7a34fbbd63f3513e24a1b307feb2fcd5da47a070d90" 17 | }, 18 | "@std/encoding@1.0.7": { 19 | "integrity": "f631247c1698fef289f2de9e2a33d571e46133b38d042905e3eac3715030a82d" 20 | }, 21 | "@std/fmt@1.0.5": { 22 | "integrity": "0cfab43364bc36650d83c425cd6d99910fc20c4576631149f0f987eddede1a4d" 23 | }, 24 | "@std/html@1.0.3": { 25 | "integrity": "7a0ac35e050431fb49d44e61c8b8aac1ebd55937e0dc9ec6409aa4bab39a7988" 26 | }, 27 | "@std/http@1.0.13": { 28 | "integrity": "d29618b982f7ae44380111f7e5b43da59b15db64101198bb5f77100d44eb1e1e", 29 | "dependencies": [ 30 | "jsr:@std/cli", 31 | "jsr:@std/encoding", 32 | "jsr:@std/fmt", 33 | "jsr:@std/html", 34 | "jsr:@std/media-types", 35 | "jsr:@std/net", 36 | "jsr:@std/path", 37 | "jsr:@std/streams" 38 | ] 39 | }, 40 | "@std/media-types@1.1.0": { 41 | "integrity": "c9d093f0c05c3512932b330e3cc1fe1d627b301db33a4c2c2185c02471d6eaa4" 42 | }, 43 | "@std/net@1.0.4": { 44 | "integrity": "2f403b455ebbccf83d8a027d29c5a9e3a2452fea39bb2da7f2c04af09c8bc852" 45 | }, 46 | "@std/path@1.0.8": { 47 | "integrity": "548fa456bb6a04d3c1a1e7477986b6cffbce95102d0bb447c67c4ee70e0364be" 48 | }, 49 | "@std/streams@1.0.9": { 50 | "integrity": "a9d26b1988cdd7aa7b1f4b51e1c36c1557f3f252880fa6cc5b9f37078b1a5035" 51 | } 52 | }, 53 | "remote": { 54 | "https://deno.land/x/nano_jsx@v0.0.30/component.ts": "a9526ac725336e8721c05f7b35e07105ec6ed0fcf2e81ae97f0724cc33e61fae", 55 | "https://deno.land/x/nano_jsx@v0.0.30/components/helmet.ts": "59e598dc79c7b18620de175c61eb26f4aeb6905a6654cd63359208a26471541e", 56 | "https://deno.land/x/nano_jsx@v0.0.30/components/img.ts": "82a9f830394a7d6cd9b789b48fe1e70bc64eb151c4b410a3da74347c06acdae0", 57 | "https://deno.land/x/nano_jsx@v0.0.30/components/index.ts": "8855ee8302a9a19f38202d4a7ff5b17e22942600da02356bdfbc80c99c5c55f5", 58 | "https://deno.land/x/nano_jsx@v0.0.30/components/link.ts": "0f0b1c57dc8c466203105062335e0d9ded89a34e75d08b1bbeece198d42021cb", 59 | "https://deno.land/x/nano_jsx@v0.0.30/components/router.ts": "a8cd7171774cf7e293e72f562151d020f28dc9f3a31c0887c7e2cee9aaad1feb", 60 | "https://deno.land/x/nano_jsx@v0.0.30/components/suspense.ts": "0711b7cdcd42b0b085972eca796d3ba7c436a736e1d2ce17db7e0cd1d3b928f5", 61 | "https://deno.land/x/nano_jsx@v0.0.30/components/visible.ts": "f19487f7faff0bad38a5549f1efac1df351e83ee4a77ca5886412b439f4b6b53", 62 | "https://deno.land/x/nano_jsx@v0.0.30/context.ts": "a65018beedf3e1863b96f9d99cf2d471c231a6ae0c77877a77754a398105f9fc", 63 | "https://deno.land/x/nano_jsx@v0.0.30/core.ts": "86242e889d28f1275ca6472b827167d94b978802297d81679d7fa7ab3834954b", 64 | "https://deno.land/x/nano_jsx@v0.0.30/core.types.ts": "071dba8935df5b9b97e9e7eab9901c39c53c49cadcd3e9126b5c5eeb1d8c3b52", 65 | "https://deno.land/x/nano_jsx@v0.0.30/customElementsMode.ts": "f5446d3c3afe803a7f97a3434d3970e662f5d0635db79b0e4010e2972ff66a6e", 66 | "https://deno.land/x/nano_jsx@v0.0.30/fragment.ts": "9cfb0dcdcb02d5cc53f027b4b55609e4f9d6d9322b665292e572856f4b688569", 67 | "https://deno.land/x/nano_jsx@v0.0.30/helpers.ts": "d904aa646534f1c0cf7c05a6c8e02231f906d962acb725c964aedbcf50216d85", 68 | "https://deno.land/x/nano_jsx@v0.0.30/htm.ts": "d8d9cd4fb4ad4645bff3698c7eb96e7798022c5519d04e709ebde236edde156b", 69 | "https://deno.land/x/nano_jsx@v0.0.30/htm/build.ts": "9d6b6eb407c0db2d1213a3f9c82efc66a2bec34c89976132ff13e3e095dcaaaf", 70 | "https://deno.land/x/nano_jsx@v0.0.30/htm/constants.ts": "3f296f87f03bd0ba8d7673884a1f6c4c927a2774648eaa4fd3ca9e3c46c3f7b8", 71 | "https://deno.land/x/nano_jsx@v0.0.30/htm/index.ts": "29912b9f7a760884fce79caca82649b9772cfa3c3272e0426a4ce377b67d70d5", 72 | "https://deno.land/x/nano_jsx@v0.0.30/index.ts": "0f39c911a39c61cb39f9bd8a2481500126dcb1b2a826d5b4523dd47a08b6938d", 73 | "https://deno.land/x/nano_jsx@v0.0.30/jsx.ts": "7d5b4d4a249fba1a42f2016f54f71ca049d96ff490e098db4a19b2a9b197b952", 74 | "https://deno.land/x/nano_jsx@v0.0.30/lazy.ts": "f8b8a2b915daff1fb70704ffad5171c805f1e28778b5cd0f8c827780762776c4", 75 | "https://deno.land/x/nano_jsx@v0.0.30/mod.ts": "3dda2bc0dbee9abd01c03acf43ab55a7854952afe0450245fc2ad12eb9bd9598", 76 | "https://deno.land/x/nano_jsx@v0.0.30/regexDom.ts": "6eaf48bbf3ff57e093a8923d59c76a717bb059e5316c78fc89a21e6401980d86", 77 | "https://deno.land/x/nano_jsx@v0.0.30/ssr.ts": "8f77228a7ed13990deba0c1a69d7d3f2902c837b62d24f5b7a019f84c96ad234", 78 | "https://deno.land/x/nano_jsx@v0.0.30/state.ts": "cfc6ca6eb5e65f4cd60717a0a96ce604053bacf6e0b8835afbe22327e9979a1b", 79 | "https://deno.land/x/nano_jsx@v0.0.30/store.ts": "653e8c53d6ed4e410c76b1a7a044aa7cc71ff00fb3af9f3a94253591b5f4dcea", 80 | "https://deno.land/x/nano_jsx@v0.0.30/version.ts": "f7d48f0b75f40e671d2149eef01ca1c59de528c73bbc4644186c02598d31aee9", 81 | "https://deno.land/x/nano_jsx@v0.0.30/withStyles.ts": "8aae4c8e79319fe991d49dd8ccc927c221786dfe58de640dba9d9885ce0dd4b7", 82 | "https://esm.sh/*@twind/typography@0.0.2": "eb8b14de18eb177f8038784338668c369c1008065812637fa9adabf9dcbf1053", 83 | "https://esm.sh/twind@0.16.16": "638f6fedc496ecb6bb6280be885145ab9bab0eee23478bace6018c7b28a4cd76", 84 | "https://esm.sh/twind@0.16.16/colors.mjs": "10636798cdd1836983d35257255971d8ef57564b36a3d93d194bc42ba53886e7", 85 | "https://esm.sh/twind@0.16.16/shim/server": "62b26e4bd36c3ece6aab88884272cb259f3600ff7304470b9b08f33236e410ca", 86 | "https://esm.sh/v135/@twind/typography@0.0.2/X-ZS8q/denonext/typography.mjs": "c9b538969052499e97ff399c38d97d7eeea3014ddb9f2abf11d22f146198a2e4", 87 | "https://esm.sh/v135/entities@2.2.0/denonext/lib/decode_codepoint.js": "68b6cbd2b5c122b862e414cd9c3a01af2bff35d3d7b1dd2089f4ffcef5a2f5c2", 88 | "https://esm.sh/v135/htmlparser2@6.1.0/denonext/lib/Tokenizer.js": "d4bbc77c37f254f47cce9509abe6f94f1dd4aeb19a95baa0f9852ad7047ed1d7", 89 | "https://esm.sh/v135/style-vendorizer@2.2.3/denonext/style-vendorizer.mjs": "121455e7b04b631ef6463ce63cdcd29febd74d88c37713c774ceca8a1561c83d", 90 | "https://esm.sh/v135/twind@0.16.16/denonext/colors.js": "06bfff4da409e0ef89edadb94ca3a624fcf99d781f323f9a9d18e175362dbb1c", 91 | "https://esm.sh/v135/twind@0.16.16/denonext/sheets.js": "aff2004484fdf713c8d39492ce89ffd0d8f1fabf48fdb44e19d78948fecfa9aa", 92 | "https://esm.sh/v135/twind@0.16.16/denonext/shim/server.js": "85e6507b0349a6a12a42eb81a28225345e13b384ef7dfb5a136d429471f9b2ef", 93 | "https://esm.sh/v135/twind@0.16.16/denonext/twind.mjs": "857319af660b8bae96d20737a4f9a9b4ce909fcb47e0552abd559216824fe795" 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /main.jsx: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env -S deno run --no-check --watch=data/ --allow-read --allow-net 2 | 3 | /** @jsx h */ 4 | /** @jsxFrag Fragment */ 5 | import { serveDir } from "jsr:@std/http/file-server"; 6 | import { Fragment, h, Helmet, ssr } from "./nanossr.ts"; 7 | import * as colors from "https://esm.sh/twind@0.16.16/colors.mjs"; 8 | 9 | import work from "./data/work.json" with { type: "json" }; 10 | 11 | function Home() { 12 | return ( 13 |17 | WinterTC (TC55) is an Ecma International Technical Committee that aims 18 | to achieve some level of API interoperability across server-side 19 | JavaScript runtimes, especially for APIs that are common with the web. 20 | This is done by standardizing a{" "} 21 | 25 | “minimum common API” 26 | {" "} 27 | shared with the web that such runtimes should support, as well as by 28 | collaborating with web standards groups (WHATWG, W3C...) for new web 29 | APIs and changes to current web APIs. We also publish standards to add 30 | new interoperable server-side APIs.{" "} 31 | 35 | Learn more. 36 | 37 |
38 |{item.description}
51 |52 | 56 | Repository 57 | 58 | {item.specification && ( 59 | 63 | Specification 64 | 65 | )} 66 |
67 |79 | WinterTC is currently working on various standards to improve 80 | interoperability across server-side runtimes: 81 |
82 |84 | We are also collaborating with other standards bodies to make web 85 | platform APIs more suitable to server-side runtimes: 86 |
87 |105 | The Technical Committee on Web-interoperable Server Runtimes 106 | (WinterTC) is a community of people who are interested in 107 | interoperability across server-side (Deno / Node.js) or edge 108 | JavaScript runtimes (Cloudflare Workers / Deno Deploy), especially 109 | for Web Platform APIs. 110 |
111 |112 | WinterTC is organized as Ecma International's{" "} 113 | 117 | Technical Committee number 55 (TC55) 118 | . This gives the group access to Ecma's vast infrastructure and 119 | its IPR policy work, as well as the ability to publish standards. 120 | This is the same type of committee as{" "} 121 | 125 | TC39 126 | , which standardizes the JavaScript language. 127 |
128 |136 | The ultimate goal of this committee is to promote runtimes 137 | supporting a comprehensive unified API surface that JavaScript 138 | developers can rely on, regardless of whether their code will be 139 | used in browsers, servers, or edge runtimes. 140 |
141 |142 | It is another goal of WinterTC that runtimes with needs for 143 | capabilities beyond web platform APIs, in particular server-side and 144 | edge runtimes, still have unified surfaces. 145 |
146 |147 | The members of the committee want to provide a space to better 148 | coordinate between server-side implementors, as well as with browser 149 | vendors, on how to best achieve this interoperability. 150 |
151 |152 | It is not explicitly a goal of WinterTC to promote such a unified 153 | API surface for other JavaScript environments, such as embedded 154 | applications. However, the results of our work could be useful to 155 | such environments nonetheless. 156 |
157 |168 | We want to specify and document how server side runtimes can best 169 | implement Web Platform APIs and to what extent they could deviate 170 | from browsers. 171 |
172 |173 | We want to provide feedback to spec authors of Web Platform APIs 174 | from the view point of non-browser runtimes to help them make 175 | informed decisions about future changes and additions to these 176 | specifications. 177 |
178 |179 | We want to develop and specify new APIs that, although they might be 180 | too powerful for the Web Platform or not fit within its security 181 | model, would still be a great fit for server-side runtimes and would 182 | be part of a comprehensive unified API surface for such runtimes. 183 |
184 |190 | The members of this group all share the belief that a comprehensive 191 | unified API surface for JS runtimes is something that would benefit 192 | the JS community as a whole. In the past members have individually 193 | worked on making this a reality. 194 |
195 |196 | This disparate approach with little coordination has historically 197 | led to much confusion between not just browser vendors, spec 198 | authors, and other implementors, but also between non browser 199 | implementors and other non browser implementors on topics of unified 200 | API. This was often caused by the fact that discussions were spread 201 | over various disparate issue and PR comments with often little 202 | context or cohesion between them. 203 |
204 |205 | We think that by working together more tightly we can provide 206 | browser vendors and specification editors with more meaningful 207 | feedback from users of non-browser JS runtimes. This will help them 208 | make informed decisions about future specification changes that 209 | relate to the goal of a comprehensive unified API surface for JS 210 | runtimes. 211 |
212 |221 | We do not want to fork or create new versions of existing 222 | specifications. If we think a new web platform API is needed, or if 223 | we think an existing spec needs changes, the goal is always for that 224 | change or addition to be developed in an existing venue (such as 225 | WHATWG or W3C). WinterTC will publish requirements on what those 226 | changes could be, and it will be up to that existing standards body 227 | to make these changes, possibly through members who are part of both 228 | WinterTC and that standards body. 229 |
230 |231 | We do not want to create new server-side APIs that overlap with 232 | existing web platform APIs. If there is a proposed or standardized 233 | web API that overlaps with the needs of server-side runtimes, the 234 | goal is always to investigate what changes (if any) it would need to 235 | be useful for servers; and once those changes have been incorporated 236 | to the specification, to eventually add the API to the minimum 237 | common set. 238 |
239 |240 | We are not trying to shift the focus of Web Platform APIs to only 241 | serve server-side runtimes. We want to see more API surface that is 242 | useful and works great both in browsers and on the server. 243 |
244 |255 | We initially started our work of working on this cross-runtime 256 | interoperability in May 2022 by creating the Web-interoperable 257 | Runtimes Community Group (nicknamed WinterCG) under the W3C. We 258 | chose to organize it as a W3C Community Group because it was open 259 | for anyone to participate, without needing to be a W3C member. 260 |
261 |262 | W3C Community Groups are set up to help people organize together, 263 | but they can't publish standards. And as WinterCG matured, and our 264 | goal expanded over time to include defining non-web APIs, it became 265 | clear that we needed to form some working group or technical 266 | committee, which can publish standards. Therefore, in December 2024 267 | we formed WinterTC (formally, TC55) as an Ecma International 268 | Technical Committee. When WinterTC is fully set up, all WinterCG 269 | work will move there, and then WinterCG will close. 270 |
271 |286 | // The group strives for rough consensus among contributors for changes 287 | // to work products. Instead of formal consensus, the editors for a 288 | // given work product make the judgement on whether a change is ready 289 | // for inclusion and has enough support from the group. The group 290 | // itself has a strict consensus policy outlined in the charter, which 291 | // is overseen by the group chairs. 292 | //
293 | //301 | WinterTC is controlled by the community of people who are working in 302 | it. The chair(s) of the group help moderate discussion and help 303 | guide the group towards consensus on proposed changes. 304 |
305 |306 | Currently the group consists of individual members, as well as 307 | members from the following organizations: 308 |
309 |327 | The work of WinterTC happens openly{" "} 328 | 332 | on Github 333 | 334 | , and most of the discussion and conversation around it happens in 335 | {" "} 336 | 340 | our Matrix room 341 | 342 | . Anyone is welcome to participate in both of them. 343 |
344 |345 | Only WinterTC delegates and invited experts can participate in 346 | WinterTC meetings, though. Delegates need to belong to an Ecma 347 | member organization, but anyone else who wants to be involved in 348 | WinterTC can become an invited expert. To do so, you can{" "} 349 | 353 | open an issue 354 | {" "} 355 | in the WinterTC admin repo. 356 |
357 |400 | Technical Committee on Web-interoperable Server Runtimes 401 |
402 | 403 |532 | The work of WinterTC (and its predecessor WinterCG) has included 533 | participation from: 534 |
535 |