facebook/react · error · Error

handleCommitFiberUnmount not supported by this renderer

Error message

handleCommitFiberUnmount not supported by this renderer

What it means

The legacy renderer adapter stubs handleCommitFiberUnmount as a throwing no-op: fiber unmount notifications (__REACT_DEVTOOLS_GLOBAL_HOOK__.onCommitFiberUnmount) are a v16+ reconciler capability. If this throws, an unmount notification meant for a fiber renderer was dispatched to the legacy (stack) renderer interface instead.

Source

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

            break;
          case 'state':
            setInObject(publicInstance.state, path, value);
            forceUpdate(publicInstance);
            break;
        }
      }
    }
  }

  // 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.

View on GitHub (pinned to eafeac097b)

Solutions

  1. Deduplicate React copies so each renderer registers exactly once with the DevTools hook.
  2. Align DevTools frontend and backend versions.
  3. Upgrade the v15 renderer/app to fiber.
  4. For embedders: guard with a fiber capability check (findFiberByHostInstance) before calling handleCommitFiberUnmount.

Example fix

// before
rendererInterface.handleCommitFiberUnmount(fiber);

// after
if (typeof renderer.findFiberByHostInstance === 'function') {
  rendererInterface.handleCommitFiberUnmount(fiber);
}
Defensive patterns

Strategy: validation

Validate before calling

const isFiberRenderer = renderer =>
  typeof renderer.findFiberByHostInstance === 'function';
if (isFiberRenderer(renderer)) {
  rendererInterface.handleCommitFiberUnmount(fiber);
}

Type guard

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

Try / catch

try {
  rendererInterface.handleCommitFiberUnmount(fiber);
} catch (error) {
  if (/not supported by this renderer/.test(error.message)) return;
  throw error;
}

Prevention

When it happens

Trigger: A caller invokes rendererInterface.handleCommitFiberUnmount(fiber) on an interface built by the legacy adapter — typically via hook.onCommitFiberUnmount with a mismatched renderer id, or custom hook-protocol code targeting a v15 renderer.

Common situations: Mixed React 15 + 16+ multi-root pages where ids cross; duplicate React installs; custom renderers that mimic the DevTools fiber hook protocol; extension/backend version skew.

Related errors


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