React Overview
React is a JavaScript library for building user interfaces. It lets developers describe interactive views, compose stateful components, and update only the relevant parts when data changes.
This repository exists to evolve React core and support the packages, renderers, build targets, tests, and compiler tooling that surround that library. The root workspace includes every package under packages/*, while the compiler has its own workspace and Rust workspace.
Sources: README.md:3-7, README.md:60-62, package.json:1-5, compiler/package.json:1-7, compiler/Cargo.toml:1-6
Core concepts
Declarative UI
A declarative UI describes what the interface should look like for each application state; React then updates and renders the appropriate components when data changes.
Sources: README.md:3-6
Component
A component is an encapsulated unit of JavaScript logic that can manage its own state and compose with other components to form a larger interface.
Sources: README.md:5-7
Renderer
A renderer is the environment-specific part that turns React work into output; react-dom targets the DOM, while react-reconciler is the package for creating custom renderers.
Sources: packages/react-dom/package.json:1-5, packages/react-reconciler/package.json:1-4
JSX
JSX is an optional HTML-like syntax that makes React code more readable; it is syntax used in application code rather than a requirement of React itself.
Sources: README.md:48-58
Monorepo package
A package is an independently described workspace unit with its own name, version, exports, dependencies, or peer dependencies; the root workspace collects the packages under packages/*.
Sources: package.json:1-5
What the library ships
The public react package contains the core React JavaScript library and exposes its default entry point plus JSX runtimes, a compiler runtime, and a server-oriented entry point.
The react-dom package provides the DOM-facing package and publishes client, server, static, profiling, test-utils, and unstable-testing entry points.
The react-reconciler package is the reusable package for creating custom renderers, and it shares the react peer dependency and scheduler dependency used by the runtime packages.
| Package | Plain-language role | Relationship shown in its manifest |
|---|---|---|
react | Core JavaScript library and JSX/runtime entry points | Publishes the default, JSX, compiler-runtime, and server-related paths |
react-dom | React package for working with the DOM | Depends on scheduler and expects react as a peer |
react-reconciler | Foundation for creating custom renderers | Depends on scheduler and expects react as a peer |
These manifests show that react supplies the core package surface, while react-dom and react-reconciler provide environment or renderer-facing layers around it.
Evidence
- react-corepackages/react/package.json:2
- react-corepackages/react/package.json:23
- react-dompackages/react-dom/package.json:1
- react-dompackages/react-dom/package.json:19
- react-reconcilerpackages/react-reconciler/package.json:1
- react-reconcilerpackages/react-reconciler/package.json:25
- schedulerpackages/react-dom/package.json:19
- schedulerpackages/react-reconciler/package.json:31
The diagram makes the package boundary explicit: the manifests show dependency relationships, but they do not by themselves describe every internal runtime call.
Sources: packages/react/package.json:2-3, packages/react/package.json:23-42, packages/react-dom/package.json:1-5, packages/react-dom/package.json:51-120, packages/react-reconciler/package.json:1-4, packages/react-reconciler/package.json:25-33, packages/react-dom/package.json:19-24
How the monorepo is organized
The root package is private and defines packages/* as workspaces, so the runtime repository is organized around many package-level units rather than one published package.
The compiler is a parallel area with its own JavaScript workspaces and Rust workspace members, including the Rust compiler native package. The compiler packages cover the Babel plugin, ESLint integration, compiler runtime, health checks, and supporting tools; the shown manifests identify those roles directly.
The root scripts also show that building is coordinated centrally: build invokes the Rollup release-channel build, while prebuild links the compiler first.
The repository contains additional runtime-adjacent packages, including react-dom-bindings, react-native-renderer, react-noop-renderer, server-component bindings, DevTools packages, and testing packages. Their manifests describe whether they are public, private, renderer-facing, server-facing, or test-oriented.
Sources: package.json:1-5, compiler/package.json:1-7, compiler/Cargo.toml:1-6, compiler/packages/babel-plugin-react-compiler/package.json:1-8, compiler/packages/eslint-plugin-react-compiler/package.json:1-8, compiler/packages/react-compiler-runtime/package.json:1-8, compiler/packages/react-compiler-healthcheck/package.json:1-8, package.json:123-131, packages/react-dom-bindings/package.json:1-8, packages/react-native-renderer/package.json:1-8, packages/react-noop-renderer/package.json:1-8, packages/react-server-dom-webpack/package.json:1-8, packages/react-devtools-core/package.json:1-8
Where to start tracing an update
Start with the small example in README.md: it imports createRoot from react-dom/client, creates a root for a DOM container, and calls root.render with a component written using JSX.
The example establishes the readable entry path, not the complete internal implementation: application code supplies the component and JSX, react-dom/client supplies root creation, and root.render starts rendering into the container.
Evidence
- applicationREADME.md:45
- dom-clientREADME.md:45
- containerREADME.md:52
From there, read the react JSX implementation, then the react-dom client entry points, and then the reconciler and host bindings; this ordering follows the package roles and the visible example, while the detailed internal call path belongs to the specialized pages below.
Sources: README.md:45-54, packages/react-dom/package.json:51-69, packages/react-reconciler/package.json:1-4
How it connects
For the package-by-package inventory, continue to Repository Map.
For the build, release-channel, and feature-flag machinery that produces these package artifacts, see Build, Test, and Feature Flags and Rollup Bundles & Module Forks.
For the element created from JSX, read Element Types & Components. For the fiber structure and update machinery, continue with Fiber Architecture, Work Loop & Scheduling, and Render Phase.
For the DOM-specific hand-off, read ReactDOM Host Config and Commit Phase. For server output, use Server Rendering (Fizz).
Sources: package.json:1-5, README.md:48-58, packages/react-reconciler/package.json:1-4
Key takeaways
- React is a declarative, component-based JavaScript library for building user interfaces.
reactis the core package;react-domtargets the DOM;react-reconcilersupports custom renderers.- The root workspace covers
packages/*, while the compiler has separate JavaScript and Rust workspace structure. - The clearest update-reading entry point is
createRootfollowed by root.render in README.md.
Sources: README.md:3-7, packages/react/package.json:2-3, packages/react-dom/package.json:1-5, packages/react-reconciler/package.json:1-4, package.json:1-5, compiler/package.json:1-7, compiler/Cargo.toml:1-6, README.md:45-56