{"record":{"id":"07981db33662eb41","repo":"facebook/react","slug":"458","errorCode":"458","errorMessage":"Currently React only supports one RSC renderer at a time.","messagePattern":"Currently React only supports one RSC renderer at a time\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"critical","filePath":"packages/react-server/src/ReactFlightServer.js","lineNumber":702,"sourceCode":"  this: $FlowFixMe,\n  type: 20 | 21,\n  model: ReactClientValue,\n  bundlerConfig: ClientManifest,\n  onError: void | ((error: mixed) => ?string),\n  onAllReady: () => void,\n  onFatalError: (error: mixed) => void,\n  identifierPrefix?: string,\n  temporaryReferences: void | TemporaryReferenceSet,\n  debugStartTime: void | number, // Profiling-only\n  environmentName: void | string | (() => string), // DEV-only\n  filterStackFrame: void | ((url: string, functionName: string) => boolean), // DEV-only\n  keepDebugAlive: boolean, // DEV-only\n) {\n  if (\n    ReactSharedInternals.A !== null &&\n    ReactSharedInternals.A !== DefaultAsyncDispatcher\n  ) {\n    throw new Error(\n      'Currently React only supports one RSC renderer at a time.',\n    );\n  }\n  ReactSharedInternals.A = DefaultAsyncDispatcher;\n  if (__DEV__) {\n    // Unlike Fizz or Fiber, we don't reset this and just keep it on permanently.\n    // This lets it act more like the AsyncDispatcher so that we can get the\n    // stack asynchronously too.\n    ReactSharedInternals.getCurrentStack = getCurrentStackInDEV;\n  }\n\n  const abortSet: Set<Task> = new Set();\n  const pingedTasks: Array<Task> = [];\n  const cleanupQueue: Array<string | bigint> = [];\n  if (enableTaint) {\n    TaintRegistryPendingRequests.add(cleanupQueue);\n  }\n  const hints = createHints();","sourceCodeStart":684,"sourceCodeEnd":720,"githubUrl":"https://github.com/facebook/react/blob/eafeac097ba51e1eab809c07102126bd5f8e5425/packages/react-server/src/ReactFlightServer.js#L684-L720","documentation":"Starting an RSC request installs ReactSharedInternals.A as the Flight async dispatcher, and React permits only one RSC dispatcher per loaded React copy — it is kept installed permanently for the process. The guard fires when the slot already holds a dispatcher that is not the Flight DefaultAsyncDispatcher, which is the signature of two different RSC runtime copies (or an incompatible dispatcher) sharing one realm.","triggerScenarios":"Loading two copies of react-server/react-server-dom-* (one via require, one via a bundled ESM build) and calling render()/prerender() from both; npm hoisting mismatches where react resolves to different versions inside and outside the server bundle; mixing a framework's compiled RSC runtime with direct react-server-dom-webpack imports.","commonSituations":"Monorepos or bundlers that vendor react-server separately per entry point; frameworks (Next.js, Waku) plus direct Flight imports in the same server; upgrading react without upgrading react-server-dom-* in lockstep.","solutions":["Run npm ls react react-server react-server-dom-webpack (or yarn why) and remove duplicates via overrides/resolutions.","Import the RSC server APIs from a single module instance — one entry point, one chunk graph.","Align react, react-server-dom-* and framework versions so exactly one copy resolves everywhere."],"exampleFix":"// before — npm ls react shows 19.0.0 and 19.1.0 in the same server bundle\n\n// after — package.json forces one copy\n\"overrides\": { \"react\": \"19.1.0\", \"react-dom\": \"19.1.0\" }","handlingStrategy":"validation","validationCode":"// Boot-time check: the react resolved from app code and from the RSC runtime must match.\nimport {createRequire} from 'module';\nconst require = createRequire(import.meta.url);\nconst appReact = require.resolve('react');\nconst rscReact = require.resolve('react', {paths: [require.resolve('react-server-dom-webpack/server')]});\nif (appReact !== rscReact) {\n  throw new Error(`Two react copies: ${appReact} vs ${rscReact} — dedupe before starting.`);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Add `npm ls react` (fail on duplicates) to CI.","Use bundler aliases or package overrides to force one react instance.","Never import react-server-dom-* both directly and through a framework wrapper in the same process."],"tags":["server-components","renderer","duplicate-packages","module-resolution"],"backgroundTag":"duplicate-react-copies","analyzedSha":"eafeac097ba51e1eab809c07102126bd5f8e5425","analyzedAt":"2026-08-21T22:01:08.818Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}