Node development: can't see my node in n8n :(

hi forum, I started trying to implement a HTTP trigger node. I followed this guideline, which basically works (I can see Example Node in n8n when I run it).


I can’t see my Trigger node, and I have no clue why. I basically copied the code from the PushCut trigger as @ivov suggested here, and I can see no difference. I just tried to remove every functionality to have a “dumb but working” starting point.

Any hints appreciated! Now to my setup:

Directory structure:

      ExampleNode.node.ts               (VISIBLE in n8n!)
      OktaEventTrigger.node.ts          (NOT visible in n8n)


import {
} from 'n8n-core';

import {
} from 'n8n-workflow';

export class OktaEventTrigger implements INodeType {
	description: INodeTypeDescription = {
		displayName: 'Okta Event Trigger',
		name: 'oktaEventTrigger',
		//icon: 'file:oktaLogo.png',
		group: ['trigger'],
		version: 1,
		description: 'Starts the workflow when an Okta event occurs.',
		defaults: {
			name: 'Okta Event Trigger',
			color: '#1f2957',
		inputs: [],
		outputs: ['main'],
		webhooks: [
				name: 'default',
				httpMethod: 'POST',
				responseMode: 'onReceived',
				path: 'webhook',
		properties: [
				displayName: 'Action Name',
				name: 'actionName',
				type: 'string',
				description: 'Choose any name you would like. It will show up as a server action in the app',
				default: '',

	// see for existing example: pushcut trigger,
	// see for some explanations:
	// workflow for developing nodes:

	// @ts-ignore (because of request)
	webhookMethods = {
		default: {
			async checkExists(this: IHookFunctions): Promise<boolean> {
				// checkExists() returns a boolean for whether the webhook is
				// currently registered at the third-party service.
				return false;
			async create(this: IHookFunctions): Promise<boolean> {
				// If the webhook is not registered, create() registers the
				// webhook at the third-party service and immediately checks
				// if the registration was successful. This occurs when you
				// activate the workflow from the top-right toggle (production
				// mode, persistent) or when you click on “Execute Node” (test
				// mode, for 2 minutes).
				return true;
			async delete(this: IHookFunctions): Promise<boolean> {
				// delete() de-registers the webhook from the third-party
				// service. This occurs when the workflow is de-activated
				// or when test mode expires.
				return true;

	async webhook(this: IWebhookFunctions): Promise<IWebhookResponseData> {
		// webhook() receives the payload from the third-party service and
		// sends it into the workflow.

		const body = this.getBodyData() as IDataObject;

		return {
			workflowData: [

You have to register the nodes in packages/nodes-base/package.json

1 Like

Like this:

"n8n": {
    "nodes": [

works like a charm you guys :slight_smile: thanks a lot!

1 Like

Something that I would love to see and might implement it myself one day is a list of all custom modules loaded, including the list of every node or credential and their version in the help UI.