The package that connects React's element tree to an actual browser DOM.
React itself is renderer-agnostic — the same core library powers React Native with a completely different renderer targeting native views instead of the DOM. ReactDOM is specifically the package that knows how to take React's output and commit it to an actual browser DOM. createRoot() (React 18+) is how an app mounts into a container element, replacing the legacy ReactDOM.render, and it's specifically what unlocks React 18's concurrent rendering features.
hydrateRoot() is the SSR counterpart — instead of building the DOM from scratch, it attaches React to HTML that a server already rendered, reconciling against that existing markup. createPortal() renders a component's output into a DOM node outside its parent's actual DOM hierarchy, while keeping it in the same place in React's logical component tree — the standard mechanism for modals, tooltips, and dropdowns that need to visually escape a parent's overflow or z-index without breaking how the component behaves in React.
What you'll walk away knowing