Sheet โ†’ binary

A Quilt sheet is a program. Pick a target. Get a deployable artifact. One command, one output. The cell model stays the same.

๐Ÿฆ€

Static binary

Linux ยท macOS ยท Windows ยท ARM
๐Ÿ”Œ

MCP server

stdio ยท sse ยท http
๐ŸŒ

Web bundle

single HTML ยท npm
๐Ÿ”Œ

ESP32 firmware

no_std ยท 32 KB flash
๐Ÿ“ฆ

WASM module

any host ยท sandboxed
๐Ÿณ

Docker image

scratch ยท distroless

Source sheet

โ†’click "Build" to compile

What the build does

Every target goes through the same pipeline. The cell model is preserved across all of them.

1
Parse sheet
Read the YAML, validate against the schema, build the cell graph.
2
Resolve deps
Topological sort, detect cycles, mark reachable cells.
3
Bundle
Inline the engine, the cells, the adapters โ€” into a single artifact.
4
Emit
Compile (Rust), link (binary), package (image, mcp, npm), or render (HTML).
5
Verify
Smoke test the artifact: load, evaluate, check the cell values.

By the numbers

The build pipeline, with the actual outputs from real runs.

$quilt build --target binary ./weather.yaml
โ†’ parse sheet (8 cells, 8 edges)
โ†’ topological order: sensor.temp, sensor.humid, โ€ฆ
โ†’ compile to Rust: 8 cells, 1 listener, 2 sensors
โ†’ cargo build --release: 12.4s
โœ“dist/weather (3.2 MB, static, stripped)
$quilt build --target mcp ./weather.yaml
โ†’ parse sheet (8 cells)
โ†’ expose 8 MCP tools (one per cell)
โ†’ stdio transport
โœ“dist/weather-mcp (4.1 MB, stdio)
$quilt build --target web ./weather.yaml
โ†’ inline engine (640 lines JS)
โ†’ inline sheet (8 cells)
โ†’ inline UI template
โœ“dist/weather.html (70 KB)
$quilt build --target esp32 ./weather.yaml
โ†’ strip non-esp cells (no API, no listener if no actuator)
โ†’ compile to no_std Rust
โ†’ cargo build --target xtensa-esp32-espidf: 18.7s
โœ“dist/weather-esp32.bin (32 KB, flashable)
$quilt build --target wasm ./weather.yaml
โ†’ compile to WASM (32-bit float, no threads)
โ†’ optimize: -O3, lto, strip
โœ“dist/weather.wasm (180 KB, any host)

What you can do with the artifacts

Static binary (3.2 MB)

Run on a server: ./weather --mcp --port 8080. The whole sheet is now an HTTP+stdio MCP server. Claude Code, Cursor, or any MCP client can use it.

MCP server (4.1 MB)

Plug into Claude Code: claude mcp add weather ./weather-mcp. Now every cell is a tool Claude can call. The sheet is the tool registry.

Web bundle (70 KB)

Email it. Commit it. Run it offline forever. The download is a single HTML file with the engine, the sheet, and the UI all inlined. No server, no build, no install.

ESP32 firmware (32 KB)

Flash to a $3 chip: espflash flash weather-esp32.bin. The sheet is now the firmware. 8 sensors and actuators, a reactive engine, 32 KB total.

WASM module (180 KB)

Load from any host: const engine = await WebAssembly.instantiate(wasm). The cell model is the API. The host gets the cells; the WASM gets the engine.

Docker image (8 MB)

Deploy anywhere: docker run -p 8080:8080 quilt/weather. The image is scratch-based. The binary is the only thing in it. 8 MB total, no layers, no shell, no package manager.

The same model, six targets

This is the unlock. You write a sheet once. The cell model is preserved across every target. Same names, same kinds, same propagation. The target is just the runtime.

weather.yaml
โ”œโ”€ โ†’ binary (Linux x86_64)
โ”œโ”€ โ†’ binary (macOS aarch64)
โ”œโ”€ โ†’ binary (Windows)
โ”œโ”€ โ†’ binary (Raspberry Pi)
โ”œโ”€ โ†’ MCP server (stdio)
โ”œโ”€ โ†’ MCP server (HTTP/SSE)
โ”œโ”€ โ†’ Web bundle (HTML)
โ”œโ”€ โ†’ npm package
โ”œโ”€ โ†’ WASM module
โ”œโ”€ โ†’ ESP32 firmware
โ””โ”€ โ†’ Docker image