AssemblyScript

AssemblyScript has included support for targeting WASI since version 0.10.0. To use it, add import "wasi" at the top of your entrypoint file.

Let's walk through a simple hello world example using the latest AssemblyScript runtime (at the time of this writing, it is AssemblyScript runtime included in version 0.19.x):

wasi-hello-world.ts

import "wasi"
// Import the WASI environment and additional WASI-enabled APIs
console.log('Hello World!\n');
// Call AssemblyScript console.log which in turn calls WASI

This uses as-wasi as a dependency to make working with the AssemblyScript WASI bindings easier. Then, you can run:

asc wasi-hello-world.ts -b wasi-hello-world.wasm

to compile it to wasm, and

wasmtime wasi-hello-world.wasm

to run it from the command-line. Or you can instantiate it using the Wasmtime API.

package.json

It can also be packaged using a package.json file:

{
  "name": "wasi-hello-world",
  "version": "1.0.0",
  "description": "Hello world in Wasi with AS and as-wasi",
  "main": "index.js",
  "scripts": {
    "build": "asc wasi-hello-world.ts --target helloworld",
    "wasmtime": "wasmtime ./build/wasi-hello-world.wasm"
  },
  "author": "Aaron Turner",
  "contributors": [
    "Jairus Tanaka (JairusSW)"
  ],
  "license": "MIT",
  "devDependencies": {
    "assemblyscript": "^0.20.7"
  },
  "dependencies": {}
}

You can also browse this source code online and clone the wasmtime repository to run the example locally.