v4.0.0
Pareto 4.0.0
Highlights
- NDJSON streaming navigation — Client navigations now receive loader data via NDJSON streams, enabling progressive delivery with Suspense during navigation
head.tsxcomponent convention — Per-route head management via React components with automatic merge and deduplicationdocument.tsxconvention — Customize<html>attributes per-request (lang, dir, className)- 9x faster data loading than Next.js — Benchmark results show Pareto handles 2,733 req/s vs Next.js 293/s for data-loading pages
- 6.5x higher streaming throughput — Sustains 2,022 req/s under load vs Next.js 310/s
- 62 KB client JS (gzipped) — 1/4 of Next.js (233 KB)
Performance (CI benchmarks, Node 22, 4 CPUs)
| Scenario | Pareto | Next.js | React Router | TanStack Start |
|---|---|---|---|---|
| Data Loading | 2,733/s | 293/s | 955/s | 1,386/s |
| Streaming SSR | 247/s | 236/s | 247/s | 247/s |
| API / JSON | 3,675/s | 2,212/s | 1,950/s | — |
| Static SSR | 2,224/s | 3,328/s | 997/s | 2,009/s |
Breaking Changes
HeadDescriptor/HeadFunctionreplaced byhead.tsxcomponentshydrateApp()removed — usestartClient()RouterProviderno longer exportedcreateStoreApi()removed — usedefineStore()from@paretojs/core/storedehydrate()/getHydrationData()/hydrateStores()removed — hydration is automatic- Barrel files removed — import directly from source modules
New
startProductionServer()from@paretojs/core/nodeSECURITY_HEADERSconstant exported- Default error fallback component
- Client-side head management during navigation
- Route pattern caching for faster client navigation
wkWebViewFlushHintconfig option for iOS WKWebView
Full changelog: https://github.com/childrentime/pareto/blob/main/CHANGELOG.md