WebAssembly.Instance() constructor

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since October 2017.

The WebAssembly.Instance() constructor creates a new Instance object which is a stateful, executable instance of a WebAssembly.Module.

Syntax

Warning: Since instantiation for large modules can be expensive, developers should only use the Instance() constructor when synchronous instantiation is absolutely required; the asynchronous WebAssembly.instantiateStreaming() method should be used at all other times.

js
new WebAssembly.Instance(module, importObject);

Parameters

module

The WebAssembly.Module object to be instantiated.

importObject Optional

An object containing the values to be imported into the newly-created Instance, such as functions or WebAssembly.Memory objects. There must be one matching property for each declared import of module or else a WebAssembly.LinkError is thrown.

Exceptions

Examples

Synchronously instantiating a WebAssembly module

The WebAssembly.Instance() constructor function can be called to synchronously instantiate a given WebAssembly.Module object, for example:

js
const importObject = {
  my_namespace: {
    imported_func(arg) {
      console.log(arg);
    },
  },
};

fetch("simple.wasm")
  .then((response) => response.arrayBuffer())
  .then((bytes) => {
    const mod = new WebAssembly.Module(bytes);
    const instance = new WebAssembly.Instance(mod, importObject);
    instance.exports.exported_func();
  });

However, the preferred way to get an Instance is through the asynchronous WebAssembly.instantiateStreaming() function, for example like this:

js
const importObject = {
  my_namespace: {
    imported_func(arg) {
      console.log(arg);
    },
  },
};

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

Specifications

Specification
WebAssembly JavaScript Interface
# dom-instance-instance

Browser compatibility

BCD tables only load in the browser

See also