WebAssembly.compileStreaming()

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.compileStreaming() static method compiles a WebAssembly.Module directly from a streamed underlying source. This function is useful if it is necessary to compile a module before it can be instantiated (otherwise, the WebAssembly.instantiateStreaming() function should be used).

Note: Webpages that have strict Content Security Policy (CSP) might block WebAssembly from compiling and executing modules. For more information on allowing WebAssembly compilation and execution, see the script-src CSP.

Syntax

js
WebAssembly.compileStreaming(source)

Parameters

source

A Response object or a promise that will fulfill with one, representing the underlying source of a Wasm module you want to stream and compile.

Return value

A Promise that resolves to a WebAssembly.Module object representing the compiled module.

Exceptions

  • If source is not a Response or Promise resolving to a Response, the promise rejects with a TypeError.
  • If compilation fails, the promise rejects with a WebAssembly.CompileError.
  • If the source is a Promise that rejects, the promise rejects with the error.
  • If the source's Result has an error (e.g. bad MIME type), the promise rejects with an error.

Examples

Compile streaming

The following example (see our compile-streaming.html demo on GitHub, and view it live also) directly streams a Wasm module from an underlying source then compiles it to a WebAssembly.Module object. Because the compileStreaming() function accepts a promise for a Response object, you can directly pass it a Promise from calling fetch(), without waiting for the promise to fulfill.

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

WebAssembly.compileStreaming(fetch("simple.wasm"))
  .then((module) => WebAssembly.instantiate(module, importObject))
  .then((instance) => instance.exports.exported_func());

The resulting module instance is then instantiated using WebAssembly.instantiate(), and the exported function invoked.

Specifications

Specification
WebAssembly Web API
# dom-webassembly-compilestreaming

Browser compatibility

BCD tables only load in the browser

See also