WebAssembly

Overview Demo Design Specification Community Group Step by Step

WebAssembly or wasm is a new portable, size- and load-time-efficient format suitable for compilation to the web.

WebAssembly is currently being designed as an open standard by a W3C Community Group that includes representatives from all major browsers. Expect the contents of this website and its associated design repositories to be in flux: everything is still under discussion and subject to change.

Overview

  • Efficient and fast: The wasm AST is designed to be encoded in a size- and load-time-efficient binary format. WebAssembly aims to execute at native speed by taking advantage of common hardware capabilities available on a wide range of platforms.

  • Safe: WebAssembly describes a memory-safe, sandboxed execution environment that may even be implemented inside existing JavaScript virtual machines. When embedded in the web, WebAssembly will enforce the same-origin and permissions security policies of the browser.

  • Open and debuggable: WebAssembly is designed to be pretty-printed in a textual format for debugging, testing, experimenting, optimizing, learning, teaching, and writing programs by hand. The textual format will be used when viewing the source of wasm modules on the web.

  • Part of the open web platform: WebAssembly is designed to maintain the versionless, feature-tested, and backwards-compatible nature of the web. WebAssembly modules will be able to call into and out of the JavaScript context and access browser functionality through the same Web APIs accessible from JavaScript. WebAssembly also supports non-web embeddings.

Read the project's high-level goals and consult the FAQ section for more information.

Roadmap

MVP Soon after MVP Future versions
asm.js functional parity threads finer-grained memory control
validation semantics shared memory large page support
execution semantics dynamic linking more expressive control flow
module semantics zero-cost exceptions GC/DOM integration
binary encoding fixed-width SIMD linear memory >4GiB
textual format ... and more
cross-browser support
polyfill-able in JS

SDK

For bleeding edge compilation of C/C++ or asm.js to WebAssembly, see the instructions for Binaryen, a derivative of Emscripten.

Contributing

The actual WebAssembly specification is being developed in the spec repository. For now, high-level design discussions should continue to be held in the design repository, via issues and pull requests, so that the spec work can remain focused.

Join us:

The WebAssembly waterfall builds, executes, and archives different components of the WebAssembly project, enabling end-to-end integration tests of LLVM compilation and execution in d8 and the Binaryen interpreter.

When contributing, please follow our Code of Ethics and Professional Conduct.