{"record":{"id":"541857b6283a74bb","repo":"gatsbyjs/gatsby","slug":"nodes-can-only-be-updated-by-their-owner-node-541857","errorCode":null,"errorMessage":"Nodes can only be updated by their owner. Node \"${node.id}\" is\nowned by \"${oldNode.internal.owner}\" and another plugin \"${owner}\"\ntried to update it.","messagePattern":"Nodes can only be updated by their owner\\. Node \"(.+?)\" is\nowned by \"(.+?)\" and another plugin \"(.+?)\"\ntried to update it\\.","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/gatsby/src/redux/reducers/type-owners.ts","lineNumber":115,"sourceCode":"            The plugin deleting the node:\n\n            ${JSON.stringify(plugin, null, 4)}\n        `)\n        }\n      }\n\n      return typeOwners\n    }\n    case `CREATE_NODE`: {\n      const { plugin, oldNode, payload: node } = action\n      const { owner, type } = node.internal\n\n      setTypeOwner(type, plugin, typeOwners, node)\n\n      // If the node has been created in the past, check that\n      // the current plugin is the same as the previous.\n      if (oldNode && oldNode.internal.owner !== owner) {\n        throw new Error(\n          stripIndent`\n            Nodes can only be updated by their owner. Node \"${node.id}\" is\n            owned by \"${oldNode.internal.owner}\" and another plugin \"${owner}\"\n            tried to update it.\n          `\n        )\n      }\n\n      return typeOwners\n    }\n\n    default:\n      return typeOwners\n  }\n}\n","sourceCodeStart":97,"sourceCodeEnd":131,"githubUrl":"https://github.com/gatsbyjs/gatsby/blob/e85d62f1779e353eaac1753211629a26d123e26c/packages/gatsby/src/redux/reducers/type-owners.ts#L97-L131","documentation":"typeOwnersReducer CREATE_NODE branch: the node id already exists with a different internal.owner than the plugin now creating it. Gatsby enforces node ownership — only the plugin that created a node may update it — so this cross-plugin update is rejected with both owner names.","triggerScenarios":"Thrown at packages/gatsby/src/redux/reducers/type-owners.ts:115 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Move the createNode/updateNode call into the plugin that owns the node type","Use a distinct node type instead of writing to another plugin's nodes","Check for two sourcing plugins configured to write the same type"],"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-14T00:17:10.932Z"}