gatsbyjs/gatsby · error · Error

The plugin "${ownerName}" created a node of a type owned by

Error message

The plugin "${ownerName}" created a node of a type owned by another plugin.

The node type "${typeName}" is owned by "${existingTypeOwnerNameByTypeName}".

If you copy and pasted code from elsewhere, you'll need to pick a new type name
for your new node(s).

${fullNode ? `The node object passed to "createNode":

${JSON.stringify(fullNode, null, 4)}
` : ``}
The plugin creating the node:

${JSON.stringify(plugin, null, 4)}

What it means

Error "The plugin "${ownerName}" created a node of a type owned by another plugin. The node type "${typeName}" is owned by "${existingTypeOwnerNameByTypeName}". If you copy and pasted code from elsewhere, you'll need to pick a new type name for your new node(s). ${fullNode ? `The node object passed to "createNode": ${JSON.stringify(fullNode, null, 4)} ` : ``} The plugin creating the node: ${JSON.stringify(plugin, null, 4)}" thrown in gatsbyjs/gatsby.

Source

Thrown at packages/gatsby/src/redux/reducers/type-owners.ts:37

    reportOnce(`No plugin owner for type "${typeName}"`)
    return typeOwners
  }

  const existingOwnerTypes = typeOwners.pluginsToTypes.get(ownerName)

  if (!existingOwnerTypes) {
    typeOwners.pluginsToTypes.set(ownerName, new Set([typeName]))
  } else {
    existingOwnerTypes.add(typeName)
  }

  const existingTypeOwnerNameByTypeName =
    typeOwners.typesToPlugins.get(typeName)

  if (!existingTypeOwnerNameByTypeName) {
    typeOwners.typesToPlugins.set(typeName, ownerName)
  } else if (existingTypeOwnerNameByTypeName !== ownerName) {
    throw new Error(stripIndent`
      The plugin "${ownerName}" created a node of a type owned by another plugin.

      The node type "${typeName}" is owned by "${existingTypeOwnerNameByTypeName}".

      If you copy and pasted code from elsewhere, you'll need to pick a new type name
      for your new node(s).

      ${
        fullNode
          ? stripIndent(
              `The node object passed to "createNode":

              ${JSON.stringify(fullNode, null, 4)}\n`
            )
          : ``
      }
      The plugin creating the node:

View on GitHub (pinned to e85d62f177)

Solutions

  1. Pick a unique node type name for your plugin's nodes
  2. Remove copy-pasted createNode calls that duplicate another plugin's type
  3. Set a plugin-specific typePrefix in the sourcing plugin options
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at packages/gatsby/src/redux/reducers/type-owners.ts:37 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of gatsbyjs/gatsby@e85d62f177 (2026-08-26). Data as JSON: /api/errors/aca1df866cad04d9. Report an issue: GitHub.