WinterCG
https://wintercg.org/static/logo.svg
Web-interoperable Runtimes Community Group
JavaScript の仕様は主に ECMAScript(言語仕様)と Web 標準仕様で構成されている。非ブラウザランタイムにも Web 標準 API が取り入れられるようになってきており、これは SSR の台頭によりアプリケーションの JavaScript コードの実行場所がサーバーサイドとクライアントサイドで境界が曖昧になり、サーバーサイドでも有用な Web API が実装されるとコードの共有化が可能になるため広がっていったためと理解している。 ところで Web 標準 API はあくまでブラウザで実行されることを考慮しているため、非ブラウザランタイムで扱うには機能が十分に提供できないことがある(特に Fetch API)。
この問題に取り組むために生まれたのが WinterCG。基本的に W3C や WHATWG の既存のワークストリームで検討することを第一としているが、ブラウザでは特に必要のないと結論付けられた仕様については WinterCG で独自に仕様を策定することとなる。 Node.js、Deno、Cloudflare、Vercel などが参加している。議事録については GitHub issues を見ればよさそう。
なお Bun は参加していない。
TC55 server-side API standardization (WinterTC)
W3C Community Group では標準仕様を発行できないため、W3C Working Group もしくは Ecma Technical Committee として出そうと議論されていた。現状 TC55 として Ecma International で仕様を発行するように動いている。
現状の主要な仕様一覧
Runtime Keys
非ブラウザランタイムを一意に定めるためのキー。
Vercel が edge や edge-runtime という強い名前で登録しようとして反対され、最終的に edge-light になったのが面白かった。
Minimum Common Web Platform API
非ブラウザランタイムが実装すべき Web 仕様 API がまとめられている。
ブラウザランタイムとの差分がある場合は特筆されることとなる。例えば非ブラウザには HTMLFormElement がないため、FormData のコンストラクタが少し異なることが書かれている。
リポジトリでは Node.js が独自で実装している AsyncLocalStorage についても規定している。この機能については TC39 に Async Context として提案されてもいる。
Fetch
CORS がなかったり、Cookie Store がなかったりと特にブラウザと差分の大きい Fetch API についてまとめている仕様。
Sockets API
TCP 接続する Socket API の仕様。
Web Crypto Streams
Web Crypto API にストリーム機能を入れる仕様。W3C に提出しようと動いている。