WebAssembly Component Model

Universal tool components

One .wasm file. Agents, apps, CLI, browsers.
Sandboxed. Portable. Self-documenting.

The problem

Tool distribution is broken

  • npm install + right Node.js + native deps
  • Works on my machine, breaks on yours
  • Full OS access by default
  • Only serves one consumer (MCP only)
The ACT way

One binary, runs everywhere

  • Single .wasm file, zero dependencies
  • Deterministic — same SHA256 on every machine
  • Sandboxed with explicit capability grants
  • Serves agents, apps, CLI, and browsers

How it works

01

Write

Build your tool in Rust, Python, Go, C++, or any language that compiles to WebAssembly.

#[act_tool]
fn search(query: String) -> Vec<Result> {
02

Build

Compile to a single .wasm component. Self-documenting — schemas, descriptions, examples baked in.

$ cargo build --target wasm32-wasip2
  Compiling my-tool v0.1.0
  Finished: my-tool.wasm (312 KB)
03

Run everywhere

Serve over MCP for AI agents, HTTP for apps, or embed directly. Same binary.

$ act serve my-tool.wasm
$ act mcp my-tool.wasm
$ act call my-tool.wasm search \
    --args '{"query":"rust"}'

Why ACT

Sandboxed

WASM isolation with explicit capability grants. No filesystem, network, or OS access unless you allow it.

Multi-runtime

One component serves MCP agents, REST APIs, CLI tools, and browser apps. No rewrites.

Streaming

Built on WASI Preview 3. Async streams are first-class — real-time results, not polling.

Any language

Rust, Python, Go, C++, JS — anything that compiles to WebAssembly becomes an ACT component.

Self-documenting

Schemas, descriptions, usage hints, examples — documentation is part of the binary. Agents read it natively.

Reproducible

Deterministic WASM binary — same SHA256 everywhere. Audit, verify, trust.

Start building

Create your first ACT component in minutes.

Get Started
npm install -g @actcore/act-cli