CEL functions
Every built-in CEL function, generated from the engine's catalog.
This page is generated from GET {management}/projects/{project}/cel/functions on a host with no AddCelFunction registrations, so it lists exactly the functions every Alvo host knows. A name with several overloads has one row per overload.
A ? after a parameter type means the function receives a null argument; without it, a null argument makes the whole call null and the function is not invoked. A ? after the return type means the call may yield null even when every argument is present.
Profiles are the descriptor slots a call compiles in: Condition (a hook condition) and Mutate (a before-hook mutate value). Rules, computed fields and access levels admit no function call.
See CEL in Alvo for the profiles and the language subset, and Custom CEL functions to register your own.
| Function | Signature | Returns | Profiles | Summary |
|---|---|---|---|---|
contains | contains(text: String, search: String) | Bool | Condition, Mutate | Whether text holds search anywhere, comparing characters exactly; an empty search is always held. |
endsWith | endsWith(text: String, suffix: String) | Bool | Condition, Mutate | Whether text ends with suffix, comparing characters exactly; every text ends with an empty suffix. |
int | int(value: Decimal) | Int | Condition, Mutate | The value as a whole number: a decimal cut toward zero (2.9 is 2), or a text of digits with an optional sign; anything else fails the write. |
int | int(value: String) | Int | Condition, Mutate | The value as a whole number: a decimal cut toward zero (2.9 is 2), or a text of digits with an optional sign; anything else fails the write. |
lowerAscii | lowerAscii(text: String) | String | Condition, Mutate | Folds A-Z to a-z and changes nothing else: accented and other non-ASCII letters stay as they are. |
math.abs | math.abs(x: Int) | Int | Condition, Mutate | The absolute value of x, of the same numeric type. |
math.abs | math.abs(x: Decimal) | Decimal | Condition, Mutate | The absolute value of x, of the same numeric type. |
math.ceil | math.ceil(x: Int) | Int | Condition, Mutate | The smallest whole number not below x (1.2 is 2, -1.5 is -1), of the same numeric type. |
math.ceil | math.ceil(x: Decimal) | Decimal | Condition, Mutate | The smallest whole number not below x (1.2 is 2, -1.5 is -1), of the same numeric type. |
math.floor | math.floor(x: Int) | Int | Condition, Mutate | The largest whole number not above x (1.8 is 1, -1.2 is -2), of the same numeric type. |
math.floor | math.floor(x: Decimal) | Decimal | Condition, Mutate | The largest whole number not above x (1.8 is 1, -1.2 is -2), of the same numeric type. |
math.greatest | math.greatest(a: Int, b: Int) | Int | Condition, Mutate | The larger of a and b; a when they are equal. |
math.greatest | math.greatest(a: Decimal, b: Decimal) | Decimal | Condition, Mutate | The larger of a and b; a when they are equal. |
math.least | math.least(a: Int, b: Int) | Int | Condition, Mutate | The smaller of a and b; a when they are equal. |
math.least | math.least(a: Decimal, b: Decimal) | Decimal | Condition, Mutate | The smaller of a and b; a when they are equal. |
math.round | math.round(x: Int) | Int | Condition, Mutate | Rounds x to a whole number, halves away from zero (2.5 is 3, -2.5 is -3), of the same numeric type. |
math.round | math.round(x: Decimal) | Decimal | Condition, Mutate | Rounds x to a whole number, halves away from zero (2.5 is 3, -2.5 is -3), of the same numeric type. |
math.round | math.round(x: Decimal, digits: Int) | Decimal | Condition, Mutate | Rounds x to digits places after the point, halves away from zero (2.345 to 2 places is 2.35); digits is from 0 to 28. |
now | now() | Timestamp | Mutate | The instant this write is stamped with — the same one its audit columns get, never a clock read. |
replace | replace(text: String, search: String, replacement: String) | String | Condition, Mutate | Replaces every occurrence of search in text with replacement, left to right, comparing characters exactly; an empty search changes nothing. |
size | size(text: String) | Int | Condition, Mutate | The number of Unicode code points in text. |
startsWith | startsWith(text: String, prefix: String) | Bool | Condition, Mutate | Whether text begins with prefix, comparing characters exactly; every text begins with an empty prefix. |
string | string(value: Int) | String | Condition, Mutate | The value as text: digits for a number (no trailing zeros), true or false, a lower-case id, or an RFC 3339 instant in UTC. |
string | string(value: Decimal) | String | Condition, Mutate | The value as text: digits for a number (no trailing zeros), true or false, a lower-case id, or an RFC 3339 instant in UTC. |
string | string(value: Bool) | String | Condition, Mutate | The value as text: digits for a number (no trailing zeros), true or false, a lower-case id, or an RFC 3339 instant in UTC. |
string | string(value: Uuid) | String | Condition, Mutate | The value as text: digits for a number (no trailing zeros), true or false, a lower-case id, or an RFC 3339 instant in UTC. |
string | string(value: Timestamp) | String | Condition, Mutate | The value as text: digits for a number (no trailing zeros), true or false, a lower-case id, or an RFC 3339 instant in UTC. |
substring | substring(text: String, start: Int) | String | Condition, Mutate | The code points of text from start (counted from 0) up to, not including, end — or to the end of text; a position outside text fails the write. |
substring | substring(text: String, start: Int, end: Int) | String | Condition, Mutate | The code points of text from start (counted from 0) up to, not including, end — or to the end of text; a position outside text fails the write. |
timestamp | timestamp(text: String) | Timestamp | Condition, Mutate | The text read as an RFC 3339 instant, such as 2026-10-05T12:00:00Z or 2026-10-05T14:00:00+02:00; anything else fails the write. |
trim | trim(text: String) | String | Condition, Mutate | Removes spaces, tabs, line feeds and carriage returns from both ends of text; nothing else counts as whitespace. |
upperAscii | upperAscii(text: String) | String | Condition, Mutate | Folds a-z to A-Z and changes nothing else: accented and other non-ASCII letters stay as they are. |