A definitive answer to the question that comes up at the start of every React project: which UI component library should we use?
Blog posts and Reddit threads give opinions. This repo has code. The same dashboard — stat cards, charts, data tables, activity feeds, dark mode toggle — built eight times, once with each of the most popular React UI libraries available today. Same Vite + React 19 + TypeScript + Recharts stack across the board. The only variable is the UI library.
The result is a 1-for-1 reference implementation you can pull from when starting future projects instead of wondering "what does a data table actually look like in Mantine vs. MUI?"
| Library | Styling Approach | Bundle Size | Dark Mode | Port |
|---|---|---|---|---|
| Material UI (MUI) v6 | CSS-in-JS (Emotion) | 709 KB | Built-in | 5001 |
| Tailwind CSS v4 | Utility classes | 573 KB | Manual | 5002 |
| shadcn/ui | Tailwind + Radix | 577 KB | Built-in | 5003 |
| Ant Design v5 | CSS-in-JS | 1.3 MB | Built-in | 5004 |
| Chakra UI v3 | CSS-in-JS (Emotion) | 793 KB | Built-in | 5005 |
| Mantine v8 | CSS Modules + PostCSS | 865 KB | Built-in | 5006 |
| React Bootstrap v2 | Bootstrap CSS | 821 KB | Built-in | 5007 |
| HeroUI (NextUI) v2 | Tailwind + CSS-in-JS | 1.1 MB | Built-in | 5008 |
A detailed HTML report with side-by-side light/dark mode screenshots and pros/cons analysis for each library is available at:
- HTML Report — open locally in your browser
- PDF Report — for sharing with stakeholders
react-ui-examples/
├── dashboard-mui/ # Material UI (MUI) v6 — Port 5001
├── dashboard-tailwind/ # Tailwind CSS v4 — Port 5002
├── dashboard-shadcn/ # shadcn/ui + Tailwind — Port 5003
├── dashboard-antd/ # Ant Design v5 — Port 5004
├── dashboard-chakra/ # Chakra UI v3 — Port 5005
├── dashboard-mantine/ # Mantine v8 — Port 5006
├── dashboard-bootstrap/ # React Bootstrap v2 — Port 5007
├── dashboard-nextui/ # HeroUI (NextUI) v2 — Port 5008
└── report/
├── index.html # Comparison report with analysis
├── React-UI-Library-Comparison.pdf
├── generate-pdf.mjs # PDF generation script (Puppeteer)
└── screenshots/ # Light/dark screenshots of each dashboard
Each dashboard is a standalone Vite project with:
dashboard-{name}/
├── index.html
├── package.json
├── vite.config.ts
├── tsconfig.json
└── src/
├── main.tsx
├── App.tsx # Main dashboard layout
└── data.ts # Shared dummy data
Each dashboard is independent. To run one:
cd dashboard-mui
npm install
npm run devTo run all eight simultaneously:
for dir in dashboard-*/; do
(cd "$dir" && npm install && npm run dev &)
doneThen visit http://localhost:5001 through http://localhost:5008.
- Enterprise / Internal Tools — MUI or Ant Design for comprehensive component sets and enterprise support
- Modern SaaS / Startup — shadcn/ui for owned components, beautiful defaults, tiny bundle
- Performance-Critical — Tailwind CSS or shadcn/ui for smallest bundles, zero CSS-in-JS runtime
- Full-Featured + Free — Mantine for the most complete free library available
- Rapid Prototyping — Mantine or React Bootstrap for familiar patterns and fast iteration
- Design-Forward Consumer App — HeroUI or Chakra UI for polished aesthetics and smooth animations
Built in an afternoon with Claude Code doing the heavy lifting. Each implementation runs on its own port so you can compare them live in the browser.