wasi

Wasmtime Binding

Providers

Do not understand these things.

Seems Wasi has providers. wasi_snapshot_preview1.wasm was the original provider. It provided a bunch of APIs to read environemt variables, command line arguments, stdio, and file access.

preview2 is under works, with lot more APIs. Provider 1 was done using witx, and provider 2 is being developed using wit.

wasi-cloud-core

This is a collection of wasi proposals to create a "cloud code".
  • wasi-keyvalue
  • wasi-messaging
  • wasi-http
  • wasi-runtime-config
  • wasi-distributed-lock-service
  • wasi-sql
  • wasi-blob-store

browser_wasi_shim

import { WASI, File, OpenFile, PreopenDirectory } from "@bjorn3/browser_wasi_shim";

let args = ["bin", "arg1", "arg2"];
let env = ["FOO=bar"];
let fds = [
    new OpenFile(new File([])), // stdin
    new OpenFile(new File([])), // stdout
    new OpenFile(new File([])), // stderr
    new PreopenDirectory(".", {
        "example.c": new File(new TextEncoder("utf-8").encode(`#include "a"`)),
        "hello.rs": new File(new TextEncoder("utf-8").encode(`fn main() { println!("Hello World!"); }`)),
    }),
];
let wasi = new WASI(args, env, fds);

let wasm = await WebAssembly.compileStreaming(fetch("bin.wasm"));
let inst = await WebAssembly.instantiate(wasm, {
    "wasi_snapshot_preview1": wasi.wasiImport,
});
wasi.start(inst);