{"record":{"id":"34ee0c83f7caf5e8","repo":"n8n-io/n8n","slug":"disconnected-node","errorCode":"DISCONNECTED_NODE","errorMessage":"${nodeRef} is not connected to any input. It will not receive data.","messagePattern":"(.+?) is not connected to any input\\. It will not receive data\\.","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"info","filePath":"packages/@n8n/workflow-sdk/src/workflow-builder/plugins/validators/disconnected-node-validator.ts","lineNumber":216,"sourceCode":"\t\t\t// Skip sticky notes - they don't participate in data flow\n\t\t\tif (isStickyNoteType(graphNode.instance.type)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Skip subnodes - they connect TO their parent via AI connections\n\t\t\tif (isConnectedSubnode(graphNode)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Check if this node has any incoming connection (use mapKey, not originalName)\n\t\t\tif (!nodesWithIncoming.has(mapKey)) {\n\t\t\t\tconst renamed = isAutoRenamed(mapKey, originalName);\n\t\t\t\tconst displayName = renamed ? mapKey : originalName;\n\t\t\t\tconst origForWarning = renamed ? originalName : undefined;\n\t\t\t\tconst nodeRef = formatNodeRef(displayName, origForWarning, graphNode.instance.type);\n\n\t\t\t\tissues.push({\n\t\t\t\t\tcode: 'DISCONNECTED_NODE',\n\t\t\t\t\tmessage: `${nodeRef} is not connected to any input. It will not receive data.`,\n\t\t\t\t\tseverity: 'informational',\n\t\t\t\t\tviolationLevel: 'major',\n\t\t\t\t\tnodeName: displayName,\n\t\t\t\t\toriginalName: origForWarning,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn issues;\n\t},\n};\n","sourceCodeStart":198,"sourceCodeEnd":229,"githubUrl":"https://github.com/n8n-io/n8n/blob/5ac6606e81f67bb9534255570cd4e86fd8101eee/packages/@n8n/workflow-sdk/src/workflow-builder/plugins/validators/disconnected-node-validator.ts#L198-L229","documentation":"Informational validator issue (code DISCONNECTED_NODE, violationLevel 'major') emitted when a graph node has no incoming connections and is not a connected subnode — meaning it will receive no data at runtime. The message references the node (with optional renamed/alias name and type) so the builder can wire an input.","triggerScenarios":"Adding a node to the workflow but forgetting to connect an upstream node's output to it; renaming a node so a previously-valid connection no longer matches.","commonSituations":"Rapid prototyping where nodes are dropped before wiring; refactors that break a chain; trigger nodes whose outputs were never routed.","solutions":["Connect an upstream node's output to this node's input.","If the node is a trigger or data source that needs no input, verify it is a recognized root node type.","Remove the node if it is unused."],"exampleFix":"// before\ntrigger()\nemail() // disconnected\n// after\ntrigger().to(email())","handlingStrategy":"validation","validationCode":"// Before finalizing the workflow, confirm every non-root node has an incoming edge\nconst roots = new Set(['@n8n/n8n-nodes-langchain.chainLlm' /* triggers, etc. */]);\nfor (const n of allNodes) {\n  if (!roots.has(n.type) && !hasIncoming(n)) {\n    // warn: disconnected node\n  }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["After adding a node, immediately connect an upstream output.","Run the disconnected-node validator on every save.","Watch for auto-renamed nodes whose old-name connections no longer match."],"tags":["connections","validator","graph","disconnected"],"backgroundTag":null,"analyzedSha":"5ac6606e81f67bb9534255570cd4e86fd8101eee","analyzedAt":"2026-08-12T05:26:35.080Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}