Elektra provides a universal and secure framework to store configuration parameters in a global, hierarchical key database. The core is a small library implemented in C. The plugin-based framework fulfills many configuration-related tasks to avoid any unnecessary code duplication across applications while it still allows the core to stay without any external dependency. Elektra abstracts from cross-platform-related issues with an consistent API, and allows applications to be aware of other applications' configurations, leveraging easy application integration.
- Make it simple for applications and administrators to access configuration
- Make configuration storage more safe: avoid that applications receive wrong or unexpected values without undefined behaviour.
- Allow software to be better integrated on configuration level
- Postpone some decisions from programmers to maintainers/administrators, e.g. which syntax and the location of configuration files.
- Reduce rank growth of configuration parsers in our ecosystem, but foster well maintained plugins instead.
And in terms of quality, we want:
1.) Robustness (no undefined behaviour) 2.) Extensibility and 3.) Simplicity
Facts and Features
- Elektra uses the BSD licence.
- Elektra implements an API to fully access a global key database.
- Elektra supports mounting of existing configuration files into the global key database.
- Elektra has dozens of Plugins that make it possible
to have a tiny core, but still support many features, including:
- Elektra can import and export configuration files in any supported format.
- Elektra is able to log and notify other software on any configuration changes using Dbus and Journald.
- Elektra can improve robustness by rejecting invalid configuration via type checking, regex and more.
- Elektra provides different mechanisms to locate configuration files.
- Elektra supports different ways to escape and encode content of configuration files.
- Elektra is multi-process safe and can be used in multi-threaded programs.
- Elektra (except for some plugins) is portable and completely written in Ansi-C99.
- Elektra (except for some plugins) has no external dependency.
- Elektra is suitable for embedded systems and early boot stage programs.
- Elektra supports comments and other non-configuration information by meta data.
- Elektra provides many powerful Bindings to avoid low-level access code.
- Elektra provides powerful Code Generation Techniques for high-level configuration access.
The currently best information about Elektra is this thesis.
The API documentation can be found here.
Elektra's uses a git repository at github.
Releases can be downloaded from http and
To use the debian repository of the releases put following files in /etc/apt/sources.list:
deb http://build.libelektra.org/debian/ elektra-release-glue main deb-src http://build.libelektra.org/debian/ elektra-release-glue main
The preferred way to install Elektra is by using packages provided for your distribution:
Available, but not up-to-date (Version 0.7):
For CentOS, Fedora, OpenSUSE, RHEL and SLE Kai-Uwe Behrmann kindly provides packages. For Debian stable amd64 we provide latest builds. Just add following lines to sources.list in wheezy:
deb ftp://markus-raab.org/wheezy wheezy main deb-src ftp://markus-raab.org/wheezy wheezy main
If there are no packages available for your distribution, see the installation document.
To start development, just clone the repo and start hacking!
- We encourage you to improve documentation, especially the README.md as if they were a webpage.
- You should read the coding document before you issue a pull request.
- Make yourself familiar with the KeySet, the central data structure in Elektra.
- You should read the design document before you make design relevant decisions.
- You can always peek into the TODOs, if you don't know what to do.