{"record":{"id":"ebbdc2923a092775","repo":"gatsbyjs/gatsby","slug":"replacerenderer-api-found-in-these-plugins","errorCode":null,"errorMessage":"replaceRenderer API found in these plugins:","messagePattern":"replaceRenderer API found in these plugins:","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/gatsby/src/bootstrap/load-plugins/validate.ts","lineNumber":517,"sourceCode":"\n  return {\n    flattenedPlugins: flattenedPlugins as Array<IFlattenedPlugin>,\n    badExports,\n  }\n}\n\nexport const handleMultipleReplaceRenderers = ({\n  flattenedPlugins,\n}: {\n  flattenedPlugins: Array<IFlattenedPlugin>\n}): Array<IFlattenedPlugin> => {\n  // multiple replaceRenderers may cause problems at build time\n  const rendererPlugins = flattenedPlugins\n    .filter(plugin => plugin.ssrAPIs.includes(`replaceRenderer`))\n    .map(plugin => plugin.name)\n  if (rendererPlugins.length > 1) {\n    if (rendererPlugins.includes(`default-site-plugin`)) {\n      reporter.warn(`replaceRenderer API found in these plugins:`)\n      reporter.warn(rendererPlugins.join(`, `))\n      reporter.warn(\n        `This might be an error, see: https://www.gatsbyjs.com/docs/debugging-replace-renderer-api/`\n      )\n    } else {\n      console.log(``)\n      reporter.error(\n        `Gatsby's replaceRenderer API is implemented by multiple plugins:`\n      )\n      reporter.error(rendererPlugins.join(`, `))\n      reporter.error(`This will break your build`)\n      reporter.error(\n        `See: https://www.gatsbyjs.com/docs/debugging-replace-renderer-api/`\n      )\n      if (process.env.NODE_ENV === `production`) process.exit(1)\n    }\n\n    // Now update plugin list so only final replaceRenderer will run","sourceCodeStart":499,"sourceCodeEnd":535,"githubUrl":"https://github.com/gatsbyjs/gatsby/blob/e85d62f1779e353eaac1753211629a26d123e26c/packages/gatsby/src/bootstrap/load-plugins/validate.ts#L499-L535","documentation":"Startup conflict warning: more than one plugin in the flattened list implements the replaceRenderer SSR API, and gatsby only ever calls one renderer — multiple implementations fight over HTML rendering. The warning lists the offending plugin names so the user can remove or guard the extras.","triggerScenarios":"Thrown at packages/gatsby/src/bootstrap/load-plugins/validate.ts:517 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Keep only one replaceRenderer implementation — usually your site plugin (gatsby-node.js) or the rendering plugin, not both","Guard the export so it only runs for the intended pages/builds","Remove the duplicate plugin from gatsby-config.js or wrap with an env check"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"e85d62f1779e353eaac1753211629a26d123e26c","analyzedAt":"2026-08-26T17:50:09.662Z","contentChangedAt":"2026-08-26T17:50:09.662Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}