Download version 1.4.8: Windows or Linux


This website is the home page for Eiffel-Loop, a collection of software libraries, example programs and tools for the Eiffel programming language. Here you can explore the complete source code for Eiffel-Loop with indexing notes formatted with bold, italics, code blocks etc. See Tools section.

Statistics: Eiffel-Loop has 2144 classes containing 496837 words* of code. Total size: 4.9 mb.

Contact: please address questions and comments to finnian at eiffel hyphen loop dot com

Published: This website was published using the Eiffel-View repository publisher

* Code words include keywords, identifier words and quoted strings, but exclude comments and indexing notes.



Libraries (Base)

Libraries (Graphic)

Libraries (Language Interface)

Libraries (Multimedia)

Libraries (Network)

Libraries (Override)

Libraries (Persistency)

Libraries (Runtime)

Libraries (Testing)

Libraries (Text)

Libraries (Utility)




EROS test clients

Example program demonstrating how a client can call a server created with the EROS library. EROS is an acronym for Eiffel Remote Object Server. It uses an XML remote procedure call protocol.

Eiffel remote object test server (EROS)

ECF: eros-server.ecf

Example program demonstrating the use of the EROS library. EROS is an acronym for Eiffel Remote Object Server. It uses an XML remote procedure call protocol.

Eiffel to Java

ECF: eiffel2java.ecf

Demonstration program for the Eiffel-Loop Java interface library. This library provides a useful layer of abstraction over the Eiffel Software JNI interface.

Rhythmbox MP3 Collection Manager

This is a full-blown MP3 collection manager that is designed to work in conjunction with the Rhythmbox media player and has a number of features of particular interest to Tango DJs.

Manger Syntax

el_rhythmbox -manager -config <task-configuration>.pyx


<genre>/<artist-name>/<song-title>.<unique id>.mp3


For details on how to use, read the source documentation notes in class RHYTHMBOX_MUSIC_MANAGER_APP.


Download the latest executable for Ubuntu 14.04 or Linux Mint 17.x at the bottom of this page. You also need the following command line tools to be installed: sox, swgen, avconv, lame, gvfs-mount.

Warning: Use at your own risk. It is recommended that you have a backup of your MP3 collection and rhythmbox configuration files (Usually in $HOME/.local/share/rhythmbox). The developer does not take any responsibility for any data loss that may occur as a result of using el_rhythmbox.

Submission for

ECF: ninety-nine-bottles.ecf

Eiffel submission for

This website contains sample programs for over 1500 languages and variations, all of which print the lyrics of the song "99 Bottles of Beer".

Vision-2 Extensions Demo

Libraries (Base)

Data Structures

Math Classes

Miscellaneous Utility Classes

Persistency Classes

Runtime Classes

Text Processing Classes

Libraries (Graphic)

HTML Viewer (based on Vision-2)

Image Utilities

Vision-2 GUI Extensions

ECF: vision2-x.ecf

Provides many extensions to the Eiffel Software Vision-2 cross-platform GUI library and the Smart Docking library.


These features are only the tip of the ice-berg.

Windows Eiffel Library Extensions

Libraries (Language Interface)

C/C++ and MS COM objects

ECF: C-language-interface.ecf


ECF: eiffel2java.ecf

A high-level framework for wrapping Java classes that adds a useful layer of abstraction to Eiffel Software's interface to the JNI (Java Native Interface) called eiffel2java.


The framework is based on the concept of a Java agent that is similar to an Eiffel agent. You will find classes: JAVA_FUNCTION and JAVA_PROCEDURE that inherit JAVA_ROUTINE. These agent classes automatically generate correct JNI call signatures. The library allows the creation of recursively wrapped classes where the arguments and return types to wrapped routines are themselves wrapped classes.

See here for an example of it's use.


Status: No longer maintained

Matlab is a popular math orientated scripting language. This interface was developed with Matlab Version 6.5, VC++ 8.0 Express Edition and Windows XP SP2.


Status: No longer maintained

Praat is a free tool for doing acoustic and phonetic analysis and has it's own scripting language, Praat-script.

The el_toolkit utility has an option for converting the source code of Praat ver. 4.4 to compile with MSC. (Praat compiles "out of the box" with the mingw compiler, but at the time EiffelStudio didn't support mingw)

Developed with VC++ 8.0 Express Edition, Windows XP SP2, Praat source code version 4.4.30. The conversion tool will not work with later versions of Praat.


Libraries (Multimedia)

Audio Processing Classes

Libraries (Network)

Adobe Flash interface for Laabhair

Status: No longer maintained

Eiffel interface to Flash ActionScript objects used in the Laabhair digital signal processing framework. This framework allows you to create applications that process speech with a Praat script in real time and create visual representations of the the data in Flash. Depends on the Eiffel-Loop Praat-script interface library.

Developed on Windows XP SP2 with Flash Professional 8 IDE, EiffelStudio 6.1, VC++ 8.0 Express Edition.

Laabhair was developed at the Digital Media Centre at the Dublin Institute of Technology

Amazon Instant Access API

ECF: amazon-instant-access.ecf

An Eiffel interface to the Amazon Instant Access API. This API enables third party vendors to fulfil orders for digital goods on the Amazon store. (WORK IN PROGRESS)

Basic Networking Classes

ECF: network.ecf

Extensions for ISE network sockets and a class for obtaining the MAC address of network devices on both Windows and Linux.

Eiffel Remote Object Server (EROS)

ECF: eros.ecf

An implementation of an experimental XML orientated remote procedure call protocol.

ECF Instructions

When including the ECF eros.ecf in your project it is necessary to define a custom variable eros_server_enabled. To build a server application set the value to true. To build a client application set value to false.

File Transfer Protocol (FTP)

ECF: ftp.ecf

Classes for uploading files to a server and managing server directory structure.

HTTP Servlet Services

ECF: servlet.ecf

An implementation of the Fast-CGI protocol for creating single and multi-threaded HTTP servlet services.

Hypertext Transfer Protocol (HTTP)

ECF: http.ecf

Classes for interacting with a HTTP server. Supports the following HTTP commands: HEAD, POST, GET.

PayPal Payments Standard Button Manager API

ECF: paypal.ecf

An Eiffel interface to the PayPal Payments Standard Button Manager NVP HTTP API.

Libraries (Override)

Override of ES Eiffel to Java Interface

Override of ES GUI Toolkits

Libraries (Persistency)

Eiffel CHAIN Orientated Binary Database

ECF: chain-db.ecf

The Chain-DB library enables the development of container objects conforming to the base class CHAIN that have many of the properties of relational database tables. Some of the most important enabling classes for Chain-DB are to be found in the cluster Eiffel-Loop/base/data_structure.


Of course this is the fundamental property of any database. Chain-DB offers 2 kinds of persistence:

1. CHAIN level persistence

This type of persistence involves storing the entire chain to a file in one operation. This is useful for data that is more or less static, like for example the localization table EL_TRANSLATION_ITEMS_LIST.


2. item level persistence

Item level, or "incremental persistence" is where the effects of any of the basic CHAIN operations (extend/replace/delete**) are recorded as they happen in a separate editions file. When the chain is loaded during object initialization, a chain level store is loaded first, and then the stored editions are applied to bring the chain to it's final state.

See class EL_RECOVERABLE_STORABLE_CHAIN for more details.


Being able to join*** tables via a common field is the essence of a relational database. Chain-DB offers a number of features that support the joining of chains.

1. Field Indexing

For large number of chain items, performing joins can be slow without the use of field indices. Writing code to create and maintain fields manually is very time consuming, but fortunately Chain-DB offers an easy way to maintain field indices via the implementing class EL_STORABLE_LIST and it's reflective descendant: EL_REFLECTIVELY_STORABLE_LIST. See the class documentation for more details.

2. Primary Keys

Being able to assign a unique identifier to each item in a chain is essential to creating many kinds of data-joins. Chain-DB offers a convenient way to both generate primary keys and maintain an index for it. This is achieved with the auxilary class EL_PRIMARY_KEY_INDEXABLE when used in conjunction with either EL_STORABLE_LIST or it's reflective descendant: EL_REFLECTIVELY_STORABLE_LIST.


Of course the Eiffel language itself can be used to query any CHAIN list, but sometimes the meaning of the query is obscured in implementation details. What is needed is a slightly more abstract way of expressing queries that makes the meaning more apparent. This is provided by the class EL_QUERYABLE_CHAIN and it's helper EL_QUERY_CONDITION_FACTORY. The implementing class EL_STORABLE_LIST inherits EL_QUERYABLE_CHAIN.

Conditions can be combined using the logical operators: and, or and not. Queries are not parsed strings but actual Eiffel expressions. Some example of the expressiveness of this query language can be found in the following list of classes from the example project Eiffel-Loop/example/manage-mp3:

(Search page for routine do_query)

Foot Notes

** delete is a routine from EL_STORABLE_CHAIN and not from CHAIN.

*** We are using the term join somewhat loosely and mean only that if you have two chains CHAIN [A] and CHAIN [B], you can produce a subchain of CHAIN [B] where each B item has a matching field value with an item from CHAIN [A].

Eiffel LIST-orientated XML Database

ECF: xml-db.ecf

A simple XML database based on VTD-XML xpath and XML parsing library. Supports transactions and encryption. Any list conforming to LIST [EL_STORABLE_XML_ELEMENT] can be turned into a database. This library has now been superceded by chain-db.ecf which is more sophisticated and uses a binary format.

OpenOffice Spreadsheet

ECF: xml-conversion.ecf

Classes for parsing OpenDocument Flat XML spreadsheets using VTD-XML.

Search Engine Classes

ECF: search-engine.ecf

Classes for parsing search terms and searching a list conforming to CHAIN [EL_WORD_SEARCHABLE]. The search uses case-insensivitive word tokenization. Facility to create custom search times. Terms can be combined using basic boolean operators.

Windows Registry Access

ECF: wel-regedit-x.ecf

This library adds a layer of abstraction to the Windows registry classes found the in the Eiffel Windows Library WEL. This abstraction layer makes it much easier and more intuitive to search, read and edit Windows registry keys and data. See this article on Eiffel room.

XML Document Scanning and Object Building (VTD-XML)

ECF: vtd-xml.ecf

Classes for scanning XML documents and building Eiffel objects from XML contexts defined by relative Xpaths. Based on the VTD-XML parser. This is a full implemenation of Xpath 1.0.

VTD-XML uses a very fast and efficient method of building a compressed representation of an XML object using virtual token descriptors.

Using the Eiffel API is considerably easier and more intuitive to use than the original Java or C version of VTD-XML.

A substantial C-bridge was developed to make Eiffel work better with VTD-XML. The original VTX-XML code was forked to make it possible to compile it with the MSC compiler. This fork is found under contrib/C.

Xpath orientated XML node scanners and Eiffel object builders

ECF: xdoc-scanning.ecf

A library implementing various kinds of XML document node scanners fed by 5 different types of XML node parse event generators. These 5 types, all descendants of class EL_PARSE_EVENT_SOURCE, are as follows:

1. EL_EXPAT_XML_PARSER: An Eiffel binding to the eXpat XML parser

2. EL_EXPAT_XML_PARSER_OUTPUT_MEDIUM: eXpat XML parser of XML serializeable objects conforming to EVOLICITY_SERIALIZEABLE_AS_XML.

3. EL_EXPAT_XML_WITH_CTRL_Z_PARSER: eXpat XML parser with input stream end delimited by Ctrl-Z character. Useful for parsing network streams.

4. EL_BINARY_ENCODED_XML_PARSE_EVENT_SOURCE: a binary encoded XML event source. Useful for reducing the size of large documents.

5. EL_PYXIS_PARSER event from a Pyxis format parser. Pyxis is a direct analog of XML that is easier to read and edit making it suitable for configuration files.

The following are the various kinds of scanners which can process the output from these event sources.

Eiffel Object Building Scanners

The classes EL_BUILDABLE_FROM_XML and EL_BUILDABLE_FROM_PYXIS can be used to implement a sophisticated Eiffel object building scheme based on the idea of mapping builder agents to xpaths relative to particular element contexts. Only a small subset of the xpath standard is used. The framework has the following features:

General Xpath to Eiffel agent mapper

The class EL_CREATEABLE_FROM_XPATH_MATCH_EVENTS implements a method for scanning a document and triggering various Eiffel agents according to a table of xpath to agent mappings.

Eiffel Aware Document Scanner

The class EL_SMART_BUILDABLE_FROM_NODE_SCAN is an XML parser that reacts to a special XML processing instruction, telling it to build an Eiffel object of a particular type.

Libraries (Runtime)

Eiffel Thread Extensions

A collection of about 70 classes that extend the classic EiffelThread library.

Multi-application Management

ECF: app-manage.ecf


This library accomplishes two goals:

  1. Manage a collection of small (and possibility related) "mini-applications" as a single Eiffel application.
  2. Implement the concept of a self-installing/uninstalling application on multiple-platforms.

"Swiss-army-knife applications"

Creating a new project application in Eiffel is expensive both in terms of time to create a new ECF and project directory structure, and in terms of diskspace. If all you want to do is create a small utility to do some relatively minor task, it makes sense to include it with a other such utilities in a single application. But you need some framework to manage all these sub-applications. In this package, the two classes EL_MULTI_APPLICATION_ROOT and EL_SUB_APPLICATION provide this capability.

Command line sub-applications

The following features exist for creating command line applications:

Installer Features

Resource Management

The library provides a system of managing application resources like graphics, help files etc.

Multi-threaded Logging

OS Command Wrapping

ECF: os-command.ecf

A library of about 100 classes for wrapping OS commands in a cross platform manner. It includes both abstract classes for creating your own wrappers as well as well as many "out of the box" wrappers for a broad selection of OS commands. (More documentation to follow)

Libraries (Testing)

Development Testing Classes

ECF: testing.ecf

Classes for doing regression tests based on CRC checksum comparisons of logging output and output files.

Libraries (Text)

AES Encryption Extensions

ECF: encryption.ecf

Extensions to Colin LeMahieu's AES encryption library. Includes a class for reading and writing encrypted files using AES cipher block chains.

Evolicity Text Substitution Engine

ECF: evolicity.ecf

Evolicity is a text substitution language that was inspired by the Velocity text substitution language for Java. Evolicity provides a way to merge the data from Eiffel objects into a text template. The template can be either supplied externally or hard-coded into an Eiffel class. The language includes, substitution variables, conditional statements and loops. Substitution variables have a BASH like syntax. Conditionals and loops have an Eiffel like syntax.

The text of this web page was generated by the Eiffel-view repository publisher using the following combination of Evolicity templates:

  1. doc-config/main-template.html.evol
  2. doc-config/site-map-content.html.evol
  3. doc-config/directory-tree-content.html.evol
  4. doc-config/eiffel-source-code.html.evol

To make an Eiffel class serializable with Evolicity you inherit from class EVOLICITY_SERIALIZEABLE. Read the class notes for details on how to use. You can also access the substitution engine directly from the shared instance in class EL_MODULE_EVOLICITY_TEMPLATES



ECF: i18n.ecf

An internationalization library with support for translations rendered in Pyxis format. There are a number of tools in el_toolkit to support the use of this library.

RSA Public-key Encryption Extensions

ECF: public-key-encryption.ecf

Extends Colin LeMahieu's arbitrary precision integer library to conform to some RSA standards. The most important is the ability to read key-pairs conforming to the X509 PKCS1 standard. The top level class to access these facilities is EL_MODULE_X509_COMMAND.

The private key reader however uses a non-standard encryption scheme. It assumes the file is encrypted using the Eiffel-Loop utility contained in el_toolkit. See class CRYPTO_APP for details.

Libraries (Utility)

Application License Management

ECF: app-license-keys.ecf

This contains a few basic classes for constructing an application license manager. The most important is a way to obtain a unique machine ID using a combination of the CPU model name and MAC address either from the network card or wifi card.

The principle developer of Eiffel-loop has developed a sophisticated license management system using RSA public key cryptography, however it is not available as open source. If you are interested to license this system for your company, please contact the developer. It has been used for the My Ching software product.

Currency Exchange

ECF: currency.ecf

Currency Exchange based on European Central bank Rates

ZLib Compression

ECF: compression.ecf

A Eiffel interface to the zlib C library. The main class is EL_COMPRESSED_ARCHIVE_FILE with a few helper classes.


Development Testing


Eiffel Development Utility

A "Swiss-army knife" of useful Eiffel command line development tools. The most useful ones are listed here with command line switchs:

-publish_repository: REPOSITORY_PUBLISHER_APP

Publishes an Eiffel code repository as a website with module descriptions.

-edit_notes: NOTE_EDITOR_APP

Add default values to note fields using a source tree manifest.

-feature_edit: FEATURE_EDITOR_APP

Expands Eiffel shorthand code in source file and reorders feature blocks alphabetically.


Download binary of el_eiffel for Ubuntu 14.04 or Linux Mint 17.x.

Utilities Toolkit

A "Swiss-army knife" of useful command line tools. Some of the most useful ones are listed here with command line options:

-crypto: CRYPTO_APP

Menu driven shell of useful cryptographic operations.

-pyxis_to_xml: PYXIS_TO_XML_APP

Converts Pyxis format to XML with special support for Eiffel configuration files in Pyxis format (extension pecf). The attribute configuration_ns can be used as convenient shorthand for the ECF schema configuration information.


Exports emails from selected Thunderbird email folders as HTML bodies (extension: body). As the name implies, only the body of the HTML is preserved. A matching folder structure is also created. This is useful for HTML content managers.


Compiles tree of Pyxis translation files into multiple locale files named locale.x where x is a 2 letter country code. Does nothing if source files are all older than locale files. See class EL_LOCALE_I.


Download binary of el_toolkit for Ubuntu 14.04 or Linux Mint 17.x.