PRNext 0.1.22-alpha: Way more performance

PRNext 0.1.22-alpha is available on npm. On our thousand-row development benchmark, median Flight throughput increases by a factor of 7.7, SSR throughput by 3.97, and the decoded Flight payload shrinks by 72.1%. The measurements compare the same table with the optimization disabled and enabled.

The change is automatic for eligible presentation components. There is no “use presentation” directive to add: PRNext sends a reusable structure and displayed values, keeping calculations on the server and the HTML complete. Update PRNext and rebuild your application to use it.

Up to 7.7× Flight throughput on our test table

The development campaign at source 270ae481 compares the identical table with the optimization disabled and enabled. At one thousand rows, median SSR throughput rises from 48.611 to 192.765 requests per second, approximately 3.97 times. Flight rises from 80.472 to 619.413, approximately 7.70 times. Their p95 values fall from 100.52 to 28.78 ms and from 61.65 to 8.806 ms.

Table HTML is identical. Decoded Flight falls from 266,672 to 74,353 bytes, a 72.1% reduction. With gzip, the reduction is 36.1%. Encoded browser JavaScript increases by 606 bytes and requires two additional requests.

These local measurements use Windows x64, Node 24.22.1, two workers and four connections on a shared PC with 12 logical processors and 32 GiB. The campaign also includes a 100-row SSR scenario. Three alternating pairs, one second of warmup and three measured seconds per window, cover 18 windows and 21,523 validated responses without errors. Both variants use the same rebuilt 0.1.21 native binary. These are development-source measurements, not final npm archives or a Next.js comparison. Memory varies by scenario and browser gains remain inconclusive. SQL, business logic and DOM work do not become seven times faster.

Transfer the structure once

Flight carries React Server Component output to the browser. When many rows share a structure, describing every element can cost more than the displayed data. PRNext recognizes a subset of synchronous pure components, compiles their static markup and uses an official React client reference with compact display slots. React retains its supported Flight protocol and decoder.

The browser downloads a small presentation module, so JavaScript transfer and execution still exist. The server renders complete HTML before that module loads. A small list or incompatible value can use the ordinary representation without replacing its DOM root solely because the representation changed.

Data tables, directories and long lists of display cards can repeat a substantial amount of markup. Separating that structure from displayed values reduces the work needed to describe the interface in Flight. Your server still runs application calculations and authorization; the gains depend on how much eligible presentation needs to be transmitted.

Private calculations stay on the server

On the compact path, an expression such as row.revenue-row.privateCost executes on the server. The browser receives its displayed result, not both operands or the original expression. Conditions choosing text follow the same rule. Unused fields do not automatically become browser props.

The transform creates no shared account page cache and replaces no authorization check. Applications must still authorize the data they display. Imports, hooks, effects, custom components, interactive controls, raw HTML and unverified attributes keep the ordinary path.

A deliberately precise scope

Automatic compilation applies to production Node App Router builds. Development, Pages, Edge and HTML-only output retain their current behavior. Custom webpack or JSX pipelines keep ordinary rendering when compatibility cannot be established, including hooks installed by plugins. Do not remove a useful plugin to increase eligibility.

The .prnext/presentation-report.json file explains compiler decisions, not actual per-request compact coverage. Qualification separates an eligible compact workload from an authenticated PostgreSQL SaaS with its translation pipeline, preserving the latter’s fallback. A twenty-minute diagnostic remains distinct from the two-hour endurance campaign.

Upgrade and verify your application

Keep your previous source, lockfile, configuration and deployment for rollback. Install the version, rebuild the application and restart its workers with matching framework and native package versions. Replacing files underneath a running process does not update its loaded code.

To compare your application, set presentationComponents: false in prnext.config.mjs and rebuild both variants. Check hydration, navigation, account changes, forms, stream cancellation and a tab kept open through deployment and rollback. Stale mutations must be rejected without automatic replay. PRNext remains an alpha with partial Next.js compatibility: your application’s result is the one that matters.

Terminal
npm install @thomas.f/prnext@0.1.22-alpha
npx --no-install prnext check --production --json
npx --no-install prnext build

Implementation and scope

Upgrade guide

Back to the blog