W3cubDocs

/JavaScript

WebAssembly

The WebAssembly JavaScript object acts as the namespace for all WebAssembly-related functionality.

Unlike most other global objects, WebAssembly is not a constructor (it is not a function object). You can compare it to Math, which is also a namespace object for mathematical constants and functions, or to Intl which is the namespace object for internationalization constructors and other language sensitive functions.

Description

The primary uses for the WebAssembly object are:

Methods

WebAssembly.instantiate()
The primary API for compiling and instantiating WebAssembly code, returning both a Module and its first Instance.
WebAssembly.instantiateStreaming()
Compiles and instantiates a WebAssembly module directly from a streamed underlying source, returning both a Module and its first Instance.
WebAssembly.compile()
Compiles a WebAssembly.Module from WebAssembly binary code, leaving instantiation as a separate step.
WebAssembly.compileStreaming()
compiles a WebAssembly.Module directly from a streamed underlying source, leaving instantiation as a separate step.
WebAssembly.validate()
Validates a given typed array of WebAssembly binary code, returning whether the bytes are valid WebAssembly code (true) or not (false).

Constructors

WebAssembly.Module()
Creates a new WebAssembly Module object.
WebAssembly.Instance()
Creates a new WebAssembly Instance object.
WebAssembly.Memory()
Creates a new WebAssembly Memory object.
WebAssembly.Table()
Creates a new WebAssembly Table object.
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

After fetching some WebAssembly bytecode using fetch, we compile and instantiate the module using the WebAssembly.instantiate() function, importing a JavaScript function into the WebAssembly Module in the process. This promise resolves to an object (result) containing the compiled Module and Instance objects. We then call an Exported WebAssembly function that is exported by the Instance.

var importObject = {
  imports: {
    imported_func: function(arg) {
      console.log(arg);
    }
  }
};

fetch('simple.wasm').then(response =>
  response.arrayBuffer()
).then(bytes =>
  WebAssembly.instantiate(bytes, importObject)
).then(result =>
  result.instance.exports.exported_func()
);

Note: See index.html on GitHub (view it live also) for an example that makes use of our fetchAndInstantiate() library function.

Specifications

Specification Status Comment
WebAssembly JavaScript API
The definition of 'WebAssembly' in that specification.
Draft Initial draft definition.

Browser compatibility

Feature Chrome Edge Firefox Internet Explorer Opera Safari
Basic support 57 16 522 No 44 11
CompileError 57 16 522 No 44 11
Instance 57 16 522 No 44 11
LinkError 57 16 522 No 44 11
Memory 57 16 522 No 44 11
Module 57 16 522 No 44 11
RuntimeError 57 16 522 No 44 11
Table 57 16 522 No 44 11
compile 57 16 522 No 44 11
compileStreaming 61 No 58 No 47 ?
instantiate 57 16 522 No 44 11
instantiateStreaming 61 No 58 No 47 ?
validate 57 16 522 No 44 11
Feature Android webview Chrome for Android Edge mobile Firefox for Android Opera Android iOS Safari Samsung Internet
Basic support 57 57 Yes1 522 ? 11 ?
CompileError 57 57 Yes1 522 ? 11 ?
Instance 57 57 Yes1 522 ? 11 ?
LinkError 57 57 Yes1 522 ? 11 ?
Memory 57 57 Yes1 522 ? 11 ?
Module 57 57 Yes1 522 ? 11 ?
RuntimeError 57 57 Yes1 522 ? 11 ?
Table 57 57 Yes1 522 ? 11 ?
compile 57 57 Yes1 522 ? 11 ?
compileStreaming 61 61 No 58 ? ? ?
instantiate 57 57 Yes1 522 ? 11 ?
instantiateStreaming 61 61 No 58 ? ? ?
validate 57 57 Yes1 522 ? 11 ?

1. This feature is behind the Experimental JavaScript Features preference.

2. Disabled in the Firefox 52 Extended Support Release (ESR).

See also

© 2005–2018 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly