EdgeFlow uses a visual, flow-based programming model. Master these core concepts to build powerful automations for your edge devices and IoT projects.
Flows
Container for your automation logic
Nodes
Building blocks that perform actions
Messages
Data passed between nodes
Wires
Connections linking nodes together
How It Works
Flows
The container for your automation logic
A flow is a collection of nodes wired together. Each flow represents a complete automation workflow that executes independently. You can have multiple flows running simultaneously.
Group related automations in separate flows for clarity
Each flow runs in isolation - errors don't affect other flows
Flows can communicate via Link nodes for complex workflows
Flow States
Nodes
Building blocks that perform specific actions
Nodes are the building blocks of EdgeFlow. Each node type performs a specific function - from reading sensors to sending notifications. EdgeFlow includes 100+ built-in nodes.
Node Anatomy
Node Categories
Inject, Debug, Function, Switch, Change, Delay
HTTP, MQTT, WebSocket, TCP, UDP
GPIO, PWM, I2C, SPI, Sensors
SQLite, PostgreSQL, MongoDB, Redis
Telegram, Email, Slack, Discord
OpenAI, Anthropic, Ollama
Messages
Data objects passed between nodes
Nodes communicate by passing messages. A message is a JavaScript object
that flows through the wires. The main data is typically in msg.payload.
Wires (Connections)
Links that connect nodes together
Wires connect the output port of one node to the input port of another. They define the path messages take through your flow.
Connection Rules
One output to one input
One output to multiple inputs (message copied)
Multiple outputs to one input (sequential)
To delete a wire, click it to select (turns orange) then press Delete. To add a bend point, double-click the wire.
Context (Variables)
Store data that persists between messages
Context lets you store data that persists across multiple messages. There are three scopes available, each with different visibility.
global.get("apiKey") global.set("counter", 100) flow.get("lastReading") flow.set("total", 500) context.get("count") context.set("state", "on") Triggers
Ways to start your flow
Flows can be started in multiple ways. Choose the trigger that matches your use case.
Run at specific times using cron
Every 5 minutes Respond to web requests
POST /api/webhook React to IoT messages
sensors/+/temp Hardware pin changes
Pin 17 rising edge Click to run (Inject node)
Testing flows Called from another flow
Flow chaining Best Practices
One flow, one purpose. Split complex logic into multiple connected flows.
Use descriptive names for flows and nodes. Your future self will thank you.
Add Debug nodes at key points to see what data is flowing through.
Use Catch nodes to gracefully handle failures and send alerts.