Latest release

0.8.23 release

@markus2330 markus2330 released this May 13, 2018 · 1098 commits to master since this release

  • guid: 9a9ab08b-9ca0-4242-b617-5a8b21ea42a0
  • author: Markus Raab
  • pubDate: Sun, 13 May 2018 08:57:15 +0200
  • shortDesc: Notification, Web UI, Build System

We are proud to release Elektra 0.8.23.

In 717 commits 11 authors changed 835 files with 31144 insertions(+), 21773 deletions(-).

What is Elektra?

Elektra serves as a universal and secure framework to access
configuration settings in a specified, global, hierarchical key database.
For more information, visit

For a small demo see here:


You can also read the news on our website


  • Notification: New transport plugin
  • Web UI greatly improved
  • Overhaul of Build System and Daily Stretch Repository

Notification: New transport plugin

To keep persistent configuration settings in sync with the configuration settings of applications, notifications are needed.
For notifications it is important that they do not block the execution of the applications.
In Elektra we achieve this using transport plugins.

Elektra's notification feature has received its first transport plugin pair:
Transport plugins provide a link between applications using Elektra.
These plugins send and receive notifications when a key is modified within the
key database.
The existing dbus plugin has been modified to use an asynchronous I/O binding
for sending messages, if available.
The new dbusrecv plugin is responsible for receiving messages sent from the
dbus plugin and other sources with the same
message format.

For more details see the
notification tutorial
or the
example applications.

Thanks to Thomas Wahringer.

Web UI greatly improved

The goal of the Web UI is to provide safe and unified access to all configuration settings of a system.
Different to other UIs, it generates its interface according specifications as found in Elektra.

For example, if a configuration setting only has a number of choices, you get exactly these choices
within the user interface.

To get outstanding usability, Web UI now provides:

  • undo functionality
  • visibility functionality to hide irrelevant configuration settings
  • built-in validation for many types of configuration settings
  • support for arrays
  • descriptions of configuration settings embedded in the user interface


  • The Web-UI now is able to install itself via cmake.
  • The API was updated for elektrad
    and webd (former clusterd).

Read here to get started.

Note that new version of the Web UI requires Elektra 0.8.23 or later.

Thanks to Daniel Bugl.

Overhaul of Build System and Daily Stretch Repository

We started to overhaul our build system to improve build times and responsiveness.
It focuses heavily on containerisation to improve hardware utilization.

If you are interested in #devops have a look at our

Daily builds Debian packages for Stretch are available again in our
stretch repository.
Add it to your sources.list:

deb     [trusted=yes] stretch main
deb-src [trusted=yes] stretch main

Thanks to Lukas Winkler.

Other New Features

We added even more functionality, which could not make it to the highlights:

  • A new experimental I/O binding for glib
    has been added.
    It can be used to integrate the notification feature with applications based
    on glib.
  • The Order Preserving Minimal Perfect Hash Map (OPMPHM), used to speed up the lookups, got optimized
    and a benchmark was added,
    thanks to Kurt Micheli
  • We added a script that calculates the complexity of configuration settings based on their specification,
    thanks to Anton Hößl
  • kdb ls now has -0 option to allow key names with newlines (needed for Web UI)
  • The csvstorage now can treat selected columns
    to be part of the key. Error messages were improved.
    thanks to Thomas Waser

Other News

  • We added a tutorial about securing the integrity and confidentiality of configuration values,
    thanks to Peter Nirschl
  • Peter Nirschl finished his thesis
    It includes a benchmark of different cryptographic providers.
  • Markus Raab gave a talk at Linuxwochen Wien (in German).
    For similar talks in English, please refer to the FOSDEM talks.
  • We replaced the word "project" to "initiative" in the Code of Conduct (project has per definition an end date).


We improved the documentation in the following ways:

  • FAQ was extended by Why do I need Elektra if I already use configuration management tools?
  • Documentation about the recommended environment for test runs were added
  • uniformly add . at end of short help
  • Logo for Doc Set was added and logo for favicon was updated,
    thanks to René Schwaiger
  • template of design decisions was updated to use the words
    problem (instead of issue) and rationale (instead of argument).
  • METADATA.ini:
    • added visibility (as used in Web UI)
    • added type (only check/type existed)
    • plenty of metadata is now used by Web UI
  • update docu for type plugin that check/type/min and check/type/max are deprecated
  • Fixed various spelling mistakes,
    thanks to René Schwaiger
  • Document limitations of resolver (kdbOpen fails if no home directory found)
    and json/yaml plugins (intermixing of array and objects not detected, which is possible
    in Elektra but impossible in JSON)
  • Required environment to run tests is documented.
  • A decision about deferred plugin calls has been made and implemented,
    thanks to Thomas Wahringer.


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).

We removed:

  • the not used error code 12 from kdb mv from docu

We changed:

  • kdb get, kdb mv and kdb cp now use error code 11 if keys are not found
  • cascading keys as arguments to kdb cp and kdb mv now fail instead
    of doing something unexpected, thanks to René Schwaiger for reporting

Shell scripts:

  • cp and mv no longer accept cascading keys.

Notes for Maintainer

These notes are of interest for people maintaining packages of Elektra:

  • Docu is updated that cmake3 is required.
    thanks to Lukas Winkler for reporting.
  • To run all tests successfully, the spec and list plugin is required.
    So if ENABLE_TESTING is checked, cmake checks the presence of a storage,
    a resolver, the list and the spec plugin,
    thanks to René Schwaiger
  • Tests no longer clear environment or reset locales.
    This fixes lua and dbus problems but might cause problems if TMPDIR is set,
    thanks to Lukas Winkler
  • This will be the last release supporting Debian Wheezy
    (LTS support will stop in May).
    Directly after the release, Jessie (oldstable) with gcc 4.8.4 will
    be the oldest supported platform.

We added:

  • the private headerfiles kdbnotificationinternal.h, kdbioplugin.h.
  • the headerfiles kdbio_glib.h and kdbio_uv.h
  • the plugin
  • the scripts build-web, run-elektrad, and run-web
  • the test case testmod_dbusrecv
  • the constant ENABLE_ASAN in the constants plugin
  • several man pages such as: kdb-run-elektrad.1 and kdb-run-web.1

We removed:

  • Base64.pdf is not installed anymore
  • doxygen-generated man pages such as: doc_docker_jenkinsnode_README_md.3elektra,
    doc_docker_README_md.3elektra, and doc_vagrant_README_md.3elektra


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

  • Error page that is shown if no JavaScript is enabled now more clearly
    says that the Website only renders content from the repo and
    only contains free JavaScript.
  • The FAQ is now
    more visible (added to "getting started").
  • The Code of Conduct
    was added.

Notes for Elektra's Developers

These notes are of interest for people developing Elektra:

  • . run_dev_env is a script to be sourced from the build directory.
    It sets environment variables, so that Elektra from the build
    directory is used (instead of the installed one).

  • All current versions of Clang-Format (6.0+) and the outdated Clang-Format 5 will now produce exactly the same output for the whole codebase,
    thanks to René Schwaiger.

  • To make enums nicely formatting, make sure at least one member
    is documented.

  • You can now add a Markdown Shell Recorder test for a plugin
    via the CMake function add_plugin by adding TEST_README.
    Furthermore TEST_REQUIRED_PLUGINS allows us to specify which
    additional plugins are required,
    thanks to René Schwaiger

  • const was added to exceptions in catch blocks
    thanks to René Schwaiger

  • We now mention to read doc/
    in the contributing guidelines.

  • The CMake functions

    • add_plugin
    • add_msr_test
    • add_msr_test_plugin, and the new
    • add_shell_recorder_test

    now allow you to specify a list of required plugins for Shell Recorder and
    Markdown Shell Recorder tests.

  • The Markdown Shell Recorder now compares the whole output of stderr with the text following the directive STDERR:,
    thanks to René Schwaiger

  • You can now leave the text following the directive STDERR: in a Markdown Shell Recorder test empty:

    true # Print nothing to `stderr`
    # STDERR:

    . The Markdown Shell Recorder will then check if the command printed nothing to the standard error output.

  • The Shell Recorder now also prints the content of the protocol file if a test was unsuccessful or you used the command switch -p,
    and always cleans up the protocol,
    thanks to René Schwaiger

  • We added an Markdown Shell Recorder test for the Constants plugin.

  • The Markdown Shell Recorder now prints the path of the test file.
    thanks to René Schwaiger

  • The Haskell binding now explicitly requires GHC installed with a minimum version of 8.0.0 during cmake
    thanks to René Schwaiger and Lukas Winkler

  • If any of the tests in make run_memcheck fail valgrind will now set an exit-code which will get picked up by make,
    thanks to Lukas Winkler

  • We introduced git reference repositories to save I/O on our build system,
    thanks to Lukas Winkler

  • Set LD_LIBRARY_PATH in all tests removing the need to specify it for running ctest,
    thanks to Lukas Winkler

  • Provide the RUN_SERIAL property to all tests that can not be run in parallel,
    thanks to Lukas Winkler

  • Speeding up your test runs via ctest -j is now possible,
    thanks to Lukas Winkler

  • We now disable the Xerces plugin if you use GCC with enabled ASAN to build Elektra. This update
    makes sure that you do not build the plugin with compilation settings that are known to
    cause problems.

  • Documentation and debugging capabilities of Markdown Shell Recorder were improved.

  • We added style guidelines for CMake code to


Many problems were resolved with the following fixes:

  • YAML CPP now also saves key values directly below a mountpoint correctly,
    thanks to René Schwaiger
  • If you use a minimal configuration (dump, resolver, list, and spec), all test of the test suite now finish successfully again,
    thanks to René Schwaiger
  • small refactoring in kdb-test
  • The Haskell plugin failed to build if the Haskell bindings were not included explicitly by name.
  • Fix invalid handling of keynames in the spec plugin.
  • The Shell Recorder counts the number of executed tests properly again.
  • CMake now fails if the required plugins list or spec (on
    non-MinGW platforms) are missing from the current build configuration.
  • The Lua, Python 2,
    Python, and Ruby plugins now require SWIG bindings for
    the corresponding programming language,
    thanks to René Schwaiger
  • The type checker now also honors type next to check/type
  • Fix various compiler warnings
  • The detection of Botan, Libgcrypt, LibGit2 and OpenSSL now also works properly, if we treat warnings as errors (compiler switch -Werror),
    thanks to René Schwaiger
  • The multifile plugin now passes the child config
    to the storage plugins too and also handles symlinks correctly,
    thanks to Thomas Waser


Elektra Initiative are the people behind Elektra.
Our goal is to build up expertise with configuration settings and improve the situation in the FLOSS landscape.
To learn more about the needs of configuration-wise non-trivial FLOSS applications, we have workshops.
After a successful workshop with the LCDproc's maintainer, the next Workshop will be with people from KDE.

We will use the opportunity of Akademy being in Vienna.
We already got positive feedback from kconfig maintainers (David Faure and Aleix Pol).

If you are interested, you can sign up.
We are looking forward to an informative, interactive and interesting workshop!


We are currently working on following topics:

  • Klemens Böswirth: elektrifying LCDproc
    After some setbacks (the two original developers who wanted to work on LCDproc resigned because of job duties)
    LCDproc development restarted now successfully.
    The new plan is to have more intermediate stages.
    In particular the first integration will be a minimal invasive integration without high-level API.
  • Armin Wurzinger: type system for Elektra's specification language
  • Anton Hössl: Puppet
  • Daniel Bugl: Web UI
  • Hani Torabi Makhsos: reduce community entry barriers
  • Kurt Micheli: order preserving minimal perfect hash map
  • Lukas Winkler: continous integration
  • Mihael Pranjić: mmap plugin (i.e. avoiding reparsing of configuration files)
  • Peter Nirschl: integrity and confidentiality
  • René Schwaiger: parsing techniques
  • Thomas Wahringer: notification techniques
  • Thomas Waser: Linux distribution based on Elektra
  • Ulrike Schaefer: generate shell completion files from Elektra's specification
  • Vanessa Kos: misconfiguration bug database
  • We created a proof of concept for a Chef resource and an Ansible module successfully setting Elektra's keys.
    They are not yet published. If you are interested on this preliminary work, please contact us.

Get It!

You can download the release from here
or GitHub

The hashsums are:

  • name: elektra-0.8.23.tar.gz
  • size: 5870069
  • md5sum: 0a065ed381a59b6213bd46fd3c82ba83
  • sha1: 0727b420ff721e654b0ba6ab1d0c78e5e2341d26
  • sha256: f1d3cd4888ba3ef47c1327cbddf21dff7be289f94217f12e5e93105273ca6c48

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

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

Stay tuned!

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

For any questions and comments, please contact the
issue tracker on GitHub
or Markus Raab by email using

Permalink to this NEWS entry

For more information, see

Best regards,
Elektra Initiative

0.8.22 Release

@markus2330 markus2330 released this Feb 27, 2018 · 1818 commits to master since this release

You can also read the news on our website

  • guid: 4884a54f-996a-4564-a138-38a70166fed7
  • author: Markus Raab
  • pubDate: Tue, 27 Feb 2018 19:35:58 +0100
  • shortDesc: Logo, INI, Lookup

We are proud to release Elektra 0.8.22!
In 429 commits, 8 authors changed 548 files with 60369 insertions(+), 6783 deletions(-).

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

For a small demo see here:


You can also read the FOSDEM interview and watch the FOSDEM main talk given recently.

Elektra is now an official part of Homebrew and
Alpine Linux.


  • New Logo and Website Theme
  • INI plugin greatly improved
  • Notifications API and Bindings for Asynchronous I/O
  • Plugin Processes
  • Lookup with the Order Preserving Minimal Perfect Hash Map

New Logo and Website Theme

We are proud to present our new logo.
It has a new shape and cooler colors.


Thanks to Philipp Frei!

We also gave the website a new look. It has the colors from the logo and new
fonts (Lato and
Libre Franklin) that improve
readability and add to a unique look. The restructured start page contributes to
the new look as well.

We also updated asciinema-player to 2.6.0.

Thanks to Thomas Wahringer.

We also fixed security issues in the Website due to an old version of jquery,
thanks to Marvin Mall.

Thanks to Bernhard Denner for keeping our infrastructure running.

INI plugin greatly improved

  • dini is no longer experimental anymore and adds the binary plugin.
  • We added a crash test for the INI plugin that feeds the plugin with problematic input data we determined using AFL
  • We fixed various small bugs that could potentially cause the INI plugin to crash and fixes the problems as reported by AFL
  • The INI plugin now converts a section to a normal key-value pair if you store a value inside it. This has the advantage that you will not lose data unexpectedly anymore.
  • The INI plugin should now read most key-value pairs containing delimiter characters (=) properly.

Thanks to René Schwaiger!

Nevertheless, we did not switch to INI as default format.
This has some reasons:

  • In many workflows, dump is the better choice: e.g. with kdb editor you can edit any parts of Elektra with any format (e.g. INI) more safely.
    (With the INI plugin in some of these situations meta data is wrongly shown.)
  • The code base of INI is not fully tested and partly not well understood.
  • We plan to switch to a newly written parser (most likely YAML) and want to avoid that users have two migrations.
    The migration from dump is easier (especially compared with INI) because the dump format is recognisable without ambiguity.
    (Thus the INI file parses nearly any file, it is hard to detect that a file is not INI)

But for those who want to switch, the migration will be smooth:
The dini plugin makes sure that old dump files are still being read.
Only when writing out configuration files, configuration files are converted to INI.
To change to INI during compilation, simply use:


Or simply switch for your installation with:

sudo kdb change-default-storage dini

You can also mount INI (or dini) as root:

sudo kdb mount default.ini / dini

Notification API and Bindings for Asynchronous I/O

This release contains an experimental implementation of Elektra's notification feature.
This feature enables applications to get updates when configuration is changed at run-time.
For more details see the preview tutorial at

Notification API
is implemented by a new library called elektra-notification.
To use the library you need the new internalnotification plugin.
Since the plugin is experimental it needs to be enabled when building Elektra
from source (e.g. by passing
-DPLUGINS="ALL;-EXPERIMENTAL;internalnotification" to cmake).

New bindings for asynchronous I/O called "I/O bindings" also have been added.
These bindings allow Elektra's plugins and other parts to perform asynchronous operations.
I/O bindings are opt-in for application developers.
New features of Elektra that take advantage of I/O bindings will have fallbacks where viable.
These fallbacks will use synchronous I/O thus keeping the status quo.

This release includes an experimental I/O binding for uv.
The interface for I/O bindings is currently experimental and might change in the future.

Elektra's notification feature is not complete yet.
So called "transport plugins" will be responsible for sending and receiving
notifications using different protocols or libraries (like ZeroMQ or D-Bus).
These plugins will make use of the new I/O bindings.
We plan to introduce the first transport plugins with the next release of Elektra.

Plugin Processes

A new library called pluginprocess
has been added. This library contains functions that aid in executing plugins in
a separate process. This child process is forked from Elektra's main process
each time such plugin is used and gets closed again afterwards. It uses a simple
communication protocol based on a KeySet that gets serialized through a pipe via
the dump plugin to orchestrate the processes.

Such a behavior is useful for plugins which cause memory leaks to be
isolated in an own process. Furthermore this is useful for runtimes or libraries
that cannot be reinitialized in the same process after they have been used.

Lookup with the Order Preserving Minimal Perfect Hash Map

The ksLookup (...) has a new search algorithm, that acts as an alternative to the
binary search. The Order Preserving Minimal Perfect Hash Map (OPMPHM) is a non-dynamic,
randomized hash map and is very effective for mostly static configurations.
The OPMPHM can be enabled for a search by passing the in kdbproposal.h
defined option KDB_O_OPMPHM to the lookup.
Be aware that if the KeySet changes often using the OPMPHM might not be a good
idea, read more about the OPMPHM.

When you are not sure if the OPMPHM will speed up you searches, wait for the next release,
that one will include a hybrid search algorithm that combines the best properties of
both search algorithms.

To disable OPMPHM (e.g. on systems with tight memory constraints), you can pass

Other New Features

We added even more functionality, which could not make it to the highlights:

  • The Web UI was greatly improved, thanks to Daniel Bugl
    The version of clusterd was increased from 1.0.0 to 1.1.0.
  • Elektra is now part of the official Homebrew repository. We still provide a
    tap, if you want to install Elektra together with plugins or bindings that require
    additional libraries.
  • The building and linking of the haskell bindings and haskell plugins has been
    greatly improved.
  • The invoke library can now report errors upon opening/closing a plugin,
    thanks to Armin Wurzinger.
  • The YAML CPP plugin does not require Boost anymore, if you
    installed yaml-cpp 0.6.
  • Improved colored output in kdb tool.
  • We added two build jobs: docker and haskell.
    Thanks to Bernhard Denner and Armin Wurzinger.
  • YAML CPP does not write binary data to a config file, if you forget to load the Base64 plugin.
  • YAML CPP now encodes empty binary keys as NULL values (~), and also adds the meta key binary for such values automatically.


We improved the documentation in the following ways:


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).

We executed old test cases against the latest Elektra version and all
tests passed.

In kdbinvoke.h we changed the API so that elektraInvokeOpen
and elektraInvokeClose can yield error messages.

We added:

  • the public headerfiles kdbnotification.h, kdbio.h, kdbiotest.h.
  • the private headerfiles kdbnotificationplugin.h, kdbioprivate.h.


  • Fix bash shebang of bash scripts, thanks to Jakub Jirutka
  • Remove unportable unneeded asm, thanks to Timo Teräs and Jakub Jirutka
  • Fixed syntax in shell recorder, thanks to René Schwaiger
  • Used mktemp in to allow parallel run of test cases,
    thanks to Armin Wurzinger.

Notes for Maintainer

These notes are of interest for people maintaining packages of Elektra:

  • dini is no longer experimental.
  • CMake: BINDINGS now behaves like PLUGINS
    By default now all MAINTAINED bindings except EXPERIMENTAL and DEPRECATED are included.
    For more details see
    To include both intercept bindings, you now need to write INTERCEPT, to only include getenv
    interception intercept_env. intercept in lower-case does not work anymore.

The following files are new:

  • Libs:,,,
  • Headers: kdbgetenv.h, kdbio.h, kdbpluginprocess.h
  • Plugins: base64/Base64.pdf
  • Binaries: getenv, test_context, test_fork, test_getenv, test_ks_opmphm, test_opmphm
  • Other: elektra-io.pc

The following files were removed:

  • Tests: testmod_semlock

Notes for Elektra's Developers

These notes are of interest for people developing Elektra:

  • We now use clang-reformat-5.0 for formatting.
    Please upgrade your clang.

  • Build Agent ryzen v2 was added to speed up jenkins build all please,
    thanks to Armin Wurzinger.

  • Travis maintenance (Qt 5 and other problems),
    thanks to René Schwaiger.

  • BINDINGS was greatly improved and the CMake functions were simplified.
    Bindings now also have a with meta data.
    A big thanks to Thomas Wahringer.

  • Decision: Logging with ELEKTRA_LOG is only for C/C++.

  • Including kdberrors.h in a C++ files now also works, if you do not add the statement

    using namespace ckdb;

    before you import kdberrors.h.

  • The CMake code for Elektra’s Qt-GUI now detects the location of Qt 5 automatically if you
    installed Qt via Homebrew.

  • All Shell Recorder tests should not now correctly restore your old configuration after you execute them,
    thanks to René Schwaiger.

  • The Base64 plugin does not encode empty binary values in meta mode anymore. This update allows plugins such as YAML CPP to handle empty keys properly.


Many problems were resolved with the following fixes:

  • kdb global-umount also removed other mountpoints
  • We fixed internal inconsistency in the CMake code of the Augeas plugin
  • We fixed the haskell bindings and plugins on Debian Stretch
    and added a new build server job to test that in the future.
  • Cleanup in list plugin, thanks to Thomas Wahringer
  • The Shell Recorder now exports and imports the root of a mountpoint instead of the mountpoint itself. This change makes sure that Shell
    Recorder test do not change the configuration directly below the specified mountpoint.

Get It!

You can download the release from here
or GitHub

The hashsums are:

  • name: elektra-0.8.22.tar.gz
  • size: 5885118
  • md5sum: 5cbd9e33daf51f6f33791ff3f99342a6
  • sha1: 4954ff16cfe7dc69e45e6a748556262b8fb1a9fa
  • sha256: 962598315619d5dff3a575d742720f076dc4ba3702bd01609bfb7a6ddb5d759f

The release tarball is also available signed by me using GnuPG from
here or

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

Stay tuned!

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

For any questions and comments, please contact the
issue tracker on GitHub
or me by email using

Permalink to this NEWS entry

For more information, see

Best regards,
Elektra Initiative

Release 0.8.21

@markus2330 markus2330 released this Dec 22, 2017 · 2248 commits to master since this release

0.8.21 Release

We are proud to release Elektra 0.8.21.

  • guid: 7f5de1b1-6086-47a6-9922-cac08c898ae7
  • author: Markus Raab
  • pubDate: Fri, 22 Dec 2017 09:24:02 +0100
  • shortDesc:

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

The news can be read rendered at our web server.


In this release 8 authors created 307 commits and we changed 217 files (5227 insertions, 1914 deletions).
The highlights of the release are:

  • Fosdem Talk about Elektra was accepted
  • CC-licensed book about Elektra published
  • Maturing of plugins
  • Elektra with encryption
  • Preparation for switch to INI as default storage

Fosdem Talk about Elektra in Main Track

We are happy to announce that there will be a talk about
Elektra in one of the main tracks of Fosdem 2018:

  • Title: Configuration Revolution
  • Subtitle: Why it Needed 13 Years and How it Will be Done
  • Day: Saturday 2018-02-03
  • Start time: 15:00:00
  • Duration: 50 min
  • Room: K.1.105 (La Fontaine)

And a second talk in the Config Management DevRoom:

  • Title: Breaking with conventional Configuration File Editing
  • Subtitle: Puppet with a Key/Value API in a User Study
  • Day: Sunday 2018-02-04
  • Start time: 30:00
  • Duration: 25min
  • Room: UA2.114 (Baudoux)

See you in Brussels at 3 and 4 February 2018!

I will also be present in the Config Management Camp directly after Fosdem in Gent.

CC-licenced Book About Vision of Elektra Published

I am proud to release a book with the title "Context-aware Configuration" describing:

  • the last 13 years of Elektra (focus on last 4 years with the questionnaire survey and code analysis),
  • the current state of Elektra, and
  • the long-term goals of Elektra (context-aware configuration).

The Fosdem talk will cover some highlights from the book.

A huge thanks to everyone involved in the questionnaire survey,
without you we would not have been able to collect all the
information that led to the requirements for Elektra.

The LaTeX sources are available here
and the compiled book can be downloaded from here.

Maturing of Plugins

  • The new Directory Value plugin supports storage plugins such as YAJL and YAML CPP . It adds extra leaf values for directories (keys with children) that store the data of their parents. This way plugins that normally are only able to store values in leaf keys are able to support arbitrary key sets.
  • The YAML CPP plugin reads and writes YAML data using yaml-cpp. The plugin supports arrays, binary data and metadata.
  • The Camel plugin stores data as simplified YAML flow lists containing double quoted keys and values. For proper YAML support please use the YAML CPP instead.
  • The mINI plugin reads and writes simple property list, separated by equal (=) signs.
  • The xerces plugin allows Elektra to read and write XML data. The plugin uses Xerces-C++ for this task. It supports both arrays and metadata.
  • The boolean plugin normalizes boolean values such as 0, 1, true and false.
  • The crypto plugin and fcrypt plugin are described below.

Elektra With Encryption

The plugins fcrypt and crypto are now considered stable. They are no longer tagged as experimental.
While crypto encrypts individual values within configuration files, fcrypt encrypts and/or signs the whole configuration file.

For this release Peter Nirschl prepared a demo showing Elektra's cryptographic abilities:


Thanks to Peter Nirschl for this great work!

Switch to INI

We plan to switch to INI as default storage instead of Elektra's infamous internal dump format.

As preparation work we implemented the dini plugin which transparently
converts all dump files to ini files on any write attempt.
Furthermore, we fixed most of the INI bugs which blocked INI to be the
default storage.

Due to this progress we will likely switch to INI as default starting
with the next release. If you want to, you can switch now by compiling
Elektra with:


Or simply switch for your installation with:

sudo kdb change-default-storage dini

If you are already using ini as default, changing to dini will:

  • add some overhead because dini always checks if a file uses the dump
    format, unless the dump plugin is not installed.
  • add support for binary values using the binary plugin

NOTE: INI (dini) was not completely ready for 0.8.21 thus we kept dump as default.
dini is currently an experimental plugin.

Other New Features

We added even more functionality, which could not make it to the highlights:

  • kdb rm now supports -f to ignore non-existing keys

  • use % as profile name to disable reading from any profile

  • The new function elektraArrayDecName:

    int elektraArrayDecName (Key * key);

    decreases the index of an array element by one. It can be used to reverse the effect of elektraArrayIncName,
    thanks to René Schwaiger


We improved the documentation in the following ways:

  • We renamed our beginner friendly issues to "good first issue" as recommended by GitHub.
  • In many parts of the documentation we already switched to American spelling
    thanks to René Schwaiger
  • Added more automatic spelling corrections
    thanks to René Schwaiger
  • Fixed many spelling mistakes
    thanks to René Schwaiger
  • We extended the ReadMe of the jni plugin. The ReadMe now also contains information about the Java prerequisites of the jni plugin on Debian Stretch.
  • Improved notes about testing
    thanks to Thomas Wahringer
  • qt-gui: give hints which package to install
  • The build phrases jenkins build all please and jenkins build doc please were documented
    thanks to René Schwaiger
  • Documentation for libelektra-invoke was added


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).

All unit tests of 0.8.20 run successfully with Elektra 0.8.21.
There are, however, some additions and changes in rarely used interfaces:

  • added elektraArrayDecName and elektraArrayValidateName in libease
  • fixed kdbinvoke.h interface: make structure private and complete API
  • fixed xmlns and xsi:schemaLocation to be
  • the private header file kdbopmphm.h got nearly rewritten

Notes for Maintainer

These notes are of interest for people maintaining packages of Elektra:

  • We added the following files in this release:
    • testmod_directoryvalue
  • The following plugins are not marked as experimental anymore:
    • camel
    • crypto
    • mini
    • xerces
    • yamlcpp
  • The binding intercept-fs is now marked more clearly as experimental
  • The lua and jni plugins are again experimental because they do not work with some Lua/Java interpreters.

Notes for Elektra's Developers

These notes are of interest for people developing Elektra:

  • From now on release notes are written as part of PRs
  • Elektra Initiative is spelled as two words
  • At some more places we switched to use the logger, thanks to René Schwaiger
  • Shell Recorder got many improvements, see below in Testing.
    Please use it.
  • The plugin's template now adds all placements within backends by default
    (must be removed accordingly).
  • We now warn if plugins do not have any placement.
  • Please prefer -log and -debug builds
  • The build server now understands the build phrase jenkins build all please
    thanks to René Schwaiger.
    Please use it carefully, since it puts our build server under heavy load.
  • Markdown Shell Recorder Syntax recommended when reporting bugs.
  • Elektra's Dockerfile was improved and simplified, thanks to Thomas Wahringer.
  • Add more Explanations how to do Fuzz Testing
  • Started documenting disabled tests in doc/todo/TESTING
  • You now can use tests/icheck.suppression to disable already checked API changes.
  • The (hopefully) last Sourceforge references were removed and a redirection page was added,
    thanks to @the-Arioch for reporting.


  • AFL unveiled some crashes in INI code
  • fix OCLint problems, thanks to René Schwaiger
  • fix ASAN problems, thanks to René Schwaiger
  • disabled non-working tests
  • Shell recorder
  • Benchmark optionally also works with OpenMP, thanks to Kurt Micheli
  • The Shell Recorder now uses kdb-static or kdb-full if kdb is not available (BUILD_SHARED=OFF)


Many problems were resolved with the following fixes:

  • fix use of dbus_connection_unref(NULL) API
    thanks to Kai-Uwe Behrmann
  • Properly include headers for std::bind
    thanks to Nick Sarnie
  • qt-gui: assure active focus on appearance selection window
    thanks to Raffael Pancheri
  • René Schwaiger repaired the boolean plugin:
    • wrong metadata was used
    • plugin configuration was missing
    • documentation was missing
    • logging code was added
  • René Schwaiger repaired many problems different build agents had
  • kdb info -l does not open KDB anymore.
  • change-resolver-symlink and change-storage-symlink now correctly use
  • date plugin will be removed on attempts to compile it with gcc 4.7, thanks to René Schwaiger
  • C plugin: storage/c metadata added
  • fix disabling documentation in CMake, thanks to Kurt Micheli
  • Simplify elektraArrayValidateName, thanks to René Schwaiger


The Order Preserving Minimal Perfect Hash Map (OPMPHM) is ready to extend ksLookup. The implementation of the randomized Las Vegas hash map
algorithm is in a final stage and the heuristic functions that ensure time and space optimality are backed up by benchmarks.
Thanks to Kurt Micheli, the next release will include the OPMPHM!

Get It!

You can download the release from here
or GitHub

The hashsums are:

  • name: elektra-0.8.21.tar.gz
  • size: 4712043
  • md5sum: d627a01a0249fde46e80042c848d4521
  • sha1: a7659a7bb1b2388d03cdf0084160de612e5c4511
  • sha256: 51892570f18d1667d0da4d0908a091e41b41c20db9835765677109a3d150cd26

The release tarball is also available signed by me using GnuPG from
here or

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

Stay tuned!

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

For any questions and comments, please contact the
issue tracker on GitHub
or me by email using

Permalink to this NEWS entry

For more information, see

Best regards,
Markus Raab for the Elektra Initiative

Release 0.8.20

@markus2330 markus2330 released this Oct 31, 2017 · 2555 commits to master since this release

0.8.20 Release

  • guid: 547d48e2-c044-4a8e-9d32-ca6b6fb914d9
  • author: Markus Raab
  • pubDate: Thu, 31 Oct 2017 23:08:07 +0200

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


This is by far the largest release in Elektra's history.
In 2813 commits, 19 authors changed 1714 files with 92462
insertions(+) and 21532 deletions(-). The highlights are:

  • new website and puppet-libelektra
  • plugin+bindings for Haskell and Ruby
  • improved shell completion
  • new plugins: yamlcpp, camel, mini, date, file, range,
    multifile, xerces, ipaddr

Unfortunately this release was delayed. The reason for the delay is that our
community server (build server, web site,...)
was compromised and we needed to reinstall everything from scratch.

We took advantage of the situation, and reinstalled everything properly
managed by puppet-libelektra.
With puppet-libelektra, you can directly set keys, specifications (validations),
and even mount new configuration files from within Puppet.

Our community server is now completely managed by libelektra.

Thanks to Bernhard Denner, for rescuing us from the difficult situation, especially
for the sprint shortly before the release.

As already already announced in December 2016
we completely reimplemented our website. Now all our websites are available via https.
This release is the first one that includes the source code of the website and its
snippet sharing functionality.

The backend for this snippet sharing website uses Elektra itself: both for its
configuration and for the configuration snippets.

Thanks again to Marvin Mall for the awesome website.

Haskell and Ruby

The Ruby binding, created by Bernhard Denner, was greatly improved and now
includes libtools bindings. It is the first binding that goes beyond Elektra's
main API. Bernhard Denner also added many
examples that
demonstrate how you can take advantage of the Ruby bindings.

Armin Wurzinger created a new binding
for the functional language Haskell. He also added support for
Haskell plugins.
Due to generic CMake and C Code, plugins can be written
exclusively in Haskell, without any glue code. Several Haskell
already exist. The Haskell support is currently experimental.

Shell Completion

René Schwaiger added completion support for Fish
in this release. We also extended our support for other shells: The new
tool kdb complete suggests how to complete an Elektra path. It considers
mountpoints and also takes bookmarks into account. Thanks to Armin
Wurzinger for creating this useful utility. Our Zsh and fish completions
already take advantage of kdb complete. Thanks to Sebastian Bachmann
for taking the time to update the zsh completions.

New Plugins

See plugin overview
to get an overview of the ever-growing number of plugins.

The yamlcpp plugin
and camel plugin
add first support for YAML.

The mini plugin
is yet another minimal INI plugin.

Thanks to René Schwaiger.

The date plugin
supports validation of dates according to three standards:

  • RFC2822
  • ISO8601

The multifile plugin
allows us to integrate many configuration files via globbing with
a single mount command. It supports .d configuration directories
as often used today.

The file plugin
interprets the content of a file as configuration value.

The ipaddr plugin
adds support for IP address validation on systems that do not
support getaddrinfo.

Thanks to Thomas Waser for creating these useful plugins.

The xerces plugin
supplants the xmltool plugin
and allows us to use XML files not following a specific schemata.
Attributes are mapped to Elektra's metadata, multiple keys with the
same names are mapped to arrays.

Thanks to Armin Wurzinger.


The documentation was greatly improved within this release.

  • Added "Hello, Elektra" and logging tutorial,
    thanks to René Schwaiger
  • extended FAQ
  • Christoph Weber (@krit0n) improved some tutorials
  • options are passed to PDFLaTeX compiler,
    thanks to René Schwaiger
  • small fixes, thanks to Dominik Hofer
  • fix many spelling mistakes, use American english, fix formatting,
    fix+add links, unify title style, fix code blocks, add titles
    and fix the PDF manual
    a big thanks to René Schwaiger


We added even more functionality, which could not make it
to the highlights:

  • DBUS support for qt-gui (listening to configuration changes):
    qt-gui gets a viewer-mode where configuration settings are immediately updated
    via DBus notifications, thanks to Raffael Pancheri
    With the new qt-gui and newer qt releases (~5.7) the qtquick experience is much smoother,
    for example, the tree view does not collapse on syncs anymore.
  • Armin Wurzinger greatly improved the JNA binding.
    The build system now uses Maven to build them. Armin also added Doxygen documentation
    and a script
    to test the JNA binding using Randoop.
  • The improved curlget plugin,
    is now able to upload configuration files,
    thanks to Thomas Waser and Peter Nirschl (CMake fixes).
  • New command kdb rmmeta, thanks to Bernhard Denner
  • crypto plugin and fcrypt plugin
    • The configuration option gpg/key was renamed to encrypt/key
    • The plugins now make sure that you configured them properly by
      validating key IDs
    • thanks to Peter Nirschl
  • fcrypt plugin:
    • The plugin now list available GPG keys when config is missing
    • You can now specify signatures via the configuration option sign/key
    • New text mode, enabled by default (disable by setting fcrypt/textmode to 0)
    • New option fcrypt/tmpdir allows you to specify the output directory of gpg
    • If you want to learn how to use the plugin please check out our new ASCII cast
    • thanks to Peter Nirschl
  • Thomas Waser added useful scripts:
  • limit min/max depth for kdb ls (-mM), thanks to Armin Wurzinger.
  • conditionals: allow multiple assigns and conditions
  • base64 also works as filter for binary data (not just encrypted data),
    thanks to René Schwaiger
  • csvstorage plugin:
    compatibility with RFC 4180, thanks to Thomas Waser
  • gitresolver plugin:
    improvements and update of libgit version, thanks to Thomas Waser
  • curlget plugin:
    also allow uploading of configuration files, thanks to Thomas Waser


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).

We added explicit to some C++ constructors in libtools and internally moved
some typedefs. ModulesPluginDatabase now has protected members (instead
of private). This might break code in special cases, but should not affect binary
compatibility. As always we tested for binary compatibility.
This time we had to revert some changes to keep libelektra-tools
ABI compatible.


  • scripts now work on macOS (readlink and sed),
    thanks to Armin Wurzinger and René Schwaiger
  • generalized error #60, "invalid line encountered"
  • added new errors #164 - #187
  • added private headerfiles kdbglobal.h, kdbinvoke.h

Notes for Maintainer

  • now contains only the BSD 3-Clause License
    (without any additional non-license text)
  • AUTHORS renamed to
  • is now a generated file containing all news concatenated
  • CMake 2.8.8 is no longer supported, CMake 3.0 is now needed
  • fix macOS RPATH, remove old policies, thanks to René Schwaiger
  • new option BUILD_DOCSET to build DocSet, thanks to René Schwaiger
  • new option ENABLE_OPTIMIZATIONS for OPMPHM preparation work,
    thanks to Kurt Micheli
    For this release, please keep ENABLE_OPTIMIZATIONS turned off.
    Currently the flag increases memory usage, without being faster.
  • add TARGET_TOOL_DATA_FOLDER for installation of tool data
    (for rest-backend and rest-frontend)

The following files are new:

  • Libs: ,libelektra4j-0.8.20.pom.xml
  • Plugins:,,,,,,,,
  • Tools: backup, mount-list-all-files, mountpoint-info, restore,
    stash, update-snippet-repository
  • Tests: change-resolver-symlink, change-storage-symlink,
    check-env-dep, check_bashisms, check_doc, check_meta,
    testmod_camel, testmod_crypto_openssl, testmod_date,
    testmod_file, testmod_ipaddr, testmod_jni, testmod_mini,
    testmod_range, testmod_simpleini, testmod_xerces, testmod_yamlcpp,
    testtool_plugindatabase, test_utility

The following files were removed: testmod_curlget, testmod_dpkg,
testmod_profile, testmod_shell, testmod_spec, test_opmphm_vheap,

The following files were renamed:

In the Debian branch of the git repo,
we now build upon the work of Pino Toscano. The branch allows building
Debian packages of the release for Debian Stretch and Jessie.

Thanks to Pino Toscano for the high-quality packages.


  • Added macros, thanks to René Schwaiger:
    • ELEKTRA_NOT_NULL is an assertion against null pointers
    • ELEKTRA_MALLOC_ERROR sets an error when allocation failed
    • ELEKTRA_STRINGIFY to quote a macro value
      ELEKTRA_PLUGIN_STATUS_NO_UPDATE for return values of plugins.
  • ELEKTRA_STRINGIFY used throughout, thanks to René Schwaiger
  • use (void) instead of () (added -Wstrict-prototypes)
  • new positions for global plugins,
    thanks to Mihael Pranjic
  • Kurt Micheli added generateKeySet to randomly generate large key sets
  • add vagrant and docker support, thanks to Christoph Weber (@krit0n)
  • improve support for CLion, NetBeans and oclint
  • portability improvements for logger, thanks to René Schwaiger
  • metadata consistency check within source repo, thanks to Thomas Waser
  • ELEKTRA_PLUGIN_EXPORT accepts macro as argument
  • fallthroughs in switch statements are now marked with FALLTHROUGH
  • introduce print_result to unify test output, thanks to René Schwaiger
  • export validateKey as preparation for type plugin


  • kdb: errors are more colorful, add infos to report issues,
    catch signals for kdb tools to print errors on crashes,
    use $EDITOR if sensible-editor and editor is not found.
    René Schwaiger fixed preposition and format of the messages.
  • added Spanish translation for qt-gui
    thanks to AdanGQ (@pixelead0)
  • augeas plugin: error messages improved, export genconf (for WebUI to list all lenses)
  • improvements for CentOS and Debian Packages,
    thanks to Sebastian Bachmann
  • Travis improvements, fixes, and many build variants added,
    thanks to Mihael Pranjic and René Schwaiger
  • ronn now always uses UTF-8 as encoded and is no longer required
    as essential dependency to get man pages, thanks to René Schwaiger
  • GitHub now recognizes that we have a BSD licence,
    thanks to René Schwaiger
  • uninstallation Script also uninstalls directories and Python files,
    thanks to René Schwaiger
  • Kurt Micheli created a benchmark tool to generate large KeySets
  • added/reformatted use cases, thanks to Daniel Bugl
  • Thomas Wahringer prepared for a new theme on the website
  • Arfon Smith updated meta data for Elektra's journal entry


  • fixed all remaining ASAN problems,
    thanks to René Schwaiger and Armin Wurzinger
    (some tests are excluded when compiled with ASAN)
  • fix many compilation warnings,
    thanks to René Schwaiger and Armin Wurzinger
  • fixed many potential out-of-bound errors,
    thanks to René Schwaiger
  • fixed warnings of Clang's static analyzers,
    thanks to René Schwaiger
  • fixed cppcheck warnings, thanks to Armin Wurzinger
  • fixed strict prototypes, thanks to Armin Wurzinger
  • fixed and use scan-build (clang)
  • fixed potential memory leaks on errors
  • added assertions
  • generate Java API tests with randoop which
    revealed bugs in jna bindings that were fixed,
    thanks to Armin Wurzinger
  • Numerous fixes in the shell recorder,
    which does regression tests on Elektra's tutorials
    and READMEs, thanks to René Schwaiger and Thomas Waser


  • kdb file: never print errors, thanks to René Schwaiger
  • plugin mathcheck: fixed regex #1094, thanks to Thomas Waser
  • dbus: properly do unref and document how to integrate DBus,
    thanks to Kai-Uwe Behrmann
  • dbus accepts announce=once which is used for kdb mount-openicc
    It protects against message floods in large configuration files,
    thanks to Kai-Uwe Behrmann for reporting
  • plugin desktop: fix crash if DESKTOP_SESSION is missing
  • shell-recorder: many fixes and improvements,
    thanks to Thomas Waser and René Schwaiger
  • fix getopt positional parameters, thanks to Armin Wurzinger
  • resolver: avoid silent errors of fchown/fchmod
  • plugin fcrypt: fixes in file name handling to make leaks less likely
    (still needs tmpfs to be secure!), thanks to Peter Nirschl
  • plugin jni: fix segfaults on errors, plugin is nevertheless tagged
    as experimental due to other problems
  • plugin type: reject integers if garbage follows
  • kdb: fix memleak when listing plugins
  • many spelling fixes and fix typo in source of qt-gui:
    thanks to klemens (ka7)
  • dpkg, fix file leakage, thanks to Armin Wurzinger
  • plugin line: only skip parentKey if present
  • plugin resolver: avoid failure after commit for files that
    cannot be removed
  • plugin simpleini: handle more errors, make format parameter more robust
    thanks to Bernhard Denner
  • plugin crypto: fix compilation errors for openssl versions on
    Debian 9, thanks to Peter Nirschl
  • kdb mv: fail without keys also in recurse mode
  • fix bashism, thanks to Armin Wurzinger
  • qtgui: fix crash on unhandled exception on binary values,
    thanks to Raffael Pancheri


We are currently working on following topics:

  • Migration of LCDproc, OpenIcc, machinekit, ... to Elektra.
  • A reimplementation of Elektra's core API in Rust
    (next to implementation in C).
  • A user interface which generates restricted input fields
    based on the specification.
  • YAML as configuration file format (next to INI, XML, JSON, TCL, ...).
  • An mmap persistent cache.
  • Improvements for the specification language.
  • New APIs to be directly used by applications.
  • An order-preserving minimal hash for O(1) lookup and iteration.
  • Mainloop migration for notifications (currently only DBus,
    to be extended to Redis, ZeroMq).
  • Improvements on the Website and snippet sharing to also
    handle misconfiguration.

Get It!

You can download the release from here
or GitHub

The hashsums are:
name: elektra-0.8.20.tar.gz
size: 4740032
md5sum: 0e906f1a1677a8bfb31d144e1eaeb3cf
sha1: 5e33c49ae6e3b890c9267288fb9f321289910eb5
sha256: e9cbc796e175685ccb6221f1dd5ea5c43832f545c40557c32b764ff5d567b312

The release tarball is also available signed by me using gpg from
here or

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

Stay tuned!

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

For any questions and comments, please contact the
issue tracker on GitHub
or me by email using

Permalink to this NEWS entry

For more information, see

Best regards,

Website Release

@markus2330 markus2330 released this Dec 22, 2016 · 4773 commits to master since this release

  • guid: 102b84a3-c41e-485c-8fe2-f12a24b3fbfd
  • author: Marvin Mall
  • pubDate: Thu, 22 Dec 2016 17:46:19 +0100
  • shortDesc: introduces new Elektra website with snippet sharing


  1. Release of new Elektra website with an integrated service for
    sharing of configuration snippets.
  2. The website also supports conversion between different
    configuration formats.
  3. Website structures documentation and news sections in a new way.


With Elektra developing into a more and more reliable as well as
popular system to manage system configurations, the demand for a
better public appearance increases as well. For this reason, we
are happy to be able to announce the release of our new

The new website does not only give us a chance to better present
ourselves to the open world, it also enables us to structure our
project documentation better. We hope that this will make it easier
for our users to get started with Elektra and all of its awesome

Besides the documentation, the website does also include a database
that can be used to share, search, download and convert configuration
snippets in various formats. We hope that this tool helps developers
and administrators, but also anyone else to simplify their
configuration processes when they have to look for a specific
configuration snippet. Btw. with snippet we mean that you can
also share parts of configuration files that you find particular

But sharing of snippets does not only help other users, it can help
yourself as well because you can search for them easier. You also
have access to the snippets in various formats at any time, allowing
you to use them across multiple system by mounting them with the
curlget resolver!

The Website

The website was written by Marvin Mall in the course of his
bachelor thesis
as part of the front-end he developed for his snippet sharing service.
His main goals were to create a proper appearance for Elektra, but
also to create a platform that promotes his service. We think that
this worked out quite well by connecting the website with the service
the way it was done.


An important aspect of the new website was to make existing documentation
more transparent and structured. A lot of documentation files have been
changed to achieve this goal and an equal amount of effort was put into
writing a system that decouples the documentation structure on the
website from the structure used within the Elektra repository.

The tutorials section was partially reworked to make the first steps
together with Elektra easier for our users. Clearly the effort put into
the tutorials is worth it. Thanks to Erik Schnetter for the valuable
feedback where improvements are needed and Christoph Weber for (re)writing
the tutorials!

We should note -- as always in software -- that the structure on the website
is not final yet and will definitely develop over time, especially the
bindings and libraries sections will get some more attention.

If you are interested in the techniques we use to structure our files,
you can have a look at the
rest-frontend readme.
The website is already the fourth view of our markdown pages!
The others are man pages, doxygen, and github.

Homepage & News

Besides the documentation we also wanted a place to properly present
ourselves and our news around Elektra. For this reason we created a new
home page which shall give an overview of what Elektra is and can do.
Additionally to that, we also added a news section to keep you better

We hope that you enjoy our new appearance as much as we do!

Snippet Sharing

Another important part of the website and also without doubt the part
that took most effort to create, is the service that allows for sharing
of configuration snippets. It is run by a REST service fully built with
the help of CppCMS on basis of Elektra as
data store. All data concerning snippets and user accounts is stored
in Elektra's key database (of course with password being properly hashed).

The service allows you to paste configuration snippets in various (supported)
formats and to tag, describe and name them. This in return allows you to
search snippets by keywords and to download them -- even in other formats than
the format used for uploading.

Clearly the service is meant to be driven by its users. Therefore we ask
you to share your own configuration snippets, maybe they can be of help, e.g.,
be a time saver for someone else!

Snippets shared with the service are
BSD licensed.
The snippets can also be downloaded directly as bundle from a separate
GitHub repository.
As soon as a snippet is added, changed or deleted on the website, a job
that updates the repository is triggered. So you can expect the repository
to be always up-to-date.


The website is fully written with the help of AngularJS and is therefore
heavily based on JavaScript. This should be no issue though as the
website does only use resources that can be found in the official Elektra

  1. So in case you cannot or do not want to use JavaScript, you
    can find all resources also here.
  2. If you are only worried about executed untrusted JavaScript,
    you can study and improve the
    Web Frontend,
    which builds the website.
    Based on this, we hope you disable NoScript for our page
    so that you are able to share snippets!


All Elektra Domains directly hosted by us are now only served by https.
The former http sites are only redirects to https. This might cause
trouble with some software, e.g., update /etc/apt/sources.list:

deb     [trusted=yes] wheezy main
deb-src [trusted=yes] wheezy main

The build Server is no longer reachable at port 8080, but now only directly at

The new RestApi serves as backend
for the website. For the docu, simply visit the site with your browser.

While most now point to the new website, you can still
directly go to github and also to the
bug tracker.

The old Wordpress installation was shut down because of security concerns.


At this point there is not much more to say about the new website except for:
Feel free to explore it!

We greatly appreciate all feedback, be it for the website, the snippet sharing
service or other parts of the Elektra project. We always have an open ear
for suggestions and we also like to help with technical issues, simply
leave us a note on github!

Stay tuned!

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

For any questions and comments, please contact the
mailing list,
use the issue tracker on github
or write an email to
For issues or feedback concerning the website, you can also
contact us at

Permalink to this NEWS entry

For more information, see

Best regards,
Marvin & Markus

0.8.19 Release

@markus2330 markus2330 released this Nov 22, 2016 · 5374 commits to master since this release

  • guid: 8e05231a-4f3d-488b-8dc2-5f0d5c474c39
  • author: Markus Raab
  • pubDate: Tue, 22 Nov 2016 22:04:59 +0100

What is Elektra?

Elektra solves a non-trivial issue: how to abstract configuration
in a way that software can be integrated and reconfiguration can
be automated. Elektra solves this problem in a holistic way.
Read why Elektra
for an explanation of why such a solution is necessary. It can be seen as a
virtual file system
for configuration files.


  • more tutorials and getting started guides
  • new Ruby bindings
  • cleanup of core (only 124K for main library on Debian/amd64)

More Tutorials

Elektra already has an open and welcoming environment, with many
interesting discussions. It is our interest that we keep it
that way. To make this a bit more formal we added a code of

But without good introductions, it is easy to get lost in such
a large initiative like Elektra. Thus we focused on writing
great tutorials for this release!

  • We wrote an overview readme
  • We wrote new tutorials about mounting
    and validation
    (thanks to Christoph Weber)
  • We wrote a readme to shell recorder transpiler
    which allows us to execute tutorials and verify that the examples in
    them work. (thanks to Thomas Waser)
  • Lua and
    plugins got tutorials and better explanations!
    (Thanks to Marvin Mall)
  • The doxygen docu now also
    uses links to directories, thanks to Kurt Micheli!

Thanks to Armin Wurzinger for pointing to areas of improvement.
A big thanks to Marvin Mall, Kurt Micheli, Christoph Weber and Thomas Waser!

If you like the tutorials, we would love to read from you.
Please feel free to start a discussion or ask a
We also added a
and updated

Ruby Bindings

We now provide Ruby bindings for Elektra. The bindings are based on the
C++ bindings and are generated by SWIG. A strong focus was put on a good
integration with standard Ruby features and conventions, such as naming
conventions, predicates, key and meta data iteration...

A short introduction
shows some basic usage scenarios. More detailed examples can be found in the
examples directory.

A big thanks to Bernhard Denner!

Cleanup of Core

Following methods were hidden (static) or removed:

  • mount* methods
  • trie* methods
  • backend*
  • split*
  • keyGetParentNameSize
  • keyGetParentName

These are dozens of methods and it was required to adapt
the unit tests to work with the hidden methods.

A big thanks to Kurt Micheli!


  • Improved many error messages
    • spelling
    • be more friendly to the user
    • capitalization
    • mention sudo !!
  • kdb set: do not print what was not done
  • kdb editor handles non-modified files (will not do anything)
  • Be more chatty about what kdb does, can be disabled with -q or
  • Furthermore, -v now tells even more details (e.g. kdb-import outputs
    the key about to import)



  • c plugin generates C code that represents
    configuration. This is useful for unit tests or if you need to have hard-coded
    fallback configuration in your C application.
  • base64 plugin allows you to encode
    binary data. This is especially handy in combination with the
    crypto plugin
    to avoid problems with non-printable characters in configuration files.
    (Thanks to Peter Nirschl)
  • fcrypt plugin allows you to
    fully encrypt configuration files. They are only decrypted when applications
    access them. (Thanks to Peter Nirschl)
  • required plugin rejects
    every key that is not required by an application.
  • simple spec lang allows you
    to define metadata for enum
    and required in a more compact way.

Major Enhancements

  • simpleini got a configurable
    format in which it will read and write configuration files. For example, one
    can use format=% -> % to have key -> value.
  • enum got support for multi-enums,
    i.e., multiple separated values within one value. The error reporting was improved,
    too. (Thanks to Thomas Waser)
  • glob accepts a list of named flags
    instead of an integer value and aborts matching after first hit.
    (Thanks to Felix Berlakovich)
  • hosts now only accepts ipv4 and
    ipv6 keys.
    (Thanks to Felix Berlakovich)


In the perpetual effort to improve software quality, we made several improvements:
(This information is mainly intended for Elektra's developers.)

  • A new logger encourages developers to write more comments (ELEKTRA_LOG)
  • ELEKTRA_ASSERT prints better messages on failure and does not need && trick.
  • get rid of previous VERBOSE macro at many places.
  • Many assertions were added in the low-level helpers (memory management)
  • Using the assertions we fixed some undefined behavior.
    (Thanks to Thomas Waser)
  • added new configure-debian-debug and configure-debian-log helper scripts
  • The build server now checks if builds with active logger and debugging
    work correctly.
  • Improved Coding Style in crypto_botan (thanks to Peter Nirschl)
  • add external-links.txt to outputs
    (The file is generated in the build directory and contains
    all external-links. To validate them, use ./scripts/link-checker)
    (Thanks to Kurt Micheli)
  • markdownlinkconverter handles directories correctly (using stat).
    (Thanks to Kurt Micheli)
  • Fixed compiler warning caused by libxml2 (different behavior since 2.9.4),
    thanks to René Schwaiger
  • added often used links in main README
  • Improve documentation about failing test cases and what to do about it.
  • added decisions about plugin_variants
    and array.
    (Thanks to Marvin Mall)
  • Rename to metadata, metakey, mountpoint
    (Thanks to Peter Nirschl)
  • std::ios_base::showbase can be used to output metadata when streaming keys (C++)
  • New infos/status: readonly, writeonly, limited
    (Thanks to Marvin Mall)
  • The tool update-infos-status orders infos/status and allows devs to easily add/rem
    entries. (Thanks to Kurt Micheli)
  • Automatic setting of infos/status: nodoc, nodep, unittest, memleak, configurable
    (Thanks to Kurt Micheli)
  • Improve create_lib_symlink, add PLUGIN argument
    and make it useful also for other library symlinks.
  • New markdown style applied to most markdown files.
    (Thanks to Marvin Mall)
  • Tracer is now disabled, even for ENABLE_DEBUG.
    (Thanks to Marvin Mall)
  • Updated SECURITY document
  • Macro naming convention ELEKTRA_, added kdbmacros.h
  • ENABLE_DEBUG also works with clang and ENABLE_ASAN now allows devs
    to additionally enable sanitizers.
    Thanks to Gabriel Rauter.


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).

It is now possible to enquiry which plugins provide a specific format.
This needed changes in libtools, which got a new major revision.
Changes in the plugin's contract are fully compatible:
You can now use storage/ini instead of storage ini in infos/provides
which gives you the information that ini is a storage format (and not
anything else the plugin might provide). For compatibility reasons,
the build system still adds storage ini even if only storage/ini
is specified.

That means that kdb mount file.json /examples/json json still will find
json plugins even if they are not called json but

Another breaking change in libtools is that appendNamespace was renamed
to prependNamespace.

Error messages changed a bit, so if you tried to parse them, make sure
to make the e of error case-insensitive ([eE]).

In the C++ binding, rewindMeta is now const and some methods
to check if a key is in a namespace were added.

The intercept libraries were moved to a common
They can now be included or excluded like other BINDINGS.
For consistency reasons the libraries were also renamed
( and,
but symlinks allow you to link against their old names
(lib/ and lib/

Package Maintainers

This information is intended for package maintainers.

  • GI Bindings were removed from BINDINGS=ALL.
    It is recommended to use SWIG bindings instead, which
    will be added with ALL.
  • Intercept libraries are part of BINDINGS.
    They will be added on glibc systems where BINDINGS=ALL is used.
  • Documentation in textfiles is now installed,
    TARGET_DOCUMENTATION_TEXT_FOLDER was added for that purpose.
    The files are:
    •,,, METADATA.ini,, AUTHORS, CONTRACT.ini,, and

Other new files are:

  • Plugins:,,,
    (only in EXPERIMENTAL, not added by default, but with ALL)
  • site_ruby/ (ruby binding, only in ALL)
  • testcpp_keyio, testkdb_error, testmod_base64,
    testmod_fcrypt (test binaries in TARGET_TOOL_EXEC_FOLDER)

Changed files are:

  • (renamed from, but still available as symlink)
  • (renamed from, but still available as symlink)
  • version upgrade:


Elektra should work on every system that has cmake and a C/C++ compiler.

For this release we increased portability to better work with Mac OS X,
CentOS 7, and OpenSuse 42.

  • Mac OS X:
    • Travis build server now also build qt-gui
    • Support for xcode8 added (xcode6 still supported)
  • fix lua != 5.2 issues (wrong output), update docu
  • remove hard dependency to pkg-config
  • remove hard dependency to version 3 of cmake
    (most parts still work with version 2)
  • make search for swig 2 visible
  • fix plugin names and mounting on OpenSuse 42.1

A big thanks to Kai-Uwe Behrmann, Mihael Pranjić and
Sebastian Bachmann.

Fixed Issues

  • simpleini: use correct error number when open file fails
  • yajl: improve error message on non-utf8 text.
    (Thanks to Christoph Weber)
  • drop multiple / from ~ paths
    (Thanks to Thomas Waser)
  • fix failing testcases with ENABLE_DEBUG #988
    (Thanks to Thomas Waser)
  • csvstorage: files in source are rewritten #987
    (Thanks to Thomas Waser)
  • fix RTLD_NODELETE for OpenBSD
    (Thanks to Thomas Waser)
  • better handle adding/deleting of read-only (info) plugins.
  • fix behavior of multiple plugins setting errors (first error wins,
    later errors are transformed to warnings)
    (Thanks to Thomas Waser)
  • fix resolver logic for missing files
  • regex string in conditionals
    (Thanks to Thomas Waser)
  • use KDB environment variable in shell tests and fix counting of tests
    for kdb run_all.
  • output to stderr for elektrify-* scripts
  • make desktop plugin
  • avoid cmake warnings in make uninstall (avoid @)
  • fix quoting in ini plugin
    (Thanks to Thomas Waser)
  • fix plugin names and mounting with plugin pre/postfixes
    (Thanks to Kai-Uwe Behrmann)
  • mount-openicc: rename to openicc.json
    (Thanks to Kai-Uwe Behrmann)

Get It!

You can download the release from
and also here on github

  • name: elektra-0.8.19.tar.gz
  • size: 2681639
  • md5sum: 6669e765c834e259fb7570f126b85d7e
  • sha1: 82cefe4cea58d6e6b0a99ddbda24d1b57e98d93a
  • sha256: cc14f09539aa95623e884f28e8be7bd67c37550d25e08288108a54fd294fd2a8

This release tarball now is also available
signed by me using gpg

already built API-Docu can be found here

Stay tuned!

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

For any questions and comments, please contact the
Mailing List
the issue tracker on github
or by email

Permalink to this NEWS entry

For more information, see

Best regards,

0.8.18 Release

@markus2330 markus2330 released this Sep 16, 2016 · 5989 commits to master since this release

  • guid: 190576e0-9fef-486e-b8da-c4e75be08329
  • author: Markus Raab
  • pubDate: Fri, 16 Sep 2016 23:31:27 +0200

What is Elektra?

Elektra serves as a universal and secure framework to access configuration
parameters in a global, hierarchical key database.
For a small demo see here:



  • Intercept open syscalls which allows Elektra to dynamically
    generate config files from Elektra's database
  • Experimental version of cryptographic plugins
  • A new zsh completion file (next to the bash completion file)
  • Gitresolver allows to directly read and write config files
    from git instead of files present in the file system.
  • Survey completed successfully (and debts paid), we are now
    preparing raw data.

Crypto Plugin

Gpg is now used to decrypt a master password, which is used
by the individual crypto backends. So all necessary parts
for encryption of decryption of individual keys is present.

Furthermore, a new botan backend
was implemented.

See here

Thanks to Peter Nirschl.

Open Interception

When Elektra directly modifies config files which are on the disc,
and applications read the config files without Elektra, Elektra has
no control over the access, e.g. we cannot dynamically calculate
values. To avoid this, we wrote a library that
intercepts the open-call.

Together with the mozprefs plugin, we got control over the configuration
of Firefox and can dynamically change config values with all possibilities
Elektra provides.

For easy setup, we implemented the script configure-firefox.

See here

Thanks to Thomas Waser.


Resolvers in Elektra are the code that are responsible to determine where
content should be read from and stored to. They are independent of the
actual configuration file syntax.

The gitresolver
allows you to get/store config data in git.

The blockresolver
allows Elektra to take control of parts of the configuration
file. This is useful for config files such as vim or zsh, which contain
program code. The plugin allows you to split config files with special markers
into parts containing code and others controlled by Elektra.

zsh completion

Added zsh completion file, and a script (kdb install-sh-completion)
that installs bash+zsh completion when the default installation places
do not work (e.g. for Mac OS X).

Thanks to Sebastian Bachmann.


  • fix kdb-import man page, thanks to Kurt Micheli
  • mark keyIsSystem/keyIsUser as internal
  • fix doxygen reference to example
  • better document that global-mount or gmount will overwrite
    previously mounted global plugins
  • fix spelling mistake, thanks to René Schwaiger
  • Wrote tutorial how to use Elektra-python bindings,
    thanks to Ulrike Schäfer


  • shell recorder test cases now run during make test, thanks to Kurt
    Micheli and René Schwaiger (Warning: might remove present keys
    when it conflicts with their mountpoints)
  • find-tools now is pep and pyflakes happy, thanks to Kurt Micheli
  • fix bashism, thanks to Thomas Waser and Kurt Micheli
  • better error message for conditionals plugin, thanks to Thomas Waser
  • better error message for augeas plugin, thanks to Felix Berlakovich
  • Many compilation warnings fixed, thanks to Gabriel Rauter, Thomas Waser
  • GSettings: fix double free, thanks to Gabriel Rauter
  • Fix external links and implement an external link checker,
    thanks to Kurt Micheli
  • Fix openwrt/musl warnings with wrong printf format, thanks to
    Thomas Waser
  • Fix NODEP metadata, allows you to build all plugins that do not
    have dependencies.


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).


Libtools got a new major version (SOVERSION 0 -> 1):

  • backend/plugin configs are now validated by plugins (needed
    by gpg plugin, which checks if wrong key IDs are supplied during mount)
  • resolveRecommends was never implemented and was now removed


The plugins conditionals and mathcheck are incompatible in some cases
because of changes in syntax.


New API: keyRel2 which differs from keyRel by allowing you to
specify which relation should be checked.


  • github descriptions+workflow (displayed by github when creating
    PRs and issues)
  • new trigger phases for github, see
    thanks to Mihael Pranjić
  • valgrind suppressions are great again, thanks to Peter Nirschl
  • Plugins get a new namespace internal which can be used for meta-data
    that is not relevant for other plugins.
  • kdberrors.h is only generated once, which allows us to use other build
    systems, thanks to René Schwaiger
  • INCLUDE_SYSTEM_DIRECTORIES in add_plugin allows you to add a include
    path where warnings are suppressed (useful for boost).
  • infos/provides now allows multiple entries


  • Plugin-provider CRYPTO can be used to enable/disable all crypto
    plugin variants (not enabled by default because its experimental).
  • Config option ENABLE_OPTIMIZATIONS, enable by default: trade more
    memory for speed (can be turned off on embedded systems)
  • INSTALL_SYSTEM_FILES is now off by default on Mac OS X.
  • bash-completion is installed to where pkg-config tells us,
    thanks to Gabriel Rauter
    (fallback is now /usr/share/bash-completion/completions/kdb)
    was /etc/bash_completion.d/kdb (removed)
  • zsh is now installed to /usr/share/zsh/vendor-completions/_kdb
    (except for Darwin, where /usr/local/share/zsh/site-functions is used)
  • removed /etc/profile.d/ the script was
    removed (and is no longer installed), superseded by elektrify-getenv
  • added scripts install-sh-completion configure-firefox elektrify-open
  • added plugins
  • added tests testmod_blockresolver testmod_boolean
    testmod_crypto_botan testmod_crypto
    gcrypt testmod_crypto_openssl testmod_mozprefs testmod_passwd
    test_opmphm_vheap test_opmphm_vstack
  • added test data blockresolver mozprefs passwd


  • Conditionals and mathcheck plugins got support to specify relative
    keys, thanks to Thomas Waser
  • kdb command-list: commands are written in bold
  • GSettings backend can be build standalone, thanks to Gabriel Rauter
  • first data structures for order preserving minimal perfect hash map,
    thanks to Kurt Micheli
  • added a new passwd plugin, thanks to Thomas Waser
  • boolean
    plugin to normalize boolean values, thanks to Thomas Waser
  • desktop
    plugin to detect which desktop currently is running (supports kde,
    gnome, tde, unity or any other XDG conformant desktop)
  • doc/paper contains some info for joss

Get It!

You can download the release from
and also here on github

name: elektra-0.8.18.tar.gz
size: 2582183
md5sum: 62fe0fbf9ee57ffaa58a982f602f596a
sha1: 743484e16b102a00cd58956a49f0c558939d56a8
sha256: 9ee65895ba5cba6736c13c264637664c1410b25f4aaaeac8f1f83712ff93d53b

This release tarball now is also available
signed by me using gpg

already built API-Docu can be found here

Stay tuned!

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

For any questions and comments, please contact the
Mailing List
the issue tracker on github
or by email

Permalink to this NEWS entry

For more information, see

Best regards,

0.8.16 Release

@markus2330 markus2330 released this Apr 29, 2016 · 6772 commits to master since this release

In case you do not yet know about it, here is an abstract about Elektra:

Elektra serves as a universal and secure framework to access configuration
parameters in a global, hierarchical key database.
Elektra provides a mature, consistent and easily comprehensible API.
Its modularity effectively avoids code duplication across applications
and tools regarding configuration tasks. Elektra abstracts from
cross-platform-related issues and allows applications to be aware of other
applications' configurations, leveraging easy application integration.

Elektra consists of three parts:

  1. LibElektra is a modular configuration access toolkit to
    construct and integrate applications into a global,
    hierarchical key database. The building blocks are:
    • language bindings (inclusive high-level interfaces)
    • GenElektra, the code generator for type-safe bindings
    • plugins for configuration access behaviour and validation
  2. SpecElektra is a configuration specification language
    that is easy to use and self-contained in the same key database (i.e.
    written in any of the configuration file formats Elektra supports).
  3. Tools on top of LibElektra for administrators, such as CLI tools and GUIs.


The same text as follows is also available
here as html
here on github


  • Elektra now allows applications to support multiple
    profiles with a plugin, thus without code modifications in
    Elektra applications.
    That means a user can select multiple configuration files to use,
    even if the application has no explicit support for it.
    It completes the cascading feature (level $HOME before /etc), to allows
    us also to select different configuration for the same level.
  • Resolver can now better handle conflicts that happen
    when files are removed and others that happen
    within a single time tick (resolution of your clock)
    and also better handles NFS and older file systems
  • Default storage and resolver can be changed by symlink.
    So no need to recompile Elektra to change the default storage
    from INI to dump.
    INI now works quite reliable as default plugin and already
    used by default by its author Thomas Waser.

Other important features

  • shell plugin allows you to execute shell commands on every KDB access
    and curlget plugin allows you to download configuration files
    from a URL during KDB access.
  • Improvements in sync/merge of qt-gui with important fix
    (Usage of 0.8.15 qt-gui is discouraged)
  • Add plugin for dpkg database (read-only)
  • Assignment for conditionals using assign/condition.
  • Support for multiple and nested statements
  • Support for condition/validsuffix which allows you to suffix
    numbers with signs such as % or $.
    It does not check if the suffixes are identical.
  • kdb mount now uses topological sorting to always
    find a dependency solution if there is one,
    many effort was put in that ordering is as requested, thanks to
    Thomas Waser for the topological sorting implementation
  • Frontend generated by GenElektra now also can reload its
    values with taking the correct context into account.
  • Source is now automatically formatted and formatting is checked on build server
  • More flexible CMake syntax for PLUGINS


Many new or vastly improved plugins are waiting to be explored.


The plugin curlget fetches a configuration file from a remote host before
the configuration is being accessed:

kdb mount -R noresolver /tmp/curltest.ini system/curltest ini curlget url=""
kdb ls system/curltest  # every get access will redownload the file

Thanks to Thomas Waser!


The INI plugin is still under heavy development and
was again nearly rewritten:

  • fixed key is below hacks
  • fixed ordering
  • custom delimiter
  • use meta array for comments
  • rewritten ordering
  • best effort order
  • fixed array support

Thanks to Thomas Waser!


This plugin allows you to executes shell commandos after kdbGet, kdbSet and kdbError (failing kdbSet):

kdb mount /tmp/test.ini system/shelltest ini array= shell 'execute/set=echo set >> /tmp/log,execute/get=echo get >> /tmp/log'
kdb set system/shelltest
cat /tmp/log

Thanks to Thomas Waser!


The validation plugin is not new, but got many new features.
It allows you to match values by a regex and set your own
error messages in case a validation did not match.

Up to now, the regex was given as is to regcomp, which means
that if the regex is contained anywhere in the value, the
value is accepted.

Often this is not what we want, thus Thomas Waser added special
support for icase, word and line validation.
Additionally, flags allow you now to ignore the case or invert
the match. This can be changed for every individual value
or for the whole mountpoint.

Additionally, kdb vset validation was updated to use the new
metadata and correctly match against the whole value.

Thanks to Thomas Waser!


Only minor improvements were necessary for the host plugin but
it is quite matured already. The contract was changed so that
ipv6 addresses for ipv4 addresses will be rejected:

# kdb mount --with-recommends /etc/hosts system/hosts hosts
# kdb set system/hosts/ipv4/localhost ::1
The command set failed...
Reason: localhost value: ::1 message: Address family not supported
# kdb set system/hosts/ipv6/localhost ::1

You can also comfortably and safely edit the hosts file
with: kdb editor system/hosts hosts, then you have the
functionality sudoedit for the hosts file.


Again not a new plugin, but the plugin was greatly improved
and many test cases were added.

Now you can set upper/lowercase individually for both sides:

  1. What applications see.
  2. What the configuration file contains.

For example, if you always want the keys in the configuration file upper case,
but for your application lower case you would use:

$ kdb mount caseconversion.ini /rename ini rename get/case=tolower,set/case=toupper
$ kdb set user/rename/section/key valu
$ cat ~/.config/caseconversion.ini
KEY = value

Thanks to Thomas Waser!


Resolving by ~ as home directory now also for system and spec namespaces,
thanks to Thomas Waser.

Files keep their previous owner, useful when root edits configuration
files of others, thanks to Thomas Waser.

The resolver has many improvements to better detect conflicts.

The lock is now extended longer after the commit and already requested
in the temporary file.

The warnings were improved when getcwd fails.

Resolver now can correctly handle conflicts with empty files. It can also
better cope with frequent commits of the same binary. Elektra already
reached some limits filesystems have.



Marvin Mall improved the Java binding, fixed the appending
of keysets, added lots of documentation, and many unit tests.


Some kind of misusage of vaargs is now detected at compile-time instead
of crashing at runtime.

Generated C++

Value now supports convenience activations.
Values can be used to activate context, no more layers are needed.
Topological sorting makes sure that values are activated in the
correct order, loops are not allowed anymore.

The bool operator< is now correctly inline (allows to use it in more than
one translation unit)


René Schwaiger reworked most of the documentation and
fixed countless spelling mistakes and other problems.

  • Peter Nirschl updated the status of the crypto-plugin
    and fixed a typo
  • Daniel Bugl wrote a cascading tutorial
  • Daniel Bugl fixed all broken links
  • René Schwaiger also drew a new logo with SVG.
    It is already used on github as avatar for the organisation.
  • make all é use the same code point 233.


  • Tests work if the build path contains spaces
  • Tests: Fix problems locating memory checker
  • remove obsolete TestScript.cmake

Thanks to René Schwaiger


By default now ALL plugins except EXPERIMENTAL are included.
Plugins will be automatically excluded if dependencies are missing.

The PLUGINS syntax was vastly improved. Now many categories can be
intermixed freely and also categories can be used for exclusion.

E.g. to include all plugins without deps,
that provide storage (except yajl) and are maintained, but not include all plugins
that are experimental, you would use:


Details see /doc/

Renamed files:

/usr/include/elektra/merging/kdbmerge.hpp ->

/etc/profile.d/kdb -> /etc/profile.d/

(So that it works on arch linux, thanks to Gabriel Rauter)

removed files:

  • /usr/lib/elektra/

was only necessary because of limitations of the build system and is
now removed. It never had actual functionality, but was only a stub
without a crypto provider selected.

new files:

  • /usr/include/kdbease.h
  • /usr/lib/elektra4/*
  • /usr/lib/elektra4/*
  • /usr/lib/elektra4/*
  • /usr/lib/elektra4/
  • /usr/lib/elektra4/*

more new files with ALL or EXPERIMENTAL:

  • /usr/lib/elektra/

new tests all in folder /usr/lib/elektra/tool_exec:
testcpp_contextual_update testkdb_conflict test_keyname testmod_curlget
testmod_dpkg testmod_jni testmod_profile testmod_semlock testmod_shell

Following Plugins are excluded on specific platforms:

  • mathcheck on Intel compiler (reason: failing test cases)
  • simpleini on non-glibc systems (reason: not portable printf extension)

new symlinks:

  • /usr/lib/elektra4/
  • /usr/lib/elektra4/

new releases

The first release of the libraries libelektratools-full, libelektratools
and libelektragetenv. They now have SOVERSION 0.


You do not need to format the source manually anymore.
Make sure that you run scripts/reformat-source before
creating a PR.

clang-tidy helps you to add blocks to have better
maintainable code.

Felix Berlakovich improved the performance of the augeas plugin and
also contributed a script to benchmark different host plugin.
His thesis can be downloaded from here.
It contains benchmarks and discussions about augeas.

The CMake function add_plugin was completely rewritten.
Now you do not have to register your plugin at multiple points
but instead information of is parsed to correctly
register the plugin to categories as stated by infos/status
and infos/provides.

The code generator for errors also yields macros. This
avoids usage of the IDs, which can be problematic if
multiple pullrequests are prepared at once.


This might be the last release supporting wheezy, because
it gets more and more time-intensive to find workarounds
for the old compiler. The C++11 regex do not work at all.

Binary Compatibility Test

When you execute the testcases of 0.8.15 against Elektra 0.8.16
following testcases fail. None of them effect the API.

test_splitget test_splitset .. Internal restructuring
testmod_crypto .. not included by default now
testmod_ini .. section handling changed, line 178:
nosectionkey contained no comment
testmod_rename .. internal API elektraKeyCreateNewName changed
testmod_resolver .. internal data structure now contains more
members to remember uid and gid
testmod_template .. not present by default
testtool_backend testtool_backendbuilder testtool_backendparser
testtool_specreader .. changes in KDB tool before release
check_kdb_internal_check .. experimental plugins are now excluded

Added API

in libease René Schwaiger added:

extern char const * elektraKeyGetRelativeName(Key const * cur, Key const * parentKey);

in libmeta Thomas Waser added (partly based on ideas/code from Felix Berlakovich):

extern void elektraMetaArrayAdd(Key *, char const *, char const *);
extern KeySet * elektraMetaArrayToKS(Key *, char const *);
extern char * elektraMetaArrayToString(Key *, char const *, char const *);
extern int elektraSortTopology(KeySet *, Key * *);



Felix Berlakovich updated the qt-gui so that it uses a newly written sync-method
added in libtools.

Gabriel Rauter added a desktop file that uses the new svg logo from
René Schwaiger.


  • Peter Nirschl fixed code in the resolver that uses EBADMSG which was not
    available in BSD.
  • Peter Nirschl improved detection of librt
  • Felix Berlakovich fixed searching of FindSystemd
  • MinGW64 resolver now handles conflicts correctly and does not ignore them
    anymore and now also is able to create empty files (but still not directories)

Mac OS X

A lot of effort was invested to all test cases also run on Mac OS X:

  • .template syntax
  • linking errors
  • fix regex in conditionals plugins

Thanks to René Schwaiger


  • print null-environment correctly with kdb getenv
  • keyIs(Direct)Below didn't work with cascading keys
  • fix elektraKeyGetRelativeName (needed by ni) for cascading
    keys and move it to libease, thanks to René Schwaiger
  • make nickel tests show correct test name, thanks to René Schwaiger
  • glib: replace cursor_t with gssize so that GElektra-4.0.gir
    builds with gobject-introspection later than 1.47, thanks to Manuel Mausz
  • fixed out-of-bounds bug in timeofday plugin
  • elektraMetaArrayToKS correctly adds parent key, thanks to Thomas Waser
  • kdb-shell: Do not abort ksOutput on binary data.
  • some rework for global hooks, still not stable

Get It!

You can download the release from
and now also here on github

  • name: elektra-0.8.16.tar.gz
  • size: 2405443
  • md5sum: ef0c138b4a4fda017aa8bb6f812671ce
  • sha1: c6a6f9c26addd5fcc274cea635de02ef680cfb1a
  • sha256: 3cf0624eb027e533192ca9d612618df3d38ec3674c9cd20474f04ff269fad77e
  • sha512: b225e61379907365a423ea75ec7138e5257bb78c526bb05a1ec21f66a52eb4bad9e6f1eb23209d700670b21b86166497b47c3bc46bc9d45f6d366cd544afc326

This release tarball now is also available
signed by me using gpg

already built API-Docu can be found here

Stay tuned!

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

For any questions and comments, please contact the
Mailing List
the issue tracker on github
or by mail

Permalink to this NEWS entry

For more information, see

Best regards,

0.8.15 Release

@markus2330 markus2330 released this Feb 17, 2016 · 7260 commits to master since this release

0.8.15 Release

  • guid: 1ab4a560-c286-46d2-a058-1a8e7e208fe8
  • author: Markus Raab
  • pubDate: Tue, 16 Feb 2016 17:47:00 +0100

In case you do not yet know about it, here is an abstract about Elektra:

Elektra serves as a universal and secure framework to access configuration
parameters in a global, hierarchical key database.
Elektra provides a mature, consistent and easily comprehensible API.
Its modularity effectively avoids code duplication across applications
and tools regarding configuration tasks. Elektra abstracts from
cross-platform-related issues and allows applications to be aware of other
applications' configurations, leveraging easy application integration.



This is one of the largest release up to now. It includes many
user-visible improvements. Some highlights:

  • Mounting is vastly improved:
    think about Debian's "dpkg" to "apt"-like functionality
  • In previous releases you could already specify the structure
    of the configuration. Now you can also automatically enforce
    this property.
  • We split the shared library libelektra into smaller parts.
    Now users can link against the parts of the library they need.
  • As always, the ABI and API is fully forward-compatible.
  • The release contains improvements in the
    bootstrapping process.
  • We improved the ini, rename and crypto plugins.
  • The tool kdb now supports bookmarks and profiles.
  • The new tool kdb editor allows you to edit KDB configuration in
    your favorite text editor.
  • We are glad of the new packages for Debian, Arch Linux and OpenWRT.

The same text as follows is also available
here as html
here on github

Global Mount

Sometimes you simply want some functionality for the whole key database.
For example, you want to enable logging or notification of configuration
changes. In previous versions, you had to change every mountpoint
individually. Even more problematic, every mountpoint created its
individual logs and notifications, without any way for someone to know
if an application has issued its last log/notification.

These problems are now solved by global plugins. The same plugins are
reused for this purpose. Also the mounting works nearly in the same way,
you only have to omit the configuration file and the mountpoint:

kdb global-mount syslog journald dbus

Voilà, from now on every configuration change gets logged to syslog
and journald. Additionally, every application gets notified via dbus.

If you want it more verbose for debugging, you can easily do so by:

kdb global-mount logchange counter

Which gives you detailed information to standard output which keys
were changed/edited/deleted. Additionally, Elektra counts how often
the counter plugin is invoked.

The underlying work for the global plugins, i.e. hooks in the core
libraries and the list plugin that allows us to use many plugins
without bloating the core was done by Thomas Waser.

It was already possible in earlier versions of Elektra to specify the
configuration of your program. Until now, this specification could be
mainly used to to generate code as described
This release adds two more interesting options:

  1. the spec plugin, and
  2. the spec mount.

Spec Plugin

The most important global plugin that is now newly introduced with this
release (thanks to Thomas Waser) is the spec plugin. By default it
will be added for every global-mount. So for a new installation make
sure you executed at least once:

kdb global-mount

The spec plugin is a global plugin that copies metadata from the
spec-namespace to other namespaces. That means, it reads the
specification, and makes sure that the configuration conforms to it. The
actual validation is done by the many validation plugins already present.

Lets start by saying a key is a long and must have at least the
value 10:

kdb setmeta spec/example/longkey check/type long

Then we can create a key in a different namespace and see if the spec
plugin applies the meta-data correctly:

kdb set /example/longkey 25
kdb lsmeta /example/longkey

Should now at least print check/type.
By itself, this is useful for documentation of keys.
For example, the application developer says:

kdb setmeta spec/example/longkey description "Do not change"
kdb setmeta spec/example/longkey example 30

The user can retrieve this documentation by:

kdb getmeta /example/longkey description

But we want check/type to be not only a documentation, but also

Spec Mount

Using kdb setmeta extensively and always looking out that all plugins
are mounted correctly is error-prone. So instead, one can directly mount
the plugins as specified. For the example above one simply needs:

kdb setmeta spec/example mountpoint example.ecf
kdb spec-mount /example

Now, when we try to modify /example/longkey it will be validated:

kdb set /example/longkey a
> Error (#52) [...] long [not] matched [...] a

Based on the present meta-data, the correct plugins (in this case type
because of the metadata check/type) will be loaded.

We can also create a whole specification file, first mount the
specification and then the mountpoint according the specification, e.g
when we have battery.ini in the folder $(dirname $(kdb file spec))
with following content:

mountpoint = battery.ini
infos/plugins = ini

check/enum = 'critical', 'low', 'high', 'full'

Then we can use:

# mount the file itself:
kdb mount battery.ini spec/example/battery ni
# make sure all plugins are present (e.g. enum for check/enum):
kdb spec-mount /example/battery

Now lets verify if it worked:

kdb lsmeta /example/battery/level
# we see it has a check/enum
kdb getmeta /example/battery/level check/enum
# now we know allowed values
kdb set /example/battery/level low
# success, low is ok!
kdb set /example/battery/level wrong
# fails, not one of the allowed values!

The main idea of the spec-mount is: search a plugin for every
specification (meta-data) found in the spec-namespace.

General Mount Improvements

In earlier versions kdb mount failed when plugin dependencies were
not satisfied. Now dependencies will automatically be fulfilled, e.g.

kdb mount /etc/modules system/modules line

In earlier versions you would have got an error because of the missing
null plugin. Now it simply adds the needed plugins.

The plugins given in the command-line used to be real plugins. Now also
so called providers are accepted.

To make providers useful we need to actually know which plugin is the
best candidate. To get the information we added a infos/status clause
in the contract. In this clause the plugin developer adds many details
how well the plugin is tested, reviewed, documented, maintained and so
on. Based on this information, the best suited plugin will be chosen.
For example, you now can use:

kdb mount /etc/security/limits.conf system/limits augeas \
    lens=Limits.lns logging

And the best suitable logger will automatically be chosen.

The configuration variable /sw/kdb/current/plugins now allows
us to pass plugin configuration with the same syntax as the plugin
specification passed on the commandline. A subtle difference is that
thus the shell-splitting of arguments is missing, it is not possible to
include whitespaces in the plugin configuration that way.

Now it is also possible to include the same plugin multiple times and
also give them individual names. This feature is essential for
script-based plugins, e.g. you now might add:

kdb mount file.x /example/mountpoint \
    lua#resolver script=resolver.lua \
    lua#storage script=storage.lua

Furthermore, kdb mount now supports recommendations, which can be
enabled with --with-recommends. E.g. supplied to the mount command
using augeas above, comments will automatically transformed to meta-data
to avoid cluttering of the real configuration.

Library Split

Up to now, Elektra consisted only of a single shared library, Not all symbols in it were relevant to end users, for
example, some were only needed by plugins. Others were only proposed and
not yet part of the stable API. And finally, other symbols were not needed
in some situations, e.g. the plugins do not need the kdb interface.

Thus, we split, so that only coherent parts are in the
same library:

  • only contains the KeySet data structure and
    module loading. Every binary using Elektra should link against it.
  • contains the missing KDB symbols. Together with
    the core they contain everything declared in kdb.h.
    Michael Zehender plans to have multiple variants of
    that use different kinds of concurrency.
    Headerfile: <kdb.h>
  • adds functionality missing in core to make the
    life for C programmers easier.
    New headerfile: kdbease.h
  • adds functionality proposed for core. It
    directly uses internal structures of core, thus they always need to
    have exactly the same version.
    Headerfile: kdbproposal.h

The source code is now better organized by the introduction of a libs
folder. The explanation of every library can be found in

The rationale of the library split is documented
Shortly put, it was needed for further evolution and allowing us to grow
and enhance without getting a fat core.

Thanks to Manuel Mausz for fixing many bugs related to the library split
and also adapting all the bindings for it.


To show that the split does not make Elektra slower, Mihael Pranjić made
a small benchmark. The real time of
and revision 634ad92

  1. kdb-static: Median :0.8800
  2. kdb-full: Median :0.8700
  3. kdb: Median :0.8700

So it seems that the split does not influence the time of running
elektrified processes.

Times were measured with time(1) and the median is calculated for 21
runs of benchmarks/large. This was done using


As always, the ABI and API is fully forward-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 every program without errors

We added keyGetNamespace which allows us to handle all namespaces
in a switch and to iterate all namespaces. This is essential, when
a new namespace is added, thus then the compiler can warn you about
every part where the new namespace is not yet considered. We currently
do not plan to add a new namespace, but better be safe than sorry.

The internal function keyCompare now also detects any meta-data

libtools was nearly rewritten. Even though it is mostly API compatible
(you should not use the low-level Backend anymore but instead use the
BackendBuilder), it is certainly not ABI compatible. If you have an
undefined symbol: _ZN3kdb5tools7Backend9addPluginESsNS_6KeySetE you need
to recompile your tool. Even the merging part has ABI incompatibility
(different size of _ZTVN3kdb5tools7merging14NewKeyStrategyE).
Unfortunately, we still cannot guarantee compatibility in libtools,
further changes are planned (e.g. implementing mounting of lazy plugins).

The python(2) and lua interfaces changed, an additional argument (the
plugin configuration) is passed to open.

The INI plugin was rewritten, so many options changed in incompatible ways.

The default format plugin (e.g. for import/export) is no longer hardcoded
to be dump. Instead KDB_DEFAULT_STORAGE will be used.
To get KDB_DEFAULT_STORAGE you can use the constants plugin:

kdb mount-info
kdb get system/info/constants/cmake/KDB_DEFAULT_STORAGE

Thanks to Manuel Mausz plugins do no longer export any method other than
elektraPluginSymbol. It now will fail if you directly linked against
plugins and did not correctly use their public interface. Please
use the module loading and access functions via the contract.

The CMake and Pkgconfig Files now only link against elektra-core and
elektra-kdb. If you used some symbols not present in kdb.h, your
application might not work anymore. is still present for compatibility reasons. It should
not be used for new applications. Some unimportant parts, however,
moved to the "sugar" libraries. E.g. the symbol elektraKeyCutNamePart
is no longer part of


When you use kdbOpen in Elektra as first step it reads mountpoint
configuration from /elektra. This step is the only hardcoded one,
and all other places of the KDB's tree can be customized as desired
via mounting.

The bootstrapping now changed, so that /elektra is not part of the
default configuration default.ecf (or as configured with KDB_DB_FILE),
but instead we use elektra.ecf (or as configured with KDB_DB_INIT).
This behaviour solves the problem that default.ecf was read twice
(and even differently, once for /elektra and once for /).

To be fully compatible with previous mountpoints, Elektra will still read
mountpoints from default.ecf as long as elektra.ecf is not present.

To migrate the mountpoints to the new method, simply use:

kdb upgrade-bootstrap

which basically exports system/elektra/mountpoints, then does kdb rm -r system/elektra/mountpoints so that default.ecf will be without an
mountpoint and thus the compatibility mode does not apply anymore. As
last step it will import again what it exported before.

Details are here


We already highlighted the new spec plugin, but also other plugins
were improved at many places. Small other changes are:

  • Conditionals now also support assign/condition syntax,
    thanks to Thomas Waser
  • Lua and Python are not tagged experimental anymore.
    They now correctly add their configuration to the open-call.
  • The plugin yajl (the json parser and generator) now also accepts the
    type string and yields better warnings on wrong types.
  • Improved error message in the type plugin.

Larger changes were done in the following plugins:


The INI plugin was rewritten and a huge effort was taken so that it
fully-roundtrips and additionally preserves all comments and ordering.
Currently, it is brand new. It is planned that it will replace dump
in the future.

Currently is has some minor problems when used as KDB_DEFAULT_STORAGE.
You can avoid most problems by mounting a different file into root:

kdb mount root.ini /

Read here about the details.

A huge thanks to Thomas Waser.


Thanks to Thomas Waser rename is now fixed for cascading keys.
Additionally, it does not change the sync status of the keys so
that notification plugins work properly afterwards.


The crypto plugin is a facility for securing sensitive Keys by symmetric
encryption of the value. It acts as a filter plugin and it will only
operate on Keys, which have the meta-key „crypto/encrypt“ set.

The key derivation is still work-in-progress, so the plugin does not
work with kdb yet. A planned method for key derivation is to utilize
the gpg-agent.

For now the plugin requires the following Keys within the plugin
configuration in order to work properly:

  1. /crypto/key - the cryptographic key (binary 256 bit long)
  2. /crypto/iv - the initialization vector (binary 128 bit long)

Please note that this method of key input is for testing purposes only
and should never be used in a productive environment!

Thanks to Peter Nirschl, especially the patience for also supporting
different platforms where dependencies need to be handled differently.


A technical preview of a new tool was added: kdb editor allows you
to edit any part of Elektra's configuration with any editor and any
syntax. It uses 3-way merging and other stable technology, but it
currently does not provides a way to abort editing. So you only should
use it with care.

The tool kdb list now searches in the rpath for libraries and thus
will also find plugins not present at compile time (using glob).
Additionally, it sorts the plugins by infos/status score, which can
also be printed with -v. The last plugins printed are the ones ranked

When running as root, kdb will now use the system namespace when
writing configuration to cascading key names.

Long paths are cumbersome to enter in the CLI. Thus one can define
bookmarks now. Bookmarks are key-names that start with +. They are
only recognized by the kdb tool or tools that explicitly have support
for it. Applications should not depend on the presence of a bookmark. For
example, if you set the bookmark kdb:

kdb set user/sw/elektra/kdb/#0/current/bookmarks
kdb set user/sw/elektra/kdb/#0/current/bookmarks/kdb user/sw/elektra/kdb/#0/current

You are able to use:

kdb ls +kdb/bookmarks
kdb set +kdb/format ini

The kdb tool got much more robust when the initial configuration is broken,
no man page viewer is present or Elektra was installed wrongly.

The --help usage is unified and improved.

The new keyname naming conventions are now used for
configuration of the kdb-tool itself: /sw/elektra/kdb/#0/%/
and /sw/elektra/kdb/#0/current/ are additionally read. The option
-p/--profile is now supported for every command, it allows to fetch
configuration from /sw/elektra/kdb/#0/<profile>/ instead of current.
KDB is more robust when it cannot fetch its own configuration due to
KDB errors.

Coding Guidelines

Thanks to Kurt Micheli the code guidelines are
now properly documented.
Thanks to René Schwaiger we also provide a style file for clang-format.

Furthermore we unified and fixed the source:

  • only use @ for doxygen commands
  • always use elektra* functions for allocation
  • added a file header for every file

C++11 migration

Since we now only use C++11, we applied clang-modernize which simplified
many loops and replaced many 0 to nullptr. Additionally, we added
override and default at many places.

We removed all places where we had ifdefs to use auto_ptr if no
modern smart pointer is available.

Because of these changes there is no easy way to compile Elektra without
C++11 support, except by avoiding the C++ parts all together.

The C++ KeySet now also supports a get to retrieve whole containers
at once. By specializing KeySetTypeWrapper you can support your own
containers. Currently only map<string, T> is supported (T is any type
supported by Key::get).

If you haven't removed it from your flags already, there is no use
anymore to set ENABLE_CXX11.


The documentation was improved vastly. Most thanks to Kurt Micheli who
did a lot of editing and fixed many places throughout the documentation
Also thanks to Michael Zehender who added two paragraphs in the main

Keynames of applications should be called /sw/org/app/#0/current,
where current is the default profile (non given). org and
app is supposed to not contain / and be completely lowercase.
Keynames are documented here.
See also here. The main
reason for long paths is the provided flexibility in the future
(e.g. to use profiles and have a compatible path for new major versions
of configuration). By using bookmarks, users should not be confronted
by it too often.

  • many man pages were improved
  • many typos were fixed, thanks to Pino Toscano!
  • Fix documentation for kdb list, thanks to Christian Berrer
  • Compilation variants are explained better,
    thanks to Peter Nirschl for pointing out what was missing
  • document ronn as dependency, thanks to Michael Zehender
  • fix broken links, thanks to Daniel Bugl

Thanks to Kurt Micheli, developers are now warned during compilation on
broken links in Markdown. The output format is the same as for gcc.
Additionally, the markdown documentation of plugins now get a proper
title in the pdf and html output of doxygen.

Qt-Gui 0.0.10

Raffael Pancheri again updated qt-gui with many nice improvements:

  • update existing nodes in case the config was changed outside the gui
  • safely update tree
  • add update signal to metadata
  • fix crash when closing the GUI
  • move Actions in separate file to make main.qml less clustered
  • plugins do not output messages at startup
  • BackendBuilder is now used, which automatically takes cares of the correct ordering of plugins
  • Qt 5.4 compatibility is still ensured
  • C++11 is now used in Qt-Gui, too

Packaging and Build System

Elektra 0.8.14 now in Debian with qt-gui, man pages,
thanks to Pino Toscano
read more here

Thanks to Gustavo Alvarez for updating and splitting the packages on
Arch Linux!

Thanks to Harald Geyer,
Elektra is now packaged for OpenWRT. We fixed a number of
cross-compilation issues and now officially support building against musl
libc, with one minor limitation: RPATH works differently on musl so you
need to install all plugins directly in /usr/lib/ or set LD_LIBRARY_PATH.
Report any bugs in
Harald's OpenWRT packaging issue tracker.

  • export errors/symbols are now called elektra-export-symbols and
    elektra-export-symbols and can be installed using INSTALL_BUILD_TOOLS
    (by default off). This is needed for cross-compilation.
    Thanks to Harald Geyer for reporting.
  • some header files are renamed because they endlessly included themselves
    if the header files were found in wrong order.
    Thanks to Harald Geyer for reporting.
  • fixed compilation when built on more than 20 cores with >= -j15,
    thanks to Gustavo Alvarez for reporting and Manuel Mausz for analyzing
  • lua 5.1 now works too (except for iterators),
    thanks to Harald Geyer for reporting.
    thanks to Manuel Mausz for adding a new FindLua.cmake
  • pdf builds do not fail due to half written files,
    reported by René Schwaiger and fixed by Kurt Micheli

Read about other packages here.

Fixes and Improvements

  • 3 way merge now properly deals with binary data,
    thanks to Felix Berlakovich
  • getenv: fix wrapping on powerpc, thanks to Pino Toscano
  • markdownlinkconverter: fix char/int mismatch, thanks to Pino Toscano
  • wresolver: use KDB_MAX_PATH_LENGTH instead of PATH_MAX,
    thanks to Pino Toscano
  • Cleaning up #ifdefs that break statements, thanks to Romero Malaquias
  • Daniel Bugl tested the INI plugin
  • cmake list_filter was broken because of different behaviour in
    cmake_parse_arguments, thanks to Christian Berrer for reporting
  • g++5.3 is now supported
  • gtest does not link against pthread if not needed
  • testcases that are built with BUILD_SHARED also successfully work
  • kdb list works when libs are in same path as plugins,
    thanks to Harald Geyer for reporting
  • fix Mac OS issues,
    thanks to Peter Nirschl, René Schwaiger and Mihael Pranjic
  • fix resolver-baseflag docu, thanks to Harald Geyer for reporting
  • do not create wrong directories called ( and ) in source,
    thanks to René Schwaiger
  • fix cmake for systems where iconv is not part of libc,
    thanks to Michael Zehender and Peter Kümmel (for FindIconv.cmake)
  • fix segfault in libgetenv if root keys are present
  • lua: fix Key:tostring(), thanks to Manuel Mausz
  • add list of supported bindings,
    thanks to Manuel Mausz

Get It!

You can download the release from
and now also here on github

  • name: elektra-0.8.15.tar.gz
  • size: 2338297
  • md5sum: 33ec1e5982fb7fbd8893bf7b579b80f0
  • sha1: 6b1fdd5aa5aaad6ba377b4bb5ef437e0c85319ff
  • sha256: 6a406986cecb8d4a44485ced118ee803bc039b0824b72298e123b4dd47eb0b22
  • sha512: 86a408dd546b33e3b437f92f415de7aee6a235189f9eab0762b3f44ab4c453ee369a53de10a9f5b0df1b446460b12c57c6b8b77c282648ec2a49f2328d9af13d

This release tarball now is also available
signed by me using gpg

already built API-Docu can be found here

Stay tuned!

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

For any questions and comments, please contact the
Mailing List
the issue tracker on github
or by mail

Permalink to this NEWS entry

For more information, see

Best regards,