wabt.js
wabt.js is a port of WABT to the Web, allowing you to manipulate WebAssembly modules using a JavaScript API.
Usage
$> npm install wabt
require("wabt")().then(wabt => {
var wasm = ...;
var myModule = wabt.readWasm(wasm, { readDebugNames: true });
myModule.applyNames();
var wast = myModule.toText({ foldExprs: false, inlineExport: false });
console.log(wast);
});
The buildbot also publishes nightly versions once a day if there have been changes. The latest nightly can be installed through
$> npm install --save-exact wabt@nightly
or you can use one of the previous versions instead if necessary. Note the --save-exact
when using a nightly.
Usage with a CDN
- From GitHub via jsDelivr:
https://cdn.jsdelivr.net/gh/AssemblyScript/wabt.js@VERSION/index.js
- From npm via jsDelivr:
https://cdn.jsdelivr.net/npm/wabt@VERSION/index.js
- From npm via UNPKG:
https://unpkg.com/wabt@VERSION/index.js
Replace VERSION
with a specific version or omit it (not recommended in production) to use main/latest.
API
-
parseWat(filename: string
, buffer: string | Uint8Array
, options?: WasmFeatures
): WasmModule
Parses a WebAssembly text format source to a module.
-
readWasm(buffer: Uint8Array
, options: ReadWasmOptions & WasmFeatures
): WasmModule
Reads a WebAssembly binary to a module.
-
WasmModule
A class representing a WebAssembly module.
- validate():
void
Validates the module. Throws if not valid. - resolveNames():
void
Resolves names to indexes. - generateNames():
void
Generates textual names for function types, globals, labels etc. - applyNames():
void
Applies textual names. Throws on error. - toText(options:
ToTextOptions
): string
Converts the module to wat text format. - toBinary(options:
ToBinaryOptions
): ToBinaryResult
Converts the module to a wasm binary. - destroy():
void
Disposes the module and frees its resources.
-
ReadWasmOptions
Options modifying the behavior of readWasm
.
- readDebugNames:
boolean
Reads textual names from the name section.
-
ToTextOptions
Options modifying the behavior of WasmModule#toText
.
- foldExprs:
boolean
- inlineExport:
boolean
-
ToBinaryOptions
Options modifying the behavior of WasmModule#toBinary
.
- log:
boolean
- canonicalize_lebs:
boolean
- relocatable:
boolean
- write_debug_names:
boolean
-
ToBinaryResult
Result object of WasmModule#toBinary
.
- buffer:
Uint8Array
The wasm binary buffer. - log:
string
Generated log output.
-
WasmFeatures
WebAssembly features to legalize. Finished features are enabled by default.
- exceptions:
boolean
Exception handling (proposal). - mutable_globals:
boolean
Import/Export mutable globals (proposal). - sat_float_to_int:
boolean
Non-trapping Float-to-int Conversions (proposal). - sign_extension:
boolean
Sign-extension operators (proposal). - simd:
boolean
128-bit packed SIMD (proposal). - threads:
boolean
Threading (proposal). - function_references:
boolean
Typed function references (proposal). - multi_value:
boolean
Multi-value (proposal). - tail_call:
boolean
Tail Call (proposal). - bulk_memory:
boolean
Bulk Memory Operations and Conditional Segment Initialization (proposal). - reference_types:
boolean
Reference Types (proposal). - annotations:
boolean
Custom Annotation Syntax for the Wasm Text Format (proposal). - code_metadata:
boolean
Code metadata (convention). - gc:
boolean
Garbage collection (proposal). - memory64:
boolean
64-bit memory (proposal). - extended_const:
boolean
Extended constant expressions (proposal). - relaxed_simd:
boolean
Relaxed SIMD (proposal).
CLI
Node.js ports of the following command line tools are included in the package as well:
- wasm2c converts a WebAssembly binary file to a C source and header.
- wasm2wat translates from WebAssembly binary format to text format.
- wat2wasm translates from WebAssembly text format to binary format.
- wasm-decompile decompiles a wasm binary into readable C-like syntax.
- wasm-interp decodes and runs a WebAssembly binary file using a stack-based interpreter.
- wasm-objdump prints information about a wasm binary. Similiar to objdump.
- wasm-stats shows stats for a WebAssembly module.
- wasm-strip removes sections of a WebAssembly binary file.
- wasm-validate validates a file in WebAssembly binary format.
The tools can also be run ad hoc (without explicitly installing the package), for example with:
$> npx -p wabt wasm2wat myModule.wasm -o myModule.wat