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.

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)
  1. Install and activate NodeLogic Graph Builder.
  2. 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.
  3. Add the NodeLogic Graph Builder Logic block anywhere on the page. It holds the graph and is invisible to visitors.
  4. Click Edit Logic Graph to open the editor.
  5. Build your graph, then click Save Graph.
  6. 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
  1. Drag the NodeLogic Graph Builder widget (category NodeLogic Graph Builder) onto the page. It is invisible to visitors.
  2. Give the Elementor widgets you want to read or change a CSS ID: Advanced > CSS ID.
  3. In the NodeLogic widget panel click Open Logic Editor.
  4. Build your graph and click Save Graph, then Close Logic Editor.
  5. 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.

  1. Add a Number Input block for the quantity and a Label block for the total. Set their ID in the block settings, for example qty and total.
  2. Add the logic block and click Edit Logic Graph.
  3. From Elements & Values drag an Element Node onto the canvas and choose the quantity field.
  4. Drag a Number Constant and type the unit price, e.g. 19.90.
  5. From Node Types drag a Calculation Node. Connect the Element to its first input and the constant to the second; choose the operator *.
  6. From Outputs drag an Output Node. Choose total as its target and connect the Calculation result to its Value pin.
  7. Click Save Graph and update the page. Change the quantity on the page: the total follows.
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.

  1. Add a Checkbox block (company), a Text Input (vat) and a Label (info).
  2. In the editor, read the checkbox with an Element Node: its value is true or false.
  3. 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.
  4. Field: add a second Output targeting vat. From its Action pin connect an Action If Node and wire the checkbox into its Condition.
  5. From the Action If True pin connect Set Visibility (Show) and Set Required; from False connect Set Visibility (Hide).
  6. Save Graph and update the page.

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.

  1. Start from Tutorial 1 and add a button with the ID calc.
  2. From Events add an Event Element Node: target calc, event type click.
  3. 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.
  4. Connect the Event Processor to the Output targeting total.
  5. 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.
  6. Save Graph and update the page.

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
  1. Point at the container with an Element Reference and connect it to Get Children: you get the list of its child elements.
  2. Connect the list to a For Each. Its Item is "the current element", Index its position.
  3. 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.
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).

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 * 4 gives 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.
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 number 5 and the text "5" are different. Convert text from inputs with String To Number before comparing numbers.
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.

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.

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 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 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.
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.
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".

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, message for 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.

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.

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 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.
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.

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.

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.
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.
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.

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.
Boolean ConstantFreeA fixed true / false value.
Outputs
ValueBoolean
true or false.
String ConstantFreeA fixed piece of text.
Outputs
ValueString
The text.

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.

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).

MinFreeThe smaller of two numbers.
Inputs
ANumber
BNumber
Outputs
ValueNumber
The smaller one.
MaxFreeThe larger of two numbers.
Inputs
ANumber
BNumber
Outputs
ValueNumber
The larger one.
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.

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.
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 - 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 - 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".

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.

Count WordsPROThe number of words in a text.
Inputs
TextString
Outputs
WordsNumber
Words separated by spaces or line breaks.
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.
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 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.
Number To StringFreeTurns a number into text.
Inputs
ValueNumber
Outputs
TextString
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 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).

TrimFreeRemoves spaces at the start and end of a text.
Inputs
TextString
Outputs
ValueString
UppercaseFreeConverts text to CAPITAL letters.
Inputs
TextString
Outputs
ValueString
LowercaseFreeConverts text to small letters.
Inputs
TextString
Outputs
ValueString
  • Lowercase both sides before an Includes check to ignore capitalization.
IncludesFreeChecks whether a text contains another text.
Inputs
TextString
Where to search.
FindString
What to look for.
Outputs
ResultBoolean
true when found (case-sensitive).
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.

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".

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.

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.

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.

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 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 PaddingFreeBuilds a padding value from up to four sides.
Inputs
TopCSS
RightCSS
BottomCSS
LeftCSS
Outputs
CSSCSS
The connected sides joined with spaces.
CSS WidthFreePasses a width value on (for example from CSS Unit).
Inputs
ValueCSS
Outputs
CSSCSS
CSS HeightFreePasses a height value on.
Inputs
ValueCSS
Outputs
CSSCSS
CSS Font SizeFreePasses a font size value on.
Inputs
ValueCSS
Outputs
CSSCSS
CSS DisplayFreeA display value chosen from a list.
Outputs
CSSCSS
E.g. none or flex.
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 ColorFreeA color for CSS: the connected color, or the one picked in the node.
Inputs
ColorColor
Optional.
Outputs
CSSCSS
The color value.
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 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.

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.
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.

Pop OutFreeRemoves the last item of a list.
Inputs
ArrayArray
Outputs
ArrayArray
The list without its last item.
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.

Remove by IndexFreeRemoves the item at a position.
Inputs
ArrayArray
IndexNumber
Position, counted from 0.
Outputs
ArrayArray
The list without that item.
Replace by IndexFreeReplaces the item at a position.
Inputs
ArrayArray
IndexNumber
Position, counted from 0.
ValueAny
The new item.
Outputs
ArrayArray
The updated list.
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.
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.

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.
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.

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".

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).
ContainsFreeChecks whether a list contains a value.
Inputs
ArrayArray
ValueAny
Outputs
ResultBoolean
true when found.
LengthFreeThe number of items in a list.
Inputs
ArrayArray
Outputs
LengthNumber
MergeFreeCombines two lists.
Inputs
Array AArray
Array BArray
Outputs
ArrayArray
A followed by B.
Settings
Mode
concat keeps everything; union removes duplicates.
UniqueFreeRemoves duplicate items.
Inputs
ArrayArray
Outputs
ArrayArray
Each value once.

Image

Image addresses for the NodeLogic Image block or any image.

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.

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.
Hover EventFreeFires when the mouse enters or leaves an element.
Inputs
ElementElement
Optional.
Outputs
EventEvent
Settings
Mode
Mouse enter, Mouse leave, or Both.
Scroll EventFreeFires when an element is scrolled.
Inputs
ElementElement
Optional. The scrolling element.
Outputs
EventEvent
Page LoadFreeFires once, when the page has loaded.
Outputs
EventEvent
Example

Page Load -> Event Trigger Action -> Show Notification "Welcome!".

TimerFreeFires after a delay, or repeatedly at an interval.
Outputs
EventEvent
Settings
Interval (ms)
Milliseconds (at least 50).
Mode
interval repeats; timeout fires once.
Example

Timer (1000 ms, interval) -> Increment Variable seconds -> Output: a running clock.

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 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 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).
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.

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.

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 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.

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?".

Set TextFreeReplaces the text of the element.
Inputs
ActionAction
ValueString
The text (or type it).
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.
Set ValueFreeSets the value of a form field (or the text of any other element).
Inputs
ActionAction
ValueAny
Set AttributeFreeSets any HTML attribute.
Inputs
ActionAction
ValueAny
The attribute value.
Settings
Attribute name
E.g. href, title, data-state, aria-expanded.
Set StyleFreeSets a CSS property, or several at once.
Inputs
ActionAction
ValueCSS
The value, e.g. #ff0000 or 24px.
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.
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).
Enable ElementFreeEnables a form field or button.
Inputs
ActionAction
Disable ElementFreeDisables a form field or button.
Inputs
ActionAction
Example

Action If (form complete): True -> Enable Element, False -> Disable Element on the Submit button.

Focus ElementFreeMoves the keyboard focus to the element.
Inputs
ActionAction
Scroll To ElementFreeSmoothly scrolls the page to the element.
Inputs
ActionAction
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.

RedirectFreeOpens a web address.
Inputs
ActionAction
ValueString
The URL (or type it).
Settings
Target
Same tab or new tab.
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.
Add ClassFreeAdds a CSS class to the element.
Inputs
ActionAction
ValueString
The class name (or type it).
Remove ClassFreeRemoves a CSS class from the element.
Inputs
ActionAction
ValueString
The class name (or type it).
Toggle ClassFreeAdds the class when it is missing, removes it when present.
Inputs
ActionAction
ValueString
The class name (or type it).
Set RequiredFreeMakes a form field required (or optional).
Inputs
ActionAction
ValueBoolean
true = required (default).
Example

Checkbox "Company" -> Set Required on the VAT number field.

Set MinFreeSets the minimum of a number field or slider.
Inputs
ActionAction
ValueNumber
The minimum (or type it).
  • NodeLogic Seekbars update their track immediately.
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.

Set LengthFreeSets the minimum and maximum number of characters of a text field.
Inputs
ActionAction
MinNumber
MaxNumber
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.

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.
Console WarningFreeLike Console Log, as a console warning.
Inputs
ValueAny
TriggerEvent
Optional.
Outputs
ValueAny
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.
Message WarningFreeLike Message Log, styled as a warning.
Inputs
ValueAny
TriggerEvent
Optional.
Outputs
ValueAny

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).
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).
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).
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.
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).
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).
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".

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).
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.
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.

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).
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).

Components

Building blocks for PRO components.

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 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 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 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.

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.

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.

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).

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).

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.

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 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 FieldsPROChooses which columns to read.
Inputs
QueryQuery
Outputs
QueryQuery
Settings
Columns
None checked = all columns.
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 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 SortPROOrders the rows.
Inputs
QueryQuery
Outputs
QueryQuery
Settings
Column
Direction
Ascending or Descending.
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 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 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 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.

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.

  1. Go to NodeLogic Graph Builder > Templates and click Add New Template.
  2. Type a name, build the graph in the editor that opens, and click Save.
  3. On any page, open the logic graph editor. In Graph Templates choose the template under Select template and click Import Template.
  4. 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
  1. Go to NodeLogic Graph Builder > Custom Nodes and click Add New Custom Node.
  2. 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.

5. Save and use it
  1. Click Save.
  2. Open any logic graph: your node is in the palette folder Custom Nodes. Drag it in and connect it like any other node.
  3. 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.

  1. On Custom Nodes, choose Create UI Component for a custom node.
  2. 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.
  3. In the block editor add a NodeLogic Custom Element block and choose the Custom node in its settings; give it an Element ID.
  4. 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.

  1. Add a NodeLogic Chart block, set its Chart ID and choose the Variant: bar, comparison, line, function, pie, donut, radar, scatter or heatmap.
  2. 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.
  3. 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.

APIs PRO

Bring data from web services into your page.

  1. Add an API Request with the URL (typed or computed, e.g. with Concat) and the method.
  2. Pick single values with API Field (path such as data.price), or whole lists with API List Mapper.
  3. Show loading and errors with API Status -> Unzip (Loading, Error).

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)
  1. 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.
  2. Under Table access choose which tables graphs may use and click Save table access. WordPress user tables stay protected.
  3. Tip from the setup screen: give an external database user only SELECT / INSERT / UPDATE / DELETE rights.
Build a query
  • 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.

  1. Add a Form Data node and choose the form (any form with an ID, including Elementor forms).
  2. Connect Data to Unzip: the form fields are detected and become pins.
  3. Add Send Email: connect Recipient, Subject and Message (e.g. with Multi Concat) and connect Submitted to its Trigger.
  4. Turn on Allow anonymous visitors to trigger this for public forms.
  5. Administrators can click Send test email in the node to check that the site can send mail.

Use the Sent and Failed events of Send Email with Show Notification to tell the visitor what happened.