FEEL Reference

FEEL (Friendly Enough Expression Language) is the expression language used in Conduit for gateway conditions, script tasks, decision table input entries, and decision table output entries.

Input Entry Syntax (Unary Tests)

Input cells in decision tables use unary tests — each cell is tested against the column’s input value. Only a subset of FEEL is allowed here.

EntryMatches when
-Any value (always passes)
(blank)Same as -
42Value equals 42
> nGreater than n
< nLess than n
>= nGreater than or equal to n
<= nLess than or equal to n
!= nNot equal to n
[a..b]Inclusive range: a ≤ x ≤ b
(a..b)Exclusive range: a < x < b
[a..b)Half-open: a ≤ x < b
(a..b]Half-open: a < x ≤ b
"string"String equals “string” (exact)
"x","y"Value is any of x or y (OR)
not("x","y")Value is neither x nor y
trueBoolean true
falseBoolean false
nullValue is null
date("2024-01-01")Date literal

Operator Reference (Gateway Conditions & Script Tasks)

Full FEEL is available in gateway conditions, script tasks, and output entries.

Comparison operators

OperatorMeaning
=Equality (not ==)
!=Inequality
<, >Less than, greater than
<=, >=Less than or equal, greater than or equal

Boolean operators

OperatorExample
andamount > 0 and status = "active"
ortier = "gold" or tier = "platinum"
not(expr)not(status = "closed")

Context literals (Script Task output)

{ fee: amount * 0.05, tier: if amount > 1000 then "premium" else "standard" }

Each key is written as a separate process variable.

Conditionals

if amount > 1000 then "premium" else "standard"

Built-in Functions

Numeric

FunctionDescription
abs(n)Absolute value
floor(n)Round down to nearest integer
ceiling(n)Round up to nearest integer
decimal(n, scale)Round n to scale decimal places
modulo(n, d)Remainder of n ÷ d
sqrt(n)Square root

String

FunctionDescription
string length(s)Length of string
upper case(s)Convert to uppercase
lower case(s)Convert to lowercase
substring(s, start)Substring from position (1-based)
substring(s, start, len)Substring with length
contains(s, sub)True if s contains sub
starts with(s, pre)True if s starts with pre
ends with(s, suf)True if s ends with suf
matches(s, pattern)True if s matches regex pattern
replace(s, pattern, rep)Replace regex matches
string join(list)Join list elements into a string
string join(list, sep)Join with separator

List

FunctionDescription
count(list)Number of elements
min(list)Minimum value
max(list)Maximum value
sum(list)Sum of all values
mean(list)Arithmetic mean
list contains(list, item)True if list contains item
append(list, item)New list with item appended
flatten(list)Flatten nested lists one level
distinct values(list)Remove duplicates
reverse(list)Reversed list
sort(list, fn)Sort with comparator function
sublist(list, start)Sublist from position
sublist(list, start, len)Sublist with length
union(list1, list2)Merge two lists, deduplicated

Date and Time

FunctionDescription
now()Current date and time
today()Current date
date("2024-01-01")Parse date literal
time("12:00:00")Parse time literal
date and time("2024-01-01T12:00:00Z")Parse datetime literal
duration("P1D")Parse ISO 8601 duration

Context

FunctionDescription
get value(context, key)Get a value from a context by key
get entries(context)Get list of { key, value } pairs
context(entries)Build a context from a list of key-value pairs

Conversion

FunctionDescription
string(value)Convert to string
number(s)Parse string to number
not(bool)Negate a boolean

Examples

-- Gateway condition: route high-value orders
amount > 1000 and tier = "gold"

-- Script task: enrich order
{ fee: amount * 0.05, tier: if amount > 1000 then "premium" else "standard", itemCount: count(items) }

-- Decision table output: compute label
if score >= 90 then "excellent" else if score >= 70 then "good" else "needs improvement"

-- String manipulation
upper case(substring(customerId, 1, 3))

-- Date comparison
date(orderDate) < today()