Built-in operators
Crosswalk ships with 48 operators. Every one is included by default; Your own operators shows how to choose a subset or add your own.
An operator's inputs are filled in the order you link them, and any input can be a constant typed into the inspector instead. When an input has no value, most operators produce nothing too, and the target field is left out. See How a map runs.
Text
| Operator | Id | Inputs | What it does |
|---|---|---|---|
ab+ Concatenate | text.concat | 1 or more | Joins its inputs into one piece of text, in input order. |
AB Uppercase | text.upper | 1 | The text in capitals. |
ab Lowercase | text.lower | 1 | The text in lower case. |
⎵ Trim | text.trim | 1 | The text without spaces at either end. |
len Length | text.length | 1 | How many characters the text has. |
◧ Left | text.left | text, count | The first count characters. |
◨ Right | text.right | text, count | The last count characters. |
sub Substring | text.substring | text, start, length (optional) | Takes length characters from a 0-based start, or the rest of the text when length is left out. |
⇄ Replace | text.replace | text, find, replace with | Replaces every occurrence of find with replace with. An empty find leaves the text as it is. |
Math
| Operator | Id | Inputs | What it does |
|---|---|---|---|
+ Add | math.add | 2 or more | The sum of its inputs. |
− Subtract | math.subtract | 2 | The first input minus the second. |
× Multiply | math.multiply | 2 or more | The product of its inputs. |
÷ Divide | math.divide | 2 | The first input divided by the second. Dividing by zero is an error. |
% Remainder | math.modulo | 2 | The remainder when the first input is divided by the second. |
≈ Round | math.round | value, decimals (optional) | Rounds to decimals places (0 if left out), with halves rounded away from zero: 2.5 gives 3 and -2.5 gives -3. |
|x| Absolute | math.abs | 1 | The number without its sign. |
min Smallest | math.min | 2 or more | The smallest of its inputs. |
max Largest | math.max | 2 or more | The largest of its inputs. |
Logic
| Operator | Id | Inputs | What it does |
|---|---|---|---|
= Equals | logic.equal | 2 | True when the inputs are equal: as numbers if both are numeric, otherwise as text. |
≠ Not equal | logic.notEqual | 2 | True when the inputs differ. |
> Greater than | logic.greaterThan | 2 | True when the first input is greater than the second. |
≥ At least | logic.greaterOrEqual | 2 | True when the first input is at least the second. |
< Less than | logic.lessThan | 2 | True when the first input is less than the second. |
≤ At most | logic.lessOrEqual | 2 | True when the first input is at most the second. |
∧ And | logic.and | 2 or more | True when every input is true. |
∨ Or | logic.or | 2 or more | True when any input is true. |
! Not | logic.not | 1 | The opposite of its input. |
1? Is a number | logic.isNumber | 1 | True when the input is a number, or text holding a plain decimal number such as "12.5" (not "0x10"). |
∃ Exists | logic.exists | 1 | True when the input has a value. null counts as a value. |
Date
| Operator | Id | Inputs | What it does |
|---|---|---|---|
now Today | date.today | 0 | Today's date, in UTC, such as 2026-03-04. |
rd Read date | date.parse | text, pattern | Reads a date written another way, such as 04/03/2026 with the pattern dd/MM/yyyy, as 2026-03-04. The pattern uses yyyy, yy, MMM, MM, M, dd, d, HH, mm and ss; anything else must match exactly. |
fmt Format date | date.format | date, pattern | Writes a date with a pattern, such as dd MMM yyyy for 04 Mar 2026. The pattern uses yyyy, yy, MMM, MM, M, dd, d, HH, mm and ss. |
+dt Add to date | date.add | date, amount, unit | Adds whole days, months or years to a date; a negative amount goes back. The 31st plus a month stops at the end of a shorter month. |
Δdt Date difference | date.diff | from, to, unit | Whole days, months or years from one date to another, such as an age in years from a date of birth to today. |
dt. Part of date | date.part | date, part | One part of a date as a number: year, month, day, weekday (Monday is 1), hour, minute or second. |
Convert
| Operator | Id | Inputs | What it does |
|---|---|---|---|
→1 To number | convert.toNumber | 1 | Reads the input as a number. Text that isn't a plain decimal number is an error. |
→a To text | convert.toText | 1 | Reads the input as text. |
→? To true/false | convert.toBoolean | 1 | Reads true, false, their text, or a number (0 is false) as true or false. |
tbl Look up | convert.lookup | value, table, if not found (optional) | Finds the value in a table, such as { "M": "Male" }, and gives what it maps to. With no match it gives if not found, or leaves the field out. |
Flow
| Operator | Id | Inputs | What it does |
|---|---|---|---|
⇥ Only if | flow.onlyIf | condition, value | Passes the value through when the condition is true; otherwise the output is left out. |
?: If / else | flow.ifElse | condition, then, else | The then input when the condition is true, otherwise the else input. |
?? First of | flow.firstOf | 1 or more | The first input that has a value and isn't null. |
Aggregate
| Operator | Id | Inputs | What it does |
|---|---|---|---|
Σ Sum | aggregate.sum | 1 | Adds up the input across every item. |
# Count | aggregate.count | 1 | How many items have a value for the input. |
x̄ Average | aggregate.average | 1 | The mean of the input across every item. |
↓ Minimum | aggregate.min | 1 | The smallest value of the input across every item. |
↑ Maximum | aggregate.max | 1 | The largest value of the input across every item. |
Σab Join | aggregate.join | 1 | Joins the input from every item into one piece of text. |
Aggregate operators take a scope: the repeating record they aggregate over, such as PhoneCalls[]. In the editor, drag the record onto the operator to set it.