WebAssembly and Friends Roadmap
NOTE: This schedule is tentative and subject to change.
Upcoming Features
Target: Chrome M62 - October 24, 2017
Wasm SIMD (prototype)
- Adds support for SIMD (vector math) operations to WebAssembly.
- Wasm SIMD will have support for roughly the portable set of SIMD operations originally planned for SIMD.js.
- NOTE: This feature does not yet have widespread support from all Wasm
- implementors and may change significantly. This time estimate mainly relates to
- prototype support in Chrome, behind a flag.
Target: Chrome M64 - January 30, 2018
Wasm - Threads
- Add WebAssembly support for shared memory threads.
- We're actively working to standardize SharedArrayBuffer compatible threads for WebAssembly. As this extension to WebAssembly has not yet been standardized, this is a general estimate.
Wasm - postMessage
- Adds the ability to postMessage a WebAssembly.Module to Web Workers.
- Our M57 Wasm launch did not include support for this aspect of the WebAssembly Web embedding.
- This is one of the requirements for multi-threaded Wasm.
Wasm - IndexedDB
- Adds the ability to serialize a WebAssembly.Module to IndexedDB.
- Our M57 Wasm launch did not include support for this aspect of the WebAssembly Web embedding.
- This feature enables explicit caching in IDB.
Wasm - OOB Traps
Linux
- Optimization allowing 64-bit systems to avoid performing Out-Of-Bounds checks by using hardware fault handling in combination with clever memory layout.
- Improves performance of applications by 10-25%.
Wasm - Streaming Compile
- Allows WebAssembly to compile while still being downloaded.
- Building on the WebAssembly Response based API, WebAssembly will be able to compile while still being downloaded, with the granularity of individual functions.
- This will allow applications to hide the cost of compilation behind download costs.
Wasm - Shared Code
- Make WebAssembly threads use substantially less memory.
- By making WebAssembly module generated code less content dependent, multiple Web Workers will be able to share a single copy of the underlying machine code.
Wasm - Execute from Cache
- Allow cached WebAssembly code to start faster with less resident memory.
- By enabling Chrome's storage layer to memory map cached WebAssembly code, enable quick, lazy load of WebAssembly cached code, comparable to how native applications start.
Target: Chrome M65 - March 13, 2018
Wasm - CSP Support
- Allows pages that have locked down security policies to use WebAssembly.
- A Content Security Policy can be used to limit the scripting resources used by your Web App. The Response based API will allow WebAssembly to run inside a strict CSP that forbids "unsafe-eval".
Target: Chrome M66 - April 24, 2018
Wasm - OOB Traps
Windows
- Optimization allowing 64-bit systems to avoid performing Out-Of-Bounds checks by using hardware fault handling in combination with clever memory layout.
- Improves performance of applications by 10-25%.
Wasm - Exceptions
- Add support for fast exception handling to WebAssembly.
- This feature has not yet been standardized, but there is growing consensus.
- Proposal
Target: Chrome M67 - June 05, 2018
Wasm - OOB Traps
OSX
- Optimization allowing 64-bit systems to avoid performing Out-Of-Bounds checks by using hardware fault handling in combination with clever memory layout.
- Improves performance of applications by 10-25%.
Historical
Chrome M56 - January 31, 2017
WebGL 2
- WebGL 2.0 shipped in Chrome M56.
Chrome M57 - March 14, 2017
WebAssembly MVP
- WebAssembly shipped in Chrome M57, bringing a same, fast, and efficient low level code format to the Web.
- Implementations are in development in all major engines.
- Intent to Implement
- Intent to Ship
Chrome M60 - August 01, 2017
SharedArrayBuffer
- SharedArrayBuffers bring shared memory to JavaScript.
- Opens the door to new synchronization patterns in the browser. Worker threads are allowed to block waiting for data from other threads.
- SharedArrayBuffers pave the way for WebAssembly threads, which will be inter-operable.
- Documentation
- Intent to Implement
- Intent to Ship
Chrome M61 - September 12, 2017
asm.js -> WebAssembly
- One of the precursors of WebAssembly, asm.js, embeds machine level code in subset of JavaScript.
- Explicit validation of asm.js code and conversion to WebAssembly will offer more consistent asm.js performance, and a path to support this content during the transition to WebAssembly.
- asm.js Spec
Wasm True-Async
- Allows WebAssembly compilation to happen in the background.
- Our M57 Wasm launch provided an asynchronous API for compiling and instantiating WebAssembly code. Unfortunately, our implementation in Chrome M57 - M59 does not actually perform these actions in the background. Starting in M61, the correct performance behavior will occur, preventing janky behavior when compiling Wasm.
Wasm Response
- Adds an API to compile directly from a fetched URL.
- Browsers have agreed on an extension to the Web embedding on WebAssembly that provides a Response object based way to compile and instantiate Wasm code. The Response object (a promise for which is returned by the fetch API), is origin bound.
- This will allow CSP based applications to function when using WebAssembly (even with unsafe-eval disallowed).
- Additionally, this API will seamlessly support streaming compilation when it becomes available.
- Web Embedding