wasm-bindgen Change LogReleased 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] enums. #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 longe 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 implementd 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 themslves. #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, although support has not fully landed in wasm-pack yet so it's not 100% integrated. #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 fot 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.
enums. 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 Uint8ClampedArrays.
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 Proxys 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.DateTimeFormatextends attributes for types in js-sysproc-macro2module 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 Promises and Rust Futures.JsValue and deserialize JsValues 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.