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:

Constructor properties

WebAssembly.CompileError()

Indicates an error during WebAssembly decoding or validation.

WebAssembly.Global()

Represents a global variable instance, accessible from both JavaScript and importable/exportable across one or more WebAssembly.Module instances. This allows dynamic linking of multiple modules.

WebAssembly.Instance()

Is a stateful, executable instance of a WebAssembly.Module

WebAssembly.LinkError()

Indicates an error during module instantiation (besides traps from the start function).

WebAssembly.Memory()

An object whose buffer property is a resizable ArrayBuffer that holds the raw bytes of memory accessed by a WebAssembly Instance.

WebAssembly.Module()

Contains stateless WebAssembly code that has already been compiled by the browser and can be efficiently shared with Workers, and instantiated multiple times.

WebAssembly.RuntimeError()

Error type that is thrown whenever WebAssembly specifies a trap.

WebAssembly.Table()

An array-like structure representing a WebAssembly Table, which stores function references.

Static 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).

Examples

Stream a .wasm module then compile and instantiate it

The following example (see our instantiate-streaming.html demo on GitHub, and view it live also) directly streams a .wasm module from an underlying source then compiles and instantiates it, the promise fulfilling with a ResultObject. Because the instantiateStreaming() function accepts a promise for a Response object, you can directly pass it a fetch() call, and it will pass the response into the function when it fulfills.

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

WebAssembly.instantiateStreaming(fetch('simple.wasm'), importObject)
.then(obj => obj.instance.exports.exported_func());

The ResultObject's instance member is then accessed, and the contained exported function invoked.

Specifications

Browser compatibility

Desktop Mobile
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari on IOS Samsung Internet
CompileError
57
16
52
Disabled in the Firefox 52 Extended Support Release (ESR).
No
44
11
57
57
52
Disabled in the Firefox 52 Extended Support Release (ESR).
43
11
7.0
Global
69
79
62
No
No
13.1
69
69
62
No
13.4
10.0
Instance
57
16
52
Disabled in the Firefox 52 Extended Support Release (ESR).
No
44
11
57
57
52
Disabled in the Firefox 52 Extended Support Release (ESR).
43
11
7.0
LinkError
57
16
52
Disabled in the Firefox 52 Extended Support Release (ESR).
No
44
11
57
57
52
Disabled in the Firefox 52 Extended Support Release (ESR).
43
11
7.0
Memory
57
16
52
Disabled in the Firefox 52 Extended Support Release (ESR).
No
44
11
57
57
52
Disabled in the Firefox 52 Extended Support Release (ESR).
43
11
7.0
Module
57
16
52
Disabled in the Firefox 52 Extended Support Release (ESR).
No
44
11
57
57
52
Disabled in the Firefox 52 Extended Support Release (ESR).
43
11
7.0
RuntimeError
57
16
52
Disabled in the Firefox 52 Extended Support Release (ESR).
No
44
11
57
57
52
Disabled in the Firefox 52 Extended Support Release (ESR).
43
11
7.0
Table
57
16
52
Disabled in the Firefox 52 Extended Support Release (ESR).
No
44
11
57
57
52
Disabled in the Firefox 52 Extended Support Release (ESR).
43
11
7.0
WebAssembly
57
16
52
Disabled in the Firefox 52 Extended Support Release (ESR).
No
44
11
57
57
52
Disabled in the Firefox 52 Extended Support Release (ESR).
43
11
7.0
compile
57
16
52
Disabled in the Firefox 52 Extended Support Release (ESR).
No
44
11
57
57
52
Disabled in the Firefox 52 Extended Support Release (ESR).
43
11
7.0
compileStreaming
61
16
58
No
47
15
61
61
58
45
15
8.0
instantiate
57
16
52
Disabled in the Firefox 52 Extended Support Release (ESR).
No
44
11
57
57
52
Disabled in the Firefox 52 Extended Support Release (ESR).
43
11
7.0
instantiateStreaming
61
16
58
No
47
15
61
61
58
45
15
8.0
validate
57
16
52
Disabled in the Firefox 52 Extended Support Release (ESR).
No
44
11
57
57
52
Disabled in the Firefox 52 Extended Support Release (ESR).
43
11
7.0

See also

© 2005–2021 MDN 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