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