Skip to content
Guides

Compatibility

This is the default Vite configuration. API availability is not a promise of every React behavior, especially concurrent behavior.

AreaRedact behavior
Core renderingJSX, hooks (including use, useEffectEvent, useId, and useSyncExternalStore), context, refs, memo, lazy, portals, error boundaries, and modern class lifecycles. Legacy class lifecycles are no-ops.
DOM and formsControlled inputs, reset defaults, event handling, and preservation of edits during hydration have shared React tests.
Suspense and hydrationFallbacks, retained primary DOM, retries, streaming boundaries, and event replay. No priority scheduling.
ActivityRetains hidden DOM/state and disconnects effects, refs, and subscriptions. Insertion effects stay connected. Hidden work is synchronous, not background priority.
Fragment refsStable DOM instances with events, focus, geometry, observers, scrolling, and portal/visibility tracking.
TransitionsuseTransition / startTransition run work synchronously. Pending stays false; useDeferredValue returns its input. No time slicing or interruptible renders.
useActionStateReturns the initial state, a no-op dispatch, and false. It does not run the action.
useOptimistic, useFormStatusNo optimistic overlay; the optimistic setter is a no-op. Form status stays idle.
View transitionsViewTransition preserves state; addTransitionType does not animate by default. Native snapshots/styles/callbacks are experimental and opt-in. Animated commits wait for the browser snapshot callback, without a concurrent scheduler.
Browser-only renderingbrowser() requests a server-to-client Suspense fallback; onBrowserBailout reports it separately from errors. use(browser()) returns undefined on the client.
Resource APIsPreload/preinit/preconnect/DNS hints and declarative styles/scripts, with document/ShadowRoot ownership and streamed stylesheet coverage.
SSRrenderToString, renderToStaticMarkup, readable and pipeable streams. Full Fizz prerender/resume APIs are not implemented.
Cachingcache returns its function, cacheSignal returns null, and unstable_useCacheRefresh is a stable client no-op. Invoking a server refresh throws. Client/DOM-server rendering is uncached.
React CompilerThe react/compiler-runtime memo-cache entrypoint is implemented and aliased. This is not validation of every compiler output pattern.
Server Components / FlightKept on upstream React in the RSC environment, not reimplemented by Redact.
DebuggingFast Refresh works with @vitejs/plugin-react, preserving state for compatible edits and remounting when hook signatures change. StrictMode / Profiler render children without double invocation or profiling. useDebugValue is a no-op. React DevTools inspection is not implemented.

Native animation is not exhaustive visual parity. Production animation, hidden-tab behavior, broader resource/navigation races, and Safari/Firefox remain unverified. API details, upstream audit, native animation limits.