Bun

Node.js module

wasi

The 'node:wasi' module provides an implementation of the WebAssembly System Interface (WASI), allowing WASI-compliant WebAssembly modules to run in Node.js with access to file systems, clocks, and other host functions.

It includes WASI class for instantiating and executing WASI modules with configurable filesystem and environment.

Works in Bun

Partially implemented. Specific missing features are not detailed.

  • class WASI

    The WASI class provides the WASI system call API and additional convenience methods for working with WASI-based applications. Each WASI instance represents a distinct environment.

    • readonly wasiImport: Dict<any>

      wasiImport is an object that implements the WASI system call API. This object should be passed as the wasi_snapshot_preview1 import during the instantiation of a WebAssembly.Instance.

    • getImportObject(): object;

      Return an import object that can be passed to WebAssembly.instantiate() if no other WASM imports are needed beyond those provided by WASI.

      If version unstable was passed into the constructor it will return:

      { wasi_unstable: wasi.wasiImport }
      

      If version preview1 was passed into the constructor or no version was specified it will return:

      { wasi_snapshot_preview1: wasi.wasiImport }
      
    • instance: object
      ): void;

      Attempt to initialize instance as a WASI reactor by invoking its _initialize() export, if it is present. If instance contains a _start() export, then an exception is thrown.

      initialize() requires that instance exports a WebAssembly.Memory named memory. If instance does not have a memory export an exception is thrown.

      If initialize() is called more than once, an exception is thrown.

    • instance: object
      ): number;

      Attempt to begin execution of instance as a WASI command by invoking its _start() export. If instance does not contain a _start() export, or if instance contains an _initialize() export, then an exception is thrown.

      start() requires that instance exports a WebAssembly.Memory named memory. If instance does not have a memory export an exception is thrown.

      If start() is called more than once, an exception is thrown.

Type definitions

  • interface WASIOptions

    • args?: string[]

      An array of strings that the WebAssembly application will see as command line arguments. The first argument is the virtual path to the WASI command itself.

    • env?: object

      An object similar to process.env that the WebAssembly application will see as its environment.

    • preopens?: Dict<string>

      This object represents the WebAssembly application's sandbox directory structure. The string keys of preopens are treated as directories within the sandbox. The corresponding values in preopens are the real paths to those directories on the host machine.

    • returnOnExit?: boolean

      By default, when WASI applications call __wasi_proc_exit() wasi.start() will return with the exit code specified rather than terminatng the process. Setting this option to false will cause the Node.js process to exit with the specified exit code instead.

    • stderr?: number

      The file descriptor used as standard error in the WebAssembly application.

    • stdin?: number

      The file descriptor used as standard input in the WebAssembly application.

    • stdout?: number

      The file descriptor used as standard output in the WebAssembly application.

    • version: 'unstable' | 'preview1'

      The version of WASI requested. Currently the only supported versions are 'unstable' and 'preview1'. This option is mandatory.