WebAssembly support

Deno can execute WebAssembly modules with the same interfaces that browsers provide.

  1. const wasmCode = new Uint8Array([
  2. 0, 97, 115, 109, 1, 0, 0, 0, 1, 133, 128, 128, 128, 0, 1, 96, 0, 1, 127,
  3. 3, 130, 128, 128, 128, 0, 1, 0, 4, 132, 128, 128, 128, 0, 1, 112, 0, 0,
  4. 5, 131, 128, 128, 128, 0, 1, 0, 1, 6, 129, 128, 128, 128, 0, 0, 7, 145,
  5. 128, 128, 128, 0, 2, 6, 109, 101, 109, 111, 114, 121, 2, 0, 4, 109, 97,
  6. 105, 110, 0, 0, 10, 138, 128, 128, 128, 0, 1, 132, 128, 128, 128, 0, 0,
  7. 65, 42, 11
  8. ]);
  9. const wasmModule = new WebAssembly.Module(wasmCode);
  10. const wasmInstance = new WebAssembly.Instance(wasmModule);
  11. const main = wasmInstance.exports.main as CallableFunction
  12. console.log(main().toString());

For files:

  1. const wasmCode = await Deno.readFile("main.wasm");
  2. const wasmModule = new WebAssembly.Module(wasmCode);
  3. const wasmInstance = new WebAssembly.Instance(wasmModule);
  4. const main = wasmInstance.exports.main as CallableFunction;
  5. console.log(main().toString());

And for loading WebAssembly modules over the network (note that the file must be served with application/wasm MIME type):

  1. const { instance, module } = await WebAssembly.instantiateStreaming(
  2. fetch("https://wpt.live/wasm/incrementer.wasm"),
  3. );
  4. const increment = instance.exports.increment as (input: number) => number;
  5. console.log(increment(41));