Examples
The examples are executable scenarios, not alternate APIs. Start with the smallest example covering the boundary you need.
Canonical Examples
| Example | Demonstrates |
|---|---|
retry_queue.zig |
Virtual time, retry races, named checks, and a planted stale-ack bug |
kv_store.zig |
std.Io.File, WAL durability, crash recovery, allocation, and Recorder |
std_io_net_kv.zig |
Fixed-frame codecs shared by host and simulated std.Io.net paths |
replicated_register.zig |
Experimental typed endpoints, loss, partitions, and quorum checks |
durable_broadcast.zig |
Combined disk, network, and process failure modeling |
Smaller focused demonstrations cover allocation pressure, idempotency, strict WAL-record decoding, and a typed toy protocol.
Run One
zig build run-example -- retry-queue --seed 12648430 --summary
zig build run-example -- kv-store-bug --seed 12648430 --expect-failure
zig build run-example -- replicated-register --trace
The CLI prints its current scenario names when invoked without a valid scenario.
Reuse The Shape
Application code should accept the narrow capabilities it needs. A storage
component commonly accepts std.Io, a root std.Io.Dir, and mar.Recorder.
Its simulator initializer obtains those values from mar.Sim; production can
provide host values directly.
Keep fault injection and assertions in scenario code through case.control().
Do not pass Control into the application merely to make an example shorter.
Reduce an Idempotency Failure
zig build run-example -- reduce-idempotency --seed 1234 --trace --expect-failure
removes an unrelated telemetry action and retains the request/duplicate pair
that violates a stable property. See examples/reduction.zig and
Reduction and Explanation.