Releases: wasm-bindgen/wasm-bindgen
Release list
0.2.126
Changed
- Emscripten output now hoists every clean export (free functions, classes,
enums, plus their finalization registries and string-enum tables) out of the
$initBindgeninit closure into its own top-leveladdToLibrarysymbol and
self-registers it intoEXPORTED_FUNCTIONS. emscripten then emits the clean
API (add,Counter, ...) as named ESM exports under-sMODULARIZE=instance
and asModule.<name>properties (via each symbol's__postset) in factory
mode, with no extra sidecar files. Namespaced exports are reached through
their namespace root (e.g.app), assembled in the root symbol's__postset.
User module/inline-js imports are now wired asaddToLibraryshims (they were
previously dropped, since emcc resolves imports only againstenv), and their
ESM-imported bindings are__wbg_-prefixed to avoid colliding with emcc
runtime names such asModule/HEAP8.
#5210
Fixed
-
The descriptor interpreter now follows emscripten
invoke_*trampolines.
emscripten's exception/longjmp lowering rewrites direct calls into indirect
calls through the function table wrapped in importedinvoke_*(fnptr, ..args)
helpers, including the describe helpers a descriptor function must reach. The
interpreter resolvesfnptragainst the reconstructed function table, forwards
the trailing arguments, and evaluates the surrounding "did it throw?" control
flow (if/else,loop,br_table), so descriptors are interpreted
correctly on emscripten builds with unwinding/longjmp enabled.
#5215 -
Relaxed alignment requirement for 8-byte types.
#5204
0.2.125
Added
- Added the
--force-enable-abort-handlerCLI flag, which emits the hard-abort
detection andset_on_abortmachinery onpanic=abortbuilds. With
panic=unwindthis machinery is generated automatically; the flag does
nothing there.
#5191
Changed
- Made the internal
__wbindgen_destroy_closureexport private in the Rust API.
#5196
0.2.123
Added
-
Added the
maxAgeattribute to theCookieInitdictionary inweb-sys,
matching the current Cookie Store API specification.
#5169 -
The js-sys futures codegen opt-in can now also be enabled via the
WASM_BINDGEN_USE_JS_SYS=1environment variable, in addition to
--cfg=wasm_bindgen_use_js_sys. This works on stable when--target
is in use, where Cargo does not propagate the cfg to host proc-macros.
#5164
Changed
JsOption<T>now treats onlyundefinedas empty, aligning it with
TypeScript's strictT | undefinedsemantics and withOption<T>'s wire
shape (None↔undefined). Previouslyis_empty,as_option,
into_option,unwrap,expect,unwrap_or_default, and
unwrap_or_elsetreated bothnullandundefinedas absent; JSnull
is now a distinct present value. Theimpl<T> UpcastFrom<Null> for JsOption<T>is removed (Undefinedstill models absence), and the
Debug/Displayabsent placeholder changed from"null"to
"undefined". Code relying onnull → Noneshould returnundefined
from the JS side, or check explicitly with
val.as_option().filter(|v| !v.is_null()).
#5170
Fixed
-
Removed invalid
js_sys::Array<T>tojs_sys::ArrayTuple<(...)>upcasts.
ArrayTupleencodes a fixed tuple arity, while a plain JavaScript array does
not prove that arity statically. -
Fixed incorrect variance in
&mutreference upcasting.&mut Tupcasts
were covariant in the pointee, so a&mut Tcould be widened to a&mut
of a supertype and used to write back a value the original type would not
accept, leaving a reference whose static type no longer matches the value
it points to. Mutable references are now invariant in their pointee:
&mut Tonly upcasts to&mut Targetwhen bothTarget: UpcastFrom<T>
andT: UpcastFrom<Target>hold. This rejects the invalid widening but is
a breaking change for callers that relied on widening&mutreferences.
#5176 -
Fixed WASI targets (
wasm32-wasip1/wasm32-wasip2) emitting unresolved
__wbindgen_placeholder__imports, which broke component linking. The
codegen and runtime gates now excludetarget_os = "wasi"(restoring the
pre-0.2.115 stub behavior), including thepanic = "unwind"paths in
wasm-bindgen-futures.
#5175 -
Fixed a panic ("Unhandled load width 8") in the descriptor interpreter when
processing-Cinstrument-coverage-instrumented modules, unblocking
cargo llvm-cov --target wasm32-unknown-unknownfor crates whose describe
helpers get instrumented.
#5179 -
Fixed
mainsilently never running on wasm64 for bin crates.
#5181
0.2.122
Notices
-
Threading support now requires
-Clink-arg=--export=__heap_baseto be set
inRUSTFLAGSfor nightly toolchains from 2026-05-06 onward, after
rust-lang/rust#156174
removed the implicit__heap_base/__data_endexports onwasm*
targets. Atomics CI, CLI reference tests, and thenodejs-threads,
raytrace-parallel, andwasm-audio-workletexamples have been
updated to pass--export=__heap_baseexplicitly. The flag is
backward-compatible with older nightlies. -
-Cpanic=unwindon wasm targets now emits modern (exnref) exception
handling by default after
rust-lang/rust#156061,
and requires Node.js 22.22.3+ (forWebAssembly.JSTag). Legacy EH wasm
can still be produced on current nightlies by adding
-Cllvm-args=-wasm-use-legacy-ehtoRUSTFLAGS; Node.js 20 may be
supported with legacy exception handling, with a tracking issue in
#5151.
Added
-
Implemented
TryFromJsValueforVec<T>whereT: TryFromJsValue.
A JS value converts when it is a realArray(perArray.isArray)
and every element converts viaT::try_from_js_value. This composes
recursively (Vec<Vec<String>>,Vec<Option<T>>) and works for any
Twith aTryFromJsValueimpl, including primitives,String,
JsValue, andJsCasttypes. Array-likes (objects withlengthand
numeric indices) are intentionally rejected to mirror the static ABI
representation used byjs_value_vector_from_abi. -
New
extends_js_classandextends_js_namespaceattributes on
exported structs to allow defining the parentjs_classname when
it has been customized byjs_nameand the parent's ownjs_namespace
as well in turn. New validation is added at code generation time that
will now catch these cases instead of emitting invalid code. Example:#[wasm_bindgen(js_name = "Animal", js_namespace = zoo)] pub struct AnimalImpl { /* ... */ } #[wasm_bindgen( extends = AnimalImpl, extends_js_class = "Animal", extends_js_namespace = zoo, )] pub struct DogImpl { /* ... */ }
Changed
-
When an exported struct uses
js_namespace, the corresponding value
must now be repeated on everyimplblock. Previously the impl-side
defaults silently worked resulting in inconsistent emission. Example:// Before: #[wasm_bindgen(js_namespace = "default")] pub struct Counter { /* ... */ } #[wasm_bindgen] // worked, but fragile impl Counter { /* ... */ } // After: #[wasm_bindgen(js_namespace = "default")] pub struct Counter { /* ... */ } #[wasm_bindgen(js_namespace = "default")] // now required impl Counter { /* ... */ }
To ease this transition for
js_namespaceusage, diagnostic
messages now include hints for missing namespaces for easier
fixing.
Fixed
-
Fixed the descriptor interpreter panicking on
BrandBrIf
instructions emitted by recent nightly compilers when building with
panic=unwind.
#5158 -
Emscripten output now works against vanilla upstream emscripten without
requiring a fork. Dependency tracking,HEAP_DATA_VIEWsetup,
function-decl intrinsic inlining, catch-wrapper gating, and imported
global handling have all been corrected; ESM imports
(#[wasm_bindgen(module = "...")]and snippets) are emitted to a
sidecarlibrary_bindgen.extern-pre.jsconsumers pass to emcc via
--extern-pre-js; namespaced exports (js_namespace = [...]on a
struct/impl) now attach toModule.<segments>instead of emitting
top-levelexport const(which emcc's library evaluator rejects);
the generated.d.tsfor namespaced exports is now valid TypeScript
(mangled identifiers stay module-internal viadeclare class/
declare enum/declare functionplusexport { BindgenModule };
to mark the file as a module; no spurious unqualifiedCalc:
property onBindgenModulefor namespaced items; namespace shapes
land as plain interface members (app: { math: { Calc: typeof app__math__Calc } };) instead of the previously-emittedexport let app: { ... };which was invalid TS1131 syntax inside an
interface body).
#5156 -
Fixed a duplicate phantom class being emitted for an exported struct
renamed viajs_name(Rust ident != JS class name) and/or placed in a
js_namespace, when the struct crosses the boundary as aJsValue
(e.g. via.into()). TheWrapInExportedClass/UnwrapExportedClass
imports were keyed by the Rust ident rather than the qualified JS name
thatexported_classesis keyed by (a regression from #5154), so a
fresh empty class entry was minted and emitted alongside the real one,
with afree()referencing a nonexistent wasm export. Riding the
same release's #5154 wire-format bump, the now-vestigialrust_name
field is dropped from the schema and the namespace-qualified name is
no longer cached onAuxStruct,AuxEnum, orExportedClass
(derived on demand from(name, js_namespace)), collapsing three
fallback chains that only papered over the pre-#5154 keying.
0.2.121
Added
-
Added the
slice_to_arrayattribute for imported JS functions,
which makes a&[T](orOption<&[T]>) argument arrive on the JS
side as a plainArrayrather than a typed array — without
changing the Rust-side&[T]signature. Useful when binding JS
APIs that takeT[]rather thanTypedArray<T>. For primitive
element kinds the wire is the same zero-copy borrow used by plain
&[T], with the JS-side shim wrapping the view inArray.from(...)
to materialise theArray— no extra allocation. ForString,
JsValue, and JS-imported element types the Rust side builds a
fresh[u32]index buffer that JS reads and frees, with per-element
&T -> JsValue(refcount bump for handle-shaped types). NoT: Clonebound is required. The attribute can be set per-fn
(#[wasm_bindgen(slice_to_array)] fn ...) or per-block on an
extern "C" { ... }declaration to apply to every imported function
in that block.&[ExportedRustStruct]remains unsupported (use
ownedVec<T>for that). Has no effect on exported functions;
default&[T](typed-array view / memory borrow) and owned
Vec<T>semantics are unchanged for callers that didn't opt in.
See the
slice_to_arrayguide page.
#5145 -
Added
js_sys::AggregateErrorbindings (constructor,errorsgetter, and
new_with_message/new_with_optionsoverloads).AggregateErrorrepresents
multiple unrelated errors wrapped in a single error, e.g. as thrown by
Promise.anywhen all input promises reject, along withjs_sys::ErrorOptions,
accepted by built-in error constructors.ErrorOptions::new(cause)
constructs an instance pre-populated withcause, andget_cause/
set_causeprovide typed access to the property. All standard error
constructors that previously took only amessage(EvalError,
RangeError,ReferenceError,SyntaxError,TypeError,URIError,
WebAssembly.CompileError,WebAssembly.LinkError,
WebAssembly.RuntimeError) now expose anew_with_options(message, &ErrorOptions)overload, andErrorgains
new_with_error_options(message, &ErrorOptions)alongside the existing
untypednew_with_options.AggregateError::new_with_optionsalso takes
&ErrorOptions.
#5139 -
Added inheritance for Rust-exported types: an exported struct may
declare#[wasm_bindgen(extends = Parent)]to inherit from another
exported#[wasm_bindgen]struct. The macro injects a hidden
parent: wasm_bindgen::Parent<Parent>field (a refcounted cell around
the parent value) and emitsclass Child extends Parentin the
generated JS /.d.ts. The child gets anAsRef<Parent<Parent>>impl
for the direct parent, and threads per-class pointer slots through
the wasm ABI so thatinstanceof Parentis true and parent methods
dispatch soundly via the JS prototype chain. From inside child
methods, parent data is reached viaself.parent.borrow()/
self.parent.borrow_mut(). See the new
extendsguide page.
#5120 -
Added
js_sys::FinalizationRegistrybindings (constructor,register,
register_with_token, andunregister). The cleanup callback parameter
is typed as&Function<fn(JsValue) -> Undefined>, so closures created via
Closure::newcan be passed usingFunction::from_closure(for owned
closures retained by JS) orFunction::closure_ref(for borrowed scoped
closures). Pairs with the existingjs_sys::WeakRefbindings.
#5140 -
Added support for well-known symbols in
js_name,getter, and
settervia the explicit bracket-string form
"[Symbol.<name>]". This works for imported and exported methods,
fields, getters, and setters. For example,
#[wasm_bindgen(js_name = "[Symbol.iterator]")]on an exported method
generates[Symbol.iterator]() { ... }on the generated JS class, and
the same syntax works forgetter/setterand for imported items.
#4230 -
Added level 2 bindings for
ViewTransitiontoweb-sys.
#5138 -
Add support for dynamic unions: a
#[wasm_bindgen]enum that mixes string-literal
variants with single-field tuple variants is now exported as an untagged TypeScript
union and dispatched dynamically at the JS↔Rust boundary. The new enum-level
#[wasm_bindgen(fallback)]attribute makes the last tuple variant an
unconditional catch-all, supporting unions whose trailing variant has no
runtime check (e.g., interface-only imports). String enums and dynamic
unions now emitexport type(was baretype) so the alias is a named
export, and both honour theprivateflag to suppress the keyword.
#4734
#2153
#2088
Fixed
-
From<Promise<T>> for JsFuture<T>andIntoFuture for Promise<T>now
accept anyT: FromWasmAbi(rather thanT: JsGeneric), letting
importedasync fns return dynamic-union enums. -
TryFromJsValuefor C-style enums no longer accepts non-numeric values
via JS unary+coercion. Previously callingdyn_into::<MyEnum>()on
a string would silently coerce it via+"foo"(yieldingNaN, then
NaN as u32 = 0) and could match a discriminant by accident; the
conversion now returnsNonefor any value that is not a JS number.
#4734 -
Fix compilation failure with
no_std+release
#5134 -
Raw identifiers (
r#name) on enums, enum variants, extern types, statics,
andimplblocks no longer leak ther#prefix into generated JS / TS
output and shim names. The Rust-side identifier and the JS-side name are
now tracked separately for enum variants, and all known identifier
fallback paths applyIdent::unraw()so e.g.
pub enum r#Enum { r#A }generatesEnum.Ainstead of producing
syntactically invalid JS.
#4323 -
Using the
-C panic=unwindoption when building for the bundler target
would produce invalid JS.
#5142
Changed
js_sys::DataViewnow implements thejs_sys::TypedArraytrait. A
FIXMEnotes that the trait should be renamed toArrayBufferViewin
the next major release to better reflect the WebIDL spec name covering
bothDataViewand the typed-array types.
#5135
0.2.120
Added
-
Added support for the
wasm64-unknown-unknowntarget (memory64 / wasm64).
usize/isizeand raw pointers are now lowered through anf64JS
number ABI on wasm64 (matching the existing convention used forOption<u32>
etc. on wasm32), with the CLI inspecting the module's memory type to pick
the right codegen path. Includes a dedicatedwasm64CI job and test
suite covering the new ABI paths.
#5004 -
Promise ergonomics:
Promise::all_tupleandPromise::all_settled_tuple
for heterogeneous concurrent awaits (arity 1..=8, destructure via
.into_tuple()), and a newwasm_bindgen::IntoJsGenerictrait underpinning
typed-Arrayinference (with codegen-emitted identity impls and a
#[wasm_bindgen(no_into_js_generic)]opt-out for types likeJsClosure).
Also re-exportsJsGenericfrom the prelude. Typed collection on
js_sys::Array<T>is exposed as the inherent constructor
Array::<T>::from_iter_typed(and companionextend_typed), inferringT
from the iterator item viaIntoJsGeneric. The stableFromIterator/
Extendimpls onArray(=Array<JsValue>) bound byAsRef<JsValue>
are preserved, so existing.collect::<Array>()call sites keep compiling
unchanged. Fixes #5042.
#5121,
#5125 -
Added
wasm_bindgen::instance()to return the current
WebAssembly.Instance. The generated JS glue retains the
instantiatedWebAssembly.Instance.
#5118 -
Added a
--cfg=wasm_bindgen_use_js_sysopt-in that makes async macro codegen
usejs_sys::futuresinstead ofwasm_bindgen_futures, dropping the need
forwasm-bindgen-futureswhen the crate already depends onjs-sys. A cfg
is used rather than a Cargo feature so the choice stays scoped to the crate
that opts in.
#5112
#5127
Changed
- Simplified generated
web-sysbindings by omitting redundant
#[wasm_bindgen]attributes when they match wasm-bindgen defaults, including
structural method annotations and matchingjs_nameentries. The
#[wasm_bindgen]attribute parser now also accepts string-literal forms for
extends,static_method_of, andvendor_prefix(alongside the existing
bare-path/ident syntax), and the generator emits these arguments along with
js_nameas string literals sorustfmtcan format the generated
#[wasm_bindgen(...)]attributes uniformly.
#5122
Fixed
-
Fixed namespaced export identifiers in generated JS/TS to use qualified names
consistently, resolving order-dependent codegen issues across platforms. Also
fixedVec<T>types in TS signatures to resolve through the identifier map.
#5106 -
Fixed
wasm-bindgen-test-runnertreating ChromeDriver stderr warnings as
startup failures on macOS, causing a restart loop until timeout. The runner
no longer uses stderr output to determine if a driver has failed; instead a
per-attempt timeout detects stuck drivers and retries on a new port.
#5111
0.2.118
Added
-
Added
Error::stack_trace_limit()andError::set_stack_trace_limit()bindings
tojs-sysfor the non-standard V8Error.stackTraceLimitproperty.
#5082 -
Added support for multiple
#[wasm_bindgen(start)]functions, which are
chained together at initialization, as well as a new
#[wasm_bindgen(start, private)]to register a start function without
exporting it as a public export.
#5081 -
Reinitialization is no longer automatically applied when using
panic=unwind
and--experimental-reset-state-function, instead it is triggered by any
use of thehandler::schedule_reinit()function underpanic=unwind,
which is supported from within theon_aborthandler for reinit workflows.
Renamedhandler::reinit()tohandler::schedule_reinit()and removed
theset_on_reinit()handler. The__instance_terminatedaddress
is now always a simple boolean (0= live,1= terminated).
#5083 -
handler::schedule_reinit()now works underpanic=abortbuilds. Previously
it was a no-op; it now sets the JS-side reinit flag and the next export call
transparently creates a freshWebAssembly.Instance.
#5099
Changed
- MSRV bump from 1.71 to 1.76 for the CLI, and 1.82 to 1.86 for the API
#5102
Fixed
-
ES module
importstatements are now hoisted to the top of generated JS
files, placed right after the@ts-self-typesdirective. This ensures
valid ES module output sinceimportdeclarations must precede other
statements.
#5103 -
Fixed two CLI issues affecting WASM modules built by rustc 1.94+. First,
a panic (failed to find N in function table) caused by lld emitting element
segment offsets asglobal.get $__table_baseor extended const expressions
instead of plaini32.const Nfor large function tables; the fix adds a
const-expression evaluator inget_function_table_entryand guards against
integer underflow in multi-segment tables. Second, the descriptor interpreter
now routes all global reads/writes through a singleglobalsHashMap seeded
from the module's own globals, and mirrors the module's actual linear memory
rather than a fixed 32KB buffer, so the stack pointer's real value is valid
without any override. This fixes panics likefailed to find 32752 in function tablecaused byGOT.func.internal.*globals being misidentified as the
stack pointer.
#5076
#5080
#5093
#5095
0.2.117
Fixed
- Fixed a regression introduced in #5026 where stable
web-sysmethods that
accept a union type containing a[WbgGeneric]interface (e.g.
ImageBitmapSource, which includesVideoFrame) incorrectly applied typed
generics to all union expansions rather than only those whose argument type
is itself[WbgGeneric]. In practice this causedWindow::create_image_bitmap_with_*
and the correspondingWorkerGlobalScopeoverloads to return
Promise<ImageBitmap>instead ofPromise<JsValue>for the stable
(non-VideoFrame) call sites, breakingJsFuture::from(promise).await?.
#5064
#5073
0.2.116
Added
- Added
js_sys::Float16Arraybindings,DataViewfloat16 accessors using
f32, and raw[u16]helper APIs for interoperability with binary16
representations such ashalf::f16.
#5033
Changed
-
Updated to Walrus 0.26.1 for deterministic type section ordering.
#5069 -
The
#[wasm_bindgen]macro now emits&mut (impl FnMut(...) + MaybeUnwindSafe)
/&(impl Fn(...) + MaybeUnwindSafe)for raw&mut dyn FnMut/&dyn Fn
import arguments instead of a hidden generic parameter and where-clause. The
generated signature is cleaner and theMaybeUnwindSafebound is visible
directly in the argument position. The ABI and wire format are unchanged.
When building withpanic=unwind, closures that capture non-UnwindSafe
values (e.g.&mut T,Cell<T>) must wrap them inAssertUnwindSafebefore
capture; on all other targetsMaybeUnwindSafeis a no-op blanket impl.
#5056
0.2.115
Added
-
console.debug/log/info/warn/erroroutput from user-spawnedWorkerand
SharedWorkerinstances is now forwarded to the CLI test runner during
headless browser tests, just like output from the main thread. Works for
blob URL workers, module workers, URL-based workers (importScripts), nested
workers, and shared workers (including logs emitted before the first port
connection). Non-cloneable arguments are serialized viaString()rather
than crashing the worker. The--nocaptureflag is respected.
#5037 -
js_sys::Promise<T>now implementsIntoFuture, enabling direct.awaiton
any JS promise without a wrapper type. Thewasm-bindgen-futuresimplementation
has been moved intojs-sysbehind an optionalfuturesfeature, which is
activated automatically whenwasm-bindgen-futuresis a dependency. All
existingwasm_bindgen_futures::*import paths continue to work unchanged via
re-exports.js_sys::futuresis also available directly for users who want
promise.awaitwithout depending onwasm-bindgen-futures.
#5049 -
Added
--target emscriptensupport, generating alibrary_bindgen.jsfile
for consumption by Emscripten at link time. Includes support for futures,
JS closures, and TypeScript output. A new Emscripten-specific test runner is
also included, along with CI integration.
#4443 -
Added
VideoFrame,VideoColorSpace, and related WebCodecs dictionaries/enums toweb-sys.
#5008 -
Added
wasm_bindgen::handlermodule withset_on_abortandset_on_reinit
hooks forpanic=unwindbuilds.set_on_abortregisters a callback invoked
after the instance is terminated (hard abort, OOM, stack overflow).
set_on_reinitregisters a callback invoked afterreinit()resets the
WebAssembly instance via--experimental-reset-state-function. Handlers are
stored as Wasm indirect-function-table indices so dispatch is safe even when
linear memory is corrupt.
Changed
-
Replaced per-closure generic destructors with a single
__wbindgen_destroy_closure
export.
#5019 -
Refactored the headless browser test runner logging pipeline for dramatically improved
performance (>400x faster on Chrome, >10x on Firefox, ~5x on Safari). Switched to
incremental DOM scraping withtextContent.slice(offset), append-only output semantics,
unified log capture across all log levels on failure, and browser-specific invisible-div
optimizations (display:nonefor Chrome/Firefox,visibility:hiddenfor Safari).
#4960 -
TTY-gated status/clear output in the test runner shell to avoid
\rcontrol-character
artifacts in non-interactive (CI) environments.
#4960 -
Added
bench_console_log_10mbbenchmark alongside the existing 1MB benchmark for the
headless test runner. The main branch cannot complete this benchmark at any volume.
#4960 -
Updated to Walrus 0.26
#5057
Fixed
-
Fixed argument order when calling multi-parameter functions in the
wasm-bindgeninterpreter by reversing the args collected from the stack.
#5047 -
Added support for per-operation
[WbgGeneric]in WebIDL, restoring typed
generic return types (e.g.Promise<ImageBitmap>) forcreateImageBitmapon
WindowandWorkerGlobalScopethat were lost after theVideoFrame
stabilization.
#5026 -
Fixed missing
#[cfg(feature = "...")]gates on deprecated dictionary builder
methods and getters for union-typed fields (e.g.{Open,Save,Directory}FilePickerOptions::start_in()),
and fixed per-setter doc requirements to list each setter's own required features.
#5039 -
Fixed
JsOption::new()to useundefinedinstead ofnull, to be compatible withOption::Noneand JS default parameters.
#5023 -
Fixed unsound
unsafetransmutes inJsOption<T>::wrap,as_option, andinto_option
by replacingtransmute_copywithunchecked_into(). Also tightened theJsGeneric
trait bound andJsOption<T>impl block to requireT: JsGeneric(which impliesJsCast),
preventing use with arbitrary non-JS types.
#5030 -
Fixed headless test runner emitting
\rcarriage-return sequences in non-TTY environments,
which polluted captured logs in CI and complicated output-matching tests.
#4960 -
Fixed headless test runner printing incomplete and out-of-order log output on test failures
by merging all five log levels into a single unified output div.
#4960 -
Fixed large test outputs (10MB+) causing oversized WebDriver responses that were either
extremely slow or crashed completely, by switching to incremental streaming output collection.
#4960 -
Fixed a duplciate wasm export in node ESM atomics, when compiled in debug mode
#5028 -
Fixed a type inference regression (
E0283: type annotations needed) introduced
in v0.2.109 where the stableFromIteratorandExtendimpls onjs_sys::Array
were changed fromA: AsRef<JsValue>toA: AsRef<T>. Because#[wasm_bindgen]
generates multipleAsRefimpls per type, the compiler could not uniquely resolve
T, breaking code likeArray::from_iter([my_wasm_value])without explicit
annotations. The stable impls are restored toA: AsRef<JsValue>(returning
Array<JsValue>); the genericA: AsRef<T>forms remain available under
js_sys_unstable_apis.
#5052 -
Fixed
skip_typescriptnot being respected when usingreexport, causing
TypeScript definitions to be incorrectly emitted for re-exported items marked
with#[wasm_bindgen(skip_typescript)].
#5051