MATES

js-framework-benchmark

Mean keyed CPU time, then every list op vs React, Solid, Vue Vapor, and Angular. Mates ships twice: keyed `repeat`, and RawComponents (`xRaw` + cloneNode). Mean of 5 headless Chrome runs. Lower is better.

Average keyed performance

Mean of 9 ops · Keyed · Chrome headless · 5 runs · mean · lower is better

Mates (raw components)
56.1 ms
Mates
71.0 ms
Solid
64.3 ms
Vue Vapor
65.5 ms
Angular
85.7 ms
React
116.7 ms
Keyed CPU by operation

9 ops · Keyed · Chrome headless · 5 runs · mean · lower is better

Create 1k rows Empty table → 1,000 rows
Mates (raw components)
29.1 ms
Mates
33 ms
Solid
30.7 ms
Vue Vapor
31.6 ms
Angular
43.6 ms
React
38.1 ms
Replace 1k rows Swap the whole 1,000-row table
Mates (raw components)
31.4 ms
Mates
37.4 ms
Solid
36.1 ms
Vue Vapor
35.9 ms
Angular
51.2 ms
React
45.6 ms
Update every 10th Patch labels on a 10k table
Mates (raw components)
12.7 ms
Mates
24.7 ms
Solid
23.5 ms
Vue Vapor
24.2 ms
Angular
20.5 ms
React
27.1 ms
Select row Highlight one row of 1,000
Mates (raw components)
10 ms
Mates
9.8 ms
Solid
8 ms
Vue Vapor
7.5 ms
Angular
9.8 ms
React
10.6 ms
Swap rows Exchange two rows in 1,000
Mates (raw components)
16.2 ms
Mates
31.4 ms
Solid
25.9 ms
Vue Vapor
25.3 ms
Angular
25.5 ms
React
149.8 ms
Remove row Delete one row of 1,000
Mates (raw components)
27 ms
Mates
49.1 ms
Solid
30.5 ms
Vue Vapor
29.6 ms
Angular
34.3 ms
React
32 ms
Create 10k rows Empty table → 10,000 rows
Mates (raw components)
324.5 ms
Mates
391.5 ms
Solid
368.7 ms
Vue Vapor
381.9 ms
Angular
476 ms
React
673.2 ms
Append 1k rows Add 1,000 onto a 10k table
Mates (raw components)
34 ms
Mates
41.8 ms
Solid
39.7 ms
Vue Vapor
38.9 ms
Angular
63.6 ms
React
47.5 ms
Clear rows Remove a 10,000-row table
Mates (raw components)
19.8 ms
Mates
20.5 ms
Solid
15.8 ms
Vue Vapor
14.6 ms
Angular
46.9 ms
React
26.5 ms

js-framework-benchmark keyed implementations (18 Aug 2026): React Hooks 19.2, Solid 1.9.3, Mates 0.5.2, Angular CF 22, Vue Vapor 3.6 beta. Headless Chrome, 5 iterations. Mates uses lit-html repeat() keyed by id. Mates (raw components) is xRaw + keyed cloneNode rows; times are that implementation’s ratio vs keyed Mates from a later same-machine 2-iteration run, applied to the published 5-run Mates means. Full notes: lib/benchmarks.md in the GitHub repo.

100k todos — paint + DOM

100k full DOM · prod · ms · lower is better

Load Build 100k-item list
Mates (raw components)
1,605 ms
Mates
2,676 ms
Solid
1,897 ms
Angular
2,533 ms
Vue
2,435 ms
React
16,557 ms
Toggle Complete one todo
Mates (raw components)
103 ms
Mates
152 ms
Solid
180 ms
Angular
174 ms
Vue
413 ms
React
351 ms
Add Append one todo
Mates (raw components)
175 ms
Mates
255 ms
Solid
178 ms
Angular
238 ms
Vue
451 ms
React
417 ms
Delete Remove one todo
Mates (raw components)
235 ms
Mates
342 ms
Solid
247 ms
Angular
309 ms
Vue
527 ms
React
517 ms

Same todo-100k-bench as the landing page, with Solid 1.9, Vue 3.5 (not Vapor), and Angular 19.2 included. Production builds, full DOM list (no virtualization), Chrome. Means of two dual-round runs, rounded. Vue is Vue 3, not Vue Vapor.