tairitsu 0.5.14

Core WASM Component Model runtime — Container, Registry, WIT binding, RON/Binary interop
Documentation

Tairitsu - Generic WASM Component Runtime Engine

This framework provides Docker-like image/container mechanisms for running WASM components. It does not prescribe any specific WIT interface - users define their own.

Architecture

  • [Image] - Represents a compiled WASM component (like a Docker image)
  • [Container] - Represents a running instance of an Image (like a Docker container)
  • [Registry] - Manages multiple Images and Containers (like a Docker daemon)
  • [WitInterface] - User-defined WIT interface trait
  • [ContainerBuilder] - Builder pattern for creating containers with custom WIT bindings

Quick Start

use tairitsu::{Container, GuestInstance, Image};
use bytes::Bytes;

// 1. Define your WIT interface (use wit-bindgen to generate bindings)
// wit-bindgen generates your WIT code...

// 2. Create a WASM image
let wasm_binary = std::fs::read("my_component.wasm")?;
let image = Image::new(Bytes::from(wasm_binary))?;

// 3. Create container (user handles WIT binding)
let container = Container::builder(image)?
    .with_guest_initializer(|ctx| {
        // Register your WIT interface
        MyWit::add_to_linker(ctx.linker, |state| &mut state.my_data)?;
        let instance = MyWit::instantiate(ctx.store, ctx.component, ctx.linker)?;
        Ok(GuestInstance::new(instance))
    })?
    .build()?;

Helper Macros

use tairitsu::wit_interface;

// Automatically generate WIT interface code
wit_interface! {
    interface filesystem {
        read: func(path: String) -> Result<Vec<u8>, String>;
        write: func(path: String, data: Vec<u8>) -> Result<(), String>;
    }
}