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:
- Loading WebAssembly code, using the
WebAssembly.instantiate()
function. - Creating new memory and table instances via the
WebAssembly.Memory()
/WebAssembly.Table()
constructors. - Providing facilities to handle errors that occur in WebAssembly via the
WebAssembly.CompileError()
/WebAssembly.LinkError()
/WebAssembly.RuntimeError()
constructors.
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 WebAssemblyInstance
. 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 firstInstance
. WebAssembly.instantiateStreaming()
-
Compiles and instantiates a WebAssembly module directly from a streamed underlying source, returning both a
Module
and its firstInstance
. 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
Specification |
---|
WebAssembly JavaScript Interface # webassembly-namespace |
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