CEL is a specification and binary representation for a common expression language designed to enable interoperability across different applications and programming languages.
CEL addresses the need for a shared expression evaluation semantics in systems where multiple applications must reason about policies and data consistently. The language implements a non-Turing-complete, mutation-free design that evaluates in linear time, making it orders of magnitude faster than sandboxed JavaScript while remaining safe for untrusted input. The specification defines both a textual syntax similar to C/C++/Java/JavaScript and a binary representation via protocol buffers, allowing expressions to be compiled ahead of time in a control plane or just before evaluation in a data plane. The language is designed for embedding, with extensibility through a context mechanism that allows host applications to provide custom functions and typed variables, typically as protobuf messages.
CEL suits organizations with complex infrastructure needing common tooling for security policies and cross-platform protocol definitions. It is particularly valuable where expressions must persist or cross process boundaries, since the specification maintains canonical and wire-compatible protocol buffer definitions for ASTs. The project is most appropriate for teams building platforms that need to accept user-defined policies or conditions without the performance overhead or security complexity of general-purpose scripting languages. The specification explicitly prioritizes being small, fast, and developer-friendly, with syntax approachable to developers familiar with mainstream languages.
The project receives most of its issue reports from outside users rather than the core team, reflecting a substantial base of real-world adopters. Responses to issues and pull requests typically arrive within one to two weeks.