Wasmer JS
This repository consists of multiple packages:
Wasmer WASI
Isomorphic Javascript library for interacting with WASI Modules in Node.js, the Browser and Deno
NPM
For instaling @wasmer/wasi
run this command in your shell:
npm install --save @wasmer/wasi
And then import it in your server or client-side code with:
import { init, WASI } from '@wasmer/wasi';
Deno
This package is published in Deno in the wasm
package, you can import it direclty with:
import { init, WASI } from 'https://deno.land/x/wasm/wasi.ts';
Usage
// This is needed to load the WASI library first (since is a Wasm module)
await init();
let wasi = new WASI({
env: {
// 'ENVVAR1': '1',
// 'ENVVAR2': '2'
},
args: [
// 'command', 'arg1', 'arg2'
],
});
const moduleBytes = fetch("https://deno.land/x/wasm/tests/demo.wasm");
const module = await WebAssembly.compileStreaming(moduleBytes);
// Instantiate the WASI module
await wasi.instantiate(module, {});
// Run the start function
let exitCode = wasi.start();
let stdout = wasi.getStdoutString();
// This should print "hello world (exit code: 0)"
console.log(`${stdout}(exit code: ${exitCode})`);
Building
To build this library you will need to have installed in your system:
npm i
npm run build
Testing
Build the pkg and run the tests:
npm run build
npm run test
Pending things to implement
Currently, the Wasmer WASI implementation is only able to execute WASI packages and read the stdout.
- API to interact with the in-memory filesystem
What is WebAssembly?
Quoting the WebAssembly site:
WebAssembly (abbreviated Wasm) is a binary instruction format for a stack-based virtual machine. Wasm is designed as a portable target for compilation of high-level languages like C/C++/Rust, enabling deployment on the web for client and server applications.
About speed:
WebAssembly aims to execute at native speed by taking advantage of common hardware capabilities available on a wide range of platforms.
About safety:
WebAssembly describes a memory-safe, sandboxed execution environment […].
License
The entire project is under the MIT License. Please read the
LICENSE
file.