FEEL Function Reference

@bpmnkit/feel is a zero-dependency FEEL (Friendly Enough Expression Language) parser and evaluator — the expression language DMN decision tables and BPMN gateway conditions use. All 87 built-in functions below are implemented and callable today.

Conversion

date(...)
Parses a string, or year/month/day numbers, into a FEEL date.
date("2026-07-07")
date and time(...)
Combines a date and a time (or parses an ISO date-time string) into a date-time value.
time(...)
Parses a string, or hour/minute/second numbers, into a FEEL time.
time("14:30:00")
number(...)
Parses a string into a number, with an optional decimal separator argument.
string(...)
Converts any value to its string representation.
duration(...)
Parses an ISO 8601 duration string into a day-time or years-months duration.
years and months duration(...)
Computes the years/months duration between two dates.
context(...)
Builds a context from a list of `{key, value}` entries.

Boolean & type checks

not(...)
Logical negation of a boolean.
is defined(...)
True if the given value is not null/undefined — the standard way to guard optional variables.

String

substring(...)
Returns a substring starting at a 1-based position, with an optional length.
substring("BPMN Kit", 1, 4) = "BPMN"
string length(...)
Number of characters in a string.
upper case(...)
Converts a string to upper case.
lower case(...)
Converts a string to lower case.
substring before(...)
Returns the part of a string before the first occurrence of a match.
substring after(...)
Returns the part of a string after the first occurrence of a match.
replace(...)
Regular-expression replace, following the XQuery/XPath `fn:replace` semantics.
contains(...)
True if a string contains a given substring.
starts with(...)
True if a string starts with a given prefix.
ends with(...)
True if a string ends with a given suffix.
matches(...)
True if a string matches a regular expression.
split(...)
Splits a string on a regular-expression delimiter into a list of strings.
string join(...)
Joins a list of strings with an optional delimiter.

List

list contains(...)
True if a list contains a given element.
count(...)
Number of elements in a list.
min(...)
Smallest value in a list of comparable values.
max(...)
Largest value in a list of comparable values.
sum(...)
Sum of a list of numbers.
mean(...)
Arithmetic mean (average) of a list of numbers.
median(...)
Median of a list of numbers.
stddev(...)
Sample standard deviation of a list of numbers.
mode(...)
Most frequently occurring value(s) in a list.
product(...)
Product of a list of numbers.
all(...)
True if every element of a boolean list is true.
any(...)
True if at least one element of a boolean list is true.
sublist(...)
Returns a slice of a list starting at a 1-based position.
append(...)
Appends one or more elements to the end of a list.
concatenate(...)
Concatenates two or more lists into one.
insert before(...)
Inserts an element into a list at a given 1-based position.
remove(...)
Returns a list with the element at a given position removed.
reverse(...)
Reverses the order of a list.
index of(...)
Returns the 1-based positions where a value occurs in a list.
union(...)
Union of two or more lists, removing duplicates.
distinct values(...)
Removes duplicate elements from a list, preserving order.
flatten(...)
Flattens nested lists into a single flat list.
sort(...)
Sorts a list, optionally with a custom comparator function.

Numeric

decimal(...)
Rounds a number to a given number of decimal places.
floor(...)
Rounds a number down to the nearest integer.
ceiling(...)
Rounds a number up to the nearest integer.
round up(...)
Rounds away from zero to a given precision.
round down(...)
Rounds toward zero to a given precision.
round half up(...)
Rounds to nearest, ties away from zero, to a given precision.
round half down(...)
Rounds to nearest, ties toward zero, to a given precision.
abs(...)
Absolute value of a number.
modulo(...)
Remainder of dividing one number by another.
sqrt(...)
Square root of a number.
log(...)
Natural logarithm of a number.
exp(...)
Euler's number e raised to the given power.
odd(...)
True if an integer is odd.
even(...)
True if an integer is even.
random number(...)
Returns a random number in the range [0, 1).

Date & time components

today(...)
The current date.
now(...)
The current date-time.
day of week(...)
Name of the weekday for a given date.
day of year(...)
Ordinal day of the year (1–366) for a given date.
month of year(...)
Name of the month for a given date.
week of year(...)
ISO week number for a given date.
last day of month(...)
The last day of the month containing a given date.

Range & interval (Allen's interval algebra)

before(...)
True if one value/range ends before another starts.
after(...)
True if one value/range starts after another ends.
meets(...)
True if one range ends exactly where another begins.
met by(...)
True if one range begins exactly where another ends.
overlaps(...)
True if two ranges overlap.
overlaps before(...)
True if a range starts before, and overlaps the start of, another.
overlaps after(...)
True if a range ends after, and overlaps the end of, another.
finishes(...)
True if a range ends at the same point as another, starting later.
finished by(...)
True if a range ends at the same point as another, starting earlier.
includes(...)
True if a range fully contains another range or value.
during(...)
True if a value or range falls entirely within another range.
starts(...)
True if a range starts at the same point as another, ending earlier.
started by(...)
True if a range starts at the same point as another, ending later.
coincides(...)
True if two ranges (or values) are exactly equal.

Context

context merge(...)
Merges a list of contexts into one, later keys overriding earlier ones.
context put(...)
Returns a new context with a key set to a given value.
get entries(...)
Returns a context's `{key, value}` pairs as a list.
get value(...)
Looks up a value in a context by key.
get or else(...)
Returns a value, or a fallback if the value is null.
Evaluate FEEL expressions in TypeScript with @bpmnkit/feel, or use them directly in gateway conditions and DMN decision tables built with @bpmnkit/core. See the package reference.