wasmbrick — the engine under Brixel

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.

Open source · soonEarly engine access

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.

container · cold start100s of ms
serverless · cold start10s of ms
pooled brick · instantiationµs

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>

}

compatibilitychecked before deploy

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:plugin
2 
3// host capabilities: minimal, deny-all by default
4interface host-env {
5 now-millis: func() -> u64
6 log: func(level: log-level, message: string)
7}
8 
9world brick {
10 import host-env
11 export execute: func(input: list<u8>)
12 -> result<list<u8>, string>
13}
input: list<u8>

world

brick

request / response — validators, fetchers, calculators

result<list<u8>, string>

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.

02 / CONTAIN

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.

capsule://invoice-validatorHOST PROTECTED

WASM GUEST

Fuel remaining10,000 / 10,000

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
03 / VERIFY

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.

1receipt.run.10420xa84f…19c2
2receipt.run.10430x34ad…82ef
3receipt.run.10440xbc21…4a07

CURRENT MERKLE ROOT

sha256:7fd2…3e9a

Ed25519 signed

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.

benchmarks published after public verification

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.

engine status✓ sealed sandbox✓ fuel + epoch metering✓ async I/O + SSRF gate✓ streaming pipeline contract✓ signed usage ledger◌ OCI + Cosign distribution

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.

Get early accessOpen source · soon