Runtime gaps
Known cross-runtime gaps in gossamer’s bindings. Per-binding doc comments flag these inline; this page is the consolidated view.
The minimum runtime versions where gossamer’s test suite passes are visible as badges on the README. Older versions than those are considered unsupported.
Bun
readable_stream.from_yielder/from_async_yielder— panics via the FFI’sensureMethodguard.ReadableStream.fromis not implemented on Bun. Tracked at oven-sh/bun#3700.text_decoder.build/text_decoder_stream.buildwith legacy single-byte encodings — returnError(UnsupportedEncoding)for 16 encodings Bun’s ICU data omits (iso-8859-2,-4,-5,-10,-13,-14,-15,-16,koi8-r,macintosh,windows-1250,-1251,-1254,-1256,-1258,x-mac-cyrillic). Node and Deno construct them. UTF-8 and both UTF-16 byte orders work everywhere.crypto/subtle.derive_bitswithlength: 0— resolves with the full shared secret instead of an emptyBitArray. Node and Deno resolve with an empty result. Fixed upstream in oven-sh/bun#32819; not yet in a Bun release.fetch_extra.response_type— returnsResponseDefaultfor responses fetched from synthetic sources (e.g. a fetcheddata:URL) where the Fetch spec, Node, and Deno returnResponseBasic.plural_rules.resolved_options— itslocalefield keeps full input tags like"en-US". Node and Deno normalize the same input to"en". Other Intl formatters (number_format, etc.) keep"en-US"across all three.date_time_format.format_to_partsfor the Chinese calendar (zh-u-ca-chinese) with year-only options — on macOS, omits theRelatedYearsegment that every other runtime/OS pairing emits beforeYearName(Bun’s JavaScriptCore links the system ICU on macOS and bundles its own on Linux). Option sets that include a month or day emitRelatedYeareverywhere.date_time_format.format_range— uses regular U+0020 spaces around the en dash. Node and Deno use thin (U+2009) spaces. Assert via substring rather than strict equality if you compare formatted output across runtimes.web_socket.infofor sockets built fromhttp:/https:URLs — theurlfield keeps the original scheme where Node and Deno report the normalizedws:/wss:URL.
Deno
blob.revoke_object_url— Deno throws on unparseable URL strings where the spec, Node, and Bun silently no-op. The FFI catches the throw, so the binding is a silent no-op on every runtime.
Node.js
abort_signal.timeout(duration)— panics withRangeError: The value of "delay" is out of rangefor durations longer than4_294_967_295ms (~49.7 days, the u32 max). Deno and Bun accept values up toInt’s safe range.
All three runtimes
plural_rules.selectwithBigInt— all three runtimes throwTypeErrordespite the ES2023 spec allowingBigIntinputs. gossamer doesn’t expose theBigIntoverload ofselect; convert viabig_int.to_intfirst when the value fits inInt’s safe range.
Browsers
gossamer’s source targets the current evergreen baseline (Chromium, Firefox, Safari). Browser-specific gaps would be noted here as they’re encountered. CI verifies against Node.js, Deno, and Bun only.
See also
- Conventions — gossamer’s API patterns.
- Coverage — what gossamer wraps.
- Contributing — how gossamer’s FFI handles divergence (Pattern 1: spec default at the FFI boundary; Pattern 2: diagnostic FFI throw).