reflex has the lowest geometric mean vs per-test best.
JS Reactivity Benchmark
Reactive graph benchmarks reported as topology profiles. Lower relative score and tighter p95/p99 tails are better.
7.7% behind the leader by relative profile.
28 first-place finishes across individual tests.
Updated July 12, 2026 at 07:57 PM UTC. Leader p95 avg: n/a. Spread: 10.71x.
Leaderboard
| # | Framework | Rel. |
|---|---|---|
| 1 | reflex | 1.11x |
| 2 | alien-signals | 1.20x |
| 3 | @reactively | 1.60x |
| 4 | lite-signal | 2.19x |
| 5 | Preact Signals | 2.46x |
| 6 | Oby | 3.66x |
| 7 | @vue/reactivity | 4.05x |
| 8 | uSignal | 4.06x |
| 9 | @amadeus-it-group/tans | 4.17x |
| 10 | $mol_wire | 4.27x |
| 11 | @solidjs/signals | 5.64x |
| 12 | Signia | 5.77x |
| 13 | s-js | 7.47x |
| 14 | SolidJS | 11.89x |
Geometric mean of relative slowdown across 45 tests for 14 frameworks.
reflex
alien-signals
@reactively
lite-signal
Preact Signals
Oby
@vue/reactivity
uSignal
@amadeus-it-group/tans
$mol_wire
@solidjs/signals
Signia
s-js
SolidJS
Workload Profile
| Framework | baseline |
|---|---|
| reflex | 1.11x |
| alien-signals | 1.20x |
| @reactively | 1.60x |
| lite-signal | 2.19x |
| Preact Signals | 2.46x |
| Oby | 3.66x |
| @vue/reactivity | 4.05x |
| uSignal | 4.06x |
| @amadeus-it-group/tans | 4.17x |
| $mol_wire | 4.27x |
| @solidjs/signals | 5.64x |
| Signia | 5.77x |
| s-js | 7.47x |
| SolidJS | 11.89x |
Each cell is a geometric mean slowdown vs the best result within that workload group.
Visual Comparison
Per-Test Comparison
avoidablePropagation
broadPropagation
deepPropagation
diamond
mux
repeatedObservers
triangle
unstable
manyEffectsFromOneSource
manySourcesIntoOneComputedEffectWithDirect
manySourcesIntoOneComputedEffect
manySourcesIntoOneDirectEffect
molBench
createDataSignals
createComputations0to1
createComputations1to1
createComputations2to1
createComputations4to1
createComputations1000to1
createComputations1to2
createComputations1to4
createComputations1to8
createComputations1to1000
updateComputations1to1
updateComputations2to1
updateComputations4to1
updateComputations1000to1
updateComputations1to2
updateComputations1to4
updateComputations1to1000
64x6 - 4 sources - dynamic - read 12% (dashboard selective r
24x8 - 3 sources - dynamic - read 40% (editor derived state)
120x7 - 5 sources - dynamic - read 18% (kanban board)
40x10 - 4 sources - dynamic - read 60% (entity detail page)
256->512x32 - fanIn 4 - layered-dag - 4 sources (layered ful
256->512x32 - fanIn 4 - layered-dag - 4 sources - warm 320 (
256->512x32 - fanIn 8 - layered-dag - 8 sources - burst 16 -
256->512x32 - fanIn 8 - diamond-mesh - 8 sources - warm 256
32x8 - 4 sources - pull (pure pull)
32x8 - 4 sources - push (pure push)
10x5 - 2 sources - read 20% (simple component)
10x10 - 6 sources - dynamic - read 20% (dynamic component)
1000x12 - 4 sources - dynamic (large web app)
1000x5 - 25 sources (wide dense)
5x500 - 3 sources (deep)
How To Read This
reflex has the strongest relative profile in this run, 7.7% ahead of alien-signals by geometric mean. It also takes 28 of 45 scenario wins, while alien-signals takes 13.
This page intentionally treats benchmarks as workload families rather than a single universal speed claim. Median is the primary row score; p95/p99 and CV show predictability.
Interpret wins through the scenario taxonomy: creation, update, pull/push propagation, dynamic dependency churn, large graphs, lifecycle pressure, and memory behavior can favor different runtimes.