facebook/react · warning
Cannot not suspend ID '${suspendedSet[i]}'.
Error message
Cannot not suspend ID '${suspendedSet[i]}'. What it means
This warning comes from overrideSuspenseMilestone() in the DevTools fiber backend (packages/react-devtools-shared/src/backend/fiber/renderer.js:7562), which applies a batch of forced-fallback (suspend) overrides requested from the DevTools Activity/Suspense panel. Each id in suspendedSet is looked up in idToDevToolsInstanceMap; if the entry exists but its kind is not FIBER_INSTANCE (e.g. it is a VIRTUAL_INSTANCE, used for Server Components or compiler-optimized-away components), there is no client Fiber to add to forceFallbackForFibers, so the override cannot be applied. The awkwardly worded 'Cannot not suspend ID' means DevTools is unable to toggle the suspended state for that element. The remaining ids in the set are still processed.
Source
Thrown at packages/react-devtools-shared/src/backend/fiber/renderer.js:7604
if (
forceFallbackForFibers.has(fiber) ||
(fiber.alternate !== null &&
forceFallbackForFibers.has(fiber.alternate))
) {
// We're already forcing fallback for this fiber. Mark it as not unsuspended.
unsuspendedSet.delete(fiber);
if (fiber.alternate !== null) {
unsuspendedSet.delete(fiber.alternate);
}
} else {
forceFallbackForFibers.add(fiber);
// We could find a minimal set that covers all the Fibers in this suspended set.
// For now we rely on React's batching of updates.
scheduleUpdate(fiber);
resuspended = true;
}
} else {
console.warn(`Cannot not suspend ID '${suspendedSet[i]}'.`);
}
}
// Unsuspend any existing forced fallbacks if they're not in the new set.
unsuspendedSet.forEach(fiber => {
forceFallbackForFibers.delete(fiber);
if (!resuspended && typeof scheduleRetry === 'function') {
// If nothing new resuspended we don't need this to be sync. If we're only
// unsuspending then we can schedule this as a Retry if the renderer supports it.
// That way we can trigger animations.
scheduleRetry(fiber);
} else {
scheduleUpdate(fiber);
}
});
if (forceFallbackForFibers.size > 0) {
// First override is added. Switch React to slower path.View on GitHub (pinned to eafeac097b)
Solutions
- Re-open or re-toggle the boundary in the Suspense/Activity panel after the tree settles so DevTools re-reads the current instance kinds.
- If the target is a Server Component or optimized-away component, toggle the client Suspense boundary that wraps it instead.
- Make sure the React DevTools build matches the renderer channel you are debugging (stable vs experimental/canary).
- If it reproduces on matching versions, report it to the react-devtools repo with the DevTools and React versions.
Defensive patterns
Strategy: validation
Prevention
- Toggle suspension only for client Suspense boundaries visible in the Suspense/Activity panel after the tree has settled.
- Keep the DevTools build matched to your renderer channel so instance kinds agree.
- Re-apply suspend toggles after hot reloads instead of relying on state captured before the reload.
When it happens
Trigger: Toggling the suspend/unsuspend state for a set of boundaries in the DevTools Suspense/Activity tab where at least one selected id refers to a virtual instance (Server Component rendered output or a component optimized away by React Compiler) instead of a client SuspenseComponent Fiber; also when the tree re-renders between the panel snapshot and the override call so an id that was a Fiber is now virtual.
Common situations: Debugging Suspense/Activity state on an app that uses React Server Components or React Compiler output; mixing an experimental-channel DevTools with a stable renderer (or vice versa); toggling many boundaries at once right after a hot-module reload changed the tree shape.
Related errors
- Invalid renderer id "${match.rendererID}" for element "${mat
- No suspense found with id "${id}"
- The should not be any remaining suspense node children if th
- There should always be an Offscreen Fiber child in a hydrate
- A dehydrated Suspense node should not have a content Fiber.
AI-assisted analysis of facebook/react@eafeac097b (2026-08-21).
Data as JSON: /api/errors/c7cba69050ff8d91.
Report an issue: GitHub.