Wasm
Wasm runtime
The Wasm runtime enables the execution of functions authored in any language that can be compiled into WebAssembly and that follows the component model.
Common use cases:
- Integrating an existing WebAssembly component
 - Building language-agnostic services
 
Example
Here is a simple wit component description using wit IDL that exports the add function.
package example:host;
world host {
  export add: func(a: u32, b: u32) -> u32;
}
In your typegraph:
import { Policy, t, typegraph } from "@typegraph/sdk";
import { WasmRuntime } from "@typegraph/sdk/runtimes/wasm.js";
typegraph("example", (g) => {
  const pub = Policy.public();
  const wasm = WasmRuntime.reflected("path/to/your-compiled-component.wasm");
  g.expose({
    add: wasm
      .export(t.struct({ a: t.integer(), b: t.integer() }), t.integer(), {
        name: "add", // exported function
      })
      .withPolicy(pub),
  });
});
Wit to Typegraph types
Wit ensures that you have statically typed values backed directly in your component. You can refer to the correspondence table bellow in how the input/output values are shaped in your typegraph.
| wit | typegraph | Example values | 
|---|---|---|
string | t.string(), t.uuid() | "Hello world", "H", .. | 
u8, u16, u32, u64, s8, s16, s32, s64 | t.integer(), t.float() | 1, 2, 0, .. | 
f32, f64 | t.float() | 3.14, 100, 2, .. | 
char | t.string() (truncated), t.integer() (truncated as u8), t.float() (truncated as u8) | "A", 65, 65.0, .. | 
option<T> | <T>.optional() | null, "hello world", .. | 
list<T> | t.list(<T>) | ["one", "two" ], [1, 2], .. | 
tuple<T1, T2, ..> | t.list(t.enum([t1, t2, ..])) | [1, "one"], [2, "two"], .. | 
enum example { one, two } | t.enum(["one", "two"]) | "one", "two" | 
variant example { one(string), two } | t.struct({ "tag": t.enum(["one", "two"]), "value": t.string().optional() ) | { "tag": "two", "value": null } | 
record example { id: string, description: option<string> } | t.struct({ "id": t.integer(), "description": t.string().optional() ) | { "id": 123, "description": "some text"} | 
flags example { read, write, delete } | t.list(t.enum(["read", "write", "delete"])) | ["read"], ["read", "write", "delete"], .. |