This is an experimental technology
Because this technology's specification has not stabilized, check the compatibility table for usage in various browsers. Also note that the syntax and behavior of an experimental technology is subject to change in future versions of browsers as the specification changes.
WebAssembly is a new type of code that can be run in modern web browsers — it is a low-level assembly-like language with a compact binary format that runs with near-native performance and provides languages such as C/C++ with a compilation target so that they can run on the web. It is also designed to run alongside JavaScript, allowing both to work together.
In a Nutshell
WebAssembly has huge implications for the web platform — it will provide a way to run code written in multiple languages on the web at near native speed, with client apps running on the web that previously couldn’t have done so.
WebAssembly is designed to complement and run alongside JavaScript — using the WebAssembly JavaScript APIs, you can load WebAssembly modules into a JavaScript app and share functionality between the two. This allows you to take advantage of WebAssembly's performance and power and JavaScript's expressiveness and flexibility in the same apps, even if you don't know how to write WebAssembly code.
And what's even better is that it is being developed as a web standard via the W3C WebAssembly Community Group with active participation from all major browser vendors.
Guides
- WebAssembly concepts
- Get started by reading the high-level concepts behind WebAssembly — what it is, why it is so useful, how it fits into the web platform (and beyond), and how to use it.
- Compiling from C/C++ to WebAssembly
- When you’ve written code in C/C++, you can then compile it into .wasm using a tool like Emscripten. Let’s look at how it works.
- Loading and running WebAssembly code
- After you have a .wasm, this article covers how to fetch, compile and instantiate it, combining the WebAssembly JavaScript API with the Fetch or XHR APIs.
- Caching compiled WebAssembly modules
- Caching large WebAssembly modules on the client is useful for improving app startup performance. This article explains how to use this using IndexedDB.
- Using the WebAssembly JavaScript API
- Once you've loaded a .wasm module, you'll want to use it. In this article we show you how to use WebAssembly via the WebAssembly JavaScript API.
- Exported WebAssembly functions
- Exported WebAssembly functions are the JavaScript reflections of WebAssembly functions and allow calling WebAssembly code from JavaScript. This article describes what they are.
- Understanding WebAssembly text format
- This article explains the wasm text format. This is the low-level textual representation of a .wasm module shown in browser developer tools when debugging.
- Converting WebAssembly text format to wasm
- This article provides a guide on how to convert a WebAssembly module written in the text format into a .wasm binary.
API reference
WebAssembly
- This object acts as the namespace for all WebAssembly related functionality.
WebAssembly.Module
- A
WebAssembly.Module
object contains stateless WebAssembly code that has already been compiled by the browser and can be efficiently shared with Workers, cached in IndexedDB, and instantiated multiple times. WebAssembly.Instance
- A
WebAssembly.Instance
object is a stateful, executable instance of aModule
.Instance
objects contain all the Exported WebAssembly functions that allow calling into WebAssembly code from JavaScript. WebAssembly.instantiate()
- The
WebAssembly.instantiate()
function is the primary API for compiling and instantiating WebAssembly code, returning both aModule
and its firstInstance
. WebAssembly.Memory()
- A
WebAssembly.
Memory
object is a resizableArrayBuffer
that holds the raw bytes of memory accessed by anInstance
. WebAssembly.Table()
- A
WebAssembly.
Table
object is a resizable typed array of opaque values, like function references, that are accessed by anInstance
. WebAssembly.CompileError()
- Creates a new WebAssembly
CompileError
object. WebAssembly.LinkError()
- Creates a new WebAssembly
LinkError
object. WebAssembly.RuntimeError()
- Creates a new WebAssembly
RuntimeError
object.
Examples
- WASMSobel
- See our webassembly-examples repo for a number of other examples.
Specifications
Specification | Status | Comment |
---|---|---|
Web Assembly JavaScript API | Draft | Initial draft definition of the JavaScript API. |
Browser compatibility
Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|---|
Basic support | 57 | 15[2] | 52 (52)[1] | No support | 44 | 11 |
Feature | Android Webview | Chrome for Android | Edge Mobile | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|---|
Basic support | 57 | 57 | No support | 52.0 (52)[1] | No support | No support | 11 |
[1] WebAssembly is enabled in Firefox 52+, although disabled in the Firefox 52 Extended Support Release (ESR.)
[2] Currently supported behind the “Experimental JavaScript Features” flag. See this blog post for more details.