Configuration
How React is actually configured in practice — bundler JSX transforms, StrictMode, and framework-managed setups.
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.
