{"record":{"id":"aca1df866cad04d9","repo":"gatsbyjs/gatsby","slug":"the-plugin-ownername-created-a-node-of-a-type-aca1df","errorCode":null,"errorMessage":"The plugin \"${ownerName}\" created a node of a type owned by another plugin.\n\nThe node type \"${typeName}\" is owned by \"${existingTypeOwnerNameByTypeName}\".\n\nIf you copy and pasted code from elsewhere, you'll need to pick a new type name\nfor your new node(s).\n\n${fullNode ? `The node object passed to \"createNode\":\n\n${JSON.stringify(fullNode, null, 4)}\n` : ``}\nThe plugin creating the node:\n\n${JSON.stringify(plugin, null, 4)}","messagePattern":"The plugin \"(.+?)\" created a node of a type owned by another plugin\\.\n\nThe node type \"(.+?)\" is owned by \"(.+?)\"\\.\n\nIf you copy and pasted code from elsewhere, you'll need to pick a new type name\nfor your new node\\(s\\)\\.\n\n(.+?)\n` : ``\\}\nThe plugin creating the node:\n\n(.+?)","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/gatsby/src/redux/reducers/type-owners.ts","lineNumber":37,"sourceCode":"    reportOnce(`No plugin owner for type \"${typeName}\"`)\n    return typeOwners\n  }\n\n  const existingOwnerTypes = typeOwners.pluginsToTypes.get(ownerName)\n\n  if (!existingOwnerTypes) {\n    typeOwners.pluginsToTypes.set(ownerName, new Set([typeName]))\n  } else {\n    existingOwnerTypes.add(typeName)\n  }\n\n  const existingTypeOwnerNameByTypeName =\n    typeOwners.typesToPlugins.get(typeName)\n\n  if (!existingTypeOwnerNameByTypeName) {\n    typeOwners.typesToPlugins.set(typeName, ownerName)\n  } else if (existingTypeOwnerNameByTypeName !== ownerName) {\n    throw new Error(stripIndent`\n      The plugin \"${ownerName}\" created a node of a type owned by another plugin.\n\n      The node type \"${typeName}\" is owned by \"${existingTypeOwnerNameByTypeName}\".\n\n      If you copy and pasted code from elsewhere, you'll need to pick a new type name\n      for your new node(s).\n\n      ${\n        fullNode\n          ? stripIndent(\n              `The node object passed to \"createNode\":\n\n              ${JSON.stringify(fullNode, null, 4)}\\n`\n            )\n          : ``\n      }\n      The plugin creating the node:\n","sourceCodeStart":19,"sourceCodeEnd":55,"githubUrl":"https://github.com/gatsbyjs/gatsby/blob/e85d62f1779e353eaac1753211629a26d123e26c/packages/gatsby/src/redux/reducers/type-owners.ts#L19-L55","documentation":"Error \"The plugin \"${ownerName}\" created a node of a type owned by another plugin.\n\nThe node type \"${typeName}\" is owned by \"${existingTypeOwnerNameByTypeName}\".\n\nIf you copy and pasted code from elsewhere, you'll need to pick a new type name\nfor your new node(s).\n\n${fullNode ? `The node object passed to \"createNode\":\n\n${JSON.stringify(fullNode, null, 4)}\n` : ``}\nThe plugin creating the node:\n\n${JSON.stringify(plugin, null, 4)}\" thrown in gatsbyjs/gatsby.","triggerScenarios":"Thrown at packages/gatsby/src/redux/reducers/type-owners.ts:37 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Pick a unique node type name for your plugin's nodes","Remove copy-pasted createNode calls that duplicate another plugin's type","Set a plugin-specific typePrefix in the sourcing plugin options"],"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"}