├── 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 | 2 | 3 | 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 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /static/logos/fastly.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 10 | 13 | 19 | 24 | 27 | 33 | 36 | 37 | -------------------------------------------------------------------------------- /static/logos/shopify.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/logos/netlify.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /static/logos/deno.svg: -------------------------------------------------------------------------------- 1 | 4 | 5 | 7 | 8 | 9 | 12 | 13 | 14 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /static/logos/cloudflare.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 11 | 12 | 16 | 17 | 20 | 22 | 24 | 26 | 27 | 29 | 32 | 34 | 37 | 38 | 39 | 44 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /static/logos/igalia.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/logos/ecma.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/logos/nodejs.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/logos/suborbital.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /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 | 14 |
15 | 16 |

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 | 39 |