Documentation
Getting started
How NodeLogic works
Nodes, wires, values and outputs: the five ideas behind every graph.
NodeLogic Graph Builder adds logic to WordPress pages without code. You describe what should happen by connecting nodes with wires in a visual editor, the graph. On the published page the graph runs in the visitor's browser and updates the page instantly.
1. Values flow from left to right
Every node has input pins on the left and output pins on the right. A wire carries a value from an output pin to an input pin. A graph usually starts with nodes that read something (a field the visitor fills in, a constant you type), passes through nodes that compute (Calculation, Condition, Concat...) and ends in an Output node, which writes the result into an element on the page.
Element (quantity)CalculationOutput (total)
2. Pins have types
Each pin has a type, shown by its color. You can only connect compatible pins, so many mistakes are impossible. The most common types:
- Number
- String
- Boolean
- Color
- Zip
- Array
- CSS
- Element
- Event
- Action
3. The graph is always live
You never need a "calculate" button: when the visitor changes a field, every value that depends on it is recalculated and the page is updated. A graph describes states ("the total is quantity x price"), not steps.
4. Events are moments
Some things are not states but moments: a click, a submitted form, a timer tick. Event nodes produce events. Use them with Event Processor (let a value through only when the event happens), with Event Trigger Action (run actions on each event) or with nodes that have a Trigger pin (Clone Element, Increment Variable, Send Email...).
5. Outputs and actions change the page
An Output node writes its value into its target: form fields get a new value, images a new address, other elements new text. Its Action pin starts action nodes for the same element: change styles and classes, show or hide it, enable or disable it, react to clicks, redirect, show notifications.
One logic block can control any number of elements on its page. You can also put several logic blocks on one page; each one runs on its own.
Getting started
Where the editor is, in Gutenberg and in Elementor, and how a graph gets onto the page.
In the block editor (Gutenberg)
- Install and activate NodeLogic Graph Builder.
- Edit a page and add the fields and texts you need. The plugin's own blocks (category NodeLogic Graph Builder): Seekbar, Number Input, Text Input, Radio Group, Select, Checkbox, Label, Button Group, Trigger Group, Image, Array List and Container. Every element with an HTML ID can be used too.
- Add the NodeLogic Graph Builder Logic block anywhere on the page. It holds the graph and is invisible to visitors.
- Click Edit Logic Graph to open the editor.
- Build your graph, then click Save Graph.
- Update (or publish) the page. The page uses the new graph from now on.
The editor detects the NodeLogic blocks on the page, so you can choose them by name in nodes such as Element and Output.
Starting from scratch? The block patterns Price Calculator Starter and Estimate Calculator Starter give you a ready layout.
In Elementor
- Drag the NodeLogic Graph Builder widget (category NodeLogic Graph Builder) onto the page. It is invisible to visitors.
- Give the Elementor widgets you want to read or change a CSS ID: Advanced > CSS ID.
- In the NodeLogic widget panel click Open Logic Editor.
- Build your graph and click Save Graph, then Close Logic Editor.
- Click Update in Elementor.
In Elementor, type the element IDs into the nodes (Element, Element Reference, Output...). Elementor forms work with the PRO Form Data node.
Saving: working copy and the page
While you edit, your changes are kept automatically as a working copy in this browser, even if the browser crashes. The page keeps using its current graph until you click Save Graph and update the page. The editor shows "Unpublished changes" while the two differ, and Discard changes... takes you back to the page's graph.
Using the editor
Adding and connecting nodes, keyboard shortcuts, versions, import and export.
Nodes and wires
- The palette on the left lists every node in folders. Type in Search nodes... to find one, then drag it onto the canvas.
- Drag from an output pin (right side of a node) to an input pin (left side) to connect them. An output can feed any number of inputs; an input takes one wire.
- Drag the end of an existing wire away from its input to move it to another pin or to remove it.
- Click a node to select it: its settings appear in the side panel. Many settings can also be changed directly on the node.
- Inputs that are not connected often have their own field on the node: type a value there instead of wiring a constant.
- Drag the empty canvas to move around; use the mouse wheel to zoom.
- Ctrl+Z
- Undo (Cmd + Z on Mac)
- Ctrl+Y or Ctrl+Shift+Z
- Redo
- Delete or Backspace
- Delete the selected node
Every action is one undo step (typing a word is one step, not one per letter), up to 100 steps.
Versions
The versions panel shows the graph Published (on the page), the Previous versions kept with the page, and Local backups (this browser) taken automatically before every save, restore, import and discard.
- View opens a read-only preview with a summary of the differences. It never changes anything.
- Restore... makes that version your working copy (Undo brings your previous one back). The page changes only when you click Save Graph.
- Choose how many previous versions the page keeps (0 to 10, default 5). Older ones are removed at the next Save Graph.
Export and import
Export working copy (or Export next to any version) downloads the graph as a JSON file. Import from file... checks the file, shows what will change and asks before replacing your working copy. Use it to copy a graph to another page or site, or to keep your own backups.
If something goes wrong
If the browser or computer crashed before your last changes were stored, the editor offers a recovery snapshot the next time you open the graph: it shows when the snapshot was made and what differs, and lets you Restore or Dismiss it. Nothing is ever replaced without asking.
Tutorial 1: a live price calculator
Quantity x price, shown instantly while the visitor types.
Goal: the visitor enters a quantity, and a label shows the total price immediately.
- Add a Number Input block for the quantity and a Label block for the total. Set their ID in the block settings, for example
qtyandtotal. - Add the logic block and click Edit Logic Graph.
- From Elements & Values drag an Element Node onto the canvas and choose the quantity field.
- Drag a Number Constant and type the unit price, e.g.
19.90. - From Node Types drag a Calculation Node. Connect the Element to its first input and the constant to the second; choose the operator
*. - From Outputs drag an Output Node. Choose
totalas its target and connect the Calculation result to its Value pin. - Click Save Graph and update the page. Change the quantity on the page: the total follows.
Element (qty)Calculation (*)Output (total)
Make it nicer
- Add the currency: Calculation -> Number To String -> Concat with
" EUR"-> Output. - Round the result: put a Math Function (
round, PRO) or format the number before the Output. - Add a discount: a Condition (quantity
>=10) into an If Node that chooses between two prices.
Tutorial 2: show, hide and style by condition
Conditional texts, classes and visibility.
Goal: when the visitor ticks "I am a company", a VAT number field appears and becomes required, and a message changes.
- Add a Checkbox block (
company), a Text Input (vat) and a Label (info). - In the editor, read the checkbox with an Element Node: its value is true or false.
- Text: connect the checkbox to the Condition of an If Node. Connect a String Constant "Company prices exclude VAT" to True and another one, "Prices include VAT", to False. Connect the result to an Output targeting
info. - Field: add a second Output targeting
vat. From its Action pin connect an Action If Node and wire the checkbox into its Condition. - From the Action If True pin connect Set Visibility (Show) and Set Required; from False connect Set Visibility (Hide).
- Save Graph and update the page.
Element (company)Action IfSet Visibility / Set Required
For more than two cases use a Switch Node with Case Value, Case Range and Case Default.
Tutorial 3: react to clicks
Events, Event Processor and actions.
Goal: the total is shown only after the visitor clicks "Calculate", and the button gets a short confirmation.
- Start from Tutorial 1 and add a button with the ID
calc. - From Events add an Event Element Node: target
calc, event typeclick. - Add an Event Processor. Connect the event to Event and the Calculation result to Payload. Its output now changes only when the button is clicked.
- Connect the Event Processor to the Output targeting
total. - For the confirmation: from the Output's Action pin add an Event Trigger Action with the click event as Trigger, then a Show Notification "Price updated" from its output.
- Save Graph and update the page.
Event Element (click)Event ProcessorOutput (total)
To toggle something on every click (a menu, a details panel) use Output -> Action Event Node (click) -> Toggle Class or Set Visibility (Toggle).
Tutorial 4: work with lists
Arrays, For Each and updating many elements at once.
Lists let one graph handle any number of items: all cards of a grid, all rows of a table, all values of a chart.
Update every element of a list
- Point at the container with an Element Reference and connect it to Get Children: you get the list of its child elements.
- Connect the list to a For Each. Its Item is "the current element", Index its position.
- Add an Output and connect the For Each Item to its Element pin, and for example Index + 1 to its Value: every child shows its number.
Element ReferenceGet ChildrenFor EachOutput
Compute with lists
- Totals: Reduce (sum, min, max, count...).
- Transform every value: For Each -> your calculation -> Collect Results (or Map).
- Keep only some items: For Each -> a Condition -> Filter.
- Show a list on the page: an Output targeting an Array List block (or a NodeLogic Chart block, PRO).
Working with page elements
IDs, the Element pin, and creating elements from HTML.
- NodeLogic finds elements by their HTML ID. NodeLogic blocks have one in their settings; give other blocks an ID with Advanced > HTML anchor (Gutenberg) or Advanced > CSS ID (Elementor).
- Nodes that need an element (Output, events, Element Property, Get Children...) have an Element pin. Connect an Element Reference, a For Each item or Get Children to it, or leave it empty and choose the target in the node.
- Elements without an ID still work through Get Children, Elements by Class and For Each.
- Raw HTML creates new elements from your own HTML, with pins for the parts you mark; Set Parent places them, Clone Element copies existing ones.
IDs must be unique on a page. Two elements with the same ID confuse the browser and NodeLogic alike.
Debugging and troubleshooting
See values while you build, and what to check when nothing happens.
See what your graph is doing
Put a Debug node anywhere in a chain: values pass through unchanged. Console Log prints into the browser console (F12), Message Log shows a small message on the page. By default only logged-in editors see them, so they can stay on a live page while you test.
Nothing happens on the page?
- Did you click Save Graph and then update the page? Unpublished changes stay in the editor only.
- Does the chain end in an Output node (or a node with its own effect such as Send Email)? Nodes that lead nowhere are not run.
- Is the Output target right? Check that the element ID exists on the page exactly once.
- Is an Event Processor in the chain? It lets the value through only when its event fires.
- Open the browser console: NodeLogic reports parts of a graph it could not evaluate. The rest of the graph keeps working.
- Is the value of the right type? A text such as "12 EUR" is not a number: use Parse Number or String To Number.
Node reference
150 nodes: 107 in the free plugin and 43 with NodeLogic PRO, in the order of the editor's palette. Open a node to see its pins, settings and an example.
- Number
- String
- Boolean
- Color
- Zip
- Array
- CSS
- Element
- Event
- Action
Outputs
Every graph ends in an Output node: it is where a computed value is written into an element on the page, and where actions start.
Output NodeFreeWrites a value into an element on the page and starts the actions attached to it.
The Output node decides what changes on the page. It has a target element and a value. How the value is applied depends on the target: form fields (inputs, selects, sliders, text areas) receive it as their value, images receive it as their image address, NodeLogic Array List / Chart / Custom Element blocks render it as a list, a chart or a layout, an element value (from Raw HTML or Clone Element) is placed inside the target, and every other element shows it as text.
Inputs
- ElementElement
- The element to update. Connect an Element Reference (or any node that returns an element). When nothing is connected, the target chosen in the node is used.
- ValueAny
- The value to write into the target.
Outputs
- ActionAction
- Connect action nodes here (Set Style, Add Class, Action Event...). They act on the same target element.
Settings
- Target
- Pick a NodeLogic element from the list (Gutenberg) or type an element ID. Disabled while the Element pin is connected.
- Execute on page load
- When on (default), the value and actions are applied as soon as the page loads; when off, only after something changes.
Example
Seekbar quantity and Number Input price -> Calculation (*) -> Output with Element = Element Reference total -> the Label block total always shows quantity x price.
- You can use as many Output nodes as you need, also several for the same element.
- Connect the Element pin to a For Each item to update every element of a list (one pass per item).
outputLink to this node
Logic & branching
The palette folder "Node Types": arithmetic, comparisons and every way to choose between values.
Calculation NodeFreeCombines any number of numbers with arithmetic operators.
Each new connection adds one more input slot. Between two inputs you choose the operator: +, -, *, /, ** (power) or % (remainder). Numbered markers on the node show the order. The result is computed from left to right, one step at a time: ((Input 1 op Input 2) op Input 3)....
Inputs
- Input 1, Input 2, ...Number
- The operands. An unconnected input can hold a typed value instead.
Outputs
- ResultNumber
- The calculated number.
Settings
- Operator between inputs
- One operator per gap between two inputs.
- Manual values
- Type a number into an input that is not connected.
Example
Price x Quantity + Shipping: Input 1 = price, *, Input 2 = quantity, +, Input 3 = 4.99.
- Because the order is left to right,
2 + 3 * 4gives 20, not 14. Put the multiplication in its own Calculation node first if you need it to happen first. - Inputs must be connected without gaps (Input 1, 2, 3...). A gap is highlighted and blocks Save Graph until it is closed.
calculationLink to this node
Condition NodeFreeCompares two values and returns true or false.
Inputs
- LeftAny
- The first value.
- RightAny
- The value to compare with.
Outputs
- ResultBoolean
- The answer of the comparison.
Settings
- Operator
===equal,!==not equal,>,<,>=,<=.
Example
Show a discount only above 100: Condition (Total > 100) -> If Node / Action If.
===is strict: the number5and the text"5"are different. Convert text from inputs with String To Number before comparing numbers.
conditionLink to this node
If NodeFreeReturns one of two values depending on a condition.
Inputs
- ConditionBoolean
- When true, True is returned; otherwise False.
- TrueAny
- Value used when the condition is true.
- FalseAny
- Value used when the condition is false.
Outputs
- ResultAny
- The selected value.
Example
Condition (age >= 18) -> If Node (True = "Welcome", False = "Sorry, adults only") -> Output.
If Branch NodeFreeSends one value down one of two paths.
Unlike the If Node, which chooses between two values, If Branch has one value and two outputs: the value comes out of True when the condition holds and out of False when it does not. The other output stays empty.
Inputs
- ConditionBoolean
- Which path receives the value.
- ValueAny
- The value to route.
Outputs
- TrueAny
- The value, when the condition is true.
- FalseAny
- The value, when the condition is false.
Example
Route a message either to an "error" label or to a "success" label.
node-branchLink to this node
Switch NodeFreePicks a result from a list of cases, like a lookup table.
Connect the value to test to Value, then connect Case Value, Case Range and Case Default nodes to the case pins. The first case that matches wins and its Out value becomes the result. When nothing matches, the Case Default is used (or 0 without one).
Inputs
- ValueAny
- The value tested against the cases.
- Case 1, Case 2, ... / DefaultCase
- Case nodes. A new case pin appears for each connection.
Outputs
- ResultAny
- The Out value of the matching case.
Example
Shipping price by weight: Case Range 0-1 -> 5, Case Range 1-5 -> 9, Case Default -> 15.
switchLink to this node
Case ValueFreeOne case of a Switch: matches one exact value.
Inputs
- ValueAny
- The value this case matches (or type it in the node).
- OutAny
- The result when it matches (or type it in the node).
Outputs
- ResultCase
- Connect to a Switch or Switch Branch case pin.
- Matching is tolerant: the number 3 matches the text "3".
case-valueLink to this node
Case RangeFreeOne case of a Switch: matches every number between Min and Max (inclusive).
Inputs
- MinNumber
- Lower bound.
- MaxNumber
- Upper bound.
- OutAny
- The result when the value is in the range.
Outputs
- ResultCase
- Connect to a Switch or Switch Branch case pin.
- If Min is larger than Max, they are swapped automatically.
case-rangeLink to this node
Case DefaultFreeThe fallback case of a Switch, used when no other case matches.
Inputs
- OutAny
- The fallback result.
Outputs
- ResultCase
- Connect to a Switch or Switch Branch case pin.
case-defaultLink to this node
Switch Branch NodeFreeRoutes a value to the output of the case that matches.
Each connected case creates an output. The Value comes out only of the output whose case matches Compare; the others stay empty. A Case Default output always receives the value.
Inputs
- ValueAny
- The value to route.
- CompareAny
- The value tested against the cases.
- Case 1, Case 2, ...Case
- Case Value / Case Range / Case Default nodes.
Outputs
- Case 1, Case 2, ... / DefaultAny
- One output per connected case.
switch-branchLink to this node
Count True NodePROCounts how many of its inputs are true.
Inputs
- Bool 1, Bool 2, ...Boolean
- Any number of conditions.
Outputs
- CountNumber
- How many inputs are true.
Example
Password strength: count the checks "long enough", "has a digit", "has a capital letter".
bool-countLink to this node
Unzip NodePROSplits an object into one output pin per field.
Many PRO nodes return an object (a "zip"): a form submission, a database row, an API status, a custom node with Zip Output. Unzip shows each field as its own output pin, named after the field when the structure is known (form fields, database columns, Send Email and API Status fields). It remembers the last detected structure, so the pins survive when the source is temporarily unavailable in the editor.
Inputs
- ZipZip
- The object to split.
Outputs
- One pin per fieldAny
- For example
name,email,messagefor a form.
Example
Form Data (Data) -> Unzip -> email -> Send Email (Recipient).
- On a For Each item over DB Select Rows, Unzip shows the row's columns.
unzipLink to this node
Elements & values
Read values from the page, point at elements, create and move elements, and type constant values.
Element NodeFreeReads the current value of a field on the page.
Use it for anything the visitor can change: NodeLogic element blocks (Seekbar, Number Input, Text Input, Select, Radio Group, Checkbox...) or any input with an ID. The value is read live, so the graph recalculates whenever the visitor changes the field.
Outputs
- ValueAny
- The field's current value.
Settings
- Element
- In Gutenberg pick the block from the list; switch to manual ID to type any element ID. In Elementor type the element ID.
Example
Element quantity (a Seekbar) -> Calculation -> Output.
elementLink to this node
Element ReferenceFreePoints at an element on the page so other nodes can work with it.
Many nodes need an element rather than a value: the Output target, events, Element Property, Get Children, Set Parent, Clone Element... Element Reference provides it from an ID.
Outputs
- ElementElement
- The element (resolved again on every run, so it also works when the page changes).
Settings
- Element
- Pick from the list (Gutenberg) or type the element ID.
element-refLink to this node
Element PropertyFreeReads properties of an element: its text, value, ID, classes, link, image source...
Inputs
- ElementElement
- The element to read from.
Outputs
- One pin per propertyAny
- Named after the property, e.g.
textContent,value,href,checked.
Settings
- Mode: Single
- One property, chosen from the list of properties detected on the element (or typed).
- Mode: All
- One output for every property detected on the element.
- Mode: Custom
- Pick exactly the properties you need, including custom attribute names.
Example
Element Reference price-tag -> Element Property (textContent) -> String To Number -> Calculation.
- Inside a For Each over elements, the list of generic properties is offered even before an element is detected.
element-propertyLink to this node
Get ChildrenFreeReturns the child elements of an element.
Builder markup is skipped automatically (for example Elementor's inner wrappers), so you get the elements you actually see.
Inputs
- ElementElement
- The parent element.
Outputs
- Children / Child pinsArray
- Either one array with the children, or one Element pin per child (see Return as).
Settings
- Mode
- Single: one child by position. All: every child. Custom: the children you tick.
- Return as
- Children: one array (ideal for For Each). Child: one output pin per child.
Example
Get Children of a list -> For Each -> Output (Element = item) -> Set Text: update every list item.
get-childrenLink to this node
Raw HTML ElementFreeCreates a new element from your own HTML, with live slots for values.
Click Edit HTML to write the markup. The node lists every text, attribute and style it finds; tick the ones you want to control and each becomes an input pin. Place the element on the page with an Output (as its Value) or Set Parent. Inside a For Each loop it creates one element per item. The HTML is sanitized: scripts, event handlers, javascript: links and <style> blocks are removed, and iframes are allowed only for YouTube, Vimeo and Google Maps.
Inputs
- One pin per ticked slotAny
- E.g. "h3 text", "a href", "div style color".
Outputs
- ElementElement
- The created element.
Settings
- Edit HTML
- Opens the HTML editor. Changes apply when you click Done.
- Slots
- Tick the texts, attributes and styles that should become input pins.
Example
DB Select Rows -> For Each -> Unzip -> Raw HTML (<li><b>name</b> - price</li>) -> Set Parent (Parent = the list): one list item per database row.
raw-htmlLink to this node
Set ParentFreeMoves an element into another element.
Inputs
- ElementElement
- The element to move.
- ParentElement
- Where to put it.
- TriggerEvent
- Optional. When connected, the element moves once per event.
Outputs
- ElementElement
- The moved element.
Settings
- Position
- Last child (default) or First child.
- Without a Trigger the element is simply kept inside the parent; nothing happens again on later recalculations.
- An element is never moved into one of its own children.
set-parentLink to this node
Clone ElementFreeMakes copies of an element.
Inputs
- ElementElement
- The element to copy.
- TriggerEvent
- Optional. When connected, a new copy is made on every event.
Outputs
- CloneElement
- The latest copy.
- All ClonesArray
- Every copy made so far.
Settings
- Placement
- Right after the original, or Nowhere (then place it yourself with Set Parent or an Output).
Example
"Add row" button: Event Element (click on add-row) -> Clone Element (Element = the row template).
- Without a Trigger exactly one copy is made.
- Copies get unique IDs (labels keep pointing at their own inputs). A NodeLogic logic block cannot be cloned.
clone-elementLink to this node
Elements by ClassFreeFinds every element that has all the given CSS classes.
Inputs
- ClassString
- One or more class names separated by spaces (or type them in the node). Elements must have all of them.
- ScopeElement
- Optional. Search only inside this element.
Outputs
- ElementsArray
- The matching elements.
- CountNumber
- How many were found.
Example
Elements by Class card -> For Each -> Output (Element = item) -> Add Class visible.
elements-by-classLink to this node
Number ConstantFreeA fixed number you type in the node.
Outputs
- ValueNumber
- The number.
- In the Custom Node Creator, constants become the inputs of your custom node.
numberLink to this node
Boolean ConstantFreeA fixed true / false value.
Outputs
- ValueBoolean
- true or false.
constant-booleanLink to this node
String ConstantFreeA fixed piece of text.
Outputs
- ValueString
- The text.
constant-stringLink to this node
Boolean logic
Combine true / false values and supply fallbacks for missing ones.
NOTFreeInverts a true / false value.
Inputs
- InputBoolean
- The value to invert (false when not connected).
Outputs
- ValueBoolean
- true becomes false and the other way round.
ANDFreeTrue only when both inputs are true.
Inputs
- ABoolean
- First condition.
- BBoolean
- Second condition.
Outputs
- ValueBoolean
- A and B.
Example
Enable the Submit button only when "terms accepted" AND "email is valid".
ORFreeTrue when at least one input is true.
Inputs
- ABoolean
- First condition.
- BBoolean
- Second condition.
Outputs
- ValueBoolean
- A or B.
FallbackFreeUses a backup value when the main value is missing.
Inputs
- PrimaryAny
- The value you prefer.
- FallbackAny
- Used when Primary is missing (empty result, nothing yet, or not a number).
Outputs
- ValueAny
- Primary, or Fallback when Primary is missing.
Example
API Field (price) -> Fallback (Fallback = "Price on request") -> Output.
- An empty text is a real value, not a missing one.
fallbackLink to this node
Math
Limits and mathematical functions. For arithmetic use the Calculation node.
ClampFreeKeeps a number between a minimum and a maximum.
Inputs
- ValueNumber
- The number.
- MinNumber
- Lowest allowed.
- MaxNumber
- Highest allowed.
Outputs
- ValueNumber
- Min if the value is below, Max if above, otherwise the value.
Example
Never offer more than 50% discount: Clamp(discount, 0, 50).
clampLink to this node
MinFreeThe smaller of two numbers.
Inputs
- ANumber
- BNumber
Outputs
- ValueNumber
- The smaller one.
min-valLink to this node
MaxFreeThe larger of two numbers.
Inputs
- ANumber
- BNumber
Outputs
- ValueNumber
- The larger one.
max-valLink to this node
Math FunctionPROApplies a mathematical function to a number.
Inputs
- ValueNumber
- The input number.
Outputs
- ValueNumber
- The result.
Settings
- Function
round,floor,ceil,abs,sqrt,log(natural),exp,sin,cos,tan,asin,acos,atan.
Example
Round a price: Calculation -> Math Function (round) -> Output.
- Trigonometric functions use radians.
Text (String Logic)
Build, cut, search and convert text.
ConcatFreeJoins two pieces of text.
Inputs
- AString
- First part.
- BString
- Second part.
Outputs
- TextString
- A followed by B.
Example
Concat(total, " USD") -> Output.
concatLink to this node
Multi ConcatPROJoins any number of texts.
Inputs
- Text 1, Text 2, ...String
- A new input appears for each connection.
Outputs
- TextString
- All inputs joined in order.
multi-concatLink to this node
Cut - Remove Found TextFreeRemoves the first occurrence of a text (or, reversed, keeps only that text).
Inputs
- TextString
- The source text.
- FindString
- What to look for.
Outputs
- TextString
- The result.
Settings
- Reverse
- Off: the text without the found part. On: only the found part (empty when it is not found).
Example
"hello world" with Find " world" -> "hello".
cut-aLink to this node
Cut - Text Before IndexFreeKeeps the text before a position (or, reversed, from that position on).
Inputs
- TextString
- The source text.
- IndexNumber
- Position, counted from 0.
Outputs
- TextString
- The result.
Settings
- Reverse
- Off: the characters before Index. On: the characters from Index to the end.
Example
"abcdef" with Index 2 -> "ab"; reversed -> "cdef".
cut-bLink to this node
Cut - Text Between IndexesFreeCuts out the part between two positions (or, reversed, keeps only that part).
Inputs
- TextString
- The source text.
- StartNumber
- Start position (from 0).
- EndNumber
- End position (not included).
Outputs
- TextString
- The result.
Settings
- Reverse
- Off: the text with the part between Start and End removed. On: only the part between Start and End.
Example
"abcdef", Start 1, End 4 -> "aef"; reversed -> "bcd".
cut-cLink to this node
Count CharactersFreeThe length of a text.
Inputs
- TextString
Outputs
- CharactersNumber
- Number of characters (spaces included).
Example
Live character counter under a text area: Element (message) -> Count Characters -> Output.
string-count-charsLink to this node
Count WordsPROThe number of words in a text.
Inputs
- TextString
Outputs
- WordsNumber
- Words separated by spaces or line breaks.
string-count-wordsLink to this node
Find Start IndexPROWhere a text starts inside another text.
Inputs
- TextString
- Where to search.
- FindString
- What to find.
Outputs
- StartNumber
- Position of the first match, or -1 when it is not found.
string-find-startLink to this node
Find End IndexPROWhere a found text ends inside another text.
Inputs
- TextString
- Where to search.
- FindString
- What to find.
Outputs
- EndNumber
- Position right after the first match, or -1.
- Combine Find Start Index and Find End Index with the Cut nodes to extract text between markers.
string-find-endLink to this node
String To NumberFreeTurns text such as "12.5" into a number.
Inputs
- TextString
Outputs
- NumberNumber
- The number (0 when the text is not a number).
- Use it before comparing or calculating with values read from text fields.
- A comma works as a decimal separator too: "12,5" becomes 12.5.
string-to-numberLink to this node
Number To StringFreeTurns a number into text.
Inputs
- ValueNumber
Outputs
- TextString
number-to-stringLink to this node
Parse NumberPROReads a whole number written in base 10, 16, 2 or 8.
Inputs
- TextString
- E.g. "ff" or "1010".
Outputs
- NumberNumber
- The value (0 when it cannot be read).
Settings
- Base
- Base 10 (decimal), Base 16 (hex), Base 2 (binary), Base 8 (octal).
number-parseLink to this node
Number To BasePROWrites a number in hexadecimal, binary or octal.
Inputs
- NumberNumber
- Rounded to a whole number.
Outputs
- TextString
- E.g. 255 -> "ff".
Settings
- Base
- Base 16 (hex), Base 2 (binary), Base 8 (octal) or Base 10.
- Minimum digits
- Pads with leading zeros, e.g. 2 digits -> "0f".
Example
Build a hex color from three sliders: Number To Base (16, 2 digits) for each channel -> Multi Concat("#", r, g, b).
number-to-baseLink to this node
TrimFreeRemoves spaces at the start and end of a text.
Inputs
- TextString
Outputs
- ValueString
string-trimLink to this node
UppercaseFreeConverts text to CAPITAL letters.
Inputs
- TextString
Outputs
- ValueString
string-upperLink to this node
LowercaseFreeConverts text to small letters.
Inputs
- TextString
Outputs
- ValueString
- Lowercase both sides before an Includes check to ignore capitalization.
string-lowerLink to this node
IncludesFreeChecks whether a text contains another text.
Inputs
- TextString
- Where to search.
- FindString
- What to look for.
Outputs
- ResultBoolean
- true when found (case-sensitive).
string-includesLink to this node
RegexFreeTests a text against a regular expression.
Inputs
- TextString
- The text to test.
Outputs
- MatchBoolean
- true when the pattern matches.
Settings
- Pattern
- A regular expression, e.g.
/^[0-9]{5}$/or with flags/hello/i.
Example
Validate a postal code: Element (zip) -> Regex /^[0-9]{2}-[0-9]{3}$/ -> Action If -> Add Class error.
regexLink to this node
SplitPROSplits a text by a separator and returns one part.
Inputs
- TextString
Outputs
- ValueString
- The selected part (empty when it does not exist).
Settings
- Delimiter
- The separator, e.g.
,. - Part index
- Which part to return, counted from 0.
Example
"Jane Doe" with Delimiter " " and Part 1 -> "Doe".
string-splitLink to this node
ReplacePROReplaces every occurrence of a text with another text.
Inputs
- TextString
Outputs
- ValueString
Settings
- Find
- The text to replace (plain text, not a pattern).
- Replace with
- The new text.
string-replaceLink to this node
Colors
Color values for styles.
Color NodeFreeA color picked in the node.
Outputs
- ColorColor
- A color value such as
#2563eb.
Example
If Node (True = green Color, False = red Color) -> Set Style background-color.
colorLink to this node
Gradient NodePROBuilds a CSS linear gradient from 2 to 8 colors.
Inputs
- Color A, Color B, ...Color
- The colors (or pick them in the node).
- AngleNumber
- Direction in degrees (default 90).
Outputs
- ColorColor
- E.g.
linear-gradient(90deg, #ef4444, #22c55e).
Settings
- Number of colors
- 2 to 8.
- Apply it with Set Style, property
background.
gradientLink to this node
CSS
Prepare CSS values. Apply them to an element with the Set Style action (property + value).
CSS UnitFreeAdds a unit to a number: 16 -> "16px".
Inputs
- NumberNumber
- The number (or type it in the node's Value field).
Outputs
- CSSCSS
- E.g.
16px,50%,2rem.
Settings
- Unit
px,%,em,rem,vw,vh,pt,cm.- Value
- Used while the Number pin is not connected.
Example
Seekbar (size) -> CSS Unit (px) -> Set Style font-size.
css-unitLink to this node
CSS MarginFreeBuilds a margin value from up to four sides.
Inputs
- TopCSS
- RightCSS
- BottomCSS
- LeftCSS
Outputs
- CSSCSS
- The connected sides joined with spaces, e.g.
10px 20px.
- Only connected sides are used, in the order Top, Right, Bottom, Left. Apply with Set Style
margin.
css-marginLink to this node
CSS PaddingFreeBuilds a padding value from up to four sides.
Inputs
- TopCSS
- RightCSS
- BottomCSS
- LeftCSS
Outputs
- CSSCSS
- The connected sides joined with spaces.
css-paddingLink to this node
CSS WidthFreePasses a width value on (for example from CSS Unit).
Inputs
- ValueCSS
Outputs
- CSSCSS
css-widthLink to this node
CSS HeightFreePasses a height value on.
Inputs
- ValueCSS
Outputs
- CSSCSS
css-heightLink to this node
CSS Font SizeFreePasses a font size value on.
Inputs
- ValueCSS
Outputs
- CSSCSS
css-font-sizeLink to this node
CSS DisplayFreeA display value chosen from a list.
Outputs
- CSSCSS
- E.g.
noneorflex.
Settings
- Display
block,none,flex,inline-flex,grid,inline,inline-block,contents,hidden.
- To show and hide elements the Set Visibility action is usually simpler.
css-displayLink to this node
CSS ColorFreeA color for CSS: the connected color, or the one picked in the node.
Inputs
- ColorColor
- Optional.
Outputs
- CSSCSS
- The color value.
css-colorLink to this node
CSS CustomFreeAny CSS you type yourself.
Outputs
- CSSCSS
- Your text, e.g.
border: 2px solid red; border-radius: 8px.
Settings
- CSS editor
- Write one or more declarations.
- Set Style applies a full declaration list (
name: value; name2: value2) property by property.
css-textLink to this node
CSS JoinFreeCombines several CSS values into one declaration list.
Inputs
- CSS 1, CSS 2, ...CSS
- Values to combine (2 to 8 inputs).
Outputs
- CSSCSS
- The parts joined with
;.
Settings
- Inputs
- 2 to 8.
- Property name per input
- Optional. With a name, an input becomes
name: value(e.g.color: #f00).
Example
CSS Color (named color) + CSS Display (named display) -> CSS Join -> Set Style: both properties applied at once.
css-joinLink to this node
Arrays & loops
Lists of values: build them, transform them and run a part of the graph once per item.
ArrayFreeCreates an empty list of a chosen item type.
Outputs
- ArrayArray
- An empty list, ready for Push.
Settings
- Item type
- Number, String, Boolean, Color, Zip (objects with named fields) or Element.
arrayLink to this node
PushFreeAdds a value at the end of a list.
Inputs
- ArrayArray
- The list.
- ValueAny
- The value to add.
Outputs
- ArrayArray
- A new list with the value appended (the original is unchanged).
Example
Array -> Push (10) -> Push (20) -> Push (30): a list of three numbers for a chart or a Reduce.
array-pushLink to this node
Pop OutFreeRemoves the last item of a list.
Inputs
- ArrayArray
Outputs
- ArrayArray
- The list without its last item.
array-popLink to this node
SortFreeSorts a list.
Inputs
- ArrayArray
Outputs
- ArrayArray
- The sorted list.
Settings
- Order
- Number ascending / descending, String A-Z / Z-A, or Custom field ascending / descending.
- Field
- For lists of objects: which field to sort by (e.g.
price).
Example
DB Select Rows -> Sort (Custom field price, ascending) -> For Each.
array-sortLink to this node
Remove by IndexFreeRemoves the item at a position.
Inputs
- ArrayArray
- IndexNumber
- Position, counted from 0.
Outputs
- ArrayArray
- The list without that item.
array-remove-indexLink to this node
Replace by IndexFreeReplaces the item at a position.
Inputs
- ArrayArray
- IndexNumber
- Position, counted from 0.
- ValueAny
- The new item.
Outputs
- ArrayArray
- The updated list.
array-replace-indexLink to this node
For EachFreeRuns part of your graph once for every item of a list.
For Each turns a list into a loop: its Item and Index outputs stand for "the current item". Whatever you build from them runs once per item when it ends in one of: Collect Results (gather the results into a new list), Map or Filter, an Output whose Element pin comes from the item (update every element of a list), or Set Parent, Clone Element and Debug nodes (for example one Raw HTML element per database row).
Inputs
- ArrayArray
- The list to loop over.
Outputs
- ItemAny
- The current item (its type follows the list: number, object, element...).
- IndexNumber
- The current position, from 0.
Example
Get Children (list) -> For Each -> Output (Element = Item) -> Set Text (Index + 1): numbers every list item.
- When the list holds objects (database rows, API items), connect the Item to Unzip (PRO) to get one pin per field.
- Writes such as Send Email or DB Insert are not repeated per item: they run once, on their Trigger.
array-for-eachLink to this node
Collect ResultsFreeGathers the per-item results of a For Each loop into a new list.
Inputs
- ItemAny
- A value computed from the For Each item.
Outputs
- ArrayArray
- One result per item, in order.
Example
Prices -> For Each -> Calculation (Item * 1.23) -> Collect Results: all prices with tax.
array-collectLink to this node
MapFreeTransforms every item of a list.
Connect the list to Array. Build the transformation from a For Each on the same list and connect its result to Value: it is computed for each item.
Inputs
- ArrayArray
- The list.
- ValueAny
- The new value for each item.
Outputs
- ArrayArray
- The transformed list.
array-mapLink to this node
FilterFreeKeeps only the items that match a condition.
Like Map, the Condition is built from a For Each on the same list and evaluated once per item.
Inputs
- ArrayArray
- The list.
- ConditionBoolean
- Keep the item when true.
Outputs
- ArrayArray
- The matching items.
Example
Products -> For Each -> Unzip (stock) -> Condition (> 0) -> Filter: only products in stock.
array-filterLink to this node
ReduceFreeTurns a list into one value: sum, product, minimum, maximum, joined text or count.
Inputs
- ArrayArray
Outputs
- ValueAny
- The result.
Settings
- Operation
sum,product,min,max,concat(join as text),count.- Initial value
- Start value (default 0).
Example
Cart prices -> Reduce (sum) -> Output "Total".
array-reduceLink to this node
FindFreeFinds where a value occurs in a list.
Inputs
- ArrayArray
- ValueAny
- What to look for.
Outputs
- IndexesArray
- Every position where it occurs.
- CountNumber
- How many times it occurs.
Settings
- Search field
- For lists of objects: compare this field (e.g.
id).
array-findLink to this node
ContainsFreeChecks whether a list contains a value.
Inputs
- ArrayArray
- ValueAny
Outputs
- ResultBoolean
- true when found.
array-containsLink to this node
LengthFreeThe number of items in a list.
Inputs
- ArrayArray
Outputs
- LengthNumber
array-lengthLink to this node
MergeFreeCombines two lists.
Inputs
- Array AArray
- Array BArray
Outputs
- ArrayArray
- A followed by B.
Settings
- Mode
concatkeeps everything;unionremoves duplicates.
array-mergeLink to this node
UniqueFreeRemoves duplicate items.
Inputs
- ArrayArray
Outputs
- ArrayArray
- Each value once.
array-uniqueLink to this node
Image
Image addresses for the NodeLogic Image block or any image.
Image From LinkFreeAn image address, typed or computed.
Inputs
- URLString
- The address (or type it in the node).
Outputs
- ImageString
- The image address.
Example
Select (color) -> If / Switch -> Image From Link -> Output targeting an Image block: the product photo follows the chosen color.
- An Output whose target is an image (or contains one) sets the image's address. In the PRO palette the same node is also listed as "Image Component".
image-from-linkLink to this node
Image From ElementFreeReads the address of an image already on the page.
Inputs
- ElementElement
- The image or an element containing it (or type its ID in the node).
Outputs
- ImageString
- The image address.
image-from-elementLink to this node
Events
Events say "something just happened": a click, a change, a timer tick. Connect them to Trigger pins, to Event Processor (to pass a value only when the event fires) or to Event Trigger Action (to run actions).
Event Element NodeFreeFires when something happens on an element: click, change, typing, focus...
Inputs
- ElementElement
- Optional. The element to listen to (otherwise the one chosen in the node).
Outputs
- ValueEvent
- Fires on every occurrence.
Settings
- Target
- The element (list or ID) when the Element pin is not connected.
- Event type
click,change,input,focus,blur,keydown,keyup.
Example
"Calculate" button: Event Element (click on calc-btn) -> Event Processor (Payload = the total) -> Output.
- Listeners follow the page: if an element is replaced, the event is attached to the new one.
event-elementLink to this node
Hover EventFreeFires when the mouse enters or leaves an element.
Inputs
- ElementElement
- Optional.
Outputs
- EventEvent
Settings
- Mode
- Mouse enter, Mouse leave, or Both.
event-hoverLink to this node
Scroll EventFreeFires when an element is scrolled.
Inputs
- ElementElement
- Optional. The scrolling element.
Outputs
- EventEvent
event-scrollLink to this node
Page LoadFreeFires once, when the page has loaded.
Outputs
- EventEvent
Example
Page Load -> Event Trigger Action -> Show Notification "Welcome!".
event-page-loadLink to this node
TimerFreeFires after a delay, or repeatedly at an interval.
Outputs
- EventEvent
Settings
- Interval (ms)
- Milliseconds (at least 50).
- Mode
intervalrepeats;timeoutfires once.
Example
Timer (1000 ms, interval) -> Increment Variable seconds -> Output: a running clock.
event-timerLink to this node
Custom EventFreeFires when a named custom event is sent on the page.
Outputs
- EventEvent
Settings
- Event name
- E.g.
cart-updated.
- Send it with the Trigger Event action, or from your own JavaScript:
window.dispatchEvent(new CustomEvent("cart-updated")).
event-customLink to this node
Event ORFreeFires when either of two events fires.
Inputs
- AEvent
- BEvent
Outputs
- EventEvent
Example
Recalculate on a button click OR when the Enter key is released in a field.
event-orLink to this node
Event ANDFreeFires when both events happen within a time window.
Inputs
- AEvent
- BEvent
Outputs
- EventEvent
Settings
- Window (ms)
- How close together the two events must be (default 5000).
event-andLink to this node
Fallback EventFreeShows a value for a while after it appears, then switches to a fallback.
When Main appears or changes, it is shown for Hold milliseconds; then the Fallback is shown. Combined with Event Processor this creates temporary messages that restart on every event.
Inputs
- MainAny
- The temporary value.
- FallbackAny
- The value afterwards (or type it in the node).
- Hold (ms)Number
- How long Main stays (or type it, default 3000).
Outputs
- ValueAny
Example
Click on Save -> Event Processor (Payload = "Saved!") -> Fallback Event (Fallback = "", Hold = 3000) -> Output: "Saved!" for 3 seconds after every click.
fallback-eventLink to this node
Event ProcessorFreeLets a value through only at the moment an event fires.
Inputs
- EventEvent
- The event.
- PayloadAny
- The value to let through.
Outputs
- ValueAny
- The payload when the event has just fired; nothing otherwise.
Settings
- Pass value only when event occurs
- On (default): as described. Off: the payload always passes.
Example
Only show the result after the visitor clicks "Calculate", not while typing.
event-processorLink to this node
Actions
Actions change elements: text, styles, classes, visibility, validation, navigation. Connect them to an Output node's Action pin (they act on that Output's target), to Action Event / Action If / Event Trigger Action outputs. One Action pin can feed many actions.
Action Event NodeFreeRuns the actions connected to it when an event happens on an element.
Inputs
- ActionAction
- Connect from an Output's Action pin (or another action container).
- ElementElement
- Optional. The element to listen to.
Outputs
- ActionAction
- The actions to run.
Settings
- Target
- The element to listen to when the Element pin is not connected. When neither is set, the Output's own target is used.
- Event type
click,change,input,focus,blur,keyup,keydown.
Example
Output (target menu-button) -> Action Event (click) -> Toggle Class open on the menu.
action-eventLink to this node
Action If NodeFreeRuns one group of actions when a condition is true and another when it is false.
Inputs
- ActionAction
- ConditionBoolean
- Or tick "Condition" in the node.
Outputs
- TrueAction
- Actions for true.
- FalseAction
- Actions for false.
Example
Regex (email valid) -> Action If: True -> Remove Class error, False -> Add Class error.
action-ifLink to this node
Event Trigger ActionFreeRuns its actions once every time an event fires.
Inputs
- ActionAction
- TriggerEvent
- Any event, also Event OR / AND.
Outputs
- ActionAction
- The actions to run.
Example
Timer (5000 ms) -> Event Trigger Action -> Show Notification "Still there?".
action-event-gateLink to this node
Set TextFreeReplaces the text of the element.
Inputs
- ActionAction
- ValueString
- The text (or type it).
action-set-textLink to this node
Set HTMLFreeReplaces the content of the element with HTML.
Inputs
- ActionAction
- ValueString
- The HTML (or type it).
- The HTML is sanitized: scripts, event handlers and dangerous links are removed.
action-set-htmlLink to this node
Set ValueFreeSets the value of a form field (or the text of any other element).
Inputs
- ActionAction
- ValueAny
action-set-valueLink to this node
Set AttributeFreeSets any HTML attribute.
Inputs
- ActionAction
- ValueAny
- The attribute value.
Settings
- Attribute name
- E.g.
href,title,data-state,aria-expanded.
action-set-attrLink to this node
Set StyleFreeSets a CSS property, or several at once.
Inputs
- ActionAction
- ValueCSS
- The value, e.g.
#ff0000or24px.
Settings
- CSS property
- E.g.
color,background-color,width.
- A value such as
color: red; display: block(from CSS Join or CSS Custom) sets every listed property.
action-set-styleLink to this node
Set VisibilityFreeShows, hides or toggles the element.
Inputs
- ActionAction
Settings
- Mode
- Show, Hide or Toggle.
- Toggle flips the state every time the action runs; use it with Action Event (click).
action-set-visibilityLink to this node
Enable ElementFreeEnables a form field or button.
Inputs
- ActionAction
action-enableLink to this node
Disable ElementFreeDisables a form field or button.
Inputs
- ActionAction
Example
Action If (form complete): True -> Enable Element, False -> Disable Element on the Submit button.
action-disableLink to this node
Focus ElementFreeMoves the keyboard focus to the element.
Inputs
- ActionAction
action-focusLink to this node
Scroll To ElementFreeSmoothly scrolls the page to the element.
Inputs
- ActionAction
action-scroll-toLink to this node
Show NotificationFreeShows a short message in the corner of the screen.
Inputs
- ActionAction
- ValueString
- Optional. The message (otherwise the text typed in the node).
Settings
- Message
- The text when the Value pin is not connected.
- Duration
- How long it stays, in milliseconds (default 3000).
Example
Multi Concat("Added ", count, " items") -> Value of Show Notification.
action-notifyLink to this node
RedirectFreeOpens a web address.
Inputs
- ActionAction
- ValueString
- The URL (or type it).
Settings
- Target
- Same tab or new tab.
action-redirectLink to this node
Trigger EventFreeSends a named custom event from the element.
Inputs
- ActionAction
- ValueString
- Optional. The event name (otherwise the name typed in the node).
Settings
- Event name
- E.g.
cart-updated.
- A Custom Event node with the same name reacts to it, in this graph or in another logic block on the page.
action-trigger-eventLink to this node
Add ClassFreeAdds a CSS class to the element.
Inputs
- ActionAction
- ValueString
- The class name (or type it).
action-add-classLink to this node
Remove ClassFreeRemoves a CSS class from the element.
Inputs
- ActionAction
- ValueString
- The class name (or type it).
action-remove-classLink to this node
Toggle ClassFreeAdds the class when it is missing, removes it when present.
Inputs
- ActionAction
- ValueString
- The class name (or type it).
action-toggle-classLink to this node
Set RequiredFreeMakes a form field required (or optional).
Inputs
- ActionAction
- ValueBoolean
- true = required (default).
Example
Checkbox "Company" -> Set Required on the VAT number field.
action-requiredLink to this node
Set MinFreeSets the minimum of a number field or slider.
Inputs
- ActionAction
- ValueNumber
- The minimum (or type it).
- NodeLogic Seekbars update their track immediately.
action-minLink to this node
Set MaxFreeSets the maximum of a number field or slider.
Inputs
- ActionAction
- ValueNumber
- The maximum (or type it).
Example
Stock from the database -> Set Max on the quantity slider.
action-maxLink to this node
Set LengthFreeSets the minimum and maximum number of characters of a text field.
Inputs
- ActionAction
- MinNumber
- MaxNumber
action-lengthLink to this node
Set RegexFreeSets a pattern a text field must match.
Inputs
- ActionAction
- ValueString
- The pattern, e.g.
[0-9]{5}.
- The browser shows its standard validation message when the visitor submits a non-matching value.
action-regexLink to this node
Debug
See what flows through your graph while you build it. Values pass through unchanged, so a Debug node can sit in the middle of a chain.
Console LogFreePrints a value to the browser console.
Inputs
- ValueAny
- What to show.
- TriggerEvent
- Optional. Print on every event instead of on every change.
Outputs
- ValueAny
- The same value, unchanged.
Settings
- Label
- Prefix that identifies the message.
- Audience
- Logged-in editors only (default) or Everyone.
- Without a Trigger a value is printed when it changes, not on every recalculation.
debug-console-logLink to this node
Console WarningFreeLike Console Log, as a console warning.
Inputs
- ValueAny
- TriggerEvent
- Optional.
Outputs
- ValueAny
debug-console-warnLink to this node
Message LogFreeShows a value in a small closable message on the page.
Inputs
- ValueAny
- TriggerEvent
- Optional.
Outputs
- ValueAny
Settings
- Label
- Audience
- Logged-in editors only (default) or Everyone.
- With the default audience your visitors never see it, so it can stay on a live page while you test.
debug-message-logLink to this node
Message WarningFreeLike Message Log, styled as a warning.
Inputs
- ValueAny
- TriggerEvent
- Optional.
Outputs
- ValueAny
debug-message-warnLink to this node
Memory
Variables that remember values between events: counters, running totals, lists that grow with every click. Every node names its variable; nodes with the same name (and scope) share it.
Read Number VariablePROReads a number variable.
Outputs
- ValueNumber
- The current value, or the default when nothing is stored yet.
Settings
- Variable name
- E.g.
clicks. - Default value
- Used before the first write, and by Reset.
- Persist
- Remember the value in this browser across page reloads (stored in the visitor's browser, never on the server).
- Scope
- "This widget only" (default) keeps the variable private to this logic block, so two copies of the same widget never mix their values. "Shared across widgets on this page" lets several logic blocks read and write one variable (e.g. a cart counter).
memory-read-numberLink to this node
Read String VariablePROReads a text variable.
Outputs
- ValueString
Settings
- Variable name
- Default value
- Persist
- Remember the value in this browser across page reloads (stored in the visitor's browser, never on the server).
- Scope
- "This widget only" (default) keeps the variable private to this logic block, so two copies of the same widget never mix their values. "Shared across widgets on this page" lets several logic blocks read and write one variable (e.g. a cart counter).
memory-read-stringLink to this node
Read Boolean VariablePROReads a true / false variable.
Outputs
- ValueBoolean
Settings
- Variable name
- Default value
- Persist
- Remember the value in this browser across page reloads (stored in the visitor's browser, never on the server).
- Scope
- "This widget only" (default) keeps the variable private to this logic block, so two copies of the same widget never mix their values. "Shared across widgets on this page" lets several logic blocks read and write one variable (e.g. a cart counter).
memory-read-booleanLink to this node
Write Number VariablePROStores a number.
Inputs
- ValueNumber
- The value to store.
- ResetBoolean
- Optional. true, or an event: put the variable back to its default.
Outputs
- ValueNumber
- The stored value.
Settings
- Variable name
- Scope
- "This widget only" (default) keeps the variable private to this logic block, so two copies of the same widget never mix their values. "Shared across widgets on this page" lets several logic blocks read and write one variable (e.g. a cart counter).
- A Read node with Persist on makes the written value survive reloads too.
memory-write-numberLink to this node
Write String VariablePROStores a text.
Inputs
- ValueString
- ResetBoolean
- Optional.
Outputs
- ValueString
Settings
- Variable name
- Scope
- "This widget only" (default) keeps the variable private to this logic block, so two copies of the same widget never mix their values. "Shared across widgets on this page" lets several logic blocks read and write one variable (e.g. a cart counter).
memory-write-stringLink to this node
Write Boolean VariablePROStores true or false.
Inputs
- ValueBoolean
- ResetBoolean
- Optional.
Outputs
- ValueBoolean
Settings
- Variable name
- Scope
- "This widget only" (default) keeps the variable private to this logic block, so two copies of the same widget never mix their values. "Shared across widgets on this page" lets several logic blocks read and write one variable (e.g. a cart counter).
memory-write-booleanLink to this node
Has VariablePROChecks whether a variable has been stored.
Outputs
- ValueBoolean
- true when it exists.
Settings
- Variable name
- Scope
- "This widget only" (default) keeps the variable private to this logic block, so two copies of the same widget never mix their values. "Shared across widgets on this page" lets several logic blocks read and write one variable (e.g. a cart counter).
Example
Has Variable visited -> If: show "Welcome back" or "Welcome".
memory-hasLink to this node
Delete VariablePRORemoves a variable.
Inputs
- TriggerEvent
- Optional. Delete when the event fires.
Outputs
- ValueAny
Settings
- Variable name
- Scope
- "This widget only" (default) keeps the variable private to this logic block, so two copies of the same widget never mix their values. "Shared across widgets on this page" lets several logic blocks read and write one variable (e.g. a cart counter).
memory-deleteLink to this node
Increment VariablePROAdds a step to a number variable each time an event fires.
Inputs
- TriggerEvent
- The event that counts (e.g. a click).
Outputs
- ValueNumber
- The new value.
Settings
- Variable name
- Step
- How much to add (default 1; use -1 to count down).
- Persist
- Remember the value in this browser across page reloads (stored in the visitor's browser, never on the server).
- Scope
- "This widget only" (default) keeps the variable private to this logic block, so two copies of the same widget never mix their values. "Shared across widgets on this page" lets several logic blocks read and write one variable (e.g. a cart counter).
Example
Event Element (click on "+") -> Increment qty (step 1); a second one on "-" with step -1; Read qty -> Output.
- Connect a Trigger: a graph recalculates on many page changes, and the variable should only move on your event.
memory-incrementLink to this node
Append to Array VariablePROAdds an item to a list variable.
Inputs
- ItemAny
- The item to add.
- TriggerEvent
- When to add it.
Outputs
- ValueArray
- The updated list.
Settings
- Variable name
- Persist
- Remember the value in this browser across page reloads (stored in the visitor's browser, never on the server).
- Scope
- "This widget only" (default) keeps the variable private to this logic block, so two copies of the same widget never mix their values. "Shared across widgets on this page" lets several logic blocks read and write one variable (e.g. a cart counter).
Example
Click on "Add to favourites" -> Append the product name to favourites.
memory-array-appendLink to this node
Remove from Array VariablePRORemoves an item from a list variable.
Inputs
- ItemAny
- The item to remove.
- TriggerEvent
- When to remove it.
Outputs
- ValueArray
- The updated list.
Settings
- Variable name
- Persist
- Remember the value in this browser across page reloads (stored in the visitor's browser, never on the server).
- Scope
- "This widget only" (default) keeps the variable private to this logic block, so two copies of the same widget never mix their values. "Shared across widgets on this page" lets several logic blocks read and write one variable (e.g. a cart counter).
memory-array-removeLink to this node
Read Array VariablePROReads a list variable.
Outputs
- ValueArray
- The list (empty when nothing is stored).
Settings
- Variable name
- Persist
- Remember the value in this browser across page reloads (stored in the visitor's browser, never on the server).
- Scope
- "This widget only" (default) keeps the variable private to this logic block, so two copies of the same widget never mix their values. "Shared across widgets on this page" lets several logic blocks read and write one variable (e.g. a cart counter).
memory-array-readLink to this node
Components
Building blocks for PRO components.
Image ComponentPROThe Image From Link node, listed here for building components: an image address, typed or computed.
Inputs
- URLString
Outputs
- ImageString
image-from-linkLink to this node
API
Read data from any web API (JSON) and use it in your graph.
API RequestPROCalls a web address and returns its JSON response.
Inputs
- URLString
- The address (or type it in the node).
- BodyZip
- Optional. Data to send (from JSON Body or Object Builder).
Outputs
- DataZip
- The parsed response.
Settings
- Method
GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS.- Headers
- JSON, e.g.
{"Authorization": "Bearer ..."}. - Timeout (ms)
- Default 15000.
Example
Concat("https://api.example.com/rates?base=", Select currency) -> API Request -> API Field rates.EUR -> Calculation.
- The request runs in the visitor's browser, so the API must allow requests from your site (CORS).
- Never put a secret key in the headers: everything in the graph is visible to visitors.
- When the URL changes, the request runs again.
api-requestLink to this node
API StatusPROThe state of a request: loading, success, error.
Inputs
- URLString
- Same URL as the API Request.
- BodyZip
- Optional.
Outputs
- StatusZip
- Unzip it into Ok, Status (HTTP code), Status Text, Error, Loading.
Settings
- Method / Headers / Timeout
- As in API Request.
Example
API Status -> Unzip (Loading) -> Action If -> Set Visibility (Show) on a spinner.
api-statusLink to this node
API FieldPROPicks one value out of a response by its path.
Inputs
- SourceZip
- The API response (or any object).
- PathString
- Optional. The path (or type it in the node).
Outputs
- ValueAny
- The value at the path, converted to the chosen type.
Settings
- Path
- Dots for fields, numbers for list positions:
data.items.0.price. - Type
- number, string, boolean, color, zip or case.
- Fallback
- Used when the path does not exist.
api-fieldLink to this node
API List MapperPROTurns a list inside a response into a list your graph and blocks can use.
Inputs
- Request DataZip
- The API response.
Outputs
- ArrayArray
- The mapped list.
Settings
- List path
- Where the list is, e.g.
data.products(empty = the response itself). - Item type
- number / string / boolean / color: take one field of each item. chart data: a Label and a Value field per item, ready for the NodeLogic Chart block. zip / case: map the fields of each item onto the inputs of one of your custom nodes.
Example
API Request (sales by month) -> API List Mapper (chart data, Label month, Value total) -> Output targeting a NodeLogic Chart block.
api-list-mapperLink to this node
JSON BodyPROTyped JSON, for example a request body.
Outputs
- ValueZip
- The parsed JSON (empty when the JSON is invalid).
Settings
- JSON
- The text, e.g.
{"query": "shoes", "limit": 10}. The node shows when the JSON is not valid.
json-bodyLink to this node
Objects
Values with named fields ("zip" values). Build them here; take them apart with Unzip.
Object BuilderPROBuilds an object from named inputs.
Inputs
- (one pin per key)Any
- Each key you add becomes an input pin.
Outputs
- ZipZip
- The object.
Settings
- Keys
- The field names, e.g.
name,email,qty.
Example
Form values -> Object Builder (name, email) -> Body of an API Request with method POST.
object-buildLink to this node
Chart Data ItemPROOne labelled value for the NodeLogic Chart block.
Inputs
- LabelString
- E.g. "January" (or type it).
- ValueNumber
- E.g. 1200 (or type it).
Outputs
- ZipZip
- A chart point.
Example
Array (item type Zip) -> Push(Chart Data Item "Rent", 900) -> Push(Chart Data Item "Food", 400) -> Output targeting a Chart block (pie).
chart-dataLink to this node
Forms & Email
React to form submissions and send emails from WordPress.
Form DataPROThe values of a submitted form, and the moment it was submitted.
Works with ordinary forms and with forms that send without reloading (Elementor Forms and similar AJAX forms). When the page reloads after submitting, the values are still available on the next page load. The form fields are detected automatically: connect Data to Unzip to get one pin per field.
Inputs
- ElementElement
- Optional. The form, or an element containing it (otherwise the form chosen in the node).
Outputs
- DataZip
- The submitted values.
- SubmittedEvent
- Fires on every submission.
Example
Form Data -> Unzip (name, email) + Submitted -> Send Email (Trigger = Submitted).
form-dataLink to this node
Send EmailPROSends an email through your WordPress site when an event fires.
Inputs
- RecipientString
- Email address (or type it).
- SubjectString
- (or type it)
- MessageString
- Plain text (or type it).
- TriggerEvent
- Required. One email per event.
Outputs
- StatusZip
- Unzip into Sending, Ok, Error.
- SendingEvent
- SentEvent
- FailedEvent
Settings
- Recipient / Subject / Message
- Fallback texts used when the pins are not connected.
- Allow anonymous visitors to trigger this
- Off by default: only logged-in users can send. Turn it on for public contact forms.
- Send test email
- Administrators can check right in the node whether the site is able to send mail (SMTP or PHP mail()).
Example
Form Data -> Multi Concat("New message from ", name) -> Subject; Submitted -> Trigger; Sent -> Event Processor -> Show Notification "Thank you!".
- The site's own mail settings deliver the email; if tests fail, configure an SMTP plugin.
- Repeated sending is rate limited to protect your mailbox.
send-emailLink to this node
Database
Read and write database tables, safely. You build a query from nodes: DB Connect -> DB Table -> (Fields, Join, Filter, Sort) -> DB Select or a write node. Only administrators can configure these nodes; the server checks every query against what the administrator saved.
DB ConnectPROChooses the database connection.
Outputs
- ConnectionConnection
Settings
- Connection
- The WordPress database, or an external connection added in NodeLogic Graph Builder -> Database. Credentials stay on the server.
- Database
- Which database of that connection.
db-connectLink to this node
DB TablePROChooses the table.
Inputs
- ConnectionConnection
- From DB Connect.
Outputs
- QueryQuery
- The start of a query.
Settings
- Table
- Only tables allowed in the Database admin page (Table access) are listed.
db-tableLink to this node
DB FieldsPROChooses which columns to read.
Inputs
- QueryQuery
Outputs
- QueryQuery
Settings
- Columns
- None checked = all columns.
db-fieldsLink to this node
DB JoinPROAdds columns from a related table.
Inputs
- QueryQuery
Outputs
- QueryQuery
Settings
- Join type
- INNER, LEFT or RIGHT JOIN.
- Table / columns
- The other table, the matching columns, and the columns to add.
db-joinLink to this node
DB FilterPROKeeps only the rows that match a condition (a WHERE clause).
Inputs
- QueryQuery
- ValueAny
- Optional. A value from the page (otherwise the fixed value in the node).
Outputs
- QueryQuery
Settings
- Column
- Operator
=,!=,>,>=,<,<=, contains, starts with, ends with, is empty, is not empty, in list (a,b,c).- Fixed value
- Used when the Value pin is not connected.
- A connected Value comes from the visitor's browser and can be anything, so filter on what visitors are allowed to see. Chain several DB Filter nodes for AND.
db-filterLink to this node
DB SortPROOrders the rows.
Inputs
- QueryQuery
Outputs
- QueryQuery
Settings
- Column
- Direction
- Ascending or Descending.
db-sortLink to this node
DB SelectPRORuns the query and returns the rows.
Inputs
- QueryQuery
- LimitNumber
- Optional (or type it, max 500, default 50).
- OffsetNumber
- Optional, for pages of results.
Outputs
- RowsArray
- All rows.
- First RowZip
- The first row: Unzip it to get one pin per column.
- CountNumber
- Number of rows.
- StatusZip
- Unzip into Ok, Loading, Error, Count.
Settings
- Who can run this
- Editors of this page (default), Any logged-in user, or Anyone (incl. anonymous visitors).
Example
DB Select (products) -> Rows -> For Each -> Unzip (name, price) -> Raw HTML (a card) -> Set Parent (the list container): one card per product.
db-selectLink to this node
DB InsertPROAdds a row when an event fires.
Inputs
- QueryQuery
- From DB Table.
- (one pin per column)Any
- The values to write.
- TriggerEvent
- Required. One insert per event.
Outputs
- StatusZip
- Unzip into Sending, Ok, Error, Affected Rows, Insert ID.
Settings
- Columns to fill
- Each checked column becomes an input pin.
- Who can run this
- As in DB Select.
Example
Form Data -> Unzip -> DB Insert (name, email) with Trigger = Submitted: save every submission.
db-insertLink to this node
DB UpdatePROChanges rows when an event fires.
Inputs
- QueryQuery
- Must include a DB Filter.
- (one pin per column)Any
- The new values.
- TriggerEvent
- Required.
Outputs
- StatusZip
Settings
- Columns to change
- Max rows it may change
- A safety limit (default 1).
- Who can run this
db-updateLink to this node
DB DeletePRODeletes rows when an event fires.
Inputs
- QueryQuery
- Must include a DB Filter.
- TriggerEvent
- Required.
Outputs
- StatusZip
Settings
- Max rows it may change
- A safety limit (default 1).
- Who can run this
- Update and Delete refuse to run without a DB Filter, so a whole table can never be changed by accident.
db-deleteLink to this node
No nodes or guides match your search.
PRO guides
NodeLogic PRO PRO
What the PRO add-on adds and where to find it.
NodeLogic PRO is an add-on to the free plugin. After you activate your license (NodeLogic Graph Builder > PRO License) the editor shows the PRO nodes in the same palette, and the menu gets:
- Templates: save graphs and reuse them on any page (Plus, Pro, Agency).
- Custom Nodes: build your own nodes and their visual layouts (Pro, Agency).
- Database: connections and table access for the Database nodes.
PRO also adds two blocks: NodeLogic Chart and NodeLogic Custom Element (Pro, Agency).
Graph Templates PRO
Build once, reuse on every page.
- Go to NodeLogic Graph Builder > Templates and click Add New Template.
- Type a name, build the graph in the editor that opens, and click Save.
- On any page, open the logic graph editor. In Graph Templates choose the template under Select template and click Import Template.
- The template becomes your working copy (Undo brings the previous one back). Adjust the element targets for this page and click Save Graph.
Use Export / Import on the Templates page to move templates between sites.
Custom Node Creator PRO
Package a graph into your own reusable node, step by step.
A custom node is a graph packed into a single node with its own inputs and outputs. Build a "VAT price" or "shipping cost" calculation once and drop it into any graph like a built-in node.
1. Create the node
- Go to NodeLogic Graph Builder > Custom Nodes and click Add New Custom Node.
- Type the name it will have in the palette (for example "Price with VAT"). The editor opens in custom node mode.
2. Define the inputs
Every Number Constant, String Constant, Boolean Constant, Color Node and Element Node in this graph becomes an input pin of your custom node:
- Select the constant and type its Input Label (the pin name, e.g. "Net price").
- The value you type into the constant is the default value of the input.
- Tick Hidden (use default value) for constants that are internal values, not inputs (e.g. a fixed VAT rate).
- Inputs are ordered by their position on the canvas, top to bottom: arrange the constants in the order you want the pins.
3. Build the logic
Connect the constants to any nodes, exactly as in a normal graph.
4. Define the outputs
Connect each result to an input pin of the Html Element node (the main node of the custom node graph). Every connected pin becomes an output of your custom node. Select Html Element and name them under Output Labels.
Number Constant (Net price)Calculation (* 1.23)Html Element (Gross price)
5. Save and use it
- Click Save.
- Open any logic graph: your node is in the palette folder Custom Nodes. Drag it in and connect it like any other node.
- On a placed custom node, Zip Output returns all results as one Zip value instead of separate pins. Split it anywhere with Unzip, or send it to a Custom Element block.
Manage custom nodes
- On the Custom Nodes page each node has Edit Node, Create UI Component / Edit Component (its visual layout, see the next guide) and delete options.
- Export / Import move your custom nodes to other sites as JSON.
Plan limits: Pro up to 80 custom nodes, Agency unlimited.
Custom Element block and UI components PRO
Give a custom node a visual layout and show it on the page.
- On Custom Nodes, choose Create UI Component for a custom node.
- Build its layout from Container, Field and Image items: drag them into place, nest containers, and bind each field to one of the node's Input fields or Output fields. Click Save layout.
- In the block editor add a NodeLogic Custom Element block and choose the Custom node in its settings; give it an Element ID.
- In your graph, send data to the block with an Output targeting that ID: one Zip value (e.g. a custom node with Zip Output) or a list of them.
With API List Mapper (item type zip) the items of an API response are mapped onto your custom node's fields, so a Custom Element block can show a whole list of products, posts or offers.
Charts PRO
The NodeLogic Chart block, fed by your graph.
- Add a NodeLogic Chart block, set its Chart ID and choose the Variant: bar, comparison, line, function, pie, donut, radar, scatter or heatmap.
- In the graph build a list of points: an Array of Chart Data Item values (Label + Value), or an API List Mapper with item type chart data.
- Connect the list to an Output targeting the Chart ID. The chart redraws whenever the data changes.
For other data shapes, set Data path, Label path and Value path in the chart settings.
Memory variables PRO
Counters, running totals and lists that remember.
A graph computes values from what is on the page right now. To remember something over time (how often a button was clicked, which products were added) use Memory variables.
- Variables have a name. Nodes using the same name (and scope) share the variable.
- Change variables on events: Increment Variable, Append to Array Variable and Delete Variable act once per Trigger event.
- Persist (on read nodes, Increment and the array nodes) keeps the value in the visitor's browser across page reloads.
- Scope "This widget only" is the default; choose "Shared across widgets on this page" to share a variable between logic blocks.
Event Element (click)Increment Variable (count)Output
APIs PRO
Bring data from web services into your page.
- Add an API Request with the URL (typed or computed, e.g. with Concat) and the method.
- Pick single values with API Field (path such as
data.price), or whole lists with API List Mapper. - Show loading and errors with API Status -> Unzip (Loading, Error).
API RequestAPI Field (data.price)Output
Requests are made by the visitor's browser: never put secret keys into a graph, and use APIs that allow requests from your site (CORS).
Database PRO
Connect, choose table access, and build queries from nodes.
Set up (administrators)
- Open NodeLogic Graph Builder > Database. The WordPress database is available right away. Use Add database connection for other MySQL databases; the password is stored encrypted and never sent back to the browser.
- Under Table access choose which tables graphs may use and click Save table access. WordPress user tables stay protected.
- Tip from the setup screen: give an external database user only SELECT / INSERT / UPDATE / DELETE rights.
Build a query
DB ConnectDB TableDB FilterDB SortDB Select
- Only administrators can configure database nodes. When an administrator saves the graph the queries are authorized for this page, and the server runs exactly those queries: visitors can only send values for pins you connected.
- Each query node has Who can run this: editors of the page (default), any logged-in user, or anyone.
- DB Select -> First Row -> Unzip gives one pin per column; Rows -> For Each -> Unzip handles every row.
- DB Insert / Update / Delete run only when their Trigger event fires. Update and Delete require a DB Filter and change at most Max rows it may change rows.
A copy of the site on another address (e.g. staging) disables external connections until an administrator confirms them.
Forms and email PRO
Use submitted form data and send emails.
- Add a Form Data node and choose the form (any form with an ID, including Elementor forms).
- Connect Data to Unzip: the form fields are detected and become pins.
- Add Send Email: connect Recipient, Subject and Message (e.g. with Multi Concat) and connect Submitted to its Trigger.
- Turn on Allow anonymous visitors to trigger this for public forms.
- Administrators can click Send test email in the node to check that the site can send mail.
Form DataUnzipMulti ConcatSend Email
Use the Sent and Failed events of Send Email with Show Notification to tell the visitor what happened.