{ "type": "module", "source": "doc/api/wasi.md", "modules": [ { "textRaw": "WebAssembly System Interface (WASI)", "name": "webassembly_system_interface_(wasi)", "introduced_in": "v12.16.0", "stability": 1, "stabilityText": "Experimental", "desc": "
The WASI API provides an implementation of the WebAssembly System Interface\nspecification. WASI gives sandboxed WebAssembly applications access to the\nunderlying operating system via a collection of POSIX-like functions.
\n'use strict';\nconst fs = require('fs');\nconst { WASI } = require('wasi');\nconst wasi = new WASI({\n args: process.argv,\n env: process.env,\n preopens: {\n '/sandbox': '/some/real/path/that/wasm/can/access'\n }\n});\nconst importObject = { wasi_snapshot_preview1: wasi.wasiImport };\n\n(async () => {\n const wasm = await WebAssembly.compile(fs.readFileSync('./binary.wasm'));\n const instance = await WebAssembly.instantiate(wasm, importObject);\n\n wasi.start(instance);\n})();\n
\nThe --experimental-wasi-unstable-preview1
and --experimental-wasm-bigint
\nCLI arguments are needed for the previous example to run.
The WASI
class provides the WASI system call API and additional convenience\nmethods for working with WASI-based applications. Each WASI
instance\nrepresents a distinct sandbox environment. For security purposes, each WASI
\ninstance must have its command line arguments, environment variables, and\nsandbox directory structure configured explicitly.
options
<Object>
args
<Array> An array of strings that the WebAssembly application will\nsee as command line arguments. The first argument is the virtual path to the\nWASI command itself. Default: []
.env
<Object> An object similar to process.env
that the WebAssembly\napplication will see as its environment. Default: {}
.preopens
<Object> This object represents the WebAssembly application's\nsandbox directory structure. The string keys of preopens
are treated as\ndirectories within the sandbox. The corresponding values in preopens
are\nthe real paths to those directories on the host machine.instance
<WebAssembly.Instance>Attempt to begin execution of instance
by invoking its _start()
export.\nIf instance
does not contain a _start()
export, then start()
attempts to\ninvoke the __wasi_unstable_reactor_start()
export. If neither of those exports\nis present on instance
, then start()
does nothing.
start()
requires that instance
exports a WebAssembly.Memory
named\nmemory
. If instance
does not have a memory
export an exception is thrown.
wasiImport
is an object that implements the WASI system call API. This object\nshould be passed as the wasi_snapshot_preview1
import during the instantiation\nof a WebAssembly.Instance
.