Added
-
Navigation API to
web-sys#5247 -
Added
riscv64gc-unknown-linux-gnurelease artifacts. #5265 -
Added
JsNullable<T>, modeling WebIDL nullable types (T | null). Bothnullandundefinedare 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?>fromGPUDevice.popErrorScope()), fixing spec-definednullresolutions being treated as present values underJsOption<T>'s strict undefined-only semantics.JsNullable<T>participates in the same upcast lattice asJsOption<T>(including contravariant closure argument casts), and additionally upcasts fromNulland fromJsOption<T>itself. Imported extern types now also upcast intoJsOption<JsValue>andJsNullable<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 mutatingEXPORTED_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/__forcesymbol-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, andrequest_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 reportsmemory access out of bounds; poisoned instances can instead reportModule 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 thehandleErrorcatch 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
wasmExportsobject 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