WebAssembly.instantiate() - WebAssembly | MDN
Syntax
js
// Taking Wasm binary code
WebAssembly.instantiate(bufferSource)
WebAssembly.instantiate(bufferSource, importObject)
WebAssembly.instantiate(bufferSource, importObject, compileOptions)
// Taking a module object instance
WebAssembly.instantiate(module)
WebAssembly.instantiate(module, importObject)
WebAssembly.instantiate(module, importObject, compileOptions)
Parameters
bufferSource-
A typed array or
ArrayBuffercontaining the binary code of the Wasm module you want to compile. module-
The
WebAssembly.Moduleobject to be instantiated. importObjectOptional-
An object containing the values to be imported into the newly-created
Instance, such as functions orWebAssembly.Memoryobjects. There must be one matching property for each declared import of the compiled module or else aWebAssembly.LinkErroris thrown. compileOptionsOptional-
An object containing compilation options. Properties can include:
builtinsOptional-
An array of strings that enables the usage of JavaScript builtins in the compiled Wasm module. The strings define the builtins you want to enable. Currently the only available value is
"js-string", which enables JavaScript string builtins. importedStringConstantsOptional-
A string specifying a namespace for imported global string constants. This property needs to be specified if you wish to use imported global string constants in the Wasm module.
Return value
If a bufferSource is passed, returns a Promise that resolves to a ResultObject which contains two
fields:
module: AWebAssembly.Moduleobject representing the compiled WebAssembly module. ThisModulecan be instantiated again, shared viapostMessage(), or cached.instance: AWebAssembly.Instanceobject that contains all the Exported WebAssembly functions.
If a module is passed, returns a Promise that resolves to a WebAssembly.Instance object.
Exceptions
- If either of the parameters are not of the correct type or structure,
the promise rejects with a
TypeError. - If the operation fails, the promise rejects with a
WebAssembly.CompileError,WebAssembly.LinkError, orWebAssembly.RuntimeError, depending on the cause of the failure.
Examples
First overload example
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. We then call an Exported WebAssembly function
that is exported by the Instance.
js
const importObject = {
my_namespace: {
imported_func(arg) {
console.log(arg);
},
},
};
fetch("simple.wasm")
.then((response) => response.arrayBuffer())
.then((bytes) => WebAssembly.instantiate(bytes, importObject))
.then((result) => result.instance.exports.exported_func());
Second overload example
The following example (see our index-compile.html
demo on GitHub, and view it live also)
compiles the loaded simple.wasm byte code using the
WebAssembly.compileStreaming() method and then sends it to a worker using
postMessage().
js
const worker = new Worker("wasm_worker.js");
WebAssembly.compileStreaming(fetch("simple.wasm")).then((mod) =>
worker.postMessage(mod),
);
In the worker (see
wasm_worker.js)
we define an import object for the module to use, then set up an event handler to
receive the module from the main thread. When the module is received, we create an
instance from it using the WebAssembly.instantiate() method and invoke an
exported function from inside it.
js
const importObject = {
my_namespace: {
imported_func(arg) {
console.log(arg);
},
},
};
onmessage = (e) => {
console.log("module received from main thread");
const mod = e.data;
WebAssembly.instantiate(mod, importObject).then((instance) => {
instance.exports.exported_func();
});
};
Enabling JavaScript builtins and global string imports
This example enables JavaScript string builtins and imported global string constants when compiling and instantiating the Wasm module with instantiate(), before running the exported main() function (which logs "hello world!" to the console). See it running live.
js
const importObject = {
// Regular import
m: {
log: console.log,
},
};
const compileOptions = {
builtins: ["js-string"], // Enable JavaScript string builtins
importedStringConstants: "string_constants", // Enable imported global string constants
};
fetch("log-concat.wasm")
.then((response) => response.arrayBuffer())
.then((bytes) => WebAssembly.instantiate(bytes, importObject, compileOptions))
.then((result) => result.instance.exports.main());
Specifications
| Specification |
|---|
| WebAssembly JavaScript Interface # dom-webassembly-instantiate |