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 Elementary you'll find a wealth of assistance within EFL.

Use the menu on the right to navigate this documentation. Below there's a short description of the content of each section.

Legacy vs. Unified APIs

The documentation on this section of the website is written with a focus on the next-generation API called Unified API, currently rolling out of the beta stage. While this means that the Unified 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 Legacy API of EFL can be found in the Legacy section. It is possible to use both APIs in the same application, although not recommended. Information about that is in the Unified and Legacy page.

Information on porting existing software to the Unified API 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 and C# languages, 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/csharp offers alternatives for C# 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 Unified API can be found in the C API Reference section and C# API Reference section.

The Legacy API equivalent documentation in the Legacy API Reference section (Only for C).

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.

Continuous Integration

We run a CI service on all commits that enter the efl git repository. These builds cover various combination of our build configs, different architecture and Linux distributions as well as running QA tools like unit tests, integration tests and static analysers. More details on it can be found on our CI page.

IRC Channels

The official Enlightenment IRC channels, hosted on the Libera Chat 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

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