-
Allow exporting functions named
default
. Throw error in wasm-bindgen-cli if --target web and an exported symbol is nameddefault
. #3930 -
Added support for arbitrary expressions when using
#[wasm_bindgen(typescript_custom_section)]
. #3901 -
Implement
From<NonNull<T>>
forJsValue
. #3877 -
Add method
copy_within
for TypedArray, add methodsfind_last
,find_last_index
for Array. #3888 -
Added support for returning
Vec
s from async functions. #3630 -
Added bindings for
InputDeviceInfo
andMediaTrackCapabilities
. #3935 -
Add bindings for
RTCRtpReceiver.getCapabilities(DOMString)
method. #3941 -
Add bindings for
VisualViewport
. #3931 -
Add bindings for
queueMicrotask
. #3981
-
Stabilize Web Share API. #3882
-
Generate JS bindings for WebIDL dictionary setters instead of using
Reflect
. This increases the size of the Web API bindings but should be more performant. Also, importing getters/setters from JS now supports specifying the JS attribute name as a string, e.g.#[wasm_bindgen(method, setter = "x-cdm-codecs")]
. #3898 -
Greatly improve the performance of sending WebIDL 'string enums' across the JavaScript boundary by converting the enum variant string to/from an int. #3915
-
Use
table.fill
when appropriate. #3446
-
Copy port from headless test server when using
WASM_BINDGEN_TEST_ADDRESS
. #3873 -
Fix
catch
not being thread-safe. #3879 -
Fix MSRV compilation. #3927
-
Fix
clippy::empty_docs
lint. #3946 -
Fix missing target features in module when enabling reference types or multi-value transformation. #3967
-
Fixed Rust values getting GC'd while still borrowed. #3940
-
Fixed Rust values not getting GC'd if they were created via. a constructor. #3940
-
Fix triggering
clippy::mem_forget
lint in exported structs. #3985
Released 2024-03-04
-
Add bindings for
RTCPeerConnectionIceErrorEvent
. #3835 -
Add bindings for
CanvasState.reset()
, affectingCanvasRenderingContext2D
andOffscreenCanvasRenderingContext2D
. #3844 -
Add
TryFrom
implementations forNumber
, that allow losslessly converting from 64- and 128-bits numbers. #3847 -
Add support for
Option<*const T>
,Option<*mut T>
andNonNull<T>
. #3852 #3857 -
Allow overriding the URL used for headless tests by setting
WASM_BINDGEN_TEST_ADDRESS
. #3861
-
Make .wasm output deterministic when using
--reference-types
. #3851 -
Don't allow invalid Unicode scalar values in
char
. #3866
Released 2024-02-06
-
Added bindings for the
RTCRtpTransceiver.setCodecPreferences()
and unstable bindings for theRTCRtpEncodingParameters.scalabilityMode
. #3828 -
Add unstable bindings for the FileSystemAccess API #3810
-
Added support for running tests in shared and service workers with
wasm_bindgen_test_configure!
run_in_shared_worker
andrun_in_service_worker
. #3804 -
Accept the
--skip
flag withwasm-bindgen-test-runner
. #3803 -
Introduce environment variable
WASM_BINDGEN_TEST_NO_ORIGIN_ISOLATION
to disable origin isolation forwasm-bindgen-test-runner
. #3807 -
Add bindings for
USBDevice.forget()
. #3821
-
Stabilize
ClipboardEvent
. #3791 -
Use immutable buffers in
SubtleCrypto
methods. #3797 -
Deprecate
wasm_bindgen_test_configure!
srun_in_worker
in favor ofrun_in_dedicated_worker
. #3804 -
Updated the WebGPU WebIDL to the current draft as of 2024-01-30. Note that this retains the previous update's workaround for
GPUPipelineError
, and holds back an update to thebuffer
argument of theGPUQueue.{writeBuffer,writeTexture}
methods. #3816 -
Depreate
--weak-refs
andWASM_BINDGEN_WEAKREF
in favor of automatic run-time detection. #3822
-
Fixed UB when freeing strings received from JS if not using the default allocator. #3808
-
Fixed temporary folder detection by
wasm-bindgen-test-runner
on MacOS. #3817 -
Fixed using
#[wasm_bindgen(js_name = default)]
with#[wasm_bindgen(module = ...)]
. #3823 -
Fixed nighly build of
wasm-bindgen-futures
. #3827
Released 2024-01-06
- Fix JS shim default path detection for the no-modules target. #3748
-
Add bindings for
HTMLFormElement.requestSubmit()
. #3747 -
Add bindings for
RTCRtpSender.getCapabilities(DOMString)
method,RTCRtpCapabilities
,RTCRtpCodecCapability
andRTCRtpHeaderExtensionCapability
. #3737 -
Add bindings for
UserActivation
. #3719 -
Add unstable bindings for the Compression Streams API. #3752
- Fixed a compiler error when using
#[wasm_bindgen]
insidemacro_rules!
. #3725
- Removed Gecko-only
InstallTriggerData
and Gecko-internalFlexLineGrowthState
,GridDeclaration
,GridTrackState
,RtcLifecycleEvent
andWebrtcGlobalStatisticsReport
features. #3723
Released 2023-11-27.
-
Add additional constructor to
DataView
forSharedArrayBuffer
. #3695 -
Stabilize
wasm_bindgen::module()
. #3690
-
The DWARF section is now correctly modified instead of leaving it in a broken state. #3483
-
Fixed an issue where
#[wasm_bindgen]
automatically derived theTryFrom
trait for any struct, preventing customTryFrom<JsValue>
implementations. It has been updated to utilize a newTryFromJsValue
trait instead. #3709 -
Update the TypeScript signature of
__wbindgen_thread_destroy
to indicate that it's parameters are optional. #3703
- Removed Gecko-internal dictionary bindings
Csp
,CspPolicies
,CspReport
andCspReportProperties
. #3721
Released 2023-11-01
-
Add bindings for
RTCRtpTransceiverInit.sendEncodings
. #3642 -
Add bindings for the Web Locks API to
web-sys
. #3604 -
Add bindings for
ViewTransition
toweb-sys
. #3598 -
Extend
AudioContext
with unstable features supporting audio sink configuration. #3433 -
Add bindings for
WebAssembly.Tag
andWebAssembly.Exception
. #3484 -
Re-export
wasm-bindgen
fromjs-sys
,web-sys
andwasm-bindgen-futures
. #3466 #3601 -
Re-export
js-sys
fromweb-sys
andwasm-bindgen-futures
. #3466 #3601 -
Add bindings for async variants of
Atomics.wait
. #3504 -
Add bindings for
WorkerGlobalScope.performance
. #3506 -
Add support for installing pre-built artifacts of
wasm-bindgen-cli
viacargo binstall wasm-bindgen-cli
. #3544 -
Add bindings for
RTCDataChannel.id
. #3547 -
Add bindings for
HTMLElement.inert
. #3557 -
Add unstable bindings for the Prioritized Task Scheduling API. #3566
-
Add bindings for
CssStyleSheet
constructor andreplace(_sync)
methods. #3573 -
Add bindings for
CanvasTransform.setTransform(DOMMatrix2DInit)
. #3580 -
Add a
crate
attribute to thewasm_bindgen_test
proc-macro to specify a non-default path to thewasm-bindgen-test
crate. #3593 -
Add support for passing
Vec
s of exported Rust types and strings to/from JS. #3554 -
Implement
TryFrom<JsValue>
for exported Rust types and strings. #3554 -
Handle the
#[ignore = "reason"]
attribute with thewasm_bindgen_test
proc-macro and accept the--include-ignored
flag withwasm-bindgen-test-runner
. #3644 -
Added missing additions to the Notification API. #3667
-
Updated the WebGPU WebIDL. The optional
message
argument ofGPUPipelineError
's constructor has been manually specified as a required argument, because required arguments occurring after optional arguments are currently not supported by the generator. #3480 -
Replaced
curl
withureq
. By default we now use Rustls instead of OpenSSL. #3511 -
Changed mutability of the argument
buffer
inwrite
functions to immutable forFileSystemSyncAccessHandle
andFileSystemWritableFileStream
. It was also automatically changed forIdbFileHandle
, which is deprecated. #3537 -
Changed behavior when compiling to
wasm32-wasi
to matchwasm32-emscripten
and non-WASM targets, generating a stub that panics when called rather than a wasm- bindgen placeholder. #3233 -
Changed constructor implementation in generated JS bindings, it is now possible to override methods from generated JS classes using inheritance. When exported constructors return
Self
. #3562 -
Made
wasm-bindgen
forwards-compatible with the standard C ABI. #3595 -
Changed the design of the internal
WasmAbi
trait. Rather than marking a type which can be passed directly as a parameter/result to/from JS, it now lets types specify how they can be split into / recreated from multiple primitive types which are then passed to/from JS.WasmPrimitive
now serves the old function ofWasmAbi
, minus allowing#[repr(C)]
types. #3595 -
Use
queueMicrotask
inwasm-bindgen-futures
for scheduling tasks on the next tick. If that is not available, use the previousPromise.then
mechanism as a fallback. This should avoid quirks, like exceptions thrown get now properly reported as normal exceptions rather than as rejected promises. #3611 -
Improved TypeScript bindings to accurately reference Rust enum types in function signatures, enhancing type safety and compatibility. #3647
-
Throw an error on enum name collisions, previously only one enum would be emitted. #3669
-
Fixed
wasm_bindgen
macro to handle raw identifiers in field names. #3621 -
Fixed bindings and comments for
Atomics.wait
. #3509 -
Fixed
wasm_bindgen_test
macro to handle raw identifiers in test names. #3541 -
Fixed Cargo license field to follow the SPDX 2.1 license expression standard. #3529
-
Use fully qualified paths in the
wasm_bindgen_test
macro. #3549 -
Fixed bug allowing JS primitives to be returned from exported constructors. #3562
-
Fixed optional parameters in JSDoc. #3577
-
Use re-exported
js-sys
fromwasm-bindgen-futures
to account for non-default path specified by thecrate
attribute inwasm_bindgen_futures
proc-macro. #3601 -
Fix bug with function arguments coming from
macro_rules!
. #3625 -
Fix some calls to
free()
missing alignment. #3639 -
Fix wrong ABI for raw pointers. #3655
-
Removed
ReadableStreamByobReader::read_with_u8_array()
because it doesn't work with Wasm. #3582 -
Removed
GetNotificationOptions
,NotificationBehavior
andNotification.get()
because they don't exist anymore.
Released 2023-06-12.
- Implemented
IntoIterator
forArray
. #3477
- Take alignment into consideration during (de/re)allocation. #3463
Released 2023-05-16.
Released 2023-05-09.
Released 2023-02-01.
Released 2022-09-12.
Released 2022-07-25.
Released 2022-06-14.
Released 2022-04-04.
Released 2022-01-19.
Released 2021-09-15.
Released 2021-09-08.
Released 2021-08-19.
Released 2021-08-02.
Released 2021-05-10.
Released 2021-03-29.
Released 2021-03-18.
Released 2021-02-26.
Released 2021-01-25.
Released 2020-11-30.
-
Unstable bindings for WebBluetooth have been added. #2311
-
Unstable bindings for WebUSB have been added. #2345
-
Renaming a struct field with
js_name
is now supported. #2360 -
The WebGPU WebIDL has been updated. #2353
-
The ImageCapture APIs of web-sys have been moved to unstable and were fixed. #2348
-
Bindings for
waitAsync
have been updated. #2362
Released 2020-09-08.
- Add userVisibleOnly property to PushSubscriptionOptionsInit. #2288
-
TypeScript files now import
*.wasm
instead of bare files. #2283 -
Usage of
externref
now appropriately resizes the table by using 2x the previous capacity, fixing a performance issue with lots of externref objects. #2294 -
Compatibility with the latest Firefox WebDriver has been fixed. #2301
-
Non deterministic output with closures has been fixed. #2304
- The WebGPU WebIDL was updated. #2267
Released 2020-07-28.
- A
--reference-types
flag was added to the CLI. #2257
- Breakage with
Closure::forget
in 0.2.66 was fixed. #2258
Released 2020-07-28.
- Reverse mappings from value to name are now available in JS bindings of enums. #2240
-
Functions using a return pointer in threaded programs now correctly load and store return values in a way that doesn't interfere with other threads. #2249
-
Support for weak references has been updated and a
--weak-refs
flag is now available in the CLI for enabling weak references. #2248
Released 2020-07-15.
- Functions from JS can now be natively imported as
async
and will use promises under the hood. #2196
- Encoding for the reference types proposal has been updated to the latest version of the spec. #2234
Released 2020-06-29.
-
Getters/setters that consume the original object have been fixed to invalidate the object correctly. #2172
-
Compatibility with nightly threading in LLVM has been fixed. #2183
-
Trailing space in generated doc comments is now removed. #2210
Released 2020-05-27.
-
A new example about using WebRTC has been added. #2131
- The encoding and implementation of WebAssembly reference types has been sync'd with the latest upstream specification. #2125
-
Test functions names will no longer collide with test intrinsic names. #2123
-
Fixed warnings with
#[must_use]
types in generated code. #2144 -
Fixed compatibility with latest Rust nightlies. #2159
Released 2020-05-01.
- Usage of
require
has been fixed with Webpack 5. #2115
Released 2020-04-29.
-
Exported Rust
enum
types can now be renamed withjs_name
. #2071 -
More comments are copied to JS/TS files, and comments should no longer accidentally have escape sequences in them. #2070
-
Experimental bindings for the Clipboard browser APIs have been added. #2100
-
WebGPU bindings have been updated. #2080
-
setBindGroup
methods for WebIDL now take immutable slices instead of mutable slices. #2087 -
JS code generation for
catch
functions has been improved. #2098 -
Usage of NPM dependencies with the
web
target is no longer an error. #2103
-
Combining
js_name
withgetter
andsetter
has now been fixed. #2074 -
Importing global names which conflict with other namespaces should now work correctly. #2057
-
Acquiring the global JS object has been fixed for Firefox extension content scripts. #2099
-
The output of
wasm-bindgen
is now compatible with Webpack 5 and the updated version of the wasm ESM integration specification. #2110
Released 2020-03-25.
-
The
js_sys
types are now more accurately reflected in TypeScript. #2028 -
The timeout in
wasm-bindgen-test-runner
's timeout can now be configured viaWASM_BINDGEN_TEST_TIMEOUT
. #2036 -
WebIDL for WebXR has been added. #2000
- The WebIDL for WebGPU has been updated. #2037
Released 2020-03-03.
-
The
js_sys::Number
type now has a number of JS-number associated constants on it now. #1965 -
The
getTransform
method onCanvasRenderingContext2D
has been added. #1966 -
Initial experimental support was added for electron targets with a new
--omit-imports
flag. #1958 -
Optional struct fields are now reflected idiomatically in TypeScript. #1990
-
Typed arrays in
js_sys
now haveget_index
andset_index
methods. #2001 -
The
web_sys::Blob
type has been updated witharrayBuffer
andtext
methods. #2008 -
Support for unstable browser interfaces has now been added. By compiling
web_sys
with--cfg web_sys_unstable_apis
(typically viaRUSTFLAGS
) you'll be able to access all bound WebIDL functions, even those like GPU support on the web, which has now also had its WebIDL updated. #1997 -
The compile time for
web_sys
has been massively reduced by pre-generating Rust code from WebIDL. It is also readable now since it generates#[wasm_bindgen]
annotations instead of expanded code. #2012 -
A new
typescript_type
attribute can be used to specify the TypeScript type for anextern
type. #2012 -
It is now possible to use string values with
#[wasm_bindgen]
enum
s. #2012 -
A new
skip_tyepscript
attribute is recognized to skip generating TypeScript bindings for a function or type. #2016
-
More
uniformMatrix*
bindings now are whitelisted take shared slice instead of a mutable slice. #1957 -
Non-
dependency
keys inpackage.json
are now ignored instead of error'd about. #1969 -
WebGPU has been removed from
web_sys
since it was outdated and didn't work anywhere anyway. #1972 -
The JS heap of objects managed by wasm-bindgen has had its definition tightended up a bit. #1987
-
The
self
identifier is no longer used on theno-modules
target, making it a bit more flexible in more environments. #1995 -
The wasm-loading logic is now more flexible and can take promises as well. #1996
-
JS glue for closures is now deduplicated. #2002
-
The
web_sys
crate now emits more accurate TypeScript definitions using named types instead ofany
everywhere. #1998 -
The
send_with_u8_array
methods inweb_sys
are whitelisted to take shared slices instead of mutable slices. #2015
Released 2020-01-07.
- When using the
no-modules
output type the initialization path for the wasm file is now optional if it can be inferred from the current JS script. #1938
- TypeScript for struct methods that have floats has been fixed. #1945
Released 2020-01-06.
-
The
js_sys::Promise
type is now marked as#[must_use]
#1927 -
Duplicate imports of the same name are now handled correctly again. #1942
Released 2019-12-20.
-
Added a
#[wasm_bindgen(inspectable)]
attribute for exported objects to generatetoJSON
andtoString
implementations. #1876 -
Support for the most recent interface types proposal has been implemented. #1882
-
Initial support for async iterators has been added. #1895
-
Support for an
async
start function was added. #1905 -
Array::iter
andArray::to_vec
methods were added to js-sys. #1909
- Another webkit-specific WebIDL construct was fixed in web-sys. #1865
Released 2019-11-19.
-
Running
wasm-bindgen
over empty anyref modules now works again. #1861 -
Support for multi-value JS engines has been fixed as a wasm interface types polyfill. #1863
Released 2019-11-07.
-
A safe
to_vec
method has been added for typed arrays. #1844 -
A unsafe method
view_mut_raw
has been added to typed arrays. #1850 -
The
HTMLImageElement
WebIDL has been updated with recent features. #1842 -
Binary crates are now supported and
fn main
will be automatically executed like thestart
function. #1843
- Some JS glue generation has been tweaked to avoid TypeScript warnings. #1852
Released 2019-10-29.
- A bug with the experimental support for multi-value interface types has been fixed. #1839
Released 2019-10-24.
-
The support for wasm-interface-types now uses multi-value by default. #1805
-
The Worklet IDL has been updated. #1817
-
The HTMLInputElement type has selectionStart and selectionEnd properties now. #1811
-
An
unintern
function has been added to remove an interned string from the cache. #1828
- Some WebIDL indexing getters have been corrected to reflect that they can
throw and/or return
undefined
#1789
- A bug with
TextDecoder
and Safari has been fxied #1789
Released 2019-09-26.
-
The
wasm-bindgen-futures
andwasm-bindgen-test
crates now require Nightly Rust and have a new major version published as a result. These crates now supportasync
/await
by default, and they will be supported in the stable Rust 1.39.0 release. The previous versions of crates will continue to work on stable today. #1741 -
Using
#[wasm_bindgen]
on anasync
function will now work and return aPromise
on the JS side of things. #1754 -
More helper methods for
js_sys::Array
have been added. #1749 -
Initial support for the WebAssembly multi-value proposal has been added. #1764
-
Constructors for
js_sys::Date
with optional parameters has been added. #1759 -
Headless tests can now be run against a remote webdriver client #1744
- The
passStringToWasm
function has been optimized for size. #1736
-
BOM markers will not be preserved when passing strings to/from wasm. #1730
-
Importing a
static
value which isn't aJsValue
has been fixed. #1784 -
Converting
undefined
to a Rust value viainto_serde
has been fixed. #1783 -
Routine errors are no longer erroneously logged in debug mode. #1788
Released 2019-08-19.
- Experimental support with a
WASM_INTERFACE_TYPES=1
environment variable has been added to emit a Wasm Interface Types custom section, making the output ofwasm-bindgen
a single standalone WebAssembly file. #1725
- Unrelated errors are now no longer accidentally swallowed by the
instantiateStreaming
fallback. #1723
Released 2019-08-14.
-
Add binding for
Element.getElementsByClassName
. #1665 -
PartialEq
andEq
are now implemented for allweb-sys
types. #1673 -
The
wasm-bindgen-futures
crate now has support for futures when the experimental WebAssembly threading feature is enabled. #1514 -
A new
enable-interning
feature is available to intern strings and reduce the cost of transferring strings across the JS/Rust boundary. #1612 -
The
wasm-bindgen
CLI has experimental support for reading nativewebidl-bindings
custom sections and generating JS glue. This support is in addition to Rust's own custom sections and allows usingwasm-bindgen
with binaries produced by other than rustc possibly. #1690 -
New environment variables have been added to configure webdriver startup arguments. #1703
-
New
JsValue::{is_truthy,is_falsy}
methods are now available. #1638
-
JS import shims are now skipped again when they are unnecessary. #1654
-
WebAssembly output files now directly embed the module/name for imports if supported for the target and the import, reducing JS shims even further. #1689
-
Support for threads have been updated for LLVM 9 and nightly Rust. #1675 #1688
-
The
anyref
passes inwasm-bindgen
have seen a number of fixes to improve their correctness and get the full test suite running. #1692 #1704 -
Support for
futures-preview 0.3.0-alpha.18
has been added towasm-bindgen-futures
. #1716
Released 2019-07-11.
-
All typed arrays now implement
From
for the corresponding Rust slice type, providing a safe way to create an instance which copies the data. #1620 -
Function::bind{2,3,4}
are now available injs-sys
. #1633
-
More WebGL methods have been updated to use shared slices instead of mutable slices. #1639
-
When using the
bundler
target the import of the wasm file now uses the.wasm
extension to ensure a wasm file is loaded. #1646 -
The old internal
Stack
trait has been removed since it is no longer used. #1624
-
The
js_sys::global()
accessor now attempts other strategies before falling back to aFunction
constructor which can violate some strict CSP settings. #1650 -
Dropping a
JsFuture
no longer logs a benign error to the console. #1649 -
Fixed an assertion which could happen in some modules when generating bindings. #1617
Released 2019-06-19.
-
The
HtmlHyperlinkElement
should now include more native methods after a small edit to the WebIDL. #1604 -
Duplicate names for getters/setters now have a first-class
wasm-bindgen
error. #1605
-
TypeScript definition of
init
with--target web
now reflects that the first argument is optional. #1599 -
A panic with the futures 0.3 support has been fixed. #1598
-
More slice types are recognized as becoming immutable in some WebIDL methods. #1602
-
The function table is now no longer too aggressively removed. #1606
Released 2019-06-14.
-
Bindings for
Array#flat
andArray#flatMap
have been added. #1573 -
All
#[wasm_bindgen]
types nowAsRef
to themselves. #1583 -
When using
--target web
the path passed toinit
is no longer required. #1579
-
Some diagnostics related to compiler errors in
#[wasm_bindgen]
have been improved. #1550 -
The support for weak references has been updated to the current JS proposal. #1557
-
Documentation and feature gating for web-sys dictionaries has improved. #1572
-
Getter and setter TypeScript has been fixed. #1577
-
The
env_logger
crate and its tree of dependencies is no longer required to buildweb-sys
. #1586
Released 2019-05-20.
- Using
__wbindgen_cb_forget
on--target web
has been fixed. #1544
- More whitelists have been added for
web-sys
to use shared slices instead of mutable slices. #1539
Released 2019-05-16.
-
Support for exporting "fields" on JS objects wrapping Rust structs which are hooked up to getters/setters has been added. This is in addition to
pub
struct fields and allows performing more complicated computations in getters/setters. #1440 -
Support for futures 0.3 (and
async
/await
syntax) has been added to thewasm-bindgen-futures
crate. #1507 -
Stacks of imported JS functions that throw and aren't marked
catch
are now logged in debug mode. #1466 -
A utility for counting the size of the
anyref
heap has been added. #1521 -
Passing ASCII-only strings to WASM should now be significantly faster. #1470
-
The
selectionStart
andselectionEnd
APIs of text areas have been enabled. #1533
-
Some more methods in
web-sys
now take immutable slices instead of mutable ones. #1508 -
TypeScript bindings for
Option<T>
arguments now usefoo?
where possible. #1483
-
Unnecessary bindings to
__wbindgen_object_drop_ref
have been fixed. #1504 -
Some direct imports have been fixed for
--target web
. #1503 -
Both importing and exporting the same name has been fixed. #1506
-
TypeScript typings for
init
in--target web
have been fixed. #1520 -
Calling a dropped
Closure
should no longer "segfault" but produce a clear error. #1530
Released 2019-04-29.
-
Support for
isize
andusize
arrays has been added. #1448 -
Support customizing
dyn_ref
and friends via a newis_type_of
attribute and apply it to somejs_sys
bindings. #1405 #1450 #1490 -
A new
skip
attribute to#[wasm_bindgen]
has been added to skip fields and methods when generating bindings. #1410 -
More bindings have been added to
web-sys
for interfaces tagged with[NoInterfaceObject]
in WebIDL. These types always faildyn_ref
and friends and must be manually casted into. #1449 -
Added
Debug for JsFuture
. #1477 -
Initial bindings for
Atomics
andSharedArrayBuffer
have been added tojs_sys
. #1463 -
Bindings for
Object.fromEntries
has been added tojs_sys
. #1456 -
Tuple structs exported to JS now have indexed struct properties. #1467
-
Binding for
new Function(args, body)
has been added tojs_sys
. #1492 -
Bindings for some variadic functions have been added to
js_sys
. #1491
-
Many
js-sys
types have received various tweaks and improvements to ensure they're consistent and work similarly to native Rust types. #1447 #1444 #1473 -
Dummy types in
js-sys
only used to namespace methods were removed and now modules are used for namespacing instead. #1451 -
Bindings in
web-sys
are formatted by default for ease of usage in IDEs. #1461
- Documentation for Rust methods now show up in TypeScript as well. #1472
Released 2019-04-11.
- Fixed an issue in Firefox where using
encodeInto
accidentally caused empty strings to keep getting passed to Rust. #1434
Released 2019-04-10.
-
Initial support for transitive NPM dependencies has been added. #1305
-
The
constructor
property ofObject
is now bound injs-sys
. #1403 -
The
Closure
type now always implementsDebug
. #1408 -
Closures which take one
&T
argument are now supported. More implementations may be added in the future, but for now it's just one argument closures. #1417 -
The TypeScript bindings for
--web
now expose theinit
function. #1412 -
A
js_sys::JsString::is_valid_utf16
method has been added to handle unpaired surrogates in JS strings. Surrounding documentation has also been updated to document this potential pitfall. #1416 -
A
wasm_bindgen::function_table()
function has been added to expose theWebAssembly.Table
and get access to it in wasm code. #1431
-
Reexporting the
wasm_bindgen
macro in crates has been fixed. #1359 -
Returning
u32
to JS has been fixed where largeu32
values would show up in JS as large negative numbers. #1401 -
Manual instantiation with
WebAssembly.Module
has been fixed. #1419 -
Error message for non-
Copy
public struct fields has been improved. #1430
-
Performance of passing strings to Rust in Node.js has been improved. #1391
-
Performance of
js_sys::try_iter
has been improved. #1393 -
Performance of using
TextEncoder#encodeInto
has been improved. #1414
Released 2019-03-21.
-
TypeScript and JS generation will now attempt to preserve argument names in the generated JS where possible. #1344
-
Enable
Option<T>
support for enums defined in WebIDL. #1350 -
Add a
raw_module
attribute to#[wasm_bindgen]
which is the same asmodule
except doesn't attempt to recognize./
,../
,or
/` prefixed paths. #1353 -
The
wasm-bindgen
CLI flags have now all been renamed under a--target
flag. Instead of--web
you'll now pass--target web
, for example. This increases consistency between thewasm-bindgen
andwasm-pack
CLI. #1369
-
Definitions for
TypedArray
imports ofjs-sys
have been unified with a macro to improve consistency and fix future bugs. #1371 -
Usage of
--no-modules
in CloudFlare workers should now work by default. #1384 -
A use-after-free when a closure is reinvoked after being destroyed on the Rust die has been fixed. #1385
-
A bug causing nondeterministic generation of JS bindings has been fixed. #1383
Released 2018-03-13.
- Crates can now import locally written JS snippets to get bundled into the final output. See RFC 6 for more details as well as the PR. #1295
-
A typo in the return value of
slice
methods on typed arrays injs-sys
was corrected. #1321 -
The directory specified by
--out-dir
is now created if it doesn't exist already. #1330
- A bug where if
nom
was in a crate graph and was compiled with theverbose-errors
feature has been fixed. Previously thewasm-bindgen-webidl
crate wouldn't compile, and now it will. #1338
Released 2019-03-04.
-
Support for
Option<RustStruct>
in#[wasm_bindgen]
functions has now been added. #1275 -
Experimental support for the
anyref
type proposal in WebAssembly has now landed and is enabled withWASM_BINDGEN_ANYREF=1
. #1002 -
Support for the new browser
TextEncode#encodeInto
API has been added. #1279 -
JS doc comments are now added to TypeScript bindings in addition to the JS bindings generated. #1302
-
Initial support for
FnOnce
closures has been added to theClosure
type. #1281
-
Fixed an internal assert tripping when some modules were compiled with LTO. #1274
-
The
Context
type in thewasm-bindgen-test
crate had its JS name changed to avoid conflicts with other crates that have aContext
type being exported. #1280 -
The headless test runner for Safari on macOS High Sierra has been fixed. #1298
- The
wasm-bindgen
CLI tool now emits theproducers
section again with relevant bugs having been fixed in the meantime. The--remove-producers-section
flag can continue to be used to omit emission of this section. #1263
Released 2019-02-15.
-
The
HtmlMediaElement
type now exposes asrc_object
getter. #1248. -
The
js_sys::Reflect
type now has specializes getter/setters foru32
andf64
indices. #1225. -
A
--remove-producers-section
flag has been added to the CLI tool to, well, remove theproducers
section from the final wasm file. #1256.
- The
wasm-bindgen
CLI tool will correctly strip DWARF debug information unless--keep-debug
is passed. #1255.
- The
wasm-bindgen
CLI tool no longer emits theproducers
custom section by default to work around a webpack bug. See #1260.
Released 2019-02-12.
- Fixed a bug where using closures and LTO together caused a panic inside the
wasm-bindgen
CLI tool. See #1244.
Released 2019-02-12.
wasm-bindgen
now internally uses thewalrus
crate to perform its transformations of the wasm that rustc/LLVM emits. See #1237.
- When
WebAssembly.instantiateStreaming
fails due to incorrect MIME type, actually properly recover. See #1243.
Released 2019-02-11.
- Added support for optional
enum
s. See #1214. - Added the
UnwrapThrowExt<T>
trait, which can enable smaller code sizes for panics. See #1219.
- Some
WebGlRenderingContext
methods are now whitelisted to use shared slices instead of exclusive slices. See #1199. - Fixed TypeScript definitions for optional types. See #1201.
- Quiet clippy warnings inside generated code. See 1207.
- Fixed using
cfg_attr
andwasm_bindgen
together like#[cfg_attr(..., wasm_bindgen)]
. See 1208. - The WebAudio example program was fixed. See #1215.
- Fixed logging HTML in
wasm-bindgen-test
. See #1233. - When
WebAssembly.instantiateStreaming
fails due to incorrect MIME type, properly recover. See #1235.
Released 2019-01-18.
-
Improved the
Debug
output ofJsValue
#1161 -
Bindings for
JSON.stringify
and its optional arguments have been added #1190
- A bug with windows binaries being released has ben resolved.
Released 2019-01-16.
- Added support for Web IDL sequences. This enabled bindings generation for a
couple more Web APIs. We generate functions for Web APIs that take sequences
to accept any iterable, and for Web APIs that return sequences, a
js_sys::Array
is returned. See #1152 and #1038. - The
wasm-bindgen-test
test runner will captureconsole.debug
,console.info
, andconsole.warn
log messages and print them tostdout
now. It already supportedconsole.log
andconsole.error
and continues to support them. See #1183 and #1184. - Added additional
--debug
-only assertions in the emitted JS glue for cases where an imported JS function that is not annotated with#[wasm_bindgen(catch)]
throws an exception. This should help catch some bugs earlier! See #1179.
- Fixed a bug where
#[wasm_bindgen_test]
tests would fail in non-headless Web browsers if they usedconsole.log
. See #1167. - Fixed a bug where returning closures from exported functions sometimes resulted in a faulty error. See #1174 and #1175.
- Sometimes our generated TypeScript interface files had syntax errors in them (missing semicolons). This has been fixed. See #1181.
Released 2019-01-09.
-
A new
spawn_local
function has been added to thewasm-bindgen-futures
crate. #1148 -
Built-in conversions are now available from typed arrays and Rust arrays. #1147
- Some casing of dictionary properties in WebIDL has been fixed. #1155
Released 2019-01-07.
-
The
wasm-bindgen
CLI now has an--out-name
argument to name the output module. #1084 -
Support for importing the
default
export has been added. #1106
- All
web-sys
methods are now flagged asstructural
, fixing a few bindings. #1117
- A small bug with LTO and closures has been fixed. #1145
Released 2018-12-04.
-
Add a
#[wasm_bindgen(start)]
attribute to customize thestart
section of the wasm module. #1057 -
Add support for producing the new "producers" section of wasm binaries #1041
-
Add support a
typescript_custom_section
attribute for producing custom typescript abstractions #1048 -
Generate
*.d.ts
files for wasm files in addition to the JS bindings #1053 -
Add a feature to assert that all attributes in
#[wasm_bindgen]
are used to help catch typos and mistakes #1055
-
JS glue generation has received a few small optimizations such as removing shims and removing object allocations #1033 #1030
-
JS glue now just uses one array of JS objects instead of two #1069
- Fix a typo in the
--no-modules
generated JS #1045
Released 2018-11-12.
-
The
js_class
support is now supported on exported types to define a different class in JS than is named in Rust #1012 -
More WebIDL bindings are exposed with some internal restructuring to ignore unimplemented types at a different location #1014
-
All imported types now implement
Deref
to their firstextends
attribute (orJsValue
if one isn't listed). This is intended to greatly improve the ergonomics ofweb-sys
bindings by allowing easy access to parent class methods #1019 -
A new attribute,
final
, can be applied to JS imports. This attribute is relatively nuanced and best explained in documentation, but is added sincestructural
is now the default #1019
- A new CLI flag,
--remove-name-section
, can be passed to remove the wasmname
section which contains the names of functions for debugging (typically not needed in release mode) #1024
- All imported functions are now
structural
by default. This shouldn't change the semantics of imported functions, only how they're invoked in the JS function shims that are generated bywasm-bindgen
. More discussion can be founed on RFC 5 and the PR #1019
- JS glue assertions for moved arguments are now only emitted in debug mode, which is still off by default #1020
-
Typescript generated bindings now correctly reflect
Option<T>
for more types #1008 -
The JS shim code generation has been optimized for
structural
bindings (now the default) to include fewer JS shims and more easily optimizable for JS engines #1019 -
Passing a
WebAssembly.Module
to the--no-modules
constructor has been fixed #1025
Released 2018-10-29.
- Fixed an internal panic where the gc passes were being too aggressive #995
Released 2018-10-29.
-
The
TypedArray.slice
methods have now been bound injs-sys
. #956 -
The
Debug
andClone
traits are now implemented forjs_sys::Promise
. #957 -
The
js_sys::DataView
type now exposes overloads to specify endianness. #966 -
When using
--no-modules
aWebAssembly.Module
can now be directly passed into the instantiation glue. #969
-
The
JsValue
type is no longer consideredSend
. #955 -
The generated JS glue is now more robust in the face of missing APIs. #959
-
An issue with the latest version of
safaridriver
used to run headless tests has been resolved. #991
Released 2018-10-10.
-
Using
wasm-bindgen
will no longer unconditionally pull in Rust's default allocator for Wasm (dlmalloc) regardless if you configured a custom global allocator (eg wee_alloc). #947 -
Fixed web-sys build on some Windows machines. #943
-
Fixed generated ES class bindings to Rust structs that were only referenced through struct fields. #948
Released 2018-10-05.
-
Constructors for types in
web-sys
should now have better documentation. -
A new
vendor_prefix
attribute in#[wasm_bindgen]
is supported to bind APIs on the web which may have a vendor prefix (likewebkitAudioContext
). This is then subsequently used to fixAudioContext
usage in Safari. -
The
#[wasm_bindgen(extends = Foo)]
attribute now supports full paths, so you can also say#[wasm_bindgen(extends = foo::Bar)]
and such.
-
The
Closure<T>
type is now optimized when the underlying closure is a ZST. The type now no longer allocates memory in this situation. -
The documentation now has a list of caveats for browser support, including how
TextEncoder
andTextDecoder
are not implemented in Edge. If you're using webpack there's a listed strategy available, and improvements to the polyfill strategy are always welcome! -
The
BaseAudioContext
andAudioScheduledSourceNode
types inweb-sys
have been deprecated as they don't exist in Safari or Edge.
-
Fixed the
#[wasm_bindgen_test]
's error messages in a browser to correctly escape HTML-looking output. -
WebIDL Attributes on
Window
are now correctly bound to not go throughWindow.prototype
which doesn't exist but instead use astructural
definition. -
Fixed a codegen error when the
BorrowMut
trait was in scope. -
Fixed TypeScript generation for constructors of classes, it was accidentally producing a syntactially invalid file!
Released 2018-09-26.
-
Added support for unions of interfaces and non-interfaces in the WebIDL frontend.
-
Added a policy for inclusion of new ECMAScript features in
js-sys
: the feature must be in stage 4 or greater for us to support it. -
Added some documentation about size profiling and optimization with
wasm-bindgen
to the guide. -
Added the
Clamped<T>
type for generating JavaScriptUint8ClampedArray
s. -
CI is now running on beta! Can't wait for the
rustc
release trains to roll over, so we can run CI on stable too! -
Added the
js_sys::try_iter
function, which checks arbitrary JS values for compliance with the JS iteration protocol, and if they are iterable, converts them into an iterator over the JS values that they yield.
-
We now only generate null checks on methods on the JS side when in debug mode. For safety we will always null check on the Rust side, however.
-
Improved error messages when defining setters that don't start with
set_
and don't usejs_name = ...
. -
Improved generated code for classes in a way that avoids an unnecessary allocation with static methods that return
Self
but are not the "main" constructor. -
BREAKING:
js_sys::Reflect
APIs are all fallible now. This is because reflecting onProxy
s whose trap handlers throw an exception can cause any of the reflection APIs to throw. Accordingly,js_sys
has been bumped from0.2.X
to0.3.X
.
- The method of ensuring that
__wbindgen_malloc
and__wbindgen_free
are always emitted in the.wasm
binary, regardless of seeming reachability is now zero-overhead.
Released 2018-09-21
- The
IntoIterator
trait is now implemented for JSIterator
types - A number of variadic methods in
js-sys
have had explicit arities added. - The guide has been improved quite a bit as well as enhanced with more examples
- The
js-sys
crate is now complete! Thanks so much to everyone involved to help fill out all the APIs. - Exported Rust functions with
#[wasm_bindgen]
can now return aResult
where theErr
payload is raised as an exception in JS.
- An issue with running
wasm-bindgen
on crates that have been compiled with LTO has been resolved.
Released 2018-09-07
- Added many more bindings for
WebAssembly
in thejs-sys
crate.
- The "names" section of the wasm binary is now correctly preserved by wasm-bindgen.
Released 2018-09-06
- All of
wasm-bindgen
is configured to compile on stable Rust as of the upcoming 1.30.0 release, scheduled for October 25, 2018. - The underlying
JsValue
of aClosure<T>
type can now be extracted at any time. - Initial and experimental support was added for modules that have shared memory (use atomic instructions).
- The
--wasm2asm
flag ofwasm2es6js
was removed because thewasm2asm
tool has been removed from upstream Binaryen. This is replaced with the newwasm2js
tool from Binaryen.
- The "schema" version for wasm-bindgen now changes on all publishes, meaning we can't forget to update it. This means that the crate version and CLI version must exactly match.
- The
wasm-bindgen
crate now has alinks
key which forbids multiple versions ofwasm-bindgen
from being linked into a dependency graph, fixing obscure linking errors with a more first-class error message. - Binary releases for Windows has been fixed.
Released 2018-08-27.
- Added bindings to
js-sys
for someWebAssembly
types. - Added bindings to
js-sys
for someIntl
types. - Added bindings to
js-sys
for someString
methods. - Added an example of using the WebAudio APIs.
- Added an example of using the
fetch
API. - Added more
extends
annotations for types injs-sys
. - Experimental support for
WeakRef
was added to automatically deallocate Rust objects when gc'd. - Added support for executing
wasm-bindgen
over modules that import their memory. - Added a global
memory()
function in thewasm-bindgen
crate for accessing the JS object that represent wasm's own memory.
- Removed
AsMut
implementations for imported objects.
- Fixed the
constructor
andcatch
attributes combined on imported types. - Fixed importing the same-named static in two modules.
Released 2018-08-16.
- Greatly expanded documentation in the wasm-bindgen guide.
- Added bindings to
js-sys
forIntl.DateTimeFormat
- Added a number of
extends
attributes for types injs-sys
- Fixed compile on latest nightly with latest
proc-macro2
- Fixed compilation in some scenarios on Windows with paths in
module
paths
Released 2018-08-13.
- Added the
wasm_bindgen::JsCast
trait, as described in RFC #2. - Added the
#[wasm_bindgen(extends = ...)]
attribute to describe inheritance relationships, as described in RFC #2. - Added support for receiving
Option<&T>
parameters from JavaScript in exported Rust functions and methods. - Added support for receiving
Option<u32>
and other option-wrapped scalars. - Added reference documentation to the guide for every
#[wasm_bindgen]
attribute and how it affects the generated bindings. - Published the
wasm-bindgen-futures
crate for converting between JSPromise
s and RustFuture
s.
- Overhauled the guide's documentation on passing JS closures to Rust, and Rust closures to JS.
- Overhauled the guide's documentation on using serde to serialize complex data
to
JsValue
and deserializeJsValue
s back into complex data. - Static methods are now always bound to their JS class, as is required for
Promise
's static methods.
- Removed internal usage of
syn
'svisit-mut
cargo feature, which should result in faster build times.
- Various usage errors for the
#[wasm_bindgen]
proc-macro are now properly reported with source span information, rather thanpanic!()
s inside the proc-macro. - Fixed a bug where taking a struct by reference and returning a slice resulted in lexical variable redeclaration errors in the generated JS glue. #662
- The
#[wasm_bindgen(js_class = "....")]
attribute for binding methods to renamed imported JS classes now properly works with constructors.
Released 2018-07-26.
- Fixed
wasm-bindgen
CLI version mismatch checks that got broken in the last point release.
Released 2018-07-25.
- Fixed compilation errors on targets that use Mach-O. #545
Released 2018-07-22.
- Support the
#[wasm_bindgen(js_name = foo)]
attribute on exported functions and methods to allow renaming an export to JS. This allows JS to call it by one name and Rust to call it by another, for example usingcamelCase
in JS andsnake_case
in Rust
- Compilation with the latest nightly compiler has been fixed (nightlies on and after 2018-07-21)
Released 2018-07-19.
This release is mostly internal refactorings and minor improvements to the
existing crates and functionality, but the bigs news is an upcoming js-sys
and
web-sys
set of crates. The js-sys
crate will expose all global JS
bindings and the web-sys
crate will be generated from WebIDL to
expose all APIs browsers have. More info on this soon!
- Support for
Option<T>
was added whereT
can be a number of slices or imported types. - Comments in Rust are now preserved in generated JS bindings, as well as comments being generated to indicate the types of arguments/return values.
- The online documentation has been reorganized into a book.
- The generated JS is now formatted better by default for readability.
- A
--keep-debug
flag has been added to the CLI to retain debug sections by default. This happens by default when--debug
is passed.
- Compilation with the latest nightly compiler has been fixed (nightlies on and after 2018-07-19)
- Declarations of an imported function in multiple crates have been fixed to not conflict.
- Compilation with
#![deny(missing_docs)]
has been fixed.
Released 2018-05-24.
Released 2018-05-17.
Released 2018-05-11.