Build trustable software like LEGO.
A Rust host on Wasmtime 46 / WASI 0.3 that runs untrusted bricks in deny-by-default sandboxes — fuel-metered, memory-capped, time-budgeted, and every run recorded in an auditable ledger.
Three chronic pains. One engine.
AI hallucination risk
LLMs reason well and guess badly. A brick is compiled, deterministic logic — the agent calls it as a tool and gets the same exact answer every time.
agent> guess_vat(1499.00)
↳ ≈ 284.79 · plausible, wrong
brick> vat.process(1499.00)
↳ 284.81 · deterministic
Cold-start & idle tax
Containers cold-start in hundreds of milliseconds and bill while idle. Pooled warm stores instantiate in microseconds; fuel is only burned by actual work.
Fragile integrations
APIs drift and glue code rots. A WIT contract makes every input, output, and capability explicit — incompatible bricks refuse to snap at all.
world brick {
export execute: func(list<u8>)
→ result<list<u8>, string>
}
Two worlds. The signed contract is the truth.
Every brick implements exactly one WIT world — brick for request/response or pipeline for streaming. These are the actual contract files from the engine repository.
1package wasmbrick:plugin2 3// host capabilities: minimal, deny-all by default4interface host-env {5 now-millis: func() -> u646 log: func(level: log-level, message: string)7}8 9world brick {10 import host-env11 export execute: func(input: list<u8>)12 -> result<list<u8>, string>13}world
brick
request / response — validators, fetchers, calculators
Hard limits, not promises.
Deny-by-default sandbox
no fs · no net · no clock — only explicit imports
Fuel metering
per-instruction budget · loops burn out deterministically
Epoch CPU-time tier
opt-in via signed metadata · billed by measured cpu-time
Linear-memory cap
128 MiB default · MemoryExhausted, not host OOM
Wall-clock budget
30 s default · dedicated ticker frees stuck slots
Instance pooling
500 warm slots · overflow gets 429, never billed
SSRF-gated HTTP
allowlist from signed metadata · DNS-rebinding closed
gRPC + REST · one port
Tonic + Axum multiplexed on :50051
Streaming pipelines
stream<u8> in/out · memory O(chunk), not O(payload)
Polyglot bricks
Rust · Python (Pandas/NumPy) · Kotlin
Hostile code burns out. The host never notices.
Every brick runs inside a hard safety capsule.
Memory, CPU fuel, filesystem, and network are denied by default. Malicious work burns out; the host never notices.
WASM GUEST
Waiting for execution…
The host measures. The marketplace prices.
- receipts carry facts, not prices: fuel / cpu-time, bytes in/out, outcome class
- RocksDB journal · AES-256-GCM at rest · Merkle tree over every record
- checkpoints signed with Ed25519 and chained — edits and rollbacks are detectable
- air-gapped mode: receipts accumulate locally, ship when a marketplace URL appears
- guest error text never enters a receipt — only a static code
Every run leaves a receipt you can prove.
Execution receipts fold into a Merkle root; checkpoints are signed with Ed25519. Any tampering with the usage ledger is detectable — offline included.
CURRENT MERKLE ROOT
sha256:7fd2…3e9a
Microsecond instantiation. Numbers when they’re earned.
Warm pooled stores instantiate in microseconds and AOT compilation happens before the port ever opens. Raw throughput charts land here after runs on pinned, reproducible hardware — not from a dev laptop.
The sidecar model
The engine runs next to your app, reachable over localhost gRPC. Third-party bricks execute in a vacuum — your data never leaves the pod.
Your app
Any language
Node · Go · Python · Rust
wasmbrick sidecar
Wasmtime 46 runtime
fuel-metered · sandboxed
Sealed execution
Zero data leak
no network · no fs · no leak
Your data never leaves your perimeter.
Make one thing yours again.
Join the first people turning everyday requests into useful tools they can keep. No technical background required — just something you wish worked better.