Epsilon Object Language

EOL is an imperative programming language for creating, querying and modifying EMF models. You can think of it as a mixture of Javascript and OCL, combining the best of both worlds. As such, it provides all the usual imperative features found in Javascript (e.g. statement sequencing, variables, for and while loops, if branches etc.) and all the nice features of OCL such as those handy collection querying functions (e.g. Sequence{1..5}.select(x|x>3)). In addition, these first-order operations can also be executed in parallel (e.g. Sequence{1..5}.parallelSelect(x|x>3)).

Try EOL in your browser » Learn EOL through a game »


  • Support for simultaneously accessing/modifying many models of (potentially) different metamodels
  • All the usual programming constructs (while and for loops, statement sequencing, variables etc.)
  • Support for those convenient first-order logic OCL operations (select, reject, collect etc.)
  • Ability to create and call methods of Java objects
  • Support for dynamically attaching operations to existing meta-classes and types at runtime
  • Support for cached operations
  • Support for extended properties
  • Support for user interaction
  • Ability to create reusable libraries of operations and import them from different Epsilon (not only EOL) modules

Examples and Screencasts


Chapter 4 of the Epsilon book provides a complete reference of the syntax and semantics of EOL.