Edit, analyze, and create Node-RED flows by working with flows.json files, understanding node types, and applying Node-RED best practices. Use when the user mentions Node-RED, flows.json, flow development, or needs to modify Node-RED configurations.
Installs into .claude/skills of the current project.
Are you the author of 1178 Name Skill D0abb9a8?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/tools-only-1178-name-skill-d0abb9a8)
---
name: node-red
description: Edit, analyze, and create Node-RED flows by working with flows.json files, understanding node types, and applying Node-RED best practices. Use when the user mentions Node-RED, flows.json, flow development, or needs to modify Node-RED configurations.
---
# Node-RED Flow Development
This skill provides comprehensive support for Node-RED development, including flow creation, modification, validation, and deployment through the Admin API.
## When to Use This Skill
Use this skill when:
- Creating or modifying Node-RED flows (flows.json files)
- Building MQTT, HTTP API, or data pipeline integrations
- Debugging or validating flow configurations
- Working with function nodes and context storage
- Deploying flows via the Node-RED Admin API
- Converting requirements into Node-RED flow implementations
## Available Resources
### Scripts (scripts/)
Execute these Python scripts for common Node-RED operations:
- **generate_uuid.py** - Generate valid Node-RED node IDs
```bash
python scripts/generate_uuid.py [count]
```
- **validate_flow.py** - Validate flow JSON structure and wire connections
```bash
python scripts/validate_flow.py <flow.json>
```
- **wire_nodes.py** - Connect nodes programmatically
```bash
python scripts/wire_nodes.py <flow.json> <source_id> <target_id> [output_port]
```
- **create_flow_template.py** - Generate boilerplate flows
```bash
python scripts/create_flow_template.py <mqtt|http-api|data-pipeline|error-handler> [output.json]
```
### References (references/)
Consult these detailed references as needed:
- **node_schemas.md** - Complete schemas for all Node-RED node types
- **api_reference.md** - Node-RED Admin API documentation with examples
- **function_snippets.md** - Reusable function node code patterns
### Assets (assets/)
Use these templates and boilerplate files:
- **templates/mqtt_flow.json** - Complete MQTT pub/sub flow with error handling
- **templates/http_api_flow.json** - REST API with CRUD operations and authentication
- **boilerplate/function_async.js** - Async function node patterns
- **boilerplate/function_context.js** - Context storage examples
## Core Workflow
### Creating a New Flow
1. Determine the flow type needed (MQTT, HTTP API, data processing, etc.)
2. Generate a template using `scripts/create_flow_template.py`
3. Modify the template to match requirements
4. Validate the flow using `scripts/validate_flow.py`
5. Deploy via Admin API or save as flows.json
### Modifying Existing Flows
1. Read and parse the flows.json file
2. Identify nodes by type and ID
3. Make modifications while preserving:
- Wire connections (arrays of node IDs)
- Tab references (`z` property)
- Node coordinates (`x`, `y`)
4. Validate changes before saving
5. Use `scripts/wire_nodes.py` to connect nodes if needed
### Working with Function Nodes
For function nodes, reference:
- `assets/boilerplate/function_async.js` for async operations
- `assets/boilerplate/function_context.js` for context storage
- `references/function_snippets.md` for specific patterns
Available objects in function nodes:
- `msg` - Message object
- `node` - Node API (send, done, error, warn, log, status)
- `context` - Node-scoped storage
- `flow` - Flow-scoped storage
- `global` - Global storage
- `RED` - Runtime API
- `env` - Environment variables
### Deploying Flows
To deploy flows via the Admin API:
1. Retrieve current configuration:
```bash
GET /flows
```
2. Modify the configuration as needed
3. Deploy with appropriate deployment type:
```bash
POST /flows
Headers: Node-RED-Deployment-Type: full|nodes|flows|reload
```
4. Verify deployment success
## Common Patterns
### Message Flow Structure
Every Node-RED message follows this pattern:
- Primary data in `msg.payload`
- Topic/category in `msg.topic`
- Unique ID in `msg._msgid`
- Additional properties as needed
### Error Handling
Implement error handling using:
1. Try-catch blocks in function nodes
2. Catch nodes to intercept errors
3. Status nodes to monitor node states
4. Dedicated error output wires
### Environment Variables
Use environment variables for configuration:
- In node properties: `$(ENV_VAR_NAME)`
- In function nodes: `env.get("ENV_VAR_NAME")`
- Via Docker: `-e KEY=value`
### Context Storage Levels
Choose appropriate context level:
- **Node context**: Local to single node
- **Flow context**: Shared within flow/tab
- **Global context**: System-wide sharing
- **Persistent**: Survives restarts (configure in settings.js)
## Validation Checklist
Before deploying flows, verify:
- [ ] JSON syntax is valid
- [ ] All wire connections reference existing node IDs
- [ ] Tab references (`z` property) are correct
- [ ] Function node JavaScript is syntactically valid
- [ ] Required configuration nodes exist (MQTT brokers, etc.)
- [ ] Environment variables are properly referenced
- [ ] Error handling is implemented
## Quick Commands
Generate five Node-RED UUIDs:
```bash
python scripts/generate_uuid.py 5
```
Create an MQTT flow template:
```bash
python scripts/create_flow_template.py mqtt my-mqtt-flow.json
```
Validate a flow file:
```bash
python scripts/validate_flow.py flows.json
```
Wire two nodes together:
```bash
python scripts/wire_nodes.py flows.json inject-node-id debug-node-id
```
## Node-RED Configuration
### Default File Locations
- Flows: `~/.node-red/flows_<hostname>.json`
- Settings: `~/.node-red/settings.js`
- Custom nodes: `~/.node-red/node_modules/`
### Running Node-RED
- Normal mode: `node-red`
- Safe mode (no flow execution): `node-red --safe`
- Custom flow file: `node-red myflows.json`
## Best Practices
1. **Use appropriate node types**: Prefer change nodes over function nodes for simple transformations
2. **Implement error handling**: Always include catch nodes for critical paths
3. **Document flows**: Use comment nodes and node descriptions
4. **Organize with tabs**: Separate flows by logical function or system
5. **Version control**: Store flows.json in git with meaningful commit messages
6. **Test incrementally**: Deploy and test small changes frequently
7. **Monitor performance**: Use status nodes and debug output wisely
## Troubleshooting
For common issues:
- **Invalid JSON**: Use `scripts/validate_flow.py` to find syntax errors
- **Broken wires**: Check that all wired node IDs exist
- **Missing configurations**: Ensure broker/server configs are included
- **Function errors**: Test JavaScript in isolation first
- **API deployment fails**: Verify authentication and check revision conflicts
## Additional Resources
For detailed specifications and examples:
- Consult `references/node_schemas.md` for node property details
- Review `references/api_reference.md` for API operations
- Use `references/function_snippets.md` for tested code patterns
- Copy templates from `assets/templates/` as starting points