TanStack releases Redact, saving React apps roughly 36–48KB gzipped
TanStack Redact replaces React's browser runtime through build configuration without application changes. Starter apps saved roughly 36–48KB gzipped, but rendering is synchronous rather than time-sliced.

TL;DR
- Existing React apps can swap browser runtimes through build configuration without application-code changes, according to TanStack's announcement.
- Starter apps saved 35.7–48.1 KB of gzipped client JavaScript and CSS in TanStack's measurements.
- Rendering is synchronous, without React's time slicing or interruptible renders, as TanStack explains.
Redact's StrictMode skips double invocation, and its Vite plugin adapts React 18 element markers at build time so libraries such as react-is keep working. The runtime started as an experiment for TanStack's own sites before other teams put it into production.
Starter-app bundle sizes
TanStack built the same small app with each runtime and counted the gzip size of all emitted client JavaScript and CSS in its published comparison.
| Framework | React | Redact | Saved |
| --- | ---: | ---: | ---: |
| TanStack Start | 109.3 KB | 62.3 KB | 47.0 KB, 43.0% |
| Vite | 68.3 KB | 20.1 KB | 48.1 KB, 70.5% |
| Vinext | 138.1 KB | 98.8 KB | 39.3 KB, 28.5% |
| Next.js | 175.6 KB | 139.9 KB | 35.7 KB, 20.4% |
These are whole-build totals, including lazy chunks. The percentages vary with the application and do not describe a single page's download.
A separate six-round Vinext benchmark reduced gzip output from 154.9 KB to 115.5 KB, with effectively unchanged production build times. That benchmark did not measure browser rendering or hydration speed.
Build-config integration
Redact 0.2.0 ships stable browser integrations for TanStack Start, Vite, Vinext and Next.js.
The Start configuration places Redact after the Start and React plugins. Bundling server dependencies ensures their React imports share the app's runtime:
React on the server
The Vinext and Next.js integrations support both App Router and Pages Router, including Pages-only apps. Responsibilities stay divided:
- React: server rendering and Server Components.
- The framework: routing, caching and Server Action transport.
- Redact: browser hydration and client rendering.
Synchronous transitions and actions
Heavy renders can still delay input, the consequential cost of dropping time slicing.
Transitions and actions retain several familiar behaviors, according to the compatibility guide:
useTransitionretains committed content and pending state while work suspends.useDeferredValueretains stale results.useActionStatequeues actions against the previous result, tracks pending work and sends failures to error boundaries.useOptimisticrebases updates on current state and rolls them back when the action finishes.
Optional feature pruning
Start and Vite can disable unused features, as TanStack noted at launch. The documented configurations shrink the same example further:
- Start: disabling
activity,fragmentRefsandportal, while retaining hydration and router features, brings the build to 59.8 KB gzip. - Client-only Vite:
redact({ preset: 'nano' })removes optional features and brings the build to 12.6 KB gzip.
Vinext and Next.js use the full runtime so their framework features remain available.