n8n-io/n8n · error · Error

Sticky notes do not support input connections

Error message

Sticky notes do not support input connections

What it means

Thrown by StickyNoteInstance.input(). Sticky notes (n8n-nodes-base.stickyNote) are documentation-only canvas elements with no input or output ports; they cannot receive connections. Calling .input() is blocked to prevent wiring a connection into a sticky.

Source

Thrown at packages/@n8n/workflow-sdk/src/workflow-builder/node-builders/node-builder.ts:1149

			},
		};
	}

	update(config: Partial<NodeConfig>): NodeInstance<'n8n-nodes-base.stickyNote', 'v1', void> {
		const newContent = (config.parameters?.content as string) ?? this.config.parameters?.content;
		const newConfig: StickyNoteConfig = {
			position: config.position ?? this.config.position,
			color: (config.parameters?.color as number) ?? (this.config.parameters?.color as number),
			width: (config.parameters?.width as number) ?? (this.config.parameters?.width as number),
			height: (config.parameters?.height as number) ?? (this.config.parameters?.height as number),
			name: config.name ?? this.name,
		};
		// Pass empty nodes array since update doesn't recalculate bounding box
		return new StickyNoteInstance(newContent, [], newConfig);
	}

	input(_index: number): InputTarget {
		throw new Error('Sticky notes do not support input connections');
	}

	output(_index: number): OutputSelector<'n8n-nodes-base.stickyNote', 'v1', void> {
		throw new Error('Sticky notes do not support output connections');
	}

	to<T extends NodeInstance<string, string, unknown>>(
		_target: T | T[] | InputTarget,
		_outputIndex?: number,
	): NodeChain<NodeInstance<'n8n-nodes-base.stickyNote', 'v1', void>, T> {
		throw new Error('Sticky notes do not support connections');
	}

	onError<T extends NodeInstance<string, string, unknown>>(_handler: T): this {
		throw new Error('Sticky notes do not support error handlers');
	}

	getConnections(): DeclaredConnection[] {

View on GitHub (pinned to 5ac6606e81)

Solutions

  1. Filter sticky notes out of any node list before calling connection methods.
  2. Do not call .input() on a StickyNoteInstance; pass stickies to workflow() separately as documentation.
  3. Type-narrow (isStickyNote / type === 'n8n-nodes-base.stickyNote') and skip.

Example fix

// before
for (const n of allNodes) targets.push(n.input(0)); // throws on sticky
// after
const targets = allNodes
  .filter((n) => n.type !== 'n8n-nodes-base.stickyNote')
  .map((n) => n.input(0));
Defensive patterns

Strategy: type-guard

Validate before calling

const STICKY = 'n8n-nodes-base.stickyNote';

function safeInput(node: NodeInstance): InputTarget {
  if (node.type === STICKY) throw new Error('Sticky notes have no input');
  return node.input(0);
}

Type guard

function isStickyNote(node: NodeInstance): node is NodeInstance<'n8n-nodes-base.stickyNote', 'v1', void> {
  return node.type === 'n8n-nodes-base.stickyNote';
}

Prevention

When it happens

Trigger: Calling stickyNode.input(0); generic code that builds connection targets via .input() for every node in a list including stickies.

Common situations: Auto-layout or auto-wiring utility that does not filter sticky notes; treating a sticky return value as a chainable node.

Related errors


AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12). Data as JSON: /api/errors/968f0d271823b336. Report an issue: GitHub.