Added
-
Navigation API
toweb-sys#5247 -
Added
riscv64gc-unknown-linux-gnurelease artifacts.
#5265 -
Added
JsNullable<T>, modeling WebIDL nullable types (T | null). Both
nullandundefinedare treated as absent, per WebIDL's ECMAScript
conversion rules; the canonical empty value produced from Rust isnull.
web-sysnow usesJsNullable<T>instead ofJsOption<T>for nullable
types nested inside generics (e.g.Promise<GpuError?>from
GPUDevice.popErrorScope()), fixing spec-definednullresolutions being
treated as present values underJsOption<T>'s strict undefined-only
semantics.JsNullable<T>participates in the same upcast lattice as
JsOption<T>(including contravariant closure argument casts), and
additionally upcasts fromNulland fromJsOption<T>itself. Imported
extern types now also upcast intoJsOption<JsValue>and
JsNullable<JsValue>, so catch-all nullable closures can be used where a
typed callback is expected.
#5234
Changed
-
Emscripten output now marks public exports (free functions, classes, enums,
and namespace roots) with the__export: trueand__force: truesymbol
attributes on theiraddToLibraryentries, instead of mutating
EXPORTED_FUNCTIONSand pushing toextraLibraryFuncsat library-load time.
The$initBindgeninit closure is kept via__force: true, and private
symbols (including namespace leaves) carry neither attribute — they remain
reachable through__deps. Requires an emscripten with__export/__force
symbol-attribute support. -
Updated WebGPU bindings to the August 2026 spec, including the new
GPUCommandEncoder::copy_buffer_to_bufferoverloads andsetImmediates.
#5246 -
Unstable API overload names now elide name tokens shared by every overload
variant:LockManager::request_with_callbackis nowrequest, and
request_with_options_and_callbackis nowrequest_with_options.
#5246
Fixed
-
The
nameproperty of the JS error thrown forpanic=unwindis now set from
a string literal instead ofPanicError.name, so it survives minification.
#5260 -
Fixed Emscripten builds using pthreads failing to link.
#5254 -
__wbg_loadin web targets now throws a clear error including the HTTP
status and URL when given a non-ok fetchResponse, instead of surfacing a
misleading MIME-type or Wasm-magic-number error.
#5256 -
Restored
__stack_pointerwhen an exception unwinds out of a wasm export,
preventing repeatedpanic = "unwind"calls from leaking shadow-stack frames
until the shadow stack is exhausted and calls trap. Node reports
memory access out of bounds; poisoned instances can instead report
Module terminated.
#5244 -
slice_to_arrayon a&mutslice (which silently discarded JS's writes) or
on a slice with a generic element type is now a compile error, and strings
and arrays received by JS (e.g. aVec<String>return value) no longer make
a redundant copy of the freshly built value.
#5261 -
Fixed
asyncimports with non-JS-handle resolved types (e.g.
async fn f() -> u32;) silently producing garbage since 0.2.109: the
descriptor named the resolved type instead of thePromisehandle that
actually crosses the ABI.
#5249 -
Fixed
catchimports returningi64/u64throwing aTypeError(and
panicking in__wbindgen_exn_store) when the JS import throws, since the
handleErrorcatch path returnedundefinedwhich cannot be converted to
a Wasmi64.
#5238 -
js_namespaceis now part of an imported function's and imported static's
generated shim name. Two imports with identical Rust signatures that differed
only in theirjs_namespacehashed to the same__wbg_<name>_<hash>
symbol, so they were treated as one binding and one of the two call sites
silently invoked the wrong JS value.
#5250 -
Macro hygiene fixes -
slice_to_arraynow works in#![no_std]crates.
Generated code no longer namescoreorstdunqualified.
#5251 -
Fixed length prefixes in descriptor strings to count
chars rather than
UTF-8 bytes, so non-ASCII names injs_name/typescript_typeno longer
panic the CLI or mis-bind the generated bindings.
#5248 -
Fixed threaded Wasm memory layout to reserve wasm-bindgen's internal thread
page after the module's original initial memory instead of at__heap_base,
avoiding overlap with allocators that resolve__heap_base/__heap_endat
link time and treat that range as preexisting heap space.
#5225 -
Emscripten output now reaches wasm exports through emscripten's
wasmExports
object using bracket (string-literal) access (wasmExports['__wbindgen_start'])
instead of a localwasmalias with dot access.wasmExports['name']is the
form emcc's DCE graph roots and its import/export minifier renames in the JS
and the wasm together, so the glue now survives and stays consistent under
-O3/-Os(previously the export names were minified without updating the JS
call sites, e.g.__wbindgen_start is not defined). -
The emscripten detection marker static is no longer leaked as public API.
#5220
#5222