n8n-io/n8n · error · Error

Sticky notes do not support connections

Error message

Sticky notes do not support connections

What it means

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.

Source

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

			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[] {
		return [];
	}
}

/**
 * Create a sticky note for workflow documentation.
 *
 * Like any other node, the returned sticky must be passed to
 * `workflow(...)` (or `.add(...)`) to appear on the canvas. The optional
 * `nodes` array is **only** used to size and anchor the sticky around the
 * given nodes — it does **not** add them to the workflow.

View on GitHub (pinned to 5ac6606e81)

Solutions

  1. Do not call .to() on a StickyNoteInstance; stickies are terminal documentation elements.
  2. Filter stickies out of node lists before wiring.
  3. Add stickies to workflow() separately from the connection chain.

Example fix

// before
source.to(stickyNote).to(target); // throws
// after
workflow(source.to(target), stickyNote);
Defensive patterns

Strategy: type-guard

Validate before calling

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

function safeTo<T extends NodeInstance>(src: NodeInstance, target: T): NodeChain<any, T> {
  if (src.type === STICKY) throw new Error('Sticky notes cannot originate connections');
  return src.to(target);
}

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.to(target); fluent code that chains source.to(sticky).to(after); generic wiring that routes through every node in a list.

Common situations: Placing a sticky mid-chain; auto-wiring that does not filter stickies; assuming .to() works on every NodeInstance.

Related errors


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