Download version 1.4.4: 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 1840 classes containing 448543 words* of code. Total size: 4.3 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.


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

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

Classes for creating single and multi-threaded HTTP servlet services that extend the Goanna servlet library.

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: database.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 Unfortunately the only examples are in a private commercial project. But if there is enough popular demand, the author will open source some of them.

Eiffel CHAIN-based XML Database

ECF: database.ecf

OpenOffice Spreadsheet

ECF: xml-conversion.ecf

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

Search Engine Classes

ECF: database.ecf

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.

XML and Pyxis Document Scanning and Object Building (eXpat)

ECF: xdoc-scanning.ecf

Classes for scanning XML and Pyxis documents using a common interface. Pyxis is a more readable XML equivalent that resembles Python code.

This interface also includes a way of building Eiffel objects from element contexts defined by relative Xpaths. Although this is only a very partial implementation of Xpath, it is still very useful.

The XML implementation is based on a modified GOBO wrapper for the eXpat XML parser (written in C). The Pyxis implementation is pure Eiffel.

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.

Performance Benchmarking and Command Shell

ZLib Compression


Development Testing


Development Toolkit Program

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


-publish_repository: publishes an Eiffel code repository as a website with module descriptions.


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


-feature_edit: expands Eiffel shorthand code in source file and reorders feature blocks alphabetically.


-crypto: menu driven shell of useful cryptographic operations.


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