Live benchmark — Micra.js vs the others

Run the same workload across reactive UI libraries on your own machine. There are no pre-recorded numbers or marketing slides. Just click Run all benchmarks and watch what happens.

Reactive frameworks (Alpine, petite-vue) occasionally time out under heavy iteration loads — re-running usually recovers. Use the numbers below as a directional comparison, not a benchmark suite ready for press.

Each scenario is run N times (specific to the workload). Each iteration: fresh DOM, setup() → measure run() with performance.now()teardown(), then a 16ms idle gap.

Median is reported (more stable than mean for warm-up effects). Each library's adapter implements the scenario in its own idiomatic API — same observable behavior, different code shape.

What "N/A" means: some scenarios don't map across paradigms. Stimulus isn't reactive, so list scenarios are N/A. htmx and hyperscript solve different problems entirely (server-driven, inline DSL) — they're in the comparison table on the main page but not benchmarked here.

Known limitations (v0.5 — experimental): Alpine.js and petite-vue use async reactivity schedulers (Vue's queue, Alpine's nextTick). We wait for a requestAnimationFrame before stopping the timer so renders complete, but cumulative state across iterations can still cause stalls — when that happens, a scenario times out at 60s and shows ERR. Re-running usually recovers. Micra, vanilla and Stimulus are stable.

Source code: github.com/denisfl/micra.js/site/bench · libraries pinned in vendors/. Each adapter runs in its own iframe (frames/<lib>.html) so MutationObservers and reactive queues are isolated.

Speed: < 5 ms · instant < 50 ms · fast < 500 ms · noticeable ≥ 500 ms · slow
Comparison set: reactive reference (shown for context, not ranked)