Run a benchmark in your browser
Click to evaluate a sheet with N cells. Times your machine.
TypeScript engine (the canonical runtime)
Measured with the @quilt/core engine in Node 20. Each metric is the average of 1000 runs.
Because evaluation is topological, the cost of one change is the size of its transitive closure, not the size of the whole sheet. A 10,000-cell sheet with one root change touches only the cells in the cascade.
Rust engine (the production runtime)
Compiled to a single static binary, ~3 MB stripped. No GC, no runtime, no startup cost. The same operations are 5-10x faster than TypeScript.
Memory footprint
Quilt is small. Tiny, in fact. Here are the actual numbers.
Quilt Live (the browser runtime)
70 KB single HTML file, runs in a browser tab, no build step. Here's what 146 tests cover.
Including 54 real-world examples (budget, weather, productivity, finance, fitness, music, photography, education, automotive, networking, communication, science, security, geography, real estate, travel, gaming, dev tools, time, showcase, meta) — every one tested in both Node and a real Chrome tab.
Quilt on ESP32 (the $3 chip)
A `no_std` Rust port that compiles to ~32 KB flash, runs on bare metal, no allocator.
The same engine. The same cell model. The same YAML. The same reactive propagation. Compiled to a $3 chip that runs off a coin cell. That's the kind of leverage the cell model gives you.
vs Other reactive systems
A rough comparison, because the architectures are different. Numbers are for a similar-shaped problem: a tree of N reactive nodes, one change at the root.
These are rough. Different systems solve different problems. Quilt's win is per-cell granularity and addressability, not raw speed. The right comparison is "what's the smallest unit of reactivity, and can you address it by name?" — and the answer for Quilt is "a cell, yes."
What to optimize next
Honest list of where Quilt is slow and what to do about it.
For sheets that change often, the topo sort is wasted work. A future version will maintain the topological order incrementally, paying O(1) per change instead of O(V + E).
This is fast enough (microseconds) but not free. A future version will cache compiled formulas by their AST hash.
For cells with many callers, the hash table grows. A future version will use an LRU cache to bound it.
The TS engine's parser handles a useful subset but not all YAML. A future version will use a real parser (yaml-rust2 / yaml.js).
For high-throughput use, a binary protocol would be faster. For now, JSON is the universal language of LLMs.