Benchmarks

Comprehensive performance comparison of Manic vs other React frameworks.

Framework Benchmarks

Manic is purpose-built for maximum performance. These benchmarks compare Manic against leading React frameworks using identical starter-project test cases — 20 measured runs each, cold and warm, on Apple Silicon macOS.

Test Environment

ToolDetail
Scenariostarter (identical starter project per framework)
Runs20 per phase (cold + warm)
OSmacOS (Apple Silicon)

Frameworks Tested

FrameworkScenario
Manicmanic-starter
Next.jsnext-starter
Vitevite-starter
Astroastro-starter
Remix (React Router)remix-starter
TanStack Starttanstack-starter
Nuxtnuxt-starter

Dev Server Startup (readyMeanMs)

Time from running the dev command until the framework signals it is ready to serve.

FrameworkCold Ready MeanCold Ready p95Warm Ready MeanWarm Ready p95
Manic145 ms207 ms174 ms235 ms
Vite341 ms452 ms270 ms348 ms
Next.js494 ms787 ms344 ms546 ms
Nuxt579 ms1,111 ms414 ms582 ms
TanStack669 ms824 ms1,363 ms1,806 ms
Remix737 ms1,062 ms1,224 ms1,784 ms
Astro1,930 ms2,882 ms2,539 ms3,987 ms

Why Manic is Faster

Manic starts faster because:

  1. Bun's native serve — The dev server is Bun.serve, not a Node script bootstrapping a bundler daemon.
  2. OXC end-to-end — JSX/TS stripping, lint, format, and minify share one Rust parser and AST (oxc-transform, oxlint, oxc-minify). No chain of separate tools round-tripping text between processes.
  3. Minimal runtime — No webpack, Vite, or Turbopack process to initialize before your app runs.

Production Build Time

FrameworkCold Build MeanCold Build p95Warm Build MeanWarm Build p95
Manic408 ms540 ms397 ms505 ms
Remix1,068 ms1,494 ms1,716 ms2,448 ms
TanStack1,347 ms1,832 ms2,218 ms3,119 ms
Astro1,712 ms2,432 ms2,463 ms4,210 ms
Vite2,351 ms3,183 ms1,690 ms2,147 ms
Nuxt6,334 ms10,455 ms4,193 ms5,311 ms
Next.js6,659 ms9,274 ms8,167 ms9,194 ms

Build Breakdown (Manic)

Production parallelism (Manic). Bundling runs mostly in order: oxlint → route manifest → Bun.build clienteach API routeBun.build server. Then Promise.all runs oxc-minify over dist/client, dist/api, and server.js at the same time.

Initializing diagram...

Build Output Size

FrameworkCold Output MeanNotes
Astro16.4 KBStatic HTML only
Vite232.8 KBClient-only SPA
Remix358.2 KBClient + Server
Manic371.8 KBClient + Server + API
TanStack1.23 MBClient + Server
Nuxt2.52 MBFull-stack
Next.js5.54 MBFull-stack

Summary

MetricManicViteNext.jsRemixTanStackNuxtAstro
Cold Dev Ready145 ms341 ms494 ms737 ms669 ms579 ms1,930 ms
Cold Build408 ms2,351 ms6,659 ms1,068 ms1,347 ms6,334 ms1,712 ms
Output Size371.8 KB232.8 KB5.54 MB358.2 KB1.23 MB2.52 MB16.4 KB

Notes

  • All numbers are means over 20 runs on Apple Silicon macOS.
  • Cold = fresh cache; Warm = cache present from a prior run.
  • Results may vary by machine and project size.
  • Raw data and reproduction steps: github.com/rahuletto/manic-benchmark

On this page