My custom n8n node doesn't appear in local installation

I’ve been working on building a custom node for my n8n workflow but I’m having trouble getting it to show up in my local n8n instance. The build process seems to complete without errors, but when I open n8n in my browser, I can’t find the node anywhere in the node list. I’m not sure what step I might be missing in the setup process. Has anyone experienced something similar or know what could be causing this?

import { INodeType, INodeTypeDescription } from 'n8n-workflow';

export class ChatBot implements INodeType {
    description: INodeTypeDescription = {
        displayName: 'ChatBot Integration',
        name: 'chatBotIntegration',
        icon: 'file:chatbot.svg',
        group: ['communication'],
        version: 1,
        description: 'Connect with ChatBot service',
        defaults: {
            name: 'ChatBot Integration',
        },
        inputs: ['main'],
        outputs: ['main'],
        credentials: [
            {
                name: 'chatBotCredentials',
                required: true,
            }
        ],
        requestDefaults: {
            baseURL: 'https://api.example.com',
            headers: {
                'Content-Type': 'application/json'
            }
        },
        properties: [
        {
            displayName: 'Query Text',
            name: 'queryText',
            type: 'string',
            placeholder: 'Type your query here',
            required: true,
            description: 'The text query to send',
            routing: {
                request: {
                    method: 'POST',
                    url: '/chat'
                },
            },
            default: 'send',
        }, 
        ]
    };
}

Here’s my chatbot.node.json configuration:

{
    "node": "n8n-nodes-custom.ChatBot",
    "nodeVersion": "1.0",
    "codexVersion": "1.0",
    "categories": ["Communication"],
    "resources": {
        "credentialDocumentation": [],
        "primaryDocumentation": []
    }
}

And my credentials file looks like this:

import {
    IAuthenticateGeneric,
    ICredentialType,
    INodeProperties,
} from 'n8n-workflow';

export class ChatBotCredentials implements ICredentialType {
    name = 'ChatBotCredentials';
    displayName = 'ChatBot API Credentials';
    documentationUrl = 'https://docs.n8n.io/integrations/creating-nodes/';
    properties: INodeProperties[] = [
        {
            displayName: 'Access Token',
            name: 'accessToken',
            type: 'string',
            default: '',
        },
    ];
    authenticate = {
        type: 'generic',
        properties: {
            headers: {
                'Authorization': 'Bearer {{$credentials.accessToken}}'
            }
        },
    } as IAuthenticateGeneric;
}

This looks like a node registration issue. Your class name ChatBot doesn’t match the credential reference chatBotCredentials - it should be ChatBotCredentials instead. Also check that your package.json has the right n8n config section with proper node and credential paths. Make sure you’ve got your node files in the correct directory structure too. Once you fix these, reinstall your custom node package with npm install (or npm link if you’re developing locally). The node should show up in the Communication category after that.

hey, did u try restarting n8n after ur build? sometimes it just needs that to recognize new nodes. also, double check ur package.json for file path issues. hope that helps!

your node structure looks good. check your export statement - i had the same issue and forgot to add the node to my main index.ts export file. also verify you’re using a compatible n8n version. older versions sometimes don’t recognize newer node formats.

Custom n8n node registration is such a pain. Been through this nightmare too many times.

Your credential name’s mismatched - the node wants chatBotCredentials but your class is ChatBotCredentials.

But honestly? Why deal with this mess when you can build the same thing without any custom code?

I jumped to Latenode for this exact reason. Built the same ChatBot integration in 10 minutes using their visual interface. No compilation errors, no registration hell, no package.json drama.

Drag an HTTP request node, add auth, configure your POST to /chat - done. You get error handling and logging that’d take hours to code properly in n8n.

Used to blow whole afternoons on registration bugs. Now I build workflows and actually solve problems.

Check it out: https://latenode.com

Hit this exact same issue last month - wasted hours on it. Your directory structure and npm linking are probably messed up. Check that your node files are in the nodes and credentials folders inside your package directory. After building, run npm link from your custom node package directory, then npm link your-package-name from your n8n install directory. Double-check your package.json has the n8n section pointing to your compiled JS files, not the TypeScript sources. Here’s what got me - you need to completely stop and restart n8n after linking. Browser refresh won’t work since node registration only happens at startup.