Developing with the Enlightenment Foundation Libraries (EFL)

The Enlightenment Foundation Libraries (EFL) are designed to build on top of each other in layers, steadily becoming higher level yet allowing access to each individual level as they go. Whether you're looking for the types of low-level helpers contained in the Eina library or the high-level abstractions of Elemetary you'll find a wealth of assistance within EFL.

More information on EFL can be found on the About EFL page, including a breakdown of its various features and components.

Current vs. Beta

The documentation on this section of the website is written with a focus on the next-generation release, currently in beta. While this means that the documentation is only partial in places, it will get you started with the very latest revision of EFL and all the new and improved features it brings.

Documentation on the current version of EFL can be found in the Legacy section. When working through the documentation on the site, keep in mind that if a document is located in /develop/legacy it is referring to the current release of EFL; if it is located in any other section of /develop it is referring to the beta release. It is possible to use both APIs in the same application, information about that is in the Unified and Legacy page.

Information on porting software between the current and beta releases of EFL can be found as part of the Programming Guides section.


Developers working with the Enlightenment Foundation Libraries can do so in a variety of languages. Each of the following documentation categories is split by language: at present the majority include documentation only for the C language, with documentation for additional languages to follow.

In all cases, the language to which a particular document applies will be indicated in the page location: a document in /develop/tutorials/c will be for the C language, whereas /develop/tutorials/python offers alternatives for Python developers.

A full list of the languages available is available on the landing page for each section.

Setting up the Development Environment

Information on downloading EFL and configuring a development environment can be found in the Setup section.


The EFL Tutorials are designed to introduce the functions and features of EFL to those who already have programming experience. Each tutorial walks through the implementation of a particular EFL feature or function, building upon previous tutorials to offer a step-by-step guide to getting comfortable with developing using EFL.

Although you do not need previous experience with EFL to work through the tutorials, general programming knowledge is required.

Programming Guides

The Programming Guides are designed to provide informative material to developers working with EFL, including code snippets demonstrating the use of various features. They are provided both as a reference guide for experienced EFL developers and as an alternative or extension to the tutorials for those who prefer less guided experimentation.

API Reference Documentation

A reference to the features and functions of the beta-release API can be found in the API Reference section.

Those working on the current-release API can find the equivalent documentation in the Legacy API Reference section.

Please note that, in both cases, the reference documentation is currently available exclusively for the C programming language.

Debugging EFL Applications

Debugging EFL Applications demonstrates how to debug your application, from tracking down memory leaks with Valgrind to diagnosing user interface issues with Clouseau.

Contributing Code

If you have been working on an EFL-based project which you believe would be of value to other EFL or Enlightenment users, please consider contributing the code. Details on how to contribute your code to the Enlightenment Project, whether it's an entire application or a simple bug-fix, can be found on the Developer Contributions page.

IRC Channels

The official Enlightenment IRC channels, hosted on the Freenode network, are often the quickest way to communicate with fellow developers. Available in English, German, French, and Korean, the channels are accessible 24/7 and are open to both developers and end-users.

Connection information is as follows:

IRC Server Port Channel Topic 6667 #e General 6667 Python-related 6667 #e.bsd BSD-related 6667 General - German 6667 General - French 6667 General - Korean

Mailing Lists

The Enlightenment Project maintains several mailing lists, full details of which are available on the Contact page. The developer-focused lists, which are available in English only, are as follows:

Mailing List Archive Topic
enlightenment-devel SourceForge E/EFL development discussion
enlightenment-announce SourceForge E/EFL announcements
enlightenment-intl SourceForge Internationalization changes
enlightenment-git Git commits
enlightenment-e-bork Quality assurance reports