n8n-io/n8n · error · Error

Sticky notes do not support output connections

Error message

Sticky notes do not support output connections

What it means

Sticky notes are canvas annotations, not executable nodes: the StickyNote builder's output() method always throws because a sticky note has no output connections to select. Calling it is a builder-API misuse, not a runtime workflow failure.

Solutions

  1. Do not call .output() on a StickyNoteInstance.
  2. Filter sticky notes out before applying fan-out logic.
  3. Pass stickies to workflow() as standalone documentation elements.

Example fix

// before
stickyNode.output(0).to(target); // throws
// after
workflow(source.to(target), stickyNote); // sticky added standalone
Defensive patterns

Strategy: type-guard

Validate before calling

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

function safeOutput(node: NodeInstance, i: number): OutputSelector<any, any, any> {
  if (node.type === STICKY) throw new Error('Sticky notes have no output');
  return node.output(i);
}

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.output(0); chaining stickyNode.output(0).to(target); generic code that fans out from every node.

Common situations: Treating the sticky return value as chainable; auto-wiring utility that calls .output() uniformly; assuming sticky notes behave like processing nodes.

Related errors


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

Appendix: source

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

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

View on GitHub (pinned to 5ac6606e81)