n8n Community Nodes & Extensions
Discover, evaluate, and safely use community-contributed nodes and extensions
Overview
Community nodes extend n8n beyond its 500+ built-in integrations. As of January 2026, the ecosystem includes 5,834+ community nodes with an average growth of 13.6 new nodes daily.
Critical: Following the January 2026 supply chain attack, security evaluation is mandatory before installing any community node.
1. Security First (CRITICAL)
The January 2026 Supply Chain Attack
A coordinated attack targeted the n8n ecosystem with malicious npm packages disguised as legitimate integrations (Google Ads, Stripe, Salesforce connectors). The packages harvested OAuth tokens and API credentials.
Attack vectors used:
- •Typosquatting popular package names
- •Impersonating verified integrations
- •Exfiltrating credentials via outbound HTTP requests
What Community Nodes Can Access
Community nodes run with full n8n privileges:
| Access Level | Risk |
|---|---|
| Environment variables | Can read all $env values |
| File system | Full read/write to n8n's filesystem |
| Network | Arbitrary outbound HTTP requests |
| Credentials | Decrypted API keys and OAuth tokens at runtime |
| System | Full Node.js runtime access |
There is NO sandboxing between node code and the n8n runtime.
Security Checklist Before Installing
[ ] Check package author history [ ] Review download count (low = higher risk) [ ] Examine GitHub repo for source code [ ] Check last update date (stale = potential risk) [ ] Read package.json for dependencies [ ] Search for security advisories [ ] Prefer verified nodes when available [ ] Test in isolated environment first
Red Flags to Avoid
| Red Flag | Why It's Dangerous |
|---|---|
| Empty or minimal description | May be hiding malicious intent |
| Random author name | Pseudonymous accounts used in attacks |
| Very low downloads (<100) | Unvetted package |
| No GitHub repository | Can't audit source code |
| Excessive dependencies | Larger attack surface |
| Recent creation + popular name | Typosquatting attempt |
Environment Variable Protection
# Disable community nodes entirely (most secure) N8N_COMMUNITY_PACKAGES_ENABLED=false # If you must use community nodes, audit installed packages docker exec n8n npm list --depth=0
2. Verified vs Unverified Nodes
Verified Nodes (n8n Cloud)
Verified nodes have passed n8n's security review and are available on n8n Cloud.
Verification requirements:
- •MIT license
- •No external dependencies
- •Design compliance
- •Security audit passed
Currently verified partners (as of January 2026):
| Category | Verified Nodes |
|---|---|
| AI/Voice | ElevenLabs |
| Search | Brave Search API, SerpApi, Tavily |
| PDF.co, pdforge, CraftMyPDF | |
| Data | Bright Data, Qdrant, Chat Data |
| Video | Beyond Presence |
| Security | SOCRadar |
| Translation | Straker |
| Task Management | Vikunja |
| CRM | SignifyCRM, KlickTipp |
| Development | YepCode, Cronlytic |
| Other | ClickSend, Easy Redmine, Fireflies, gotoHuman, Ledgers, Parsera, ScrapeGraphAI, Scrapeless, Browserflow, Mallabe |
Unverified Nodes (Self-Hosted Only)
Available only on self-hosted instances. Use at your own risk.
3. Top Community Nodes by Downloads
Data from NCNodes as of January 2026:
Most Popular Overall
| Package | Downloads | Description |
|---|---|---|
n8n-nodes-globals | 455,052 | Global constants across workflows |
@mendable/n8n-nodes-firecrawl | 160,744 | Web scraping and crawling |
n8n-nodes-deepseek | 59,452 | DeepSeek AI integration |
n8n-nodes-rd-station-crm | 54,108 | RD Station CRM API |
@devlikeapro/n8n-nodes-waha | 45,402 | WhatsApp HTTP API |
By Category
Communication & Messaging
| Package | Downloads | Use Case |
|---|---|---|
@devlikeapro/n8n-nodes-waha | 45,402 | WhatsApp automation |
n8n-nodes-evolution-api | 30,000+ | WhatsApp channel hub |
n8n-nodes-chat-data | 13,901 | Chatbot management |
n8n-nodes-quepasa | 8,850 | Quepasa platform |
n8n-nodes-chatwoot | 5,000+ | ChatWoot integration |
AI & Language Models
| Package | Downloads | Use Case |
|---|---|---|
n8n-nodes-deepseek | 59,452 | DeepSeek AI |
@elevenlabs/n8n-nodes-elevenlabs | 10,000+ | Voice synthesis |
@watzon/n8n-nodes-perplexity | 5,000+ | Perplexity AI |
n8n-nodes-mcp | 3,000+ | Model Context Protocol |
Web Scraping & Data
| Package | Downloads | Use Case |
|---|---|---|
@mendable/n8n-nodes-firecrawl | 160,744 | Web crawling |
@apify/n8n-nodes-apify | 15,000+ | Web automation |
n8n-nodes-puppeteer | 10,000+ | Browser automation |
n8n-nodes-serpapi | 8,000+ | Search results |
n8n-nodes-supadata | 5,000+ | YouTube data |
Utilities
| Package | Downloads | Use Case |
|---|---|---|
n8n-nodes-globals | 455,052 | Global constants |
n8n-nodes-tesseractjs | 8,000+ | OCR text extraction |
n8n-nodes-logger | 6,000+ | Centralized logging |
n8n-nodes-datastore | 4,000+ | In-memory storage |
4. Installation Methods
Method 1: n8n UI (Recommended for Cloud/Self-Hosted)
Settings → Community Nodes → Install a community node Enter: package-name (e.g., n8n-nodes-globals) Click: Install
Note: Only verified nodes appear on n8n Cloud.
Method 2: npm (Self-Hosted Only)
# Install to n8n's node_modules cd ~/.n8n npm install n8n-nodes-package-name # Restart n8n pm2 restart n8n # or docker-compose restart n8n
Method 3: Docker (Persistent Installation)
FROM n8nio/n8n:latest
# Install community nodes
RUN cd /usr/local/lib/node_modules/n8n && \
npm install n8n-nodes-globals \
n8n-nodes-tesseractjs \
n8n-nodes-deepseek
Or via environment variable:
# docker-compose.yml
services:
n8n:
image: n8nio/n8n
environment:
- N8N_COMMUNITY_PACKAGES=n8n-nodes-globals,n8n-nodes-tesseractjs
Method 4: Environment Variable Auto-Install
# Comma-separated list of packages to install on startup N8N_COMMUNITY_PACKAGES="n8n-nodes-globals,n8n-nodes-deepseek"
5. MCP Integration (Model Context Protocol)
MCP enables AI agents to interact with external tools and data sources.
Built-in MCP Nodes
n8n includes native MCP support:
| Node | Purpose |
|---|---|
MCP Server Trigger | Expose workflows as MCP tools |
MCP Client Tool | Call external MCP servers from n8n |
MCP Server Trigger Configuration
Expose a workflow as an MCP tool:
{
"nodes": [
{
"type": "n8n-nodes-base.mcpTrigger",
"typeVersion": 1,
"name": "MCP Server Trigger",
"parameters": {
"toolName": "search_database",
"toolDescription": "Search the product database by query"
}
}
]
}
MCP Client Tool Configuration
Call external MCP servers:
{
"type": "@n8n/n8n-nodes-langchain.toolMcp",
"typeVersion": 1,
"parameters": {
"sseEndpoint": "https://mcp-server.example.com/sse",
"authentication": "bearerAuth"
},
"credentials": {
"httpBearerAuth": {
"id": "credential-id"
}
}
}
Community MCP Node
For advanced MCP usage:
# Install community MCP node npm install n8n-nodes-mcp # Required environment variable for AI Agent tool usage N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true
Package: nerding-io/n8n-nodes-mcp
6. AI & LangChain Nodes
Built-in AI Nodes (@n8n/n8n-nodes-langchain)
Agent Types
| Node | Purpose |
|---|---|
agent | Main AI agent with tool calling |
chainLlm | Simple LLM chain |
chainRetrievalQa | RAG question answering |
chainSummarization | Document summarization |
Language Models
| Node | Provider |
|---|---|
lmChatOpenAi | OpenAI GPT-4, GPT-4o |
lmChatAnthropic | Claude 3.5, Claude 4 |
lmChatOllama | Local Ollama models |
lmChatAzureOpenAi | Azure OpenAI |
lmChatGoogleVertex | Google Vertex AI |
lmChatGroq | Groq (fast inference) |
lmChatDeepSeek | DeepSeek models |
Built-in AI Tools
| Tool | Purpose |
|---|---|
toolHttpRequest | Make HTTP requests |
toolCode | Execute JavaScript/Python |
toolCalculator | Mathematical operations |
toolWikipedia | Wikipedia search |
toolWorkflow | Call other n8n workflows |
toolVectorStore | Query vector databases |
toolMcp | Call MCP servers |
Memory Types
| Node | Storage |
|---|---|
memoryBufferWindow | In-memory (window) |
memoryPostgresChat | PostgreSQL |
memoryRedisChat | Redis |
memoryXata | Xata database |
memorySqlite | SQLite |
Custom AI Tool Pattern
Turn any workflow into an AI tool using the Tool Workflow node:
// Sub-workflow that becomes an AI tool
// Receives: $json.query from the AI agent
const searchResults = await fetch(`https://api.example.com/search?q=${$json.query}`);
const data = await searchResults.json();
return [{
json: {
response: data.results.map(r => r.title).join('\n')
}
}];
7. Vector Store Integrations
For RAG (Retrieval-Augmented Generation) applications:
Built-in Vector Stores
| Vector Store | Use Case | Self-Hosted |
|---|---|---|
| Pinecone | Production RAG | No |
| Qdrant | High performance | Yes |
| Supabase | Postgres-based | Yes |
| Weaviate | Open-source | Yes |
| Milvus | Large scale | Yes |
| PGVector | PostgreSQL extension | Yes |
| Chroma | Local development | Yes |
Vector Store Configuration
{
"type": "@n8n/n8n-nodes-langchain.vectorStorePinecone",
"typeVersion": 1,
"parameters": {
"pineconeIndex": "my-index",
"pineconeNamespace": "documents",
"topK": 5
},
"credentials": {
"pineconeApi": {
"id": "credential-id",
"name": "Pinecone API"
}
}
}
Embedding Models
| Node | Provider |
|---|---|
embeddingsOpenAi | OpenAI ada-002, text-embedding-3 |
embeddingsCohere | Cohere |
embeddingsOllama | Local Ollama |
embeddingsHuggingFaceInference | Hugging Face |
8. Building Custom Nodes
Quick Start
# Scaffold a new node package npm create @n8n/node # Or clone the starter template git clone https://github.com/n8n-io/n8n-nodes-starter.git cd n8n-nodes-starter npm install
Package Structure
n8n-nodes-my-package/ ├── package.json # Node registration ├── nodes/ │ └── MyNode/ │ ├── MyNode.node.ts # Node implementation │ └── myNode.svg # Node icon ├── credentials/ │ └── MyCredential.credentials.ts └── dist/ # Compiled output
package.json Requirements
{
"name": "n8n-nodes-my-package",
"version": "1.0.0",
"description": "My custom n8n node",
"license": "MIT",
"n8n": {
"n8nNodesApiVersion": 1,
"nodes": [
"dist/nodes/MyNode/MyNode.node.js"
],
"credentials": [
"dist/credentials/MyCredential.credentials.js"
]
},
"devDependencies": {
"@n8n/n8n-nodes-langchain": "^1.0.0",
"n8n-workflow": "^1.0.0",
"typescript": "^5.0.0"
}
}
Node Implementation (Declarative Style - Recommended)
import {
INodeType,
INodeTypeDescription,
} from 'n8n-workflow';
export class MyApiNode implements INodeType {
description: INodeTypeDescription = {
displayName: 'My API',
name: 'myApi',
icon: 'file:myApi.svg',
group: ['transform'],
version: 1,
subtitle: '={{$parameter["operation"]}}',
description: 'Interact with My API',
defaults: {
name: 'My API',
},
inputs: ['main'],
outputs: ['main'],
credentials: [
{
name: 'myApiCredentials',
required: true,
},
],
requestDefaults: {
baseURL: 'https://api.example.com/v1',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
},
properties: [
{
displayName: 'Resource',
name: 'resource',
type: 'options',
noDataExpression: true,
options: [
{ name: 'User', value: 'user' },
{ name: 'Item', value: 'item' },
],
default: 'user',
},
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: { resource: ['user'] },
},
options: [
{ name: 'Get', value: 'get', action: 'Get a user' },
{ name: 'List', value: 'list', action: 'List users' },
],
default: 'get',
},
],
};
}
Node Implementation (Programmatic Style)
import {
IExecuteFunctions,
INodeExecutionData,
INodeType,
INodeTypeDescription,
} from 'n8n-workflow';
export class MyNode implements INodeType {
description: INodeTypeDescription = {
displayName: 'My Node',
name: 'myNode',
group: ['transform'],
version: 1,
description: 'Process data with custom logic',
defaults: { name: 'My Node' },
inputs: ['main'],
outputs: ['main'],
properties: [
{
displayName: 'Field',
name: 'field',
type: 'string',
default: '',
required: true,
},
],
};
async execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {
const items = this.getInputData();
const field = this.getNodeParameter('field', 0) as string;
const results = items.map(item => ({
json: {
...item.json,
processed: true,
field,
},
}));
return [results];
}
}
Development Commands
npm run dev # Start n8n with hot reload npm run build # Compile TypeScript npm run lint # Validate code quality npm run lint:fix # Auto-fix issues npm run release # Manage version releases
Publishing to npm
# 1. Build production code npm run build # 2. Test locally npm run dev # 3. Publish to npm npm publish # 4. (Optional) Submit for verification via n8n Creator Portal
9. Discovery Resources
Official Sources
| Source | URL | Use Case |
|---|---|---|
| npm Registry | npm search n8n-nodes | Browse all packages |
| NCNodes Directory | ncnodes.com | Curated list with stats |
| awesome-n8n | GitHub | Community-curated list |
| n8n Community Forum | community.n8n.io | Discussions & support |
| GitHub Topics | n8n-node, n8n-community-node | Source code repos |
npm Search Commands
# Search for community nodes npm search n8n-nodes # Check package info npm info n8n-nodes-package-name # View package security npm audit n8n-nodes-package-name
GitHub Search
topic:n8n-node language:TypeScript "n8n-nodes-" in:name
10. Troubleshooting
Node Not Appearing
- •Restart n8n after installation
- •Check npm output for errors
- •Verify package name is correct
- •Check n8n version compatibility
- •Review logs:
docker-compose logs n8n
Node Errors
| Error | Solution |
|---|---|
| "Node type not found" | Package not installed or wrong name |
| "Credential not found" | Add credentials in n8n Settings |
| "Version mismatch" | Update n8n or the package |
| "Permission denied" | Check file permissions in Docker |
Dependency Conflicts
# Clear n8n cache rm -rf ~/.n8n/node_modules/.cache # Reinstall community nodes npm install n8n-nodes-package-name --force
Security Incident Response
If you suspect a malicious node:
- •Immediately disable the node in workflows
- •Rotate all credentials used by workflows with that node
- •Check outbound connections in network logs
- •Uninstall the package:
npm uninstall n8n-nodes-package-name - •Report to n8n: community@n8n.io
11. Best Practices Summary
Do
- •Prefer built-in nodes over community alternatives
- •Use verified nodes on n8n Cloud when available
- •Audit source code before installing
- •Test in isolated environment first
- •Keep community nodes updated
- •Monitor n8n security advisories
- •Use isolated service accounts with limited privileges
Don't
- •Install nodes with low download counts without auditing
- •Use community nodes for sensitive credential handling
- •Skip security review for "popular" packages
- •Ignore deprecation or security warnings
- •Run unverified nodes in production without testing
Environment Hardening
# Disable community nodes if not needed N8N_COMMUNITY_PACKAGES_ENABLED=false # Restrict outbound network access # (via firewall rules or Docker network policies) # Use read-only filesystem for n8n container # (where possible) # Regular security audits npm audit
Related Skills
| Skill | When to Use |
|---|---|
02-workflow-patterns | AI Agent workflow architectures |
03-node-configuration | Configure any node properly |
04-mcp-tools-expert | Use n8n-mcp tools for discovery |
05-code-javascript | Custom JavaScript logic |
06-code-python | Custom Python logic |