Scoreboard

8 UI libraries built the same /tickets screen against one spec. Every figure here is read from results/ in the repo. There is no overall score and no winner; the write-up picks per situation.

TL;DR

The 8 builds in two groups, React and Vue, each ordered by gzipped delta, smallest first. The delta is the only figure compared across groups.
Screen Library Delta, gzip Total, against the 180 KB budget Criteria passed axe violations before fixes Requirements needing custom code Median first render
React, 5 builds
react-headless screen at 1440px wide, open the live screen Headless UIreact-headless assembly kit 44.90 KB 89.81 KB
within budget
18 of 18 0 6 1378 ms*
react-shadcn screen at 1440px wide, open the live screen shadcn/uireact-shadcn assembly kit 58.89 KB 103.80 KB
within budget
18 of 18 0 4 1390 ms*
react-mui screen at 1440px wide, open the live screen Material UIreact-mui suite 79.76 KB 124.67 KB
within budget
18 of 18 0 3 1526 ms*
react-chakra screen at 1440px wide, open the live screen Chakra UIreact-chakra suite 97.81 KB 142.72 KB
within budget
18 of 18 0 4 1653 ms*
react-antd screen at 1440px wide, open the live screen Ant Designreact-antd suite 233.87 KB 278.78 KB
Over budget by 98.78 KB
18 of 18 0 5 2277 ms*
Vue, 3 builds
vue-quasar screen at 1440px wide, open the live screen Quasarvue-quasar suite 91.71 KB 115.92 KB
within budget
18 of 18 1 6 1565 ms*
vue-vuetify screen at 1440px wide, open the live screen Vuetifyvue-vuetify suite 128.87 KB 153.08 KB
within budget
18 of 18 0 6 1741 ms*
vue-primevue screen at 1440px wide, open the live screen PrimeVuevue-primevue suite 150.20 KB 174.41 KB
within budget
18 of 18 0 4 1745 ms*

* First render is the median of 5 Lighthouse runs, taken from one Windows machine against this deployed site on 2026-09-16. The figures are relative: Lighthouse throttles to a simulated mid-tier phone, and other hardware or networks would move the milliseconds.

A screenshot opens that build's live screen. A library name opens its detail view, with both screenshots at full size. Assembly kits ship fewer finished parts by design, so their hand built counts on the detail views read as the trade they make.

The four categories as bars

Each bar is one build against the other seven on a shared scale, with the figure printed beside it. Color marks the framework and nothing else. React and Vue stay in separate groups, each ordered by delta.

Bundle size

Bundle size, gzipped

The darker bar is the delta, the build's total minus its framework baseline, and it is the only number compared across React and Vue. The lighter bar behind it is the total. The 180 KB budget applies to the total and is drawn on that scale.

React
  • Headless UI assembly kit44.90 KB delta, 89.81 KB total
  • shadcn/ui assembly kit58.89 KB delta, 103.80 KB total
  • Material UI suite79.76 KB delta, 124.67 KB total
  • Chakra UI suite97.81 KB delta, 142.72 KB total
  • Ant Design suite233.87 KB delta, 278.78 KB total over budget
Vue
  • Quasar suite91.71 KB delta, 115.92 KB total
  • Vuetify suite128.87 KB delta, 153.08 KB total
  • PrimeVue suite150.20 KB delta, 174.41 KB total

Accessibility defaults

Accessibility requirements needing custom code

How many of the screen spec section 9 requirements the library did not supply, so the build wrote them.

React
Vue

axe-core violations before fixes

Serious and critical violations found before any manual fix.

React
Vue

Ergonomics

Lines of application code

Counted, not judged. Assembly kits leave more of the screen to the app, so a higher count is the expected trade.

React
Vue

Hand built parts: modal, select, and toast

How many of the modal, select, and toast the build wrote itself rather than taking from the library. Assembly kits are labeled, since a higher count is the trade they make.

React
Vue

Time to first render

Median first contentful paint

First render is the median of 5 Lighthouse runs, taken from one Windows machine against this deployed site on 2026-09-16. The figures are relative: Lighthouse throttles to a simulated mid-tier phone, and other hardware or networks would move the milliseconds.

React
Vue