facebook/reactMITd083ec1Report / request removal

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.

PackageRoleBoundary
reactPublic, JSX-runtime, and compiler-runtime entry pointsApplication-facing
react-reconcilerPackage for creating custom renderersRenderer construction
schedulerCooperative browser schedulerWork coordination
sharedPrivate packageShared package boundary
react-domPublic package for working with the DOMDOM-facing API
react-dom-bindingsPrivate implementation details for react-domDOM host implementation
react-serverCustom streaming server renderersServer-side
react-clientConsumer of streaming modelsClient-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.

PackageRoleDistinguishing evidence
react-isBrand checking of React elementsIts description identifies element brand checking
react-artDeclarative bindings for ART vector graphicsSupports Canvas, SVG, and VML output
react-native-rendererRenderer package with a scheduler dependencyIts metadata names the package and dependency
react-test-rendererSnapshot-testing rendererIts description names snapshot testing
react-noop-rendererPrivate renderer for testing Fiber, Fizz, and FlightDepends on react-reconciler, react-client, and react-server

The package metadata establishes these distinctions.

The package-level relationships are summarized below.

Package ownership — Which packages provide the public API, core runtime, and alternate outputs?

Evidence

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

  • react owns the public React, JSX-runtime, and compiler-runtime entry points.
  • react-reconciler creates custom renderers, and scheduler is its named scheduling dependency.
  • react-dom is the public DOM package, while react-dom-bindings is its private implementation layer.
  • react-art, react-native-renderer, react-test-renderer, and react-noop-renderer are alternate renderer packages with different output or testing purposes.
  • react-server and react-client form 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

Want this for your repos?

Try Angada AI Wiki