facebook/react · error · Error
Unsupported instance kind
Error message
Unsupported instance kind
What it means
react-devtools-shared's Fiber backend resolves an element ID to a DevToolsInstance and inspectElementRaw() only knows how to inspect two kinds: VIRTUAL_INSTANCE (Flight/server-graph virtual nodes) and FIBER_INSTANCE (real Fibers). Anything else - today FILTERED_FIBER_INSTANCE (elements hidden by component filters) or a kind introduced by a newer backend - falls through the exhaustive check and throws. It is an internal invariant meaning the backend was asked to inspect an instance kind it deliberately does not support.
Solutions
- Clear the current selection and re-select a visible (unfiltered) element, or reload the page with DevTools open so stale selections are dropped.
- Make sure the DevTools extension and any embedded react-devtools-shared package are the same version (the DevToolsInstance kind set must match on both sides).
- If you embed devtools-shared, mirror the kind checks at renderer.js:6029-6037 - only call inspectElementRaw for FIBER_INSTANCE/VIRTUAL_INSTANCE ids.
- If it reproduces with matched versions and no filters, file a React DevTools issue with the filter config and steps.
Example fix
// before (custom frontend, sends inspect for any stored id)
bridge.send('inspectElement', {id: selectedID, rendererID});
// after (only inspect ids the backend still reports as visible elements)
const element = store.getElementByID(selectedID);
if (element != null && !isFilteredOut(element)) {
bridge.send('inspectElement', {id: selectedID, rendererID});
} Defensive patterns
Strategy: type-guard
Validate before calling
// before sending 'inspectElement' over the bridge, confirm the id is still a visible element
const element = store.getElementByID(id);
if (element == null || store.isFilteredOut(element)) {
console.warn('Skipping inspect for filtered/gone element', id);
} else {
bridge.send('inspectElement', {id, rendererID});
} Type guard
function isInspectableInstance(instance) {
return (
instance != null &&
(instance.kind === 'FIBER_INSTANCE' || instance.kind === 'VIRTUAL_INSTANCE')
);
} Prevention
- Re-select elements after changing component filters instead of keeping the old selection active.
- Keep the DevTools extension and any embedded react-devtools-shared on the same version so the instance-kind enum matches.
- When embedding devtools-shared, mirror the FIBER_INSTANCE/VIRTUAL_INSTANCE checks from renderer.js:6029-6037 before calling inspection APIs.
When it happens
Trigger: A bridge 'inspectElement' request (selecting an element in the Components tree, hovering a highlight, re-inspecting a persisted selection) where idToDevToolsInstanceMap.get(id).kind is FILTERED_FIBER_INSTANCE - e.g. the selection predates applying hide-filters or the Activity filter - or a version-skewed frontend/backend where the kind enum has new members.
Common situations: Enabling 'hide components matching' filters while an element stays selected; restoring a persisted selection across a reload with different filter settings; mixing the DevTools browser extension with an embedded react-devtools-shared build of a different version.
Related errors
- Expected a root instance to exist for this Fiber root
- Invalid component filter type
- A dehydrated Suspense node should not have a content Fiber.
- Attempted to measure a Suspense node that does not exist.
- Cannot not suspend ID
AI-assisted analysis of facebook/react@eafeac097b (2026-08-21).
Data as JSON: /api/errors/4975c9354f5d7f32.
Report an issue: GitHub.
Appendix: source
Thrown at packages/react-devtools-shared/src/backend/fiber/renderer.js:6039
}
function inspectElementRaw(id: number): InspectedElement | null {
const devtoolsInstance = idToDevToolsInstanceMap.get(id);
if (devtoolsInstance === undefined) {
console.warn(`Could not find DevToolsInstance with id "${id}"`);
return null;
}
if (devtoolsInstance.kind === VIRTUAL_INSTANCE) {
return inspectVirtualInstanceRaw(devtoolsInstance);
}
if (devtoolsInstance.kind === FIBER_INSTANCE) {
const isRoot = devtoolsInstance.parent === null;
return isRoot
? inspectRootsRaw(devtoolsInstance.id)
: inspectFiberInstanceRaw(devtoolsInstance);
}
devtoolsInstance as FilteredFiberInstance; // assert exhaustive
throw new Error('Unsupported instance kind');
}
function inspectFiberInstanceRaw(
fiberInstance: FiberInstance,
): InspectedElement | null {
const fiber = fiberInstance.data;
if (fiber == null) {
return null;
}
const {
stateNode,
key,
memoizedProps,
memoizedState,
dependencies,
tag,
type,View on GitHub (pinned to eafeac097b)