Configuration

How React is actually configured in practice — bundler JSX transforms, StrictMode, and framework-managed setups.

Path: configuration

Third-party documentation. This is independently authored analysis of the public React codebase — not the official docs, and not reviewed or endorsed by the React team.

Configuration

React itself has almost no runtime configuration — which surprises people. Configuration lives in the tooling around it.

The JSX transform

JSX is compiled by your bundler, not React. The modern automatic transform (jsx: "react-jsx" in TypeScript, enabled by default in Vite and Next.js) imports the necessary functions from react/jsx-runtime automatically — no import React needed at the top of every file anymore.

StrictMode

<React.StrictMode> enables development-only checks: double-invoked render functions and effects (to surface impurity and missing cleanup), deprecated API warnings. It costs nothing in production builds and catches whole bug classes early — most frameworks enable it by default now.

Renderers and entry points

Client apps create a root with createRoot(el).render(<App />); server rendering uses renderToString/renderToPipeableStream. Frameworks own this layer entirely — if you're using Next.js or similar, you rarely touch it.

Compiler-era configuration

React Compiler (automatic memoization) integrates as a build-step plugin with its own eslint support; Server Components introduce per-file directives ("use client") that the bundler interprets. Both are configured in the framework/build layer, consistent with React's long-standing minimalism about its own runtime surface.