At a glance#
Every function, macro, and operator available in all compliant CEL runtimes.
Functions#
String#
| Function | Description | Example |
|---|---|---|
s.contains(sub) |
True if s contains sub |
"alice@ex.com".contains("@") → true |
s.startsWith(prefix) |
True if s starts with prefix |
"Alice".startsWith("Al") → true |
s.endsWith(suffix) |
True if s ends with suffix |
"alice@ex.com".endsWith(".com") → true |
s.matches(regex) |
True if s matches RE2 pattern |
"hello".matches("^h.*o$") → true |
See Strings and numbers for contextual examples, Strings and bytes for full reference.
Size#
| Function | Types | Example |
|---|---|---|
size(x) |
string, bytes, list, map | size("hello") → 5 |
x.size() |
string, bytes, list, map | [1, 2, 3].size() → 3 |
Timestamp#
All timestamp functions accept an optional timezone string argument.
| Function | Description | Example |
|---|---|---|
t.getFullYear() |
Year | t.getFullYear() → 2025 |
t.getMonth() |
Month (0-11) | t.getMonth() → 11 (December) |
t.getDate() |
Day of month (1-31) | t.getDate() → 14 |
t.getDayOfMonth() |
Day of month (0-30) | t.getDayOfMonth() → 13 |
t.getDayOfWeek() |
Day of week (0-6, 0 = Sunday) | t.getDayOfWeek() → 0 |
t.getDayOfYear() |
Day of year (0-365) | t.getDayOfYear() → 347 |
t.getHours() |
Hour (0-23) | t.getHours() → 18 |
t.getMinutes() |
Minute (0-59) | t.getMinutes() → 30 |
t.getSeconds() |
Second (0-59) | t.getSeconds() → 0 |
t.getMilliseconds() |
Millisecond (0-999) | t.getMilliseconds() → 0 |
See Timestamps and durations for contextual examples, Time for full reference.
Duration#
| Function | Description | Example |
|---|---|---|
d.getHours() |
Hours component | duration("1h30m").getHours() → 1 |
d.getMinutes() |
Minutes component (0-59) | duration("1h30m").getMinutes() → 30 |
d.getSeconds() |
Seconds component (0-59) | duration("90s").getSeconds() → 30 |
d.getMilliseconds() |
Milliseconds component (0-999) | duration("1.5s").getMilliseconds() → 500 |
Type conversion#
| Function | Input types | Example |
|---|---|---|
bool(x) |
bool, string | bool("true") → true |
int(x) |
int, uint, double, string, timestamp, duration | int("42") → 42 |
uint(x) |
int, uint, double, string | uint(42) → 42u |
double(x) |
int, uint, double, string | double("3.14") → 3.14 |
string(x) |
int, uint, double, string, bytes, timestamp, duration | string(42) → "42" |
bytes(x) |
string, bytes | bytes("hello") → b"hello" |
timestamp(x) |
string, timestamp | timestamp("2025-01-01T00:00:00Z") |
duration(x) |
string, duration | duration("1h30m") |
dyn(x) |
any | Erase static type |
type(x) |
any | type(42) → int |
See Type conversions and Type introspection for full reference.
Macros#
| Macro | Signature | Description |
|---|---|---|
has(x.f) |
has(field) -> bool |
True if field is set |
e.all(x, p) |
list.all(var, predicate) -> bool |
True if all elements satisfy predicate |
e.exists(x, p) |
list.exists(var, predicate) -> bool |
True if any element satisfies predicate |
e.exists_one(x, p) |
list.exists_one(var, predicate) -> bool |
True if exactly one element satisfies predicate |
e.filter(x, p) |
list.filter(var, predicate) -> list |
Elements satisfying predicate |
e.map(x, t) |
list.map(var, transform) -> list |
Transform each element |
e.map(x, p, t) |
list.map(var, predicate, transform) -> list |
Filter then transform |
See Collections and Transforming data for contextual examples.
Operators#
Arithmetic#
| Operator | Types | Example |
|---|---|---|
-x |
int, double | -5 → -5 |
x + y |
int, uint, double, string, bytes, list, timestamp/duration | 1 + 2 → 3 |
x - y |
int, uint, double, timestamp/duration | 5 - 3 → 2 |
x * y |
int, uint, double | 3 * 4 → 12 |
x / y |
int, uint, double | 10 / 3 → 3 |
x % y |
int, uint | 10 % 3 → 1 |
See Arithmetic operators for full reference.
Comparison#
| Operator | Types | Description |
|---|---|---|
x == y |
any | Equality |
x != y |
any | Inequality |
x < y |
int, uint, double, string, bytes, timestamp, duration | Less than |
x <= y |
int, uint, double, string, bytes, timestamp, duration | Less than or equal |
x > y |
int, uint, double, string, bytes, timestamp, duration | Greater than |
x >= y |
int, uint, double, string, bytes, timestamp, duration | Greater than or equal |
See Strings and numbers for contextual examples, Comparison operators for full reference.
Logical#
| Operator | Types | Description |
|---|---|---|
!x |
bool | Logical NOT |
x && y |
bool | Logical AND (short-circuits) |
x || y |
bool | Logical OR (short-circuits) |
x ? y : z |
condition: bool, branches: any | Conditional |
See Logic and conditions for contextual examples, Logical operators and Conditional operator for full reference.
Membership#
| Operator | Types | Description |
|---|---|---|
x in y |
list, map | Membership test |
x[y] |
list, map, message | Index or field access |
x.y |
message, map | Field or key access |
See Collections for contextual examples, Lists and Maps for full reference.
See also#
- CEL Specification - Full language definition