0.8.25 Release

We are proud to present Elektra 0.8.25.

What is Elektra?

Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database. For more information, visit https://libelektra.org.

For a small demo see here:


You can also read the news on our website



This release is dedicated to drastically improve the speed of Elektra. Two non-trivial features facilitate most of the improvement:

mmap storage

We added a new, binary and fast storage plugin called mmapstorage. It leverages the mmap() syscall and supports full Elektra semantics. We provide two compile variants: mmapstorage and mmapstorage_crc. The mmapstorage_crc variant enables CRC32 checksums for critical data, while the mmapstorage variant omits the checksum for maximum performance.

We ran a synthetic benchmark with 257 iterations using 40k keys in a keyset, and compared the performance to the dump storage plugin.

Median write time in microseconds:

Plugin Time
dump 71079
mmapstorage 2964
mmapstorage_crc 7644

Median read time in microseconds:

Plugin Time
dump 82737
mmapstorage 1145
mmapstorage_crc 5744

In our benchmark, the mmapstorage plugin writes more than 23x faster, and reads more than 72x faster than the dump storage plugin.

For this release the plugin is marked as experimental, even though it is already used as default storage plugin in a build job on our build server.

Thanks to Mihael Pranjić for this improvement.

Hybrid Search Algorithm for ksLookup (...)

The hybrid search algorithm is now implemented, this concludes the extension of the ksLookup (...) search with the order preserving minimal perfect hash map (OPMPHM). The hybrid search combines the best properties of the binary search and the OPMPHM. The hybrid search decides dynamically which search algorithm to use.

Because of the automatic decision, usually nothing needs to be done by API users to take advantage of this improvement. Advanced API user, however, can overrule the hybrid search by passing KDB_O_OPMPHM or KDB_O_BINSEARCH to ksLookup (...). The constants are defined in kdbproposal.h. For low-memory systems the building of the hash map can be disabled altogether at build-time by disabling the CMake variable ENABLE_OPTIMIZATIONS (by default enabled now).

The implemented randomized OPMPHM algorithm is in 99.5% of the measured random cases optimal. However the randomization property of the algorithm leaves an uncertainty.

The results made with random cases had shown that the hybrid search is, except for small keyset sizes, almost always faster compared to the standalone binary search. The performance increase strongly depended on the measured hardware. In the random cases where the hybrid search is faster, on average ~8.53% to ~20.92% of time was saved. The implemented hybrid search works only above a keyset size of 599 to exclude the small keyset sizes.

Thanks to Kurt Micheli for this improvement.


The following section lists news about the plugins we updated in this release.

Directory Value

We improved the performance of the directoryvalue plugin. (René Schwaiger) This plugin is used for configuration file formats that do not support that directories contain values, like it is the case in JSON. A program manipulating a 13 MB JSON file which first did not succeed within 10 hours is now finished in 44 seconds.


There is a new, experimental plugin called process. This plugin utilizes the pluginprocess library in order to execute arbitrary other plugins in an own process, acting as a proxy itself. Therefore it is not required to explicitly change a plugin's implementation if it shall be executed in an own process. This plugin is not completely finished yet, as currently there is no way for it to mimic the proxied plugin's contract in Elektra. It can be used with simple plugins like dump however, check the limitations in the readme for more details. (Armin Wurzinger)


The detection of the mntent functions now also works correctly, if you use the compiler switch -Werror. (René Schwaiger)


We fixed an issue with the passwd plugin not properly setting compile flags. This resolves a problem with undefined functions when building with musl. (Lukas Winkler)


The experimental gpgme plugin was brought into existence to provide cryptographic functions using GnuGP via the libgpgme library. (Peter Nirschl)


The network plugin now also allows for non-numerical hosts (i.e. "localhost") to be set and tries to resolve it via DNS. (Michael Zronek)


This new plugin parses a subset of YAML using a parser generated by Bison. (René Schwaiger)


The build system now disables the plugin automatically, if you use a GCC compiler (6.x or earlier) and enable the option ENABLE_ASAN. We updated the behavior, since otherwise the plugin will report memory leaks at runtime. (René Schwaiger)

Yan LR


This new plugin parses a subset of YAML using the Earley Parser library YAEP. (René Schwaiger)


This new plugin can be used to validate that the value of a key is a reference to another key. (Klemens Böswirth)


The text below summarizes updates to the C (and C++)-based libraries of Elektra.


As always, the ABI and API of kdb.h is fully compatible, i.e. programs compiled against an older 0.8 version of Elektra will continue to work (ABI) and you will be able to recompile programs without errors (API).

This is the last release for which we have built Jessie packages:

deb     [trusted=yes] https://debian-stable.libelektra.org/elektra-stable/ jessie main
deb-src [trusted=yes] https://debian-stable.libelektra.org/elektra-stable/ jessie main

Obviously, we will continue to update the stretch package:

deb     [trusted=yes] https://debian-stretch-repo.libelektra.org/ stretch main
deb-src [trusted=yes] https://debian-stretch-repo.libelektra.org/ stretch main

Infos for Package Maintainers

Following plugins got added:

A new library got added (should be packaged privately for now):


Optimize elektraKsFilter to not duplicate keys (Markus Raab)


A new library which can be used to match keys against globbing patterns was introduced. (Klemens Böswirth)

The API is still experimental, so it should not be used externally for now.


libease provides the function elektraArrayValidateBaseNameString, which can be used to validate that a given string is an Elektra array name. (Klemens Böswirth)


Bindings allow you to utilize Elektra using various programming languages. This section keeps you up to date with the multi-language support provided by Elektra.


Do not use private Elektra headers for Ruby bindings as preparation for a Ruby libelektra gem. (Bernhard Denner)













The website is generated from the repository, so all information about plugins, bindings and tools are always up to date.


We are currently working on following topics:


Following authors made this release possible:

Commits Author
1 Thomas Wahringer thomas.wahringer@libelektra.org
2 Bernhard Denner bernhard.denner@gmail.com
7 Kurt Micheli e1026558@student.tuwien.ac.at
12 Michael Zronek michael.zronek@gmail.com
33 Lukas Winkler derwinlu+git@gmail.com
28 Klemens Böswirth k.boeswirth+git@gmail.com
30 Armin Wurzinger e1528532@student.tuwien.ac.at
38 Peter Nirschl peter.nirschl@gmail.com
100 Markus Raab markus@libelektra.org
180 Mihael Pranjic mpranj@limun.org
418 René Schwaiger sanssecours@me.com

849 commits, 581 files changed, 18503 insertions(+), 3192 deletions(-)

We welcome new contributors!

Finished Thesis

Get It!

You can download the release from here or GitHub

The hashsums are:

The release tarball is also available signed by Markus Raab using GnuPG from here or GitHub

Already built API-Docu can be found here or GitHub.

Stay tuned!

Subscribe to the RSS feed to always get the release notifications.

If you also want to participate, or for any questions and comments please contact us via the issue tracker on GitHub.

Permalink to this NEWS entry

For more information, see https://libelektra.org

Best regards, Elektra Initiative