wasm-bindgen
Change LogReleased 2024-03-04
Add bindings for RTCPeerConnectionIceErrorEvent
. #3835
Add bindings for CanvasState.reset()
, affecting CanvasRenderingContext2D
and OffscreenCanvasRenderingContext2D
. #3844
Add TryFrom
implementations for Number
, that allow losslessly converting from 64- and 128-bits numbers. #3847
Add support for Option<*const T>
, Option<*mut T>
and NonNull<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 the RTCRtpEncodingParameters.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
and run_in_service_worker
. #3804
Accept the --skip
flag with wasm-bindgen-test-runner
. #3803
Introduce environment variable WASM_BINDGEN_TEST_NO_ORIGIN_ISOLATION
to disable origin isolation for wasm-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!
s run_in_worker
in favor of run_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 the buffer
argument of the GPUQueue.{writeBuffer,writeTexture}
methods. #3816
Depreate --weak-refs
and WASM_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
Add bindings for HTMLFormElement.requestSubmit()
. #3747
Add bindings for RTCRtpSender.getCapabilities(DOMString)
method, RTCRtpCapabilities
, RTCRtpCodecCapability
and RTCRtpHeaderExtensionCapability
. #3737
Add bindings for UserActivation
. #3719
Add unstable bindings for the Compression Streams API. #3752
#[wasm_bindgen]
inside macro_rules!
. #3725InstallTriggerData
and Gecko-internal FlexLineGrowthState
, GridDeclaration
, GridTrackState
, RtcLifecycleEvent
and WebrtcGlobalStatisticsReport
features. #3723Released 2023-11-27.
Add additional constructor to DataView
for SharedArrayBuffer
. #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 the TryFrom
trait for any struct, preventing custom TryFrom<JsValue>
implementations. It has been updated to utilize a new TryFromJsValue
trait instead. #3709
Update the TypeScript signature of __wbindgen_thread_destroy
to indicate that it's parameters are optional. #3703
Csp
, CspPolicies
, CspReport
and CspReportProperties
. #3721Released 2023-11-01
Add bindings for RTCRtpTransceiverInit.sendEncodings
. #3642
Add bindings for the Web Locks API to web-sys
. #3604
Add bindings for ViewTransition
to web-sys
. #3598
Extend AudioContext
with unstable features supporting audio sink configuration. #3433
Add bindings for WebAssembly.Tag
and WebAssembly.Exception
. #3484
Re-export wasm-bindgen
from js-sys
, web-sys
and wasm-bindgen-futures
. #3466 #3601
Re-export js-sys
from web-sys
and wasm-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
via cargo 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 and replace(_sync)
methods. #3573
Add bindings for CanvasTransform.setTransform(DOMMatrix2DInit)
. #3580
Add a crate
attribute to the wasm_bindgen_test
proc-macro to specify a non-default path to the wasm-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 the wasm_bindgen_test
proc-macro and accept the --include-ignored
flag with wasm-bindgen-test-runner
. #3644
Added missing additions to the Notification API. #3667
Updated the WebGPU WebIDL. The optional message
argument of GPUPipelineError
'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
with ureq
. By default we now use Rustls instead of OpenSSL. #3511
Changed mutability of the argument buffer
in write
functions to immutable for FileSystemSyncAccessHandle
and FileSystemWritableFileStream
. It was also automatically changed for IdbFileHandle
, which is deprecated. #3537
Changed behavior when compiling to wasm32-wasi
to match wasm32-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 of WasmAbi
, minus allowing #[repr(C)]
types. #3595
Use queueMicrotask
in wasm-bindgen-futures
for scheduling tasks on the next tick. If that is not available, use the previous Promise.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
from wasm-bindgen-futures
to account for non-default path specified by the crate
attribute in wasm_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
and Notification.get()
because they don't exist anymore.
Released 2023-06-12.
IntoIterator
for Array
. #3477Released 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.
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
Released 2020-07-28.
--reference-types
flag was added to the CLI. #2257Closure::forget
in 0.2.66 was fixed. #2258Released 2020-07-28.
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.
async
and will use promises under the hood. #2196Released 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
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.
require
has been fixed with Webpack 5. #2115Released 2020-04-29.
Exported Rust enum
types can now be renamed with js_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
with getter
and setter
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 via WASM_BINDGEN_TEST_TIMEOUT
. #2036
WebIDL for WebXR has been added. #2000
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 on CanvasRenderingContext2D
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 have get_index
and set_index
methods. #2001
The web_sys::Blob
type has been updated with arrayBuffer
and text
methods. #2008
Support for unstable browser interfaces has now been added. By compiling web_sys
with --cfg web_sys_unstable_apis
(typically via RUSTFLAGS
) 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 an extern
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 in package.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 the no-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 of any
everywhere. #1998
The send_with_u8_array
methods in web_sys
are whitelisted to take shared slices instead of mutable slices. #2015
Released 2020-01-07.
no-modules
output type the initialization path for the wasm file is now optional if it can be inferred from the current JS script. #1938Released 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 generate toJSON
and toString
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
and Array::to_vec
methods were added to js-sys. #1909
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 the start
function. #1843
Released 2019-10-29.
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
undefined
#1789TextDecoder
and Safari has been fxied #1789Released 2019-09-26.
The wasm-bindgen-futures
and wasm-bindgen-test
crates now require Nightly Rust and have a new major version published as a result. These crates now support async
/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 an async
function will now work and return a Promise
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
passStringToWasm
function has been optimized for size. #1736BOM markers will not be preserved when passing strings to/from wasm. #1730
Importing a static
value which isn't a JsValue
has been fixed. #1784
Converting undefined
to a Rust value via into_serde
has been fixed. #1783
Routine errors are no longer erroneously logged in debug mode. #1788
Released 2019-08-19.
WASM_INTERFACE_TYPES=1
environment variable has been added to emit a Wasm Interface Types custom section, making the output of wasm-bindgen
a single standalone WebAssembly file. #1725instantiateStreaming
fallback. #1723Released 2019-08-14.
Add binding for Element.getElementsByClassName
. #1665
PartialEq
and Eq
are now implemented for all web-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 native webidl-bindings
custom sections and generating JS glue. This support is in addition to Rust's own custom sections and allows using wasm-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 in wasm-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 to wasm-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 in js-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 a Function
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
and Array#flatMap
have been added. #1573
All #[wasm_bindgen]
types now AsRef
to themselves. #1583
When using --target web
the path passed to init
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 build web-sys
. #1586
Released 2019-05-20.
__wbindgen_cb_forget
on --target web
has been fixed. #1544web-sys
to use shared slices instead of mutable slices. #1539Released 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 the wasm-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
and selectionEnd
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 use foo?
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
and usize
arrays has been added. #1448
Support customizing dyn_ref
and friends via a new is_type_of
attribute and apply it to some js_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 fail dyn_ref
and friends and must be manually casted into. #1449
Added Debug for JsFuture
. #1477
Initial bindings for Atomics
and SharedArrayBuffer
have been added to js_sys
. #1463
Bindings for Object.fromEntries
has been added to js_sys
. #1456
Tuple structs exported to JS now have indexed struct properties. #1467
Binding for new Function(args, body)
has been added to js_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
Released 2019-04-11.
encodeInto
accidentally caused empty strings to keep getting passed to Rust. #1434Released 2019-04-10.
Initial support for transitive NPM dependencies has been added. #1305
The constructor
property of Object
is now bound in js-sys
. #1403
The Closure
type now always implements Debug
. #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 the init
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 the WebAssembly.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 large u32
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 as module
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 the wasm-bindgen
and wasm-pack
CLI. #1369
Definitions for TypedArray
imports of js-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.
A typo in the return value of slice
methods on typed arrays in js-sys
was corrected. #1321
The directory specified by --out-dir
is now created if it doesn't exist already. #1330
nom
was in a crate graph and was compiled with the verbose-errors
feature has been fixed. Previously the wasm-bindgen-webidl
crate wouldn't compile, and now it will. #1338Released 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 with WASM_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 the Closure
type. #1281
Fixed an internal assert tripping when some modules were compiled with LTO. #1274
The Context
type in the wasm-bindgen-test
crate had its JS name changed to avoid conflicts with other crates that have a Context
type being exported. #1280
The headless test runner for Safari on macOS High Sierra has been fixed. #1298
wasm-bindgen
CLI tool now emits the producers
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. #1263Released 2019-02-15.
The HtmlMediaElement
type now exposes a src_object
getter. #1248.
The js_sys::Reflect
type now has specializes getter/setters for u32
and f64
indices. #1225.
A --remove-producers-section
flag has been added to the CLI tool to, well, remove the producers
section from the final wasm file. #1256.
wasm-bindgen
CLI tool will correctly strip DWARF debug information unless --keep-debug
is passed. #1255.wasm-bindgen
CLI tool no longer emits the producers
custom section by default to work around a webpack bug. See #1260.Released 2019-02-12.
wasm-bindgen
CLI tool. See #1244.Released 2019-02-12.
wasm-bindgen
now internally uses the walrus
crate to perform its transformations of the wasm that rustc/LLVM emits. See #1237.WebAssembly.instantiateStreaming
fails due to incorrect MIME type, actually properly recover. See #1243.Released 2019-02-11.
enum
s. See #1214.UnwrapThrowExt<T>
trait, which can enable smaller code sizes for panics. See #1219.WebGlRenderingContext
methods are now whitelisted to use shared slices instead of exclusive slices. See #1199.cfg_attr
and wasm_bindgen
together like #[cfg_attr(..., wasm_bindgen)]
. See 1208.wasm-bindgen-test
. See #1233.WebAssembly.instantiateStreaming
fails due to incorrect MIME type, properly recover. See #1235.Released 2019-01-18.
Improved the Debug
output of JsValue
#1161
Bindings for JSON.stringify
and its optional arguments have been added #1190
Released 2019-01-16.
js_sys::Array
is returned. See #1152 and #1038.wasm-bindgen-test
test runner will capture console.debug
, console.info
, and console.warn
log messages and print them to stdout
now. It already supported console.log
and console.error
and continues to support them. See #1183 and #1184.--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.#[wasm_bindgen_test]
tests would fail in non-headless Web browsers if they used console.log
. See #1167.Released 2019-01-09.
A new spawn_local
function has been added to the wasm-bindgen-futures
crate. #1148
Built-in conversions are now available from typed arrays and Rust arrays. #1147
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
web-sys
methods are now flagged as structural
, fixing a few bindings. #1117Released 2018-12-04.
Add a #[wasm_bindgen(start)]
attribute to customize the start
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
--no-modules
generated JS #1045Released 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 first extends
attribute (or JsValue
if one isn't listed). This is intended to greatly improve the ergonomics of web-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 since structural
is now the default #1019
--remove-name-section
, can be passed to remove the wasm name
section which contains the names of functions for debugging (typically not needed in release mode) #1024structural
by default. This shouldn‘t change the semantics of imported functions, only how they’re invoked in the JS function shims that are generated by wasm-bindgen
. More discussion can be founed on RFC 5 and the PR #1019Typescript 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.
Released 2018-10-29.
The TypedArray.slice
methods have now been bound in js-sys
. #956
The Debug
and Clone
traits are now implemented for js_sys::Promise
. #957
The js_sys::DataView
type now exposes overloads to specify endianness. #966
When using --no-modules
a WebAssembly.Module
can now be directly passed into the instantiation glue. #969
The JsValue
type is no longer considered Send
. #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 (like webkitAudioContext
). This is then subsequently used to fix AudioContext
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
and TextDecoder
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
and AudioScheduledSourceNode
types in web-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 through Window.prototype
which doesn't exist but instead use a structural
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 JavaScript Uint8ClampedArray
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 use js_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 on Proxy
s whose trap handlers throw an exception can cause any of the reflection APIs to throw. Accordingly, js_sys
has been bumped from 0.2.X
to 0.3.X
.
__wbindgen_malloc
and __wbindgen_free
are always emitted in the .wasm
binary, regardless of seeming reachability is now zero-overhead.Released 2018-09-21
IntoIterator
trait is now implemented for JS Iterator
typesjs-sys
have had explicit arities added.js-sys
crate is now complete! Thanks so much to everyone involved to help fill out all the APIs.#[wasm_bindgen]
can now return a Result
where the Err
payload is raised as an exception in JS.wasm-bindgen
on crates that have been compiled with LTO has been resolved.Released 2018-09-07
WebAssembly
in the js-sys
crate.Released 2018-09-06
wasm-bindgen
is configured to compile on stable Rust as of the upcoming 1.30.0 release, scheduled for October 25, 2018.JsValue
of a Closure<T>
type can now be extracted at any time.--wasm2asm
flag of wasm2es6js
was removed because the wasm2asm
tool has been removed from upstream Binaryen. This is replaced with the new wasm2js
tool from Binaryen.wasm-bindgen
crate now has a links
key which forbids multiple versions of wasm-bindgen
from being linked into a dependency graph, fixing obscure linking errors with a more first-class error message.Released 2018-08-27.
js-sys
for some WebAssembly
types.js-sys
for some Intl
types.js-sys
for some String
methods.fetch
API.extends
annotations for types in js-sys
.WeakRef
was added to automatically deallocate Rust objects when gc'd.wasm-bindgen
over modules that import their memory.memory()
function in the wasm-bindgen
crate for accessing the JS object that represent wasm's own memory.AsMut
implementations for imported objects.constructor
and catch
attributes combined on imported types.Released 2018-08-16.
js-sys
for Intl.DateTimeFormat
extends
attributes for types in js-sys
proc-macro2
module
pathsReleased 2018-08-13.
wasm_bindgen::JsCast
trait, as described in RFC #2.#[wasm_bindgen(extends = ...)]
attribute to describe inheritance relationships, as described in RFC #2.Option<&T>
parameters from JavaScript in exported Rust functions and methods.Option<u32>
and other option-wrapped scalars.#[wasm_bindgen]
attribute and how it affects the generated bindings.wasm-bindgen-futures
crate for converting between JS Promise
s and Rust Future
s.JsValue
and deserialize JsValue
s back into complex data.Promise
's static methods.syn
's visit-mut
cargo feature, which should result in faster build times.#[wasm_bindgen]
proc-macro are now properly reported with source span information, rather than panic!()
s inside the proc-macro.#[wasm_bindgen(js_class = "....")]
attribute for binding methods to renamed imported JS classes now properly works with constructors.Released 2018-07-26.
wasm-bindgen
CLI version mismatch checks that got broken in the last point release.Released 2018-07-25.
Released 2018-07-22.
#[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 using camelCase
in JS and snake_case
in RustReleased 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!
Option<T>
was added where T
can be a number of slices or imported types.--keep-debug
flag has been added to the CLI to retain debug sections by default. This happens by default when --debug
is passed.#![deny(missing_docs)]
has been fixed.Released 2018-05-24.
Released 2018-05-17.
Released 2018-05-11.