Download version 1.4.8: Windows or Linux




Libraries (Base)

Libraries (Graphic)

Libraries (Language Interface)

Libraries (Multimedia)

Libraries (Network)

Libraries (Override)

Libraries (Persistency)

Libraries (Runtime)

Libraries (Testing)

Libraries (Text)

Libraries (Utility)




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 2149 classes containing 493920 words* of code. Total size: 4.8 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.


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

Implements "in-memory" database tables based on an interface defined by the kernel Eiffel class CHAIN. There are two table types:

  1. Monolithic tables which can only be saved to disk as a whole and any new items which have not been saved will be lost.
  2. Transactional tables where the effects of the table item operations: extend, replace or delete, are immediately committed to disk in an editions table file. When the editions file gets too large, the editions are consolidated into the main table file.

Monolithic tables are implemented by class: EL_STORABLE_CHAIN which takes a generic paramter of type EL_STORABLE.

This class defines the basic database CRUD concept of Create, Read, Update and Delete:

Create: is implemented by the {EL_STORABLE_CHAIN}.extend procedure.

Read: is implemented by the {EL_STORABLE_CHAIN}.item function.

Update: is implemented by the {EL_STORABLE_CHAIN}.replace procedure.

Delete: is implemented by the {EL_STORABLE}.delete procedure.

Transactional tables are implemented using the EL_RECOVERABLE_STORABLE_CHAIN class which inherits EL_STORABLE_CHAIN. It is called 'recoverable' because if the power suddenly goes off on your PC, the table is fully recoverable from the editions file.


AES encryption is supported for both monolithic and transactional tables.


Some experimental relational capabilities have been added in a private project but these classes have not yet found their way into Eiffel-Loop.

EXAMPLES For an example of EL_STORABLE_CHAIN see class EL_TRANSLATION_ITEMS_LIST found in the i18n.ecf localization library. Unfortunately the only examples for EL_RECOVERABLE_STORABLE_CHAIN are in a closed commercial project, but the usage is pretty similar.

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

Multi-application Management

ECF: app-manage.ecf

Introduction 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

Libraries (Testing)

Development Testing Classes

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



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

Currency Exchange based on European Central bank Rates

Performance Benchmarking and Command Shell

ZLib Compression


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.