facebook/react · error · Error
overrideSuspenseMilestone not supported by this renderer
Error message
overrideSuspenseMilestone not supported by this renderer
What it means
The legacy renderer adapter stubs overrideSuspenseMilestone as a throwing no-op. Suspense milestone tracking is an experimental/canary fiber-reconciler debugging feature; the stack reconciler (React <= 15) has neither Suspense nor milestone bookkeeping, so the backend throws rather than silently ignoring the command.
Source
Thrown at packages/react-devtools-shared/src/backend/legacy/renderer.js:1207
throw new Error('getProfilingData not supported by this renderer');
};
const handleCommitFiberRoot = () => {
throw new Error('handleCommitFiberRoot not supported by this renderer');
};
const handleCommitFiberUnmount = () => {
throw new Error('handleCommitFiberUnmount not supported by this renderer');
};
const handlePostCommitFiberRoot = () => {
throw new Error('handlePostCommitFiberRoot not supported by this renderer');
};
const overrideError = () => {
throw new Error('overrideError not supported by this renderer');
};
const overrideSuspense = () => {
throw new Error('overrideSuspense not supported by this renderer');
};
const overrideSuspenseMilestone = () => {
throw new Error('overrideSuspenseMilestone not supported by this renderer');
};
const startProfiling = () => {
// Do not throw, since this would break a multi-root scenario where v15 and v16 were both present.
};
const stopProfiling = () => {
// Do not throw, since this would break a multi-root scenario where v15 and v16 were both present.
};
function getBestMatchForTrackedPath(): PathMatch | null {
// Not implemented.
return null;
}
function getPathForElement(id: number): Array<PathFrame> | null {
// Not implemented.
return null;
}
View on GitHub (pinned to eafeac097b)
Solutions
- Run milestone debugging only on renderers that support it (canary fiber builds).
- Upgrade the legacy app off React 15.
- Update DevTools so milestone toggles are gated on renderer capabilities.
- For embedders: verify the renderer is fiber-based before forwarding 'overrideSuspenseMilestone'.
Example fix
// before
bridge.send('overrideSuspenseMilestone', {id, rendererID, value});
// after
if (typeof renderer.findFiberByHostInstance === 'function') {
bridge.send('overrideSuspenseMilestone', {id, rendererID, value});
} Defensive patterns
Strategy: validation
Validate before calling
const isFiberRenderer = renderer =>
typeof renderer.findFiberByHostInstance === 'function';
if (isFiberRenderer(renderer)) {
bridge.send('overrideSuspenseMilestone', {id, rendererID, value});
} Type guard
function isFiberRenderer(renderer) {
return typeof renderer.findFiberByHostInstance === 'function';
} Try / catch
try {
bridge.send('overrideSuspenseMilestone', {id, rendererID, value});
} catch (error) {
if (/not supported by this renderer/.test(error.message)) return;
throw error;
} Prevention
- Treat milestone debug commands as canary-fiber-only and gate them explicitly.
- Do not broadcast debug toggles to every attached renderer.
- Feature-detect before sending canary-only commands.
When it happens
Trigger: The DevTools frontend sends the 'overrideSuspenseMilestone' message (canary debug action for suspending-at-milestone behavior) while the target renderer is the legacy (v15) adapter.
Common situations: Canary/experimental DevTools used against a production React 15 app; mixed-version multi-root pages; milestone-debug commands broadcast to all attached renderers including a legacy one.
Related errors
- overrideSuspense not supported by this renderer
- overrideError not supported by this renderer
- Hooks not supported by this renderer
- getProfilingData not supported by this renderer
- handleCommitFiberRoot not supported by this renderer
AI-assisted analysis of facebook/react@eafeac097b (2026-08-21).
Data as JSON: /api/errors/21238211dfb02dda.
Report an issue: GitHub.