packages/@n8n/node-cli/README.md
Official CLI for developing community nodes for n8n.
To create a new node, run:
npm create @n8n/node@latest # or pnpm/yarn/...
This will generate a project with npm scripts that use this CLI under the hood.
After creating your node with npm create @n8n/node, you'll use these commands in your project:
npm run dev
# Runs: n8n-node dev
npm run build
# Runs: n8n-node build
npm run lint
# Runs: n8n-node lint
npm run lint:fix
# Runs: n8n-node lint --fix
npm run release
# Runs: n8n-node release
Note: These commands are typically wrapped by
npmscripts in generated projects.
n8n-node [COMMAND] [OPTIONS]
n8n-node newCreate 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
npm create @n8n/nodeto provide the interactive scaffolding experience.
n8n-node devRun 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:
http://localhost:5678 (unless using --external-n8n)~/.n8n-node-cli/.n8n/custom)src/ directoryExamples:
# 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
n8n-node buildCompile your node and prepare it for distribution.
n8n-node build
Flags: None
Generates:
dist/n8n-node lintLint 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
n8n-node cloud-supportManage n8n Cloud eligibility.
n8n-node cloud-support [enable|disable]
Arguments:
| Argument | Description |
|---|---|
| (none) | Show current cloud support status |
enable | Enable strict mode + default ESLint config |
disable | Allow custom ESLint config (disables cloud eligibility) |
Strict mode enforces the default ESLint configuration and community node rules required for n8n Cloud verification. When disabled, you can customize your ESLint config but your node won't be eligible for n8n Cloud verification.
n8n-node releasePublish your community node package to npm.
n8n-node release
Flags: None
This command handles the complete release process using release-it:
The recommended workflow using the scaffolding tool:
Create your node:
npm create @n8n/node my-awesome-node
cd my-awesome-node
Start development:
npm run dev
http://localhost:5678Test your node at http://localhost:5678
Lint your code:
npm run lint
Build for production:
npm run build
Publish:
npm 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
npm run dev
# Run linting first
npm run lint
# Clean build
npm run build
Found an issue? Contribute to the n8n repository on GitHub.
Happy node development! š