Quickstart

You need Rust (stable) and, for the multi-node run, bash. The node is one binary; the whole mesh is one script.

1. Run the protocol tests

Fast — covers crypto, capsules, replay, pacts, and payments with no network.

cd verse-node && cargo test --workspace   # 151 tests

2. Run the real mesh

Eight native processes on loopback, each its own Ed25519 identity, talking over real iroh QUIC and fetching each other’s blobs over the wire by CID.

cd verse-node && bash scripts/verified-run-demo.sh

It runs an honest scenario (job → settled) and a lying-provider scenario (forged-but-signed receipt → caught by a third process replaying it → refunded).

Set VERSE_VERBOSE=1 to trace every QUIC round-trip and over-the-wire blob pull.

3. Write a capsule

A capsule is a WASM module exporting run(in_ptr, in_len, out_ptr) -> out_len and memory, run deny-by-default: no network, no filesystem, no clock, no randomness. Anything it could observe from its environment could make it answer differently twice — and then re-running it would prove nothing.

verse capsule new hello --lang rust     # or --lang wat for a single file
cd hello && cargo build --release --target wasm32-unknown-unknown
verse capsule run target/wasm32-unknown-unknown/release/hello.wasm --input hello
verse capsule test target/wasm32-unknown-unknown/release/hello.wasm \
  --input hello --expect-output ifmmp   # exit 0/1, for CI

This is the same runtime the mesh uses, with no node and no network — the (output, fuel, output-cid) it prints is exactly what a provider computes and a verifier replays.

For C/C++, pass -Wl,--global-base=1048576; for AssemblyScript, --memoryBase 131072 --initialMemory 4. Those are required, not tuning: the defaults place static data inside the host’s input region, and the runtime refuses such a module rather than let it compute a silently corrupted answer.

4. Containers / swarm

docker build -t verse-node:local .
docker compose up --abort-on-container-exit --exit-code-from client

# or on a real Docker Swarm (overlay network)
docker swarm init
docker stack deploy -c docker-stack.yml verse

5. Inspect a running mesh

verse status                       # discover + handshake every node
verse ping --addr 127.0.0.1:9003   # inspect one node

6. Smoke-test inference

A small Llama-2 (TinyStories 15M, a Rust port of llama2.c) runs as an ordinary content-addressed WASM capsule — its weights are a blob the capsule pulls via env.blob_read, so an inference receipt is replay-verifiable like any other job. There is no model role and no verse:model/generate@1. verse generate is a local, no-network smoke test:

verse generate --prompt "Once upon a time"

Needs assets/stories15M.bin + assets/tokenizer.bin (~80 tok/s on CPU).

7. Benchmark

./scripts/bench.sh                 # throughput + latency vs concurrency
PROVIDERS=8 BUILD=release ./scripts/bench.sh

See Architecture for how the pieces fit together.