Repository Map
The packages directory separates React’s public API, reconciliation engine, scheduling primitive, host integrations, server protocols, and testing or alternate renderers.
The main orientation is: react provides public and runtime entry points, react-reconciler creates custom renderers, scheduler provides cooperative scheduling, and renderer packages provide environment-specific implementations. react-dom is the public DOM-facing package, while react-dom-bindings contains implementation details for it.
Sources: packages/react/package.json:1-23, packages/react-reconciler/package.json:1-33, packages/react/package.json:11-42, packages/scheduler/package.json:1-5, packages/react-dom/package.json:1-24, packages/react-dom-bindings/package.json:1-22
Core concepts
Public package
A public package is an entry point whose metadata exposes runtime files and package exports. react exposes the main API plus JSX and compiler runtime entry points.
Sources: packages/react/package.json:11-42
Reconciler
A reconciler is a package for creating custom renderers. react-reconciler owns this role and depends on scheduler.
Sources: packages/react-reconciler/package.json:1-33
Host bindings
Host bindings are implementation details for a host-facing package. react-dom-bindings is private and describes itself as the implementation details for react-dom.
Sources: packages/react-dom-bindings/package.json:1-22
Alternate renderer
An alternate renderer is a renderer package other than the public DOM package, including graphics, native, test, and no-op implementations.
Sources: packages/react-native-renderer/package.json:1-15
Streaming model
A streaming model is a component result produced or consumed across a server/client boundary. react-server creates custom streaming server renderers, while react-client consumes streaming models.
Sources: packages/react-server/package.json:1-31, packages/react-client/package.json:1-29
Package families and ownership
These packages form the central runtime path and its directly named supporting layers.
| Package | Role | Boundary |
|---|---|---|
react | Public, JSX-runtime, and compiler-runtime entry points | Application-facing |
react-reconciler | Package for creating custom renderers | Renderer construction |
scheduler | Cooperative browser scheduler | Work coordination |
shared | Private package | Shared package boundary |
react-dom | Public package for working with the DOM | DOM-facing API |
react-dom-bindings | Private implementation details for react-dom | DOM host implementation |
react-server | Custom streaming server renderers | Server-side |
react-client | Consumer of streaming models | Client-side |
These roles and boundaries come from the package descriptions, visibility metadata, exports, and dependency declarations.
The remaining packages are classification helpers, renderer variants, and test-oriented implementations.
| Package | Role | Distinguishing evidence |
|---|---|---|
react-is | Brand checking of React elements | Its description identifies element brand checking |
react-art | Declarative bindings for ART vector graphics | Supports Canvas, SVG, and VML output |
react-native-renderer | Renderer package with a scheduler dependency | Its metadata names the package and dependency |
react-test-renderer | Snapshot-testing renderer | Its description names snapshot testing |
react-noop-renderer | Private renderer for testing Fiber, Fizz, and Flight | Depends on react-reconciler, react-client, and react-server |
The package metadata establishes these distinctions.
The package-level relationships are summarized below.
Evidence
- reactpackages/react/package.json:1
- reconcilerpackages/react-reconciler/package.json:1
- schedulerpackages/scheduler/package.json:1
- dompackages/react-dom/package.json:1
- dom-bindingspackages/react-dom-bindings/package.json:1
- serverpackages/react-server/package.json:1
- clientpackages/react-client/package.json:1
- nooppackages/react-noop-renderer/package.json:1
This diagram shows the dependency relationships explicitly listed in the package metadata.
Sources: packages/react/package.json:1-42, packages/react-reconciler/package.json:1-33, packages/scheduler/package.json:1-27, packages/shared/package.json:1-5, packages/react-dom/package.json:1-126, packages/react-dom-bindings/package.json:1-23, packages/react-server/package.json:1-31, packages/react-client/package.json:1-29, packages/react-is/package.json:1-5, packages/react-art/package.json:1-31, packages/react-native-renderer/package.json:1-15, packages/react-test-renderer/package.json:1-4, packages/react-noop-renderer/package.json:1-19, packages/react-dom/package.json:19-24, packages/react-reconciler/package.json:25-33, packages/react-noop-renderer/package.json:13-19
How react-dom differs from react-dom-bindings
react-dom is the public package: it has a main entry point, a React peer dependency, client and server exports, static rendering exports, profiling, testing, and unstable entry points. Its export map selects files for conditions such as react-server, node, browser, worker, bun, and edge-light.
react-dom-bindings is private and is described as “implementation details for react-dom.” The shown metadata does not expose the public entry-point map shown for react-dom.
The client entry in react-dom imports container clearing, root-marking helpers, event setup, and node-type constants from react-dom-bindings. This is the concrete hand-off from the public DOM package to its host-specific implementation layer.
The bindings package contains DOM component logic, DOM host configuration, root event handling, and container-to-fiber lookup.
Sources: packages/react-dom/package.json:1-24, packages/react-dom/package.json:51-120, packages/react-dom-bindings/package.json:1-22, packages/react-dom/src/client/ReactDOMRootFB.js:34-47, packages/react-dom-bindings/src/client/ReactDOMComponent.js:2182-2210, packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js:6791-6798, packages/react-dom-bindings/src/events/DOMPluginEventSystem.js:620-632, packages/react-dom-bindings/src/client/ReactDOMComponentTree.js:150-158
Which packages are alternate renderers?
react-art is an alternate renderer for declarative vector graphics. Its description names Canvas, SVG, and VML as possible output targets, and its files include Circle.js, Rectangle.js, and Wedge.js.
react-native-renderer is another renderer package with a dependency on scheduler and a React peer dependency. The shown metadata does not specify additional host behavior.
react-test-renderer is a renderer for snapshot testing, and its files include shallow.js; it also depends on react-is and scheduler.
react-noop-renderer is private and explicitly covers testing the Fiber, Fizz, and Flight reconcilers. Its dependencies make it a composition point for react-reconciler, react-client, and react-server.
Sources: packages/react-art/package.json:1-3, packages/react-art/package.json:32-40, packages/react-native-renderer/package.json:1-15, packages/react-test-renderer/package.json:1-4, packages/react-test-renderer/package.json:21-34, packages/react-noop-renderer/package.json:1-19
How it connects
For the public programming model, start with React Overview and continue to Public API Reference for the surface exported by react. JSX and element semantics are covered by Element Types & Components.
For the core runtime, use Fiber Architecture, Work Loop & Scheduling, Render Phase, and Commit Phase. The package boundary is react-reconciler, while scheduler is separately packaged as a cooperative browser scheduler.
For browser output, pair this map with ReactDOM Host Config and Synthetic Event System. The DOM entry package imports host configuration, container, component-tree, and event-system modules from react-dom-bindings.
For server and streaming boundaries, use Server Rendering (Fizz), Server Components (Flight), and Fizz Server Internals. The package split is explicit: react-server creates streaming server renderers and react-client consumes streaming models.
Sources: packages/react/package.json:11-42, packages/react-reconciler/package.json:1-33, packages/scheduler/package.json:1-5, packages/react-dom/src/client/ReactDOMRootFB.js:34-47, packages/react-server/package.json:1-31, packages/react-client/package.json:1-29
Key takeaways
reactowns the public React, JSX-runtime, and compiler-runtime entry points.react-reconcilercreates custom renderers, andscheduleris its named scheduling dependency.react-domis the public DOM package, whilereact-dom-bindingsis its private implementation layer.react-art,react-native-renderer,react-test-renderer, andreact-noop-rendererare alternate renderer packages with different output or testing purposes.react-serverandreact-clientform the shown streaming server/client package pair.
Sources: packages/react/package.json:11-42, packages/react-reconciler/package.json:1-33, packages/react-dom/package.json:1-24, packages/react-dom-bindings/package.json:1-5, packages/react-art/package.json:1-3, packages/react-native-renderer/package.json:1-15, packages/react-test-renderer/package.json:1-4, packages/react-noop-renderer/package.json:1-19