Repository navigation
[Tracking] WinterTC (TC55) Minimum Common Web API: gap analysis for boa_runtime #4988
Description
Activity
Hey @hansl following up on our Matrix conversation. I went through thel TC55 spec manually and cross-referenced it against the
boa_runtimesource to put together the gap analysis above.Based on the direction you outlined, here's my understanding of the full plan:
- Create a new
boa_tc55crate containing only TC55-mandated APIs - Migrate existing TC55-compliant APIs from
boa_runtime→boa_tc55 - Implement the missing TC55 APIs in
boa_tc55 boa_runtimere-exportsboa_tc55and keeps non-TC55 extras (likefs)- Future: move
boa_tc55to its own repo underboa-devat Boa 1.0
A few things I noticed while auditing the source:
URL.searchParams/createObjectURL/revokeObjectURLare currently stubbed and throw "not implemented"Event/EventTargetshould likely come first sinceAbortController,MessageChannel, and the entire Streams API alll depend on itWebAssembly.*probably wants a separate discussion (maybe i deducted because it looks more complex for now )
Note: I verified everything manually against the source, but if anything in the gap list looks off — either already implemented or something miscategorized will be update the issue anytime.
Looking forward to your thoughts on the plan and next steps
- Create a new
Hey @Tanush576, thanks for the interest in helping with this!
Right now I'm working on the initial architectural setup for this effort (specifically around introducing the
boa_tc55crate and defining how the APIs will be structured and registered). Since several of the APIs listed here depend on shared infrastructure and crate structure, I'm first discussing and finalizing that design i am currently working on it .I'm also implementing parts of this issue in parallel, so starting individual APIs right now might lead to duplication or mismatches with the planned architecture.
Once the crate structure and architecture are finalized, I'll break the remaining work into smaller issues
In the meantime, feel free to contribute to other open issues — there are quite a few good ones in the repo listed .
- added a commit that references this issue
on Mar 15, 2026 - added a commit that references this issue
on Mar 18, 2026 Progress Update
Phase 1 and Phase 2 are complete via #5105 (merged).
Theboa_wintertccrate is now established with all 10 module stubs, and the architecture has been validated.
Current Status
- Phase 1 →
boa_wintertccrate created - Phase 2 → Architecture finalised
- Phase 3 → Migration from
boa_runtime - Phase 4 → New API implementations
Phase 3 Plan Migration (No Regressions)
Migrate modules from
boa_runtimeinto correspondingboa_wintertcstubs as-is:console → boa_wintertc::console interval → boa_wintertc::timers (renamed) microtask → boa_wintertc::microtask clone → boa_wintertc::clone base64 → boa_wintertc::base64 abort → boa_wintertc::abort fetch → boa_wintertc::fetch text → boa_wintertc::encoding (renamed)Implementation Approach
Each module will be migrated in order of complexity:
base64,clone,microtask(self-contained, no internal dependencies)console,timers,abort( minor wiring adjustments )encoding(rename fromtextto align with TC55 naming )fetch(last, complex, has sub-files (headers.rs,request.rs,response.rs)
For each module:
- Copy source files into the corresponding
boa_wintertcstub - Update internal
usepaths - Add any missing dependencies to
boa_wintertc'sCargo.toml - Verify all existing tests pass
Notes
- This is a location change the same code moves from
boa_runtimetoboa_wintertc, no logic changes - All existing tests will be preserved and must pass after migration
- No TC55 compliance fixes during this phase ,compliance gaps are left for Phase 4
cc @jedel1043
- Does the implementation approach looks fine ?
- Once migration is done, should
boa_runtimeimmediately re-export fromboa_wintertc, or should the two crates temporarily coexist until Phase 4 is complete?
- Phase 1 →
Phase 3 (migration) progress update
Module ( boa_runtime->boa_wintertc)APIs Status base64atob,btoaMerged (#5418) clonestructuredClone(+store)In review (#5419) microtaskqueueMicrotaskIn review (#5419) interval->timerssetTimeout,clearTimeout,setInterval,clearIntervalIn review (#5419) consoleconsole.*W.I.P text->encodingTextEncoder,TextDecoderW.I.P abortAbortController,AbortSignalW.I.P fetchfetch,Request,Response,HeadersW.I.P url(partial)URLW.I.P - added a commit that references this issue
on Jul 17, 2026 - added 2 commits that reference this issue
on Jul 23, 2026 - added a commit that references this issue
on Jul 25, 2026
Overview
WinterTC (TC55) is an Ecma International Technical Committee working on a "Minimum Common Web API" standard — a baseline set of Web Platform APIs that all server-side JS runtimes (Deno, Bun, Cloudflare Workers, etc.) should implement for interoperability.
The TC55 spec (December 2025) defines the APIs that a conforming runtime must expose. This issue tracks the gap between what
boa_runtimecurrently implements and what TC55 requires.Implemented in
boa_runtimeconsole(optional extension)fetch/Headers/Request/Response(feature-gated, requires customFetcherimpl)TextEncoder/TextDecoder(registered by default)setTimeout/setInterval/clearTimeout/clearInterval(registered by default)structuredClone(registered by default)queueMicrotask(registered by default)URL(feature-gated —searchParams/createObjectURL/revokeObjectURLunimplemented)postMessage(optional extension, requires customMessageSenderimpl)AbortController/AbortSignalatob()/btoa()Missing TC55 APIs
DOM
Event/EventTargetHTML
CustomEvent/ErrorEvent/PromiseRejectionEventMessageChannel/MessagePort/MessageEventreportError()navigator.userAgentonerror/onunhandledrejection/onrejectionhandledselfURL
URLSearchParamsURLPatternFile API
Blob/FileXHR
FormDataEncoding
TextDecoderStream/TextEncoderStreamCompression
CompressionStream/DecompressionStreamStreams
ReadableStream+ReadableStreamDefaultController+ReadableStreamDefaultReaderReadableByteStreamController/ReadableStreamBYOBReader/ReadableStreamBYOBRequestWritableStream+WritableStreamDefaultController+WritableStreamDefaultWriterTransformStream+TransformStreamDefaultControllerByteLengthQueuingStrategy/CountQueuingStrategyWeb Crypto
Crypto/SubtleCrypto/CryptoKeyglobalThis.cryptoPerformance
Performance/globalThis.performanceWebIDL
DOMExceptionWebAssembly
WebAssembly.*interfaces and methodsNotes
Event/EventTargetshould be implemented first —AbortController,MessageChannel, streams and others all depend on itAbortSignalcurrently has a simplified event listener implementation without a fullEventTarget— implementingEvent/EventTargetwill make it fully spec-compliantWebAssemblylikely requires separate discussion given its integration complexity( not finalised)Ref: https://min-common-api.proposal.wintertc.org/