Official CLI for developing community nodes for n8n.
To create a new node, run:
pnpm create @n8n/node
This will generate a project with pnpm
scripts that use this CLI under the hood.
After creating your node with pnpm create @n8n/node
, you'll use these commands in your project:
pnpm dev
# Runs: n8n-node dev
pnpm build
# Runs: n8n-node build
pnpm lint
# Runs: n8n-node lint
pnpm lint:fix
# Runs: n8n-node lint --fix
pnpm run release
# Runs: n8n-node release
Note: These commands are typically wrapped by
pnpm
scripts in generated projects.
n8n-node [COMMAND] [OPTIONS]
Create a new node project.
n8n-node new [NAME] [OPTIONS]
Flags:
Flag | Description |
---|---|
-f, --force |
Overwrite destination folder if it already exists |
--skip-install |
Skip installing dependencies |
--template <template> |
Choose template: declarative/custom , declarative/github-issues , programmatic/example
|
Examples:
n8n-node new
n8n-node new n8n-nodes-my-app --skip-install
n8n-node new n8n-nodes-my-app --force
n8n-node new n8n-nodes-my-app --template declarative/custom
Note: This command is used internally by
pnpm create @n8n/node
to provide the interactive scaffolding experience.
Run n8n with your node in development mode with hot reload.
n8n-node dev [--external-n8n] [--custom-user-folder <value>]
Flags:
Flag | Description |
---|---|
--external-n8n |
Run n8n externally instead of in a subprocess |
--custom-user-folder <path> |
Folder to use to store user-specific n8n data (default: ~/.n8n-node-cli ) |
This command:
- Starts n8n on
http://localhost:5678
(unless using--external-n8n
) - Links your node to n8n's custom nodes directory (
~/.n8n-node-cli/.n8n/custom
) - Rebuilds on file changes for live preview
- Watches for changes in your
src/
directory
Examples:
# Standard development with built-in n8n
n8n-node dev
# Use external n8n instance
n8n-node dev --external-n8n
# Custom n8n extensions directory
n8n-node dev --custom-user-folder /home/user
Compile your node and prepare it for distribution.
n8n-node build
Flags: None
Generates:
- Compiled TypeScript code
- Bundled node package
- Optimized assets and icons
- Ready-to-publish package in
dist/
Lint the node in the current directory.
n8n-node lint [--fix]
Flags:
Flag | Description |
---|---|
--fix |
Automatically fix problems |
Examples:
# Check for linting issues
n8n-node lint
# Automatically fix fixable issues
n8n-node lint --fix
Publish your community node package to npm.
n8n-node release
Flags: None
This command handles the complete release process using release-it:
- Builds the node
- Runs linting checks
- Updates changelog
- Creates git tags
- Creates GitHub releases
- Publishes to npm
The recommended workflow using the scaffolding tool:
-
Create your node:
pnpm create @n8n/node my-awesome-node cd my-awesome-node
-
Start development:
pnpm dev
- Starts n8n on
http://localhost:5678
- Links your node automatically
- Rebuilds on file changes
- Starts n8n on
-
Test your node at
http://localhost:5678
-
Lint your code:
pnpm lint
-
Build for production:
pnpm build
-
Publish:
pnpm run release
The CLI expects your project to follow this structure:
my-node/
├── src/
│ ├── nodes/
│ │ └── MyNode/
│ │ ├── MyNode.node.ts
│ │ └── MyNode.node.json
│ └── credentials/
├── package.json
└── tsconfig.json
The CLI reads configuration from your package.json
:
{
"name": "n8n-nodes-my-awesome-node",
"n8n": {
"n8nNodesApiVersion": 1,
"nodes": [
"dist/nodes/MyNode/MyNode.node.js"
],
"credentials": [
"dist/credentials/MyNodeAuth.credentials.js"
]
}
}
# Clear n8n custom nodes cache
rm -rf ~/.n8n-node-cli/.n8n/custom
# Restart development server
pnpm dev
# Run linting first
pnpm lint
# Clean build
pnpm build
- Creating Nodes Guide - Complete documentation
- Node Development Reference - API specifications
- Community Forum - Get help and showcase your nodes
- @n8n/create-node - Recommended scaffolding tool
Found an issue? Contribute to the n8n repository on GitHub.
Happy node development! 🎉