Custom Node Does Not Appear in Local n8n Instance

I’m developing a custom node for n8n and managed to compile it successfully. However, my local n8n environment fails to list the custom node, and I’m seeking advice to diagnose the problem.

Below are the updated code snippets for the node, configuration, and credentials:

import { INodeDefinition, INodeDefinitionDescription } from 'n8n-workflow';

export class CustomHandler implements INodeDefinition {
  description: INodeDefinitionDescription = {
    displayName: 'Custom Tool',
    name: 'customTool',
    icon: 'file:customIcon.svg',
    group: ['data'],
    version: 1,
    description: 'Executes a custom tool action',
    defaults: { name: 'Custom Tool Node' },
    inputs: ['main'],
    outputs: ['main'],
    credentials: [{ name: 'customAuth', required: true }],
    requestDefaults: {
      baseURL: 'YOUR_API_ENDPOINT',
      headers: {}
    },
    properties: [
      {
        displayName: 'Input Data',
        name: 'inputData',
        type: 'string',
        placeholder: 'Enter input value',
        required: true,
        description: 'Provide the input value',
        routing: {
          request: {
            method: 'GET',
            url: 'YOUR_API_ENDPOINT'
          }
        },
        default: 'defaultValue'
      }
    ]
  };
}
{
  "node": "n8n-custom-nodes.CustomHandler",
  "nodeVersion": "1.0",
  "codexVersion": "1.0",
  "categories": ["Utilities"],
  "resources": {
    "credentialDocumentation": [],
    "primaryDocumentation": []
  }
}
import { ICredentialAuth, ICredentialDefinition, INodeParameter } from 'n8n-workflow';

export class CustomAuth implements ICredentialDefinition {
  name = 'CustomAuth';
  displayName = 'Custom API Authentication';
  documentationUrl = '';
  properties: INodeParameter[] = [
    {
      displayName: 'API Token',
      name: 'apiToken',
      type: 'string',
      default: ''
    }
  ];
  authenticate = {
    type: 'generic',
    properties: {
      qs: { 'authorization': '={{$credentials.apiToken}}' }
    }
  } as ICredentialAuth;
}

Any suggestions to resolve the visibility issue would be greatly appreciated.

Based on my experience, the issue might be due to how the custom node module is integrated into your n8n instance. I would first check if the compiled output is correctly referenced in your local configuration. Sometimes the node registration can fail if there is a naming mismatch either in the class name or in the package.json configuration. Also, ensure that your custom node is being properly loaded by the n8n framework; logging during startup may reveal if it is being ignored. A thorough review of the file structure and the registration process helped me spot similar issues in the past.

hey, make sure your node is properly included in the config. try a full rebuild and a restart - sometimes a simple cache issue or mismatched paths cause it to not show up. hope this helps!

I experienced a similar issue when developing a custom node for n8n. In my case, the node didn’t appear because there was a subtle discrepancy between the node name defined in the class and the configuration file used during the registration process. I resolved it by meticulously tracking the naming used in both the module export and the loader configuration. I also made sure to rebuild without caching so all changes were correctly applied. Verifying the consistency of names and paths in your custom node files can often be the key to resolving the visibility issue.

I encountered a situation where the custom node was compiled correctly but didn’t appear in the list because the module path was not included in the n8n configuration. In my case, verifying the directory where the node modules were loaded made a significant difference. Occasionally, the custom node path in the local n8n instance doesn’t point to the proper build folder, particularly after several rebuilds. Confirm that your custom node is installed in the expected directory and that the compiled files are indeed being referenced by n8n during startup. Also double check for any discrepancies in the package naming used across your configurations.

hey, i had a similiar issue where a wrong file path in package.json caused my node not to load. try rebuilding without cache and check that your config exactly matches your node export definitions. might be a simple clash causing the problem