Elektra  0.9.3
0.9.0 Release

Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database.

You can also read this document on our website.

We wrote a new article describing our vision from configuration management perspective.

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

We are proud to present our largest release so far. It is the first release of the 0.9.* version series, which goal is it:

To get away from a purely research-oriented approach to a mature foundation, we also need paid employees to fix problems.

We plan to introduce following ways of income:

  1. donations
  2. paid support/feature requests
  3. consultancy

If you are interested in any of these, please contact us via busin.nosp@m.ess@.nosp@m.libel.nosp@m.ektr.nosp@m.a.org

The 0.8.* version series will be maintained on paid requests. If you have maintenance requests and want 0.8.27 to be released, please contact us via busin.nosp@m.ess@.nosp@m.libel.nosp@m.ektr.nosp@m.a.org

Please note, that Elektra will definitely stay 100% free software (BSD licensed). We do not plan to make any part proprietary. We only introduce a way for paid customers to get desired features or help more quickly.

Cache is a new global caching plugin. It uses mmapstorage as its storage backend and lazily stores the whole configuration from previous configuration accesses.

With large or many configuration files, the cache brings amazing performance improvements: Let us say, you have 649 INI configuration files mounted with the multifile resolver, completely specified (which means that the specification must be copied to all the configuration settings). Before the cache, retrieving the whole configuration would take 6 or even 13 seconds. With the cache, the whole operation now takes less than 0.5 seconds after the first access.

This is an important step towards the goal of Elektra to integrate all configuration files present on a system.

Limitations:

By default, the cache will automatically enable itself once the cache plugin is installed. The cache can be found in ~/.cache/elektra.

We also added tools for enabling, disabling and clearing the cache (kdb cache {enable,disable,default,clear}).

A big thanks to _(Mihael Pranjić)_ for the excellent work.

Gopts is a new plugin that integrates support for command-line options to applications:

This means, that using the plugin, you do not need to call elektraGetOpts yourself anymore.

kdbEnsure is a new function in elektra-kdb. It can be used to ensure that a KDB instance meets certain clauses specified in a contract. In principle this a very powerful tool that may be used for a lot of things. All changes made by kdbEnsure are purely within the KDB handle passed to the function.

For example, kdbEnsure can be used, to ensure the availability of command-line options for your application.

Limitations:

A big thanks to _(Klemens Böswirth)_ for the excellent work.

With this release, we changed our messy error code system into a more structured and clean way. Similar to SQLStates we changed to structure of our error codes and migrated them. Have a look into the new codes. This allows us to easily extend the specification without breaking existing codes and to avoid risking duplicated errors as we had before. _(Michael Zronek)_

We were able to reduce the former 214 to now only 9 error codes.

For background information read:

A big thanks to _(Michael Zronek)_ for the excellent work.

The following section lists news about the plugins we updated in this release. In total, we added 9 plugins and removed 2 plugins.

The type plugin was completely rewritten in C. The old version is now called cpptype. _(Klemens Böswirth)_

The new type plugin also provides the functionality of the enum and the boolean plugin. These plugins are now considered obsolete and you should use type instead.

A few notes on compatibility:

To switch from enum to the new type, you have to add either check/type=enum or type=enum. Without a check/type or type metakey, the type plugin will ignore the key. We now also support converting enum values to and from integer values (see README).

To switch from boolean to the new type, you don't have to do anything, if you used the default config. If you used a custom configuration please take a look at the README.

Removed due to:

The YAJL plugin which parses JSON files:

key 1: - element 1
- element 2
key 2: scalar
- element 3

, the plugin prints an error message that includes the following text:

config.yaml:2:2: syntax error, unexpected start of sequence, expecting end of map or key
- element 2
^
config.yaml:4:8: syntax error, unexpected start of sequence, expecting end of map or key
- element 3
^

. _(René Schwaiger)_

user/array/#0
user/array/#1
user/map/#0
user/map/key
user/map/#1

, user/array/#0 and user/array/#1 represent array elements, while user/map/#0, and user/map/#1 do not, since the key set also contains the key user/map/key. The following Markdown Shell Recorder snippet shows the new behavior of the plugin:

kdb mount config.yaml user yamlcpp
kdb set user/array/#0 one
kdb set user/array/#1 two
kdb set user/map/#0 three
kdb set user/map/key four
kdb set user/map/#1 five
kdb file user | xargs cat
#> array:
#> - one
#> - two
#> map:
#> "#0": three
#> "#1": five
#> key: four

. _(René Schwaiger)_

- ~
- - ~
- ~
- map:
- arr

. _(René Schwaiger)_

root:
- element: one
- element: two

to the key set that contains the following keys:

user/tests/yaml/root
user/tests/yaml/root/#0/element
user/tests/yaml/root/#1/element
kdb mount config.yaml user/tests/yaml yaml
kdb set user/tests/yaml/common/one/#0 value
kdb set user/tests/yaml/common/two/#0 first
kdb set user/tests/yaml/common/two/#1 second
kdb export user/tests/yaml yamlsmith

now prints the following YAML data:

common:
one:
- "value"
two:
- "first"
- "second"

. _(René Schwaiger)_

key: value
- element

the plugin prints an error message that contains the following text:

config.yaml:2:3: Syntax error on input “start of sequence”
- element
^

. _(René Schwaiger)_

"double quoted

now includes the following text

1:14: Missing closing double quote or incorrect value inside flow scalar
"double quoted
^

. _(René Schwaiger)_

- key1: value1
key2: value2

and compact sequences:

- - element1
- element2

correctly. _(René Schwaiger)_

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

We introduced several incompatible changes:

We changed following symbols:

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

kdb gen is now no longer an external tool implemented via python, but rather a first class command of the kdb tool. For now it only supports code generation for use with the highlevel API. Try it by running kdb gen elektra <parentKey> <outputName>, where <parentKey> is the parent key of the specification to use and <outputName> is some prefix for the output files. If you don't have your specification mounted, use kdb gen -F <plugin>:<file> elektra <parentKey> <outputName> to load it from <file> using plugin <plugin>.

. _(Klemens Böswirth)_

benchmark_plugingetset benchmarks/data user yaypeg get

. _(René Schwaiger)_

filename:line:0

instead of

filename|line col 0|

to show the location data for broken links. This is also the same style that Clang and GCC use when they display location information for compiler errors. This update has the advantage, that certain tools such as TextMate are able to convert the location data, providing additional features, such as clickable links to the error source. _(René Schwaiger)_

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

We are currently working on following topics:

About 40 authors changed 1278 files with 49409 insertions(+) and 13883 deletions(-) in 2025 commits.

We closed 114 issues for this release.

We welcome new contributors! Read here about how to get started.

As first step, you could give us feedback about these release notes. Contact us via our issue tracker.

You can download the release from here or GitHub

The hashsums are:

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

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

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

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

Permalink to this NEWS entry

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

Best regards, Elektra Initiative