# Feature catalog — facebook/react

> Canonical page: https://codevetter.com/unpack/react/feature-catalog

# Feature catalog — facebook/react

Scanned commit 59aff3e18cb5b3a336c280bbfa57ec37999511b9 (2026-09-18). Generated by codevetter codevetter 1.12.0 on 2026-09-22.

User-facing surface is API surface, not screens. `packages/react/src/ReactClient.js` is the canonical export list for the isomorphic package; `react-dom` fans out to client, server (Node/Edge/Browser/Bun), static prerender and test-utils entrypoints; `react-server-dom-{webpack,turbopack,parcel,esm,unbundled,fb}` each ship a bundler-specific Flight client+server pair. Tooling packages are first-class features too: `eslint-plugin-react-hooks` (now also re-exporting compiler-derived rules), `react-refresh` (Fast Refresh Babel plugin + runtime), DevTools in five packaging flavours, and two MCP servers. Behaviour is further gated by ~67 `enable*` flags in `packages/shared/ReactFeatureFlags.js`, inspectable via `yarn flags`.
- The isomorphic `react` package exports the full modern surface including `use`, `cache`, `cacheSignal`, `Activity`, `ViewTransition`, `addTransitionType`, `unstable_SuspenseList`, `unstable_TracingMarker`, and `__COMPILER_RUNTIME` — enumerated in `packages/react/index.js` and implemented in `ReactClient.js`. — [packages/react/index.js#L27-L60](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/react/index.js#L27-L60) [packages/react/src/ReactClient.js#L25-L80](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/react/src/ReactClient.js#L25-L80)
- Hooks are exported from `packages/react/src/ReactHooks.js` and include the newer `useOptimistic`, `useActionState`, `useEffectEvent`, `useSyncExternalStore`, `useDeferredValue`, `useCacheRefresh` and `use`. — [packages/react/src/ReactClient.js#L38-L59](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/react/src/ReactClient.js#L38-L59) [packages/react/src/ReactHooks.js](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/react/src/ReactHooks.js)
- `react-dom` ships eleven distinct entrypoints — `client.js`, `server.js`/`server.node.js`/`server.edge.js`/`server.browser.js`/`server.bun.js`, `static.js`/`static.node.js`/`static.edge.js`/`static.browser.js`, `profiling.js`, `test-utils.js`, `unstable_testing.js` and `unstable_server-external-runtime.js`. — [packages/react-dom/client.js](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/react-dom/client.js) [packages/react-dom/server.node.js](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/react-dom/server.node.js) [packages/react-dom/static.edge.js](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/react-dom/static.edge.js) [packages/react-dom/unstable_server-external-runtime.js](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/react-dom/unstable_server-external-runtime.js)
- Streaming SSR is `renderToPipeableStream` in `packages/react-dom/src/server/ReactDOMFizzServerNode.js`, which builds a request via `createRequestImpl` → `createRequest`, kicks off `startWork(request)`, and exposes `pipe(destination)` that calls `startFlowing(request, destination)`. — [packages/react-dom/src/server/ReactDOMFizzServerNode.js#L104-L151](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/react-dom/src/server/ReactDOMFizzServerNode.js#L104-L151) [packages/react-server/src/ReactFizzServer.js#L601-L620](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/react-server/src/ReactFizzServer.js#L601-L620) [packages/react-server/src/ReactFizzServer.js#L6370-L6470](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/react-server/src/ReactFizzServer.js#L6370-L6470)
- Server Actions are a shipped feature: `decodeAction(body, serverManifest)` scans FormData for `$ACTION_REF_*` / `$ACTION_ID_*` keys, resolves the reference through `loadServerReference`, and returns the action pre-bound to the remaining FormData; `decodeFormState` handles `$ACTION_KEY` for `useActionState`. — [packages/react-server/src/ReactFlightActionServer.js#L107-L175](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/react-server/src/ReactFlightActionServer.js#L107-L175) [packages/react-server-dom-webpack/src/server/ReactFlightDOMServerNode.js#L540-L758](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/react-server-dom-webpack/src/server/ReactFlightDOMServerNode.js#L540-L758)
- Flight (RSC) supports multiple request body shapes on the server: `decodeReply`, `decodeReplyFromBusboy` (multipart uploads) and `decodeReplyFromAsyncIterable`, all exported from `ReactFlightDOMServerNode.js`. — [packages/react-server-dom-webpack/src/server/ReactFlightDOMServerNode.js#L540-L758](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/react-server-dom-webpack/src/server/ReactFlightDOMServerNode.js#L540-L758)
- Taint APIs `taintUniqueValue` and `taintObjectReference` guard against leaking server secrets to the client, backed by `TaintRegistryObjects` (WeakMap), `TaintRegistryValues` (refcounted Map) and a `FinalizationRegistry` cleanup hook; gated by `enableTaint = __EXPERIMENTAL__`. — [packages/react/src/ReactTaint.js#L28-L62](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/react/src/ReactTaint.js#L28-L62) [packages/react/src/ReactTaintRegistry.js#L17-L28](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/react/src/ReactTaintRegistry.js#L17-L28) [packages/shared/ReactFeatureFlags.js#L94](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/shared/ReactFeatureFlags.js#L94)
- `eslint-plugin-react-hooks` v7 ships `rules-of-hooks` and `exhaustive-deps` plus a set of compiler-derived rules merged in from `shared/ReactCompiler`, with `recommended` and `recommendedLatest` flat-config presets and a deprecated-rule shim for `component-hook-factories`. — [packages/eslint-plugin-react-hooks/src/index.ts#L9-L80](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/eslint-plugin-react-hooks/src/index.ts#L9-L80) [packages/eslint-plugin-react-hooks/src/rules/ExhaustiveDeps.ts](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/eslint-plugin-react-hooks/src/rules/ExhaustiveDeps.ts) [packages/eslint-plugin-react-hooks/src/rules/RulesOfHooks.ts](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/eslint-plugin-react-hooks/src/rules/RulesOfHooks.ts)
- Fast Refresh is two artifacts: `ReactFreshBabelPlugin.js` (build-time instrumentation) and `ReactFreshRuntime.js` (runtime registry / signature checking), published as `react-refresh@0.19.0`. — [packages/react-refresh/src/ReactFreshBabelPlugin.js](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/react-refresh/src/ReactFreshBabelPlugin.js) [packages/react-refresh/src/ReactFreshRuntime.js](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/react-refresh/src/ReactFreshRuntime.js) [ReactVersions.js#L52](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/ReactVersions.js#L52)
- DevTools ships in five packaging flavours — `react-devtools` (standalone), `-core`, `-extensions` (browser extension), `-inline`, `-fusebox` (React Native / Chrome DevTools frontend) — all sharing `react-devtools-shared`, plus `react-devtools-shell` for local development. — [packages/react-devtools-extensions/src/panel.js](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/react-devtools-extensions/src/panel.js) [packages/react-devtools-shared/src/bridge.js#L317-L347](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/react-devtools-shared/src/bridge.js#L317-L347) [packages/react-devtools-shell](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/react-devtools-shell)
- `react-devtools-cdt-mcp` is a browser library that registers React inspection and profiling tools with `chrome-devtools-mcp`, published from its own workflow. — [packages/react-devtools-cdt-mcp/package.json#L1-L25](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/react-devtools-cdt-mcp/package.json#L1-L25) [.github/workflows/devtools_cdt_mcp_publish.yml](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/.github/workflows/devtools_cdt_mcp_publish.yml)
- A second MCP server lives in the compiler: `compiler/packages/react-mcp-server` registers tools including `query-react-dev-docs` (Algolia-backed react.dev search) and a runtime-performance tool driven by headless Puppeteer. — [compiler/packages/react-mcp-server/src/index.ts#L33-L70](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/compiler/packages/react-mcp-server/src/index.ts#L33-L70) [compiler/packages/react-mcp-server/src/tools/runtimePerf.ts#L2-L95](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/compiler/packages/react-mcp-server/src/tools/runtimePerf.ts#L2-L95)
- The compiler playground is a real deployed Next.js 15.5.9 + Tailwind + Monaco app with a `dev` script that concurrently watches the compiler, the runtime and Next, and a Playwright `test` script. — [compiler/apps/playground/package.json#L5-L45](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/compiler/apps/playground/package.json#L5-L45) [compiler/apps/playground/tailwind.config.js](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/compiler/apps/playground/tailwind.config.js) [compiler/apps/playground/playwright.config.js](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/compiler/apps/playground/playwright.config.js)
- CLI-style developer commands are exposed as npm scripts: `yarn test` (channel-aware), `yarn flow`, `yarn lint`/`yarn linc`, `yarn flags`, `yarn extract-errors`, `yarn download-build`, `yarn generate-changelog`, `yarn build-for-devtools`. — [package.json#L122-L160](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/package.json#L122-L160)
- Behaviour is switchable at build time through ~67 `enable*` constants in `packages/shared/ReactFeatureFlags.js` (e.g. `enableViewTransition`, `enableGestureTransition`, `enableDefaultTransitionIndicator`, `enableFizzBlockingRender`, `enableOptimisticKey`), many tied to `__EXPERIMENTAL__`. — [packages/shared/ReactFeatureFlags.js#L26-L124](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/packages/shared/ReactFeatureFlags.js#L26-L124) [scripts/flags/flags.js#L1-L40](https://github.com/facebook/react/blob/59aff3e18cb5b3a336c280bbfa57ec37999511b9/scripts/flags/flags.js#L1-L40)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
