• English
  • // CONTRACT v1 · OPEN SOURCE · APACHE-2.0

    Reproduce any bug.
    Any language.
    Any environment.

    Vivarium is a three-layer reproduction substrate. WebAssembly for milliseconds, Docker for fidelity, and a third layer for everything else. Problem first, technology second.

    vivarium.dev/layer1-wasm/cpython-137205
    WASM
    VIVARIUM · LAYER 1 · PYODIDE · SQLITE3

    Reproducing python/cpython#137205

    PRAGMA foreign_keys silently dropped under autocommit=False.

    ✕ UNREPRODUCED|fk_off ≠ fk_on
    # repro.pyimport sqlite3def test_fk():conn = sqlite3.connect(':memory:')fk_on = conn.execute('PRAGMA foreign_keys').fetchone()[0]assert fk_on == 1
    ElementsConsoleNetworkSources1 error
    ›await pyodide.runPythonAsync(repro)
    ✕AssertionError: 0 != 1
    at test_fk (repro.py:5)
    vivarium.dev/layer2-docker/postgres-lost-update
    DOCKER
    VIVARIUM · LAYER 2 · DOCKER · POSTGRESQL

    Reproducing PostgreSQL lost-update under READ COMMITTED

    Concurrent UPDATEs lose writes when a SELECT-then-UPDATE pattern omits row-level locks.

    RUNNING — tx-1 ⨯ tx-2
    # compose-up.shdocker compose up -dpsql -c "SET TRANSACTION ISOLATION LEVEL READ COMMITTED"parallel ./tx.sh ::= 1 2
    container.logtx-1.logtx-2.logrunning
    ›[docker] Pulling postgres:15-alpine
    ✓postgres ready in 74ms
    ›tx-1: UPDATE accounts SET balance = balance + 100
    ›tx-2: UPDATE accounts SET balance = balance - 50
    waiting for both transactions to commit…
    vivarium.dev/layer1-wasm/ruby-21709
    WASM
    VIVARIUM · LAYER 1 · RUBY.WASM · ENCODING

    Reproducing ruby/ruby#21709

    Regexp interpolation rejects the mixed encodings that String interpolation silently upgrades.

    ✓ REPRODUCED — bug reproduced
    # repro.rbprefix = '\p{In_Arabic}'suffix = prefix.encode('US-ASCII')re = /#{prefix}#{suffix}/str = "#{prefix}#{suffix}"
    ElementsConsoleNetworkSourcesverified
    ›await rubyVm.evalAsync(repro)
    ✓Regexp raised RegexpError; String built UTF-8
    verdict: REPRODUCED — issue#21709 reproducible in ruby.wasm

    // SHIPPED · 2026

    10
    reproductions catalogued
    12
    MCP tools
    8
    phases closed
    v1
    public contract

    // THREE-LAYER ARCHITECTURE

    Pick the layer that fits your bug.

    You never choose by hand — each recipe declares its own layer. The layers exist because no single runtime fits every bug.

    L1

    Browser-native, instant.

    WebAssembly runtimes inside the visitor’s tab. Algorithms, parsers, in-memory database operations. Startup in milliseconds to seconds.

    Pyodide · sqlite-wasm · wasm32-wasip1 · Ruby.wasm · PHP.wasm
    L2

    Container fidelity.

    Real filesystem, real processes, real network. Catalogue model: pinned Dockerfile + GHCR image. The visitor reproduces locally with one `docker run`.

    Docker · Firecracker · gVisor
    L3

    Whatever L1 and L2 cannot reach.

    Heisenbugs, races, time-travel debugging. No recipes ship here yet — a runtime earns a place only once a reader on an ordinary machine can reproduce and check the result.

    Antithesis · CRIU · WASI Preview 3+

    // SEE IT RUN

    10 real upstream bugs, routed through the right layer.

    Layer 1 covers browser-native WASM recipes; Layer 2 ships Docker reproductions; Layer 3 is reserved for what neither can reach.