A powerful n8n Community Node for joining parallel workflow branches into a single JSON object. This node waits for all parallel inputs to complete and combines their data with automatic node name detection and intelligent error handling.
- True Parallel Join: Waits for ALL parallel inputs before executing downstream
- Configurable Input Count: Set expected number of inputs (2-99)
- Smart Synchronization: Uses global storage to collect data across executions
- Timeout Protection: Configurable timeout to prevent infinite waiting
- Smart Labeling: Uses
input_1
,input_2
, etc. as keys - Metadata Support: Optional execution metadata and timing information
- Single Output: Guarantees downstream nodes execute exactly once
- TypeScript: Full type safety and IntelliSense support
- Professional Error Messages: Clear, actionable error messages
- Timeout Handling: Configurable timeout for parallel operations
Install the node using n8n's Community Nodes feature:
-
Via n8n Interface:
- Go to Settings β Community Nodes
- Install package:
@conciso/n8n-nodes-join
-
Via npm (for self-hosted n8n):
npm install @conciso/n8n-nodes-join
For detailed installation instructions, see the n8n Community Nodes documentation.
In n8n workflows, when you connect multiple parallel nodes to a single downstream node, the downstream node executes multiple times (once for each input). The Join node solves this by:
Before (Multiple Executions):
API Call 1 βββ
API Call 2 βββ€ββ Process Data (executes 3 times!)
API Call 3 βββ
After (Single Execution):
API Call 1 βββ
API Call 2 βββ€ββ [JOIN] ββ> Process Data (executes 1 time)
API Call 3 βββ
- Add parallel nodes to your workflow (API calls, data processing, etc.)
- Connect all parallel nodes to the Join node
- Connect the Join node to your downstream processing node
- Configure timeout and error handling if needed
The Join node automatically creates a JSON object with input_x
keys:
{
"input_1": {
"users": [{"id": 1, "name": "John"}, {"id": 2, "name": "Jane"}]
},
"input_2": {
"orders": [{"id": 101, "total": 99.99}]
},
"input_3": {
"processed": true,
"timestamp": "2025-01-16T21:30:00Z"
}
}
Enable "Include Metadata" for additional execution information:
{
"data": {
"input_1": { "users": [...] },
"input_2": { "orders": [...] },
"input_3": { "processed": true }
},
"metadata": {
"input_1": {
"timestamp": "2025-01-16T21:30:15Z",
"executionIndex": 1
},
"input_2": {
"timestamp": "2025-01-16T21:30:16Z",
"executionIndex": 2
},
"input_3": {
"timestamp": "2025-01-16T21:30:17Z",
"executionIndex": 3
},
"totalInputs": 3,
"executionTime": "2025-01-16T21:30:17Z",
"waitTime": "2.1s"
}
}
Parameter | Type | Default | Description |
---|---|---|---|
Expected Inputs | Number | 2 | Number of parallel inputs to wait for (2-99) |
Timeout (seconds) | Number | 30 | Maximum time to wait for all inputs |
Include Metadata | Boolean | false | Include execution metadata in output |
Get Users API βββ
Get Orders API βββ€ββ [JOIN] ββ> Generate Report
Get Products API βββ
Database Query βββ
File Processing βββ€ββ [JOIN] ββ> Data Analysis
Web Scraping βββ
IF: Process A βββ
IF: Process B βββ€ββ [JOIN] ββ> Final Processing
IF: Process C βββ
- Node.js 20+
- npm 8+
- n8n development environment
# Clone the repository
git clone https://github.com/conciso/n8n-nodes-join.git
cd n8n-nodes-join
# Install dependencies
npm run init
# Build and run in dev mode
npm run dev
n8n-nodes-join/
βββ nodes/
β βββ Join/
β βββ Join.node.ts # Main node implementation
β βββ Join.node.json # Node metadata
β βββ join.svg # Node icon
βββ dist/
βββ test/ # Test files
βββ gulpfile.js # Build system
βββ package.json # Package configuration
Contributions are welcome!
- Fork the repository
- Create a feature branch
- Make your changes
- Run build and tests:
npm run build:test
- Submit a pull request
β "No input data received" Error
- Ensure all parallel nodes are connected to the Join node
- Check that upstream nodes are producing data
β Timeout Issues
- Increase the timeout value in node configuration
- Check for slow upstream operations
β Wrong Expected Inputs Configuration
- Ensure "Expected Inputs" matches the actual number of connected parallel nodes
- If you have 4 parallel nodes, set "Expected Inputs" to 4
- The node will timeout if it doesn't receive the expected number of inputs
This project is licensed under the MIT License - see the LICENSE file for details.
- Built for the n8n automation platform
- Inspired by the n8n community's need for better parallel workflow handling
Made with β€οΈ for the n8n community