{"record":{"id":"368dc5790e66c337","repo":"facebook/react","slug":"handlecommitfiberroot-not-supported-by-this-render","errorCode":null,"errorMessage":"handleCommitFiberRoot not supported by this renderer","messagePattern":"handleCommitFiberRoot not supported by this renderer","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/react-devtools-shared/src/backend/legacy/renderer.js","lineNumber":1192,"sourceCode":"              props: copyWithSet(element.props, path, value),\n            };\n            forceUpdate(publicInstance);\n            break;\n          case 'state':\n            setInObject(publicInstance.state, path, value);\n            forceUpdate(publicInstance);\n            break;\n        }\n      }\n    }\n  }\n\n  // v16+ only features\n  const getProfilingData = () => {\n    throw new Error('getProfilingData not supported by this renderer');\n  };\n  const handleCommitFiberRoot = () => {\n    throw new Error('handleCommitFiberRoot not supported by this renderer');\n  };\n  const handleCommitFiberUnmount = () => {\n    throw new Error('handleCommitFiberUnmount not supported by this renderer');\n  };\n  const handlePostCommitFiberRoot = () => {\n    throw new Error('handlePostCommitFiberRoot not supported by this renderer');\n  };\n  const overrideError = () => {\n    throw new Error('overrideError not supported by this renderer');\n  };\n  const overrideSuspense = () => {\n    throw new Error('overrideSuspense not supported by this renderer');\n  };\n  const overrideSuspenseMilestone = () => {\n    throw new Error('overrideSuspenseMilestone not supported by this renderer');\n  };\n  const startProfiling = () => {\n    // Do not throw, since this would break a multi-root scenario where v15 and v16 were both present.","sourceCodeStart":1174,"sourceCodeEnd":1210,"githubUrl":"https://github.com/facebook/react/blob/eafeac097ba51e1eab809c07102126bd5f8e5425/packages/react-devtools-shared/src/backend/legacy/renderer.js#L1174-L1210","documentation":"The legacy renderer adapter defines handleCommitFiberRoot as a throwing stub because fiber commit notifications only exist in the fiber reconciler (React 16+). Normally nothing calls it on a v15 renderer — fiber renderers invoke __REACT_DEVTOOLS_GLOBAL_HOOK__.onCommitFiberRoot, which routes to their own interface — so this throw indicates fiber commit wiring (or a frontend fiber API) was pointed at a legacy renderer interface.","triggerScenarios":"Something calls rendererInterface.handleCommitFiberRoot(root) on an interface created by the legacy adapter — e.g. hook.onCommitFiberRoot dispatching with a crossed renderer id, or custom code invoking the fiber commit API against a v15 renderer.","commonSituations":"Two copies of React (15 and 16+) registered on the same page so renderer ids get crossed; hand-written renderers or test harnesses that imitate the fiber DevTools hook protocol; DevTools extension/backend version skew.","solutions":["Remove duplicate React copies (npm ls react / check vendored builds) so only one renderer registers with the hook.","Align DevTools frontend and backend versions so fiber commit events never route to a v15 interface.","Upgrade the app off React 15 so the tree is fiber-based.","For embedders: check renderer.findFiberByHostInstance before calling handleCommitFiberRoot on a rendererInterface."],"exampleFix":"// before\nrendererInterface.handleCommitFiberRoot(root);\n\n// after\nif (typeof renderer.findFiberByHostInstance === 'function') {\n  rendererInterface.handleCommitFiberRoot(root);\n}","handlingStrategy":"validation","validationCode":"const isFiberRenderer = renderer =>\n  typeof renderer.findFiberByHostInstance === 'function';\nif (isFiberRenderer(renderer)) {\n  rendererInterface.handleCommitFiberRoot(root);\n}","typeGuard":"function isFiberRenderer(renderer) {\n  return typeof renderer.findFiberByHostInstance === 'function';\n}","tryCatchPattern":"try {\n  rendererInterface.handleCommitFiberRoot(root);\n} catch (error) {\n  if (/not supported by this renderer/.test(error.message)) return;\n  throw error;\n}","preventionTips":["Deduplicate React installs so renderer ids never get crossed.","Never imitate the fiber hook protocol from stack renderers.","Guard every handleCommitFiber* dispatch with a fiber capability check."],"tags":["devtools","fiber","commit","legacy-renderer","react-15"],"backgroundTag":"unsupported-renderer-feature","analyzedSha":"eafeac097ba51e1eab809c07102126bd5f8e5425","analyzedAt":"2026-08-21T22:01:08.818Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}