facebook/react · error · Error

overrideSuspense not supported by this renderer

Error message

overrideSuspense not supported by this renderer

What it means

The legacy renderer adapter stubs overrideSuspense as a throwing no-op. The 'toggle suspense' debug toggle works by flipping SuspenseComponent fiber state — a React 16.6+ reconciler feature. React 15 has no Suspense, so the backend cannot implement the override and throws.

Source

Thrown at packages/react-devtools-shared/src/backend/legacy/renderer.js:1204

  // v16+ only features
  const getProfilingData = () => {
    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.

View on GitHub (pinned to eafeac097b)

Solutions

  1. Do not use the suspense debug toggle on v15 roots — Suspense requires React 16.6+.
  2. Upgrade the inspected app to a Suspense-capable React version.
  3. Update DevTools so suspense toggles are disabled for legacy renderers.
  4. For embedders: gate 'overrideSuspense' sends on a fiber capability check.

Example fix

// before
bridge.send('overrideSuspense', {id, rendererID, forceFallback});

// after
if (typeof renderer.findFiberByHostInstance === 'function') {
  bridge.send('overrideSuspense', {id, rendererID, forceFallback});
}
Defensive patterns

Strategy: validation

Validate before calling

const isFiberRenderer = renderer =>
  typeof renderer.findFiberByHostInstance === 'function';
if (isFiberRenderer(renderer)) {
  bridge.send('overrideSuspense', {id, rendererID, forceFallback});
}

Type guard

function isFiberRenderer(renderer) {
  return typeof renderer.findFiberByHostInstance === 'function';
}

Try / catch

try {
  bridge.send('overrideSuspense', {id, rendererID, forceFallback});
} catch (error) {
  if (/not supported by this renderer/.test(error.message)) return;
  throw error;
}

Prevention

When it happens

Trigger: The DevTools frontend sends the 'overrideSuspense' message — the debug action that forces a Suspense boundary into its fallback (or back) — for a component whose renderer is the legacy (v15) adapter.

Common situations: Running suspense-debug toggles against a React 15 app or subtree; multi-root v15/v16 pages; DevTools frontend that fails to hide the toggle for 'outdated' build types due to version skew.

Related errors


AI-assisted analysis of facebook/react@eafeac097b (2026-08-21). Data as JSON: /api/errors/4329a3408d6efefc. Report an issue: GitHub.