ABEL is intended as an easy-to-use persistence library. It provides a high-level interface for storing and retrieving objects, selection criteria when querying objects, lazy loading of results, and transactions. ABEL can work with different storage backends such as MySQL or CouchDB transparently.


  • Store and retrieve objects
  • Filter retrieved objects based on criteria
  • Transaction support
  • Read only and read-write access
  • Lazy loading of query results
  • Support for different backends
  • Support for access to relational databases created by EiffelStore.

When to use it?

ABEL can be used whenever an application needs some basic persistency without the developer having to think about the data format or object-relational mapping. It may also be used to read and write table records for an existing database, provided that there is a set of classes matching the database tables.

It is not a good idea to use ABEL in a high-performance setting. Due to its high level of abstraction there are a lot of internal data conversions to enable automatic object-relational mapping.

Current limitations

  • The CouchDB backend has some severe limitations, e.g. it doesn't support polymorphism, SPECIAL, or transactions.
  • The garbage collector currently only works for single-user systems and is rather primitive, as it needs to load the whole database into memory.
  • The ESCHER plugin, which handles class schema evolution, has never been properly tested. Use at your own risk.

Future work

  • Support for caching for performance reasons.
  • Lazy retrieval of referenced objects in an object graph. This requires support in the compiler however.
  • Some handy features for the backend that deals with existing databases:
    • Allow to provide a custom class name to table name mapping.
    • A way to automatically resolve 1:N or M:N relations.
    • Support automatic creation of classes from tables, or tables from classes.
  • Support other backends like Oracle, Microsoft SQL or EiffelStore.