Files
react/packages/react-devtools-facade
Ruslan Lesiutin 7dfc7ccd12 [DevTools] Remove the dead Timeline profiler code (#37187)
## Summary

With the tab gone, everything that fed it is unreachable. This deletes
`packages/react-devtools-timeline` (74 files) and the backend that
produced its data, `backend/profilingHooks.js`, along with
`SidebarEventInfo`, the two timeline test suites, the `timelineData`
snapshot serializer, and the scheduling-profiler fixture.

It also unwires the plumbing that only existed to carry timeline data:
`recordTimeline` across the reload-and-profile path (hook →
sessionStorage → agent → renderer), `timelineData` on
`ProfilingDataBackend` and the profile export, the `supportsTimeline`
Store config, the `rootSupportsTimelineProfiling` capability, the
`DevToolsProfilingHooks` type and the `ReactRenderer` members DevTools
used to inject it, the 40 `--color-timeline-*` theme variables in both
themes plus the orphaned `--color-scroll-caret`, and `hook.js`'s
internal-module-range tracking with its `react-devtools-facade` stubs.

`yarn.lock` is regenerated: 52 distinct package-versions and 68
requirement specs drop out, with no additions and no version changes to
anything that remains.

## Deliberate non-changes

- **`PROFILER_EXPORT_VERSION` stays at 5.**
`prepareProfilingDataFrontendFromExport` compares versions with `!==`,
so a bump would reject every profile anyone has already saved.
`timelineData` was an optional key, so dropping it is invisible in both
directions.
- **Profiling flag bit `0b010` is retired, not reused**, and the
constant is replaced by a comment saying so. Shipped backends keep
setting it, so renumbering `PROFILING_FLAG_PERFORMANCE_TRACKS_SUPPORT`
into that slot would make a new frontend misread older backends as
tracks-capable.
- **The `displayName` properties on DevTools' cache thenables are
kept.** They look timeline-only, but `ReactFiberThenable` reads
`thenable.displayName` to name I/O in async debug info, which feeds the
Performance tracks. Only their stale comments are corrected.
- **`react-reconciler`, `shared/ReactFeatureFlags.js` and
`scripts/rollup` are untouched**; `enableSchedulingProfiler` is still
live for www and native-fb.

## Follow-ups (not in this stack)

Three stale comments still name the removed package:
`scripts/rollup/wrappers.js:532` and `ReactFiberLane.js:38,125`. Left
alone to keep this stack purely DevTools-side.

## Test plan

`yarn linc`, `yarn flow dom-node`, and the DevTools suite all pass on
this commit in isolation (40/40 suites, 582 tests).
2026-08-03 16:32:51 +01:00
..

react-devtools-facade

Experimental, private package that defines building blocks for querying React runtime state.

The facade installs the __REACT_DEVTOOLS_GLOBAL_HOOK__ that React looks for at initialization time — enabling fiber-root tracking without the overhead of the full DevTools backend — and exposes a small, framework-agnostic library API that integrators compose into tools.

This package is intentionally low-level. It does not install any tool globals and it does not decide how tools are surfaced. It installs the hook, tracks fiber roots, and hands back building blocks; the integrator (for example, a chrome-devtools-mcp integration) decides everything else — including whether to expose anything else on globals.

API

installFacade(target = globalThis): Facade

Installs __REACT_DEVTOOLS_GLOBAL_HOOK__ on target and returns a Facade handle holding the hook plus the runtime state it tracks (fiberRoots, rendererInternals, profilingState). Building blocks read from the returned Facade; they never reach for globals.

Call this before React initializes so the hook captures the first commit:

import {installFacade} from 'react-devtools-facade';

const facade = installFacade();
// ...load React, render your app...

installFacade installs only the DevTools hook. It does not install __REACT_TOOLS__, __REACT_LLM_TOOLS__, or any other global. Once the tool building blocks land, an integrator composes them from the returned Facade and decides whether to expose anything on globals.