Logic Nodes
Logic nodes evaluate conditions and route the automation flow to different branches. Each branch corresponds to an output handle on the node.
Create a project
lumio init my-logic-node
When prompted:
- Category:
automation_node - Node type: Logic
Handler
Logic handlers use defineAutomationLogic and return a branch key:
import { defineAutomationLogic } from "@zaflun/lumio-sdk/server";
defineAutomationLogic(async (ctx) => {
const value = ctx.inputData.amount;
if (value > ctx.nodeConfig.threshold) {
return "above";
}
return "below";
});
Return value
The handler returns a string -- the branch key. This string must match one of the output handle keys defined in the Automation Builder.
Common patterns:
| Pattern | Branch keys | Use case |
|---|---|---|
| Boolean | "true", "false" | Simple yes/no condition |
| Threshold | "above", "below" | Numeric comparison |
| Match | "match", "no_match" | Pattern matching |
| Category | "category_a", "category_b", "other" | Multi-way routing |
The Automation Builder displays output handles for each unique branch key that the node can return. Users connect edges from these handles to downstream nodes.
Input data
Logic nodes receive data from the upstream node via ctx.inputData. The input_schema in the manifest defines expected fields:
{
"node_type": "logic",
"node": {
"input_schema": {
"type": "object",
"properties": {
"amount": { "type": "number", "title": "Amount to check" }
},
"required": ["amount"]
},
"output_schema": {
"type": "object",
"properties": {}
}
}
}
Logic nodes typically have an empty output_schema since they route rather than transform data. The upstream data passes through unchanged to the selected branch.
Example: Time-of-day router
import { defineAutomationLogic } from "@zaflun/lumio-sdk/server";
defineAutomationLogic(async (ctx) => {
const hour = new Date().getUTCHours();
const offset = Number(ctx.nodeConfig.utc_offset ?? 0);
const localHour = (hour + offset + 24) % 24;
if (localHour >= 6 && localHour < 12) return "morning";
if (localHour >= 12 && localHour < 18) return "afternoon";
if (localHour >= 18 && localHour < 22) return "evening";
return "night";
});
Timeout
Logic nodes have a 2000ms timeout. Keep logic simple and avoid external API calls. If you need to fetch data, use an action node upstream and pass the result to the logic node.
Next steps
- Config Panel -- build a custom config UI
- Testing -- test branching logic locally