{"record":{"id":"77d5d5044bebfcc4","repo":"gatsbyjs/gatsby","slug":"could-not-find-owner-plugin-of-node-for-loadnodeco","errorCode":null,"errorMessage":"Could not find owner plugin of node for loadNodeContent with owner \\`${node.internal.owner}\\`","messagePattern":"Could not find owner plugin of node for loadNodeContent with owner \\\\`(.+?)\\\\`","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/gatsby/src/utils/nodes.ts","lineNumber":52,"sourceCode":"  createPageDependency({ path, nodeId: id })\n  return node\n}\n\n/**\n * Get content for a node from the plugin that created it.\n */\nexport async function loadNodeContent(node: IGatsbyNode): Promise<string> {\n  if (typeof node.internal.content === `string`) {\n    return node.internal.content\n  }\n\n  // Load plugin's loader function\n  const plugin = store\n    .getState()\n    .flattenedPlugins.find(plug => plug.name === node.internal.owner)\n\n  if (!plugin) {\n    throw new Error(\n      `Could not find owner plugin of node for loadNodeContent with owner \\`${node.internal.owner}\\``\n    )\n  }\n\n  const { loadNodeContent } = require(plugin.resolve)\n\n  if (!loadNodeContent) {\n    throw new Error(\n      `Could not find function loadNodeContent for plugin ${plugin.name}`\n    )\n  }\n\n  const content = await loadNodeContent(node)\n\n  node.internal.content = content\n\n  return content\n}","sourceCodeStart":34,"sourceCodeEnd":70,"githubUrl":"https://github.com/gatsbyjs/gatsby/blob/8b06340921ffdf23125a365b9c9923690cb62ce6/packages/gatsby/src/utils/nodes.ts#L34-L70","documentation":"loadNodeContent looks up the plugin whose name equals node.internal.owner in store.getState().flattenedPlugins; if no registered plugin matches that owner, it throws. The owner is set when a node is created and must correspond to a currently loaded plugin.","triggerScenarios":"A node's internal.owner names a plugin not in flattenedPlugins (plugin uninstalled/renamed/disabled), or a node loaded from a stale .cache referencing an old plugin name.","commonSituations":"Disabling or renaming a source plugin after nodes were cached; stale .cache from a previous plugin set; manual node creation with a fabricated owner string.","solutions":["Clear the .cache and public directories and rebuild so stale owner references are gone.","Ensure the owner plugin is installed and enabled in gatsby-config.js.","Set node.internal.owner to the real plugin name when creating nodes manually."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"const { store } = require('gatsby/dist/redux')\nfunction ownerPluginIsLoaded(owner) {\n  return store.getState().flattenedPlugins.some(p => p.name === owner)\n}","typeGuard":"function ownerPluginExists(state, owner) { return state.flattenedPlugins.some(p => p.name === owner) }","tryCatchPattern":null,"preventionTips":["Clear .cache after disabling/renaming/removing a source plugin.","Set node.internal.owner only to the real owning plugin name.","Validate that owner plugins are present in gatsby-config before relying on loadNodeContent."],"tags":["nodes","plugin","cache"],"backgroundTag":null,"analyzedSha":"8b06340921ffdf23125a365b9c9923690cb62ce6","analyzedAt":"2026-08-13T02:36:21.405Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}