{"record":{"id":"436a66c46ee42b8c","repo":"n8n-io/n8n","slug":"sticky-notes-do-not-support-connections","errorCode":null,"errorMessage":"Sticky notes do not support connections","messagePattern":"Sticky notes do not support connections","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/@n8n/workflow-sdk/src/workflow-builder/node-builders/node-builder.ts","lineNumber":1160,"sourceCode":"\t\t\tname: config.name ?? this.name,\n\t\t};\n\t\t// Pass empty nodes array since update doesn't recalculate bounding box\n\t\treturn new StickyNoteInstance(newContent, [], newConfig);\n\t}\n\n\tinput(_index: number): InputTarget {\n\t\tthrow new Error('Sticky notes do not support input connections');\n\t}\n\n\toutput(_index: number): OutputSelector<'n8n-nodes-base.stickyNote', 'v1', void> {\n\t\tthrow new Error('Sticky notes do not support output connections');\n\t}\n\n\tto<T extends NodeInstance<string, string, unknown>>(\n\t\t_target: T | T[] | InputTarget,\n\t\t_outputIndex?: number,\n\t): NodeChain<NodeInstance<'n8n-nodes-base.stickyNote', 'v1', void>, T> {\n\t\tthrow new Error('Sticky notes do not support connections');\n\t}\n\n\tonError<T extends NodeInstance<string, string, unknown>>(_handler: T): this {\n\t\tthrow new Error('Sticky notes do not support error handlers');\n\t}\n\n\tgetConnections(): DeclaredConnection[] {\n\t\treturn [];\n\t}\n}\n\n/**\n * Create a sticky note for workflow documentation.\n *\n * Like any other node, the returned sticky must be passed to\n * `workflow(...)` (or `.add(...)`) to appear on the canvas. The optional\n * `nodes` array is **only** used to size and anchor the sticky around the\n * given nodes — it does **not** add them to the workflow.","sourceCodeStart":1142,"sourceCodeEnd":1178,"githubUrl":"https://github.com/n8n-io/n8n/blob/5ac6606e81f67bb9534255570cd4e86fd8101eee/packages/@n8n/workflow-sdk/src/workflow-builder/node-builders/node-builder.ts#L1142-L1178","documentation":"Thrown by StickyNoteInstance.to(). The .to() method is the standard fan-out wiring entry point on NodeInstance, but sticky notes have no output port to wire from, so any attempt to chain a sticky into another node is rejected.","triggerScenarios":"Calling stickyNode.to(target); fluent code that chains source.to(sticky).to(after); generic wiring that routes through every node in a list.","commonSituations":"Placing a sticky mid-chain; auto-wiring that does not filter stickies; assuming .to() works on every NodeInstance.","solutions":["Do not call .to() on a StickyNoteInstance; stickies are terminal documentation elements.","Filter stickies out of node lists before wiring.","Add stickies to workflow() separately from the connection chain."],"exampleFix":"// before\nsource.to(stickyNote).to(target); // throws\n// after\nworkflow(source.to(target), stickyNote);","handlingStrategy":"type-guard","validationCode":"const STICKY = 'n8n-nodes-base.stickyNote';\n\nfunction safeTo<T extends NodeInstance>(src: NodeInstance, target: T): NodeChain<any, T> {\n  if (src.type === STICKY) throw new Error('Sticky notes cannot originate connections');\n  return src.to(target);\n}","typeGuard":"function isStickyNote(node: NodeInstance): node is NodeInstance<'n8n-nodes-base.stickyNote', 'v1', void> {\n  return node.type === 'n8n-nodes-base.stickyNote';\n}","tryCatchPattern":null,"preventionTips":["Do not chain .to() off a sticky note.","Keep stickies terminal — never mid-chain.","Filter stickies out of generic chaining utilities."],"tags":["runtime","builder","sticky-note","connections"],"backgroundTag":null,"analyzedSha":"5ac6606e81f67bb9534255570cd4e86fd8101eee","analyzedAt":"2026-08-12T05:26:35.080Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}