Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database.
We are proud to release Elektra 0.10.0.
Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database. For more information, visit https://libelektra.org.
You can also read the news on our website.
You can try out the latest Elektra release using our docker image elektra/elektra. This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:
docker pull elektra/elektra
docker run -it elektra/elektra
We've created a new KeySet diffing and changetracking API for both internal and external use. Several plugins already had their own implementations to detect changes made to the key database. Every implementation did something different and results varied. With this new release every plugin now uses the same shared implementation, with identical results!
To try the amazing new API yourself, take a look at the tutorial.
Elektra's internal code now also uses this new API to detect which backends to execute. This can lead to better performance in I/O bound cases, where previously certain keys would have been detected as changed when they weren't.
We ran some memory benchmarks and found a slightly increased memory usage on a stock instance of Elektra. If you're using many plugins that do changetracking, the overhead will decrease.
Number of Keys | Old Implementation (bytes) | New Implementation (bytes) | Memory Increase (%) |
---|---|---|---|
50 | 225792 bytes | 229580 bytes | 1,68 % |
500 | 383180 bytes | 411238 bytes | 7,32 % |
5000 | 1992294 bytes | 2306867 bytes | 15,79 % |
50000 | 18245222 bytes | 21181235 bytes | 16,09 % |
500000 | 178782208 bytes | 207827763 bytes | 16,25 % |
Apart from memory benchmark, we also ran some performance benchmarks. As the benchmark is heavily I/O bound, the biggest bottleneck is the I/O performance of the system. We could not reliably detect a real, reliably reproducible performance impact measured in seconds. Alternatively, we have measured executed instructions. There seems to be about 10 % overhead, but we don't expect it to be noticeable in real-world workloads.
Number of Keys | Old Implementation (Instructions) | New Implementation (Instructions) | Performance Overhead (%) |
---|---|---|---|
50 | 18910449 | 19583227 | 3,56 % |
500 | 63001911 | 68948096 | 9,44 % |
5000 | 526801917 | 586344210 | 11,30 % |
50000 | 5730261920 | 6340292587 | 10,65 % |
500000 | 104614374974 | 110702166761 | 5,82 % |
The spec plugin was rewritten to use the standardized error handling in Elektra.
It is now strictly defined that the spec
plugin throws a warning on kdbGet
and on any other call an error.
Default values are now created in the default
namespace.
The instantiated array specifications are now also created in the default
namespace.
Keys with a require metakey and no default metakey do throw an error now.
Known limitations:
#
and _
keys do not work on MINGW_
globbing characterFor more information see Spec Plugin.
The go binding is now inside of libelektra
repository.
It is now also included into our build pipeline.
For more information on how to use it see go readme.
NOTE: On information how to publish new versions of
go-elektra
to go packages see go-publishing.
The following text lists news about the plugins we updated in this release.
static
variables into functions to avoid global variables (@kodebach)
itKs
global variable workaround, which was used to replace the now removed internal KeySet
cursor, was replaced with a custom context struct. (@kodebach)
flex
lexer and bison
parser are now fully reentrant and therefore thread-safe. (@kodebach)
set
and commit
functions to satisfy kdb plugin-check
(@kodebach)
elektraPluginGetPhase()
instead of counting executions (@kodebach)
Note: The plugin is currently disabled, because it is not yet compatible with the COW data structures.
TODO: remove above note, when COW support is added.
The text below summarizes updates to the C (and C++)-based libraries of Elektra.
syslog
logging code now calls openlog
before every syslog
to avoid the use of a global variable. (@kodebach)
-plugin-
in dl.c
(Tomislav Makar @tmakar)
go binding
(Tomislav Makar @tmakar)
v
so go package versioning works (Tomislav Makar @tmakar)
smount
alias (Hannes Laimer @hannes99)
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.
KDBException
to only access error key at construction time. (Michael Tucek @tucek)
Key#release()
, KeySet#release()
and KDBException#releaseErrorKey()
(Michael Tucek @tucek)
ksIncRef
for KeySet
(Michael Tucek @tucek)
ReferenceCleaner
(Michael Tucek @tucek)
go-elektra
binding from repository into bindings folder of libelektra
(Tomislav Makar @tmakar)
go-elektra
(Tomislav Makar @tmakar)
go-elektra
module (Tomislav Makar @tmakar)
go-elektra
and change module name to match github.com
(Tomislav Makar @tmakar)
populate-release-notes.sh
script (Tomislav Makar @tmakar)
v
correctly in release.sh
(Tomislav Makar @tmakar)
v
prefix in make-source-package
script and Jenkinsfile.release
(Tomislav Makar @tmakar)
git-release-stats
script (Tomislav Makar @tmakar)
default
namespace to namespaces documentation (Tomislav Makar @tmakar)
AUTHORS.md
(Tomislav Makar @tmakar)
AUTHORS.md
(Florian Lindner @flo91)
hook
to placements
contract in CONTRACT.ini (Tomislav Makar @tmakar)
hook
information to hooks.md
AUTHORS.md
(Hannes Laimer @hannes99)
install-webui.md
(Tomislav Makar @tmakar)
install-webui.md
for newly implemented request for adding multiple metakeys for one key (Tomislav Makar @tmakar)
dockerd
configuration file (daemon.json
) (Tomislav Makar @tmakar)
#include
in the repo (@kodebach)
linkchecker.whitelist
(Tomislav Makar @tmakar)
config-manager
DNF plugin. (Maximilian Irlinger @atmaxinger)
d-bus
to dbus
in macOS.yml
and .cirrus.yml
Issue-#4900 (Tomislav Makar @tmakar)
The website is generated from the repository, so all information about plugins, bindings and tools are always up-to-date. Furthermore, we changed:
const
(@kodebach)
We are currently working on following topics:
About 9 authors changed 309 files with 10024 insertions(+) and 4025 deletions(-) in 402 commits.
Thanks to all authors for making this release possible!
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
The hashsums are:
The release tarball is also available signed using GnuPG from
The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A
Already built API documentation can be found
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.
For more information, see https://libelektra.org.
Best regards, Elektra Initiative
We are proud to release Elektra 0.9.14.
Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database. For more information, visit https://libelektra.org.
You can also read the news on our website.
You can try out the latest Elektra release using our docker image elektra/elektra. This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:
docker pull elektra/elektra
docker run -it elektra/elektra
The following text lists news about the plugins we updated in this release.
set
and commit
functions to satisfy kdb plugin-check
(@kodebach)
elektraPluginGetPhase()
instead of counting executions (@kodebach)
set
and commit
functions to satisfy kdb plugin-check
(@kodebach)
kdb plugin-check
tests (@kodebach)
We are currently working on following topics:
We closed 2 issues for this release.
About 4 authors changed 22 files with 299 insertions(+) and 139 deletions(-) in 14 commits.
Thanks to all authors for making this release possible!
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
The hashsums are:
The release tarball is also available signed using GnuPG from
The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A
Already built API documentation can be found
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.
For more information, see https://libelektra.org.
Best regards,
We are proud to release Elektra 0.9.13.
Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database. For more information, visit https://libelektra.org.
You can also read the news on our website.
You can try out the latest Elektra release using our docker image elektra/elektra. This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:
docker pull elektra/elektra
docker run -it elektra/elektra
The following text lists news about the plugins we updated in this release.
The text below summarizes updates to the C (and C++)-based libraries of Elektra.
plugin-check
(Tomislav Makar @tmakar)
hook
to placements
contract in CONTRACT.ini (Tomislav Makar @tmakar)
hook
information to hooks.md
infos/maintainer
in plugins. (Maximilian Irlinger @atmaxinger)
We are currently working on following topics:
We closed 5 issues for this release.
About 7 authors changed 35 files with 1186 insertions(+) and 534 deletions(-) in 48 commits.
Thanks to all authors for making this release possible!
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
The hashsums are:
The release tarball is also available signed using GnuPG from
The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A
Already built API documentation can be found
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.
For more information, see https://libelektra.org.
Best regards, Elektra Initiative
We are proud to release Elektra 0.9.12.
Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database. For more information, visit https://libelektra.org.
You can also read the news on our website.
You can try out the latest Elektra release using our docker image elektra/elektra. This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:
docker pull elektra/elektra
docker run -it elektra/elektra
The entire logic for backends has been rewritten, to allow for more flexibility und an unlimited number of plugins.
Instead of calling plugins directly, libelektra-kdb
now only calls so-called backend plugins and special hook plugins.
There is a contract between libelektra-kdb
and the backend plugins.
All backend plugins must adhere to this contract.
To achieve this goal, most backend plugins will call other plugins (like libelektra-kdb
did previously).
The logic previously implemented in libelektra-kdb
was moved to the new default backend plugin backend
.
It works like the old system, but now also allows an unlimited number of plugins in positions where that makes sense.
For example, you can have unlimited postgetstorage
plugins, but only a single getresolver
.
There have also been slight changes to kdbGet
and kdbSet
.
Please read their API docs to find out, if you rely on any behavior that has been altered.
You can also read the new low-level docs to find out all the intricate details.
The structure of system:/elektra/mountpoints
changed as well.
Take a look at the new docs, if you need to know details.
The mountpoint configuration format contains breaking changes and a manual upgrade process is needed. Follow these steps to upgrade the old mountpoint configuration to the new format:
Warning: BACK UP YOUR CONFIG FILES BEFORE UPDATING! We recommend making a backup of the file printed by
kdb file system:/elektra/mountpoints
before updating your installation. In the unlikely case that the migration script fails, you can still use the information from the backup to manually recreate your mountpoints.
To update your existing system:/elektra/mountpoints
data you can use the migration script.
Note: To run the script you must have Elektra, Python (>= 3.7) and the Python binding installed. The script uses the Python binding to manipulate
Key
s andKeySet
s, but it does not use thekdb
CLI tool, or theKDB
API. It is safe to run this script before, or after you update your Elektra installation.
By default, the script loads the file /etc/kdb/elektra.ecf
.
If you changed where system:/elektra/mountpoints
is stored, you can provide an alternative path:
./migrate-mountpoints.py /path/to/your/mountpoints/config.file
Note: Because the script does not use the
KDB
API it only works, if the mountpoints config file uses the defaultdump
format.If your mountpoints config file is not using the
dump
format, you may still be able to use the migration script. However, in that case, you will have to use the script before updating your Elektra installation:
- Run
kdb export system:/elektra/mountpoints dump
to get a copy of your mountpoints config indump
format- Write this data to a file and run the migration script on the file.
- To get the data back in your original format you can use
./migrate-mountpoints.py /path/to/file/from/step2 | kdb convert dump your-format > /path/to/converted/file
- Run
kdb file system:/elektra/mountpoints
to find out where your mountpoint config is stored. Make sure to back up this file, before upgrading your installation.- Now upgrade your Elektra installation.
- Copy the file
/path/to/converted/file
from step 3 to the location you got in step 4.
The script will read the old mountpoint configuration from the given file.
It will convert the configuration and print the new version to stdout
.
You can inspect the output to make sure, everything is in order. When you are ready to commit the changes, you can manually edit the config file, or use:
./migrate-mountpoints.py --output=/etc/kdb/elektra.ecf /etc/kdb/elektra.ecf
system:/elektra/mountpoints
to new format. (@kodebach)
Thanks to (Maximilian Irlinger @atmaxinger) our Key
and KeySet
datastructures are now fully copy-on-write!
This means noticeably reduced memory usage for cases where keys and keysets are copied and/or duplicated!
We ran some very promising benchmarks, each were performed with 400,000 keys.
All benchmarks were executed using valgrind --tool=massif --time-unit=B --max-snapshots=200 --threshold=0.1
.
Benchmark | Old Implementation | Copy-on-Write | Size Reduction | Remarks |
---|---|---|---|---|
createkeys.c |
5.3 MiB | 6.5 MiB | -22 % | |
deepdup.c |
10.5 MiB | 8.2 MiB | 22 % | |
large.c |
18.9 MiB | 15.3 MiB | 19 % | |
kdb.c |
23.5 MiB | 17.8 MiB | 24 % | |
kdbget.c |
11.0 MiB | 8.8 MiB | 20 % | |
kdbmodify.c |
11.0 MiB | 8.8 MiB | 20 % | Same results as kdbget.c |
First, it should be noted that a single key, without counting payload, is about 50% larger with the copy-on-write implementation.
This explains why the createkeys.c
benchmark yields a negative reduction result.
This benchmark only allocates keys, so not much improvement can be expected there.
Still, as other stuff also uses heap memory, the overall memory consumption only increased by 22%, which is far less than 50%.
All other benchmarks saw meaningful reductions of heap memory used.
One interesting observation is that kdbget.c
and kdbmodify.c
used exactly the same memory.
This can most likely be explained by internal caching within the memory allocator of glibc
.
We also performed runtime tests on the same benchmarks using perf stat --repeat 13
to ensure no major performance regressions occur.
Benchmark | Old Implementation | Deviation | Copy-on-Write | Deviation | Runtime Increase |
---|---|---|---|---|---|
createkeys.c |
0.209572 s | 0.36 % | 0.21987 s | 0.77 % | 4.9 % |
deepdup.c |
0.23025 s | 0.47 % | 0.231804 s | 0.32 % | 0.6 % |
large.c |
1.14038 s | 0.21 % | 1.14837 s | 0.21 % | 0.7 % |
kdb.c |
1.9270 s | 2.63 % | 1.93354 s | 0.17 % | 0.3 % |
kdbget.c |
0.145663 s | 0.17 % | 0.15763 s | 0.70 % | 8.2 % |
kdbmodify.c |
0.146506 s | 0.19 % | 0.156347 s | 0.15 % | 6.7 % |
Overall, the runtime performance hit is less than 10%.
The more a program does, the less the additional overhead of the copy-on-write algorithms matter.
One interesting detail is that keyCopy
and keyDup
have become quite a bit faster.
This can be seen by comparing the differences between createkeys.c
and deepdup.c
.
The differences are 21 ms for the old implementation and 12 ms for the copy-on-write implementation.
A Free/Libre and Open Source Software (FLOSS) Initiative couldn't survive with many small contributions fixing annoying problems. This release also contains all contributions done via one term of the FLOSS course. The success was tremendous, as shown in the rest of the release notes.
A big thanks to the students for their contributions!
The following text lists news about the plugins we updated in this release.
list
plugin. (Maximilian Irlinger @atmaxinger)
(Was only needed for global plugins, which are now replaced by hooks.)The text below summarizes updates to the C (and C++)-based libraries of Elektra.
keyCopy
now only allocates additional memory if KEY_CP_META
or KEY_CP_ALL
is used. (Maximilian Irlinger @atmaxinger)
elektraIoFdSetFlags
: file flags must be exactly one of: read only, write only or read write. (Richard Stöckl @Eiskasten)
elektraMergeGetConflictingKeys
and elektraMergeIsKeyConflicting
to check which keys were causing a merge conflict. (Maximilian Irlinger @atmaxinger)
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_MAX_PATH_LENGTH
for better portability. (Markus Raab)
resolver
is required" error. (Markus Raab)
memleak
. (@0x6178656c)
global-mount
and global-umount
commands. (Maximilian Irlinger @atmaxinger)
kdb find
without argument. (Christian Jonak-Moechel @joni1993)
egrep
by grep -E
. (@0x6178656c and @janldeboer)
elektra-granularity.md
. (@dtdirect)
doc/dev/error-\*
. (@dtdirect)
check_doc.sh
to work for contrib, dev and tutorials. (@Joni1993)
elektra
to libelektra
package. (@Bujuhu)
Code
. (@janldeboer)
code
blocks to prevent Markdown from falsy rendering LaTeX. (@stefnotch), (@janldeboer)
libelektra-core
. (@kodebach)
#include
in the repo. (@kodebach)
KeySet
s. (@kodebach)
keyIsBelow
and new keyGetNextPart
functions. (@kodebach)
ronn-ng
to 0.10.1.pre3. (Mihael Pranjić @mpranj)
memleak
label to test_getenv
. (@0x6178656c)
--rerun-failed
from run_*
scripts. (@kodebach)
backend
plugin to components of libelektra package. (Mihael Pranjić @mpranj)
--stacktrace
to gradle for the JNA builds. (Maximilian Irlinger @atmaxinger)
libpcrec++-dev
to libpcrecpp0v5
in Debian Sid. (Richard Stöckl @Eiskasten)
openjdk-17-jdk
in Debian Sid. (Maximilian Irlinger @atmaxinger)
pip3
due to upstream debian changes. (Mihael Pranjić @mpranj)
java-library.gradle
to use archiveClassifier
(Maximilian Irlinger @atmaxinger)
ctest --rerun-failed
to Jenkins CI. (@kodebach)
macos_instance
reference, upgrade to macOS Ventura (by default), use Python 3.11 and Ruby 3.x. (Mihael Pranjić @mpranj)
testmod_dbus*
tests on macOS. (@kodebach)
testmod_dbus*
tests on macOS. (@kodebach)
The website is generated from the repository, so all information about plugins, bindings and tools are always up-to-date. Furthermore, we changed:
/pythongen
link on homepage. (@stefnotch)
TESTING.md
file. (@stefnotch), (@janldeboer)
We are currently working on following topics:
We closed about 150 issues for this release.
About 28 authors changed 960 files with 29400 insertions(+) and 20927 deletions(-) in 1421 commits.
Thanks to all authors for making this release possible!
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
The hashsums are:
The release tarball is also available signed using GnuPG from
The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A
Already built API documentation can be found
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.
For more information, see https://libelektra.org.
Best regards, Elektra Initiative
We are proud to release Elektra 0.9.11.
Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database. For more information, visit https://libelektra.org.
You can also read the news on our website.
You can try out the latest Elektra release using our Docker image elektra/elektra. This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:
docker pull elektra/elektra
docker run -it elektra/elektra
In a separated branch we rewrote the whole backend system. With this new backend system, backends are now also plugins, allowing backends also to be non-file-based, e.g., using databases. The main purpose of this release is to give a last stable release before master gets disrupted with a huge change set. The next release is not to be expected in this year.
A huge thanks to (Klemens Böswirth @kodebach), (Maximilian Irlinger @atmaxinger) for the many changes in the branch. Thanks to (Richard Stöckl @Eiskasten) for testing.
Elektra is used for server, desktop and embedded. With this release, we strengthen our embedded mainstay, specifically in open source hardware OSHW. We developed a major application running on OSHW Olimex boards. The application is called opensesame. It is heavily relying on Elektra and ansible-libelektra.
In the initial release opensesame already allows:
To give a smoother experience when running such an application we will develop Ansible scripts to customize the Olimex base images. They will allow changing the language, time zone, static network configuration etc.
Olimex likes this idea and will send us an A20 board. A big thanks to Olimex.
Also in the upcoming term Elektra will be object of study how FLOSS initiatives work. Students will make improvements in Elektra as part of their homework, teamwork and, if chosen, also for their project. Alternatively, they can also improve other self-chosen FLOSS initiatives.
The following text list news about the plugins we updated in this release.
The text below summarizes updates to the C (and C++)-based libraries of Elektra.
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.
keyIsBelow
and new keyGetNextPart
functions (@kodebach)
3.12
(released in July 2018). (Maximilian Irlinger @atmaxinger)
The website is generated from the repository, so all information about plugins, bindings and tools are always up-to-date.
We are currently working on following topics:
We closed 17 issues for this release.
About 11 authors changed 156 files with 4020 insertions(+) and 3298 deletions(-) in 134 commits.
Thanks to all authors for making this release possible!
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
The hashsums are:
The release tarball is also available signed using GnuPG from
The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A
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.
For more information, see https://libelektra.org.
Best regards, Elektra Initiative
We are proud to release Elektra 0.9.10.
Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database. For more information, visit https://libelektra.org.
You can also read the news on our website.
You can try out the latest Elektra release using our docker image elektra/elektra. This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:
docker pull elektra/elektra
docker run -it elektra/elektra
We created a new Binding for Kotlin with convenience functions and various utilities. There is also the possibility to convert KeySets to Kotlin data classes or collections and back. Read the Kotlin Readme for more information.
A big thanks to (@Gratla and @mandoway) for this beautiful work.
In Elektra there are currently two different ways to iterate over KeySets. The so-called "internal" iterator is, however, inferior and creates several problems, e.g. it was a side effect to be considered for every function call that involved a KeySet.
With this release, we started removing the internal iterators by removing keyRewindMeta
, keyCurrentMeta
, ksHead
, and ksTail
functions.
The external iterators are now the way to go, see Iterators.
A huge thanks to (Florian Lindner @flo91) for doing this thankless cleanup task.
The following section lists news about the plugins we updated in this release. Overall changes:
directoryvalue
to use external iteration of KeySet
s (Florian Lindner @flo91)
.pop()
, .cut()
, .head()
and .tail()
examples to keySet example (Lukas Hartl @lukashartl, Leonard Guelmino @leothetryhard)
strptime
on non-GNU systems. (@kodebach)
kdb get
(@mandoway)
The text below summarizes updates to the C (and C++)-based libraries of Elektra.
keyRewindMeta
, keyCurrentMeta
, ksHead
, and ksTail
functions for internal iteration of Keyset
s and Metadata of Key
s (Florian Lindner @flo91)
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.
NULL
in rb_funcall
with Qnil
to avoid compiler errors/warnings on some systems. (@kodebach)
elektrad
(Lukas Hartl @lukashartl, Leonard Guelmino @leothetryhard)
elektrad
to use last version of the go
-bindings without internal iterators for Keyset
s and Metadata (Florian Lindner @flo91)
webui
webd
elektrad
(Lukas Hartl @lukashartl, Leonard Guelmino @leothetryhard)
kdb reset
. (Markus Raab)
Cascading Lookups
and Command-line Options
(Florian Lindner @flo91)
CODING.md
(@loessberth)
.gitattributes
file to make it easier to build Elektra with WSL. (@kodebach)
The website is generated from the repository, so all information about plugins, bindings and tools are always up-to-date. Furthermore, we changed:
Get Started
page by adding a brief kdb
introduction. (@Milangs)
We are currently working on following topics:
We closed 51 issues for this release.
About 25 authors changed 376 files with 39350 insertions(+) and 13609 deletions(-) in 393 commits.
Thanks to all authors for making this release possible!
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 using GnuPG from here or on GitHub
The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A
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.
For more information, see https://libelektra.org.
Best regards, Elektra Initiative
We are proud to release Elektra 0.9.9.
Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database. For more information, visit https://libelektra.org.
You can also read the news on our website.
You can try out the latest Elektra release using our docker image elektra/elektra. This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:
docker pull elektra/elektra
docker run -it elektra/elektra
As you will read in this release notes, a massive amount of bugs were fixed within this release. Many of them were resolved from students participating in a university course about FLOSS This demonstrates that homework of students can be very useful and in public service.
In the upcoming term there will be a course about configuration management in which Elektra will also be used and improved upon.
The version of the process
plugin, makes it much easier to implement plugins in Java.
You can now call an implementation org.libelektra.Plugin
via process
and the org.libelektra.process.PluginProcess
class.
To mount Java plugins the new helper script kdb mount-java
can be used.
For more information take a look at the updated tutorial
and the new manpage for kdb mount-java
.
With this release we greatly updated our decisions for the 1.0 release. This brings us one big step closer to 1.0.
The following section lists news about the plugins we updated in this release.
array
meta key to the parentKey of imported Keys (@muskater) (@4ydan) (@lawli3t)
keyCompareMeta (const Key * k1, const Key * k2)
from src/libs/elektra/keytest.c
to src/plugins/specload/specload.c
and integrate functionality of keyCompare (const Key _ key1, const Key _ key2)
into isChangeAllowed (Key * oldKey, Key * newKey)
, because that is the only place where it was used. (@flo91)
serialise
and unserialise
have been renamed to serialize
and unserialize
. (Klemens Böswirth @kodebach)
int fserialize(KeySet * ks, FILE * file, Key * errorKey)
and int funserialize(KeySet * ks, FILE * file, Key * errorKey)
have been added.
These are wrappers around serialize
and unserialize
that allow calling from C with a standard FILE *
. (Klemens Böswirth @kodebach)
The text below summarizes updates to the C (and C++)-based libraries of Elektra.
KEY_NAME
and KEY_COMMENT
(closes issue #3152) (Florian Lindner @flo91)
KeySet
now also has a reference counter like Key
. The new functions ksIncRef
and ksDecRef
behave like their counterparts keyIncRef
and keyDecRef
.
ksDel
also behaves like keyDel
in regard to reference counting, i.e. it does nothing unless the reference count is 0.
The reference counting is very useful for bindings (especially with automatic garbage collection). (Klemens Böswirth)
Key
and for KeySet
now use uint16_t
to reduce memory usage. Key
previously used size_t
. (Klemens Böswirth)
Key
and KeySet
struct members to aviod padding and make space for a new uint16_t
member, reserved for future use. (Mihael Pranjić @mpranj)
keyReplacePrefix
by using new keyCopy
function instead of manually copying the name of the Key
(@lawli3t)
keyCopyMeta
not deleting non existant keys in destination (see #3981) (@JakobWonisch)
ELEKTRA_ERROR_*_NAME
and ELEKTRA_WARNING_*_NAME
constants have been removed from the public API. Use ELEKTRA_ERROR_*
and ELEKTRA_WARNING_*
instead. (Klemens Böswirth @kodebach)
:
). (Klemens Böswirth @kodebach)
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.
HelloElektra
example as Gradle sub-project to allow it to directly depend on the current binding (Michael Tucek)
HelloElektra
example with cutpoint and value setting example (@JakobWonisch)
process
plugin. (Klemens Böswirth @kodebach)
HelloElektra
example as gradle sub-project to allow it to directly depend on the current binding (Michael Tucek)
LinkChecker
Java Plugin. (@aaronabebe)
kdb validate <key>
, collect warnings and errors while kdb.get() and kdb.set(), see #3674 (@flo91), (@JakobWonisch)
kdb mount-java
helper script for mounting Java plugins (Klemens Böswirth @kodebach)
reformat-c
script to use clang-format version 13. (Mihael Pranjić @mpranj)
loadConfiguration()
's signature in release 0.9.5 (Tobias Schubert @qwepoizt)
kdb gen
. (Tobias Schubert @qwepoizt)
type
is required when the HL API is used. (Tobias Schubert @qwepoizt)
type=int
from .ini
files (Ivaylo Ivanov)
~
in home directory (Maximilian Irlinger @atmaxinger)
scripts/flatpak/README.md
and scripts/flatpak/org.libelektra.kdb.yaml
for more info (Ivaylo Ivanov)
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 working on following new topics since the last release:
Furthermore, we are still working on following topics:
We closed 90 issues for this release.
About 29 authors changed 491 files with 17997 insertions(+) and 6089 deletions(-) in 648 commits.
Thanks to all authors for making this release possible!
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 using GnuPG from here or on GitHub
The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A
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.
For more information, see https://libelektra.org.
Best regards, Elektra Initiative
We are proud to release Elektra 0.9.8.
Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database. For more information, visit https://libelektra.org.
You can also read the news on our website.
You can try out the latest Elektra release using our docker image elektra/elektra. This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:
docker pull elektra/elektra
docker run -it elektra/elektra
kdb
now prohibits write operations on cascading keys that miss a corresponding existing key. See the details in the Tools
section below and the new subsection on cascading writes in the tutorial on cascading keys for further information. (Alexander Firbas)
We have created a version of Redshift that uses Elektra for configuration management!
We removed and refactored Redshift's code for loading configuration files, parsing CLI options and validating configuration to use Elektra. Redshift with Elektra has about 700 fewer lines of code (-16%) and is a great example of what Elektra is all about: More applications with less code for configuration management!
To test it, take a look at our PR Refactor to use Elektra and follow the instructions provided in CONTRIBUTING.md.
Refactoring Redshift to use Elektra brings the following benefits:
*.c
and *.h
files exclusive of files automatically generated by Elektra).Redshift with Elektra uses the high-level API.
We have made a large number of improvements to the high-level API in the course of refactoring Redshift. The highlights are:
More improvements and details are explained in later sections of these release notes.
Thanks to Klemens Böswirth, Markus Raab and Tobias Schubert!
We are now shipping experimental releases for Windows 32- and 64-bit! They can be downloaded here.
A big success is that Redshift already works with Elektra under Windows.
The following section lists news about the plugins we updated in this release.
gopts
plugin now includes deeply nested options and arguments in the generated help message. (Tobias Schubert @qwepoizt)
gopts
are now correctly reported. (Klemens Böswirth)
gopts_win32.h
. (Tobias Schubert @qwepoizt)
range
plugin now uses metakey type
as fallback, if check/type
is not specified. (Tobias Schubert @qwepoizt)
range
now treats all validation problems as warnings during kdbGet(). (Tobias Schubert @qwepoizt)
spec
plugin now runs before other postgetstorage
plugins, so that validation can happen during kdbGet
as well.
This is especially relevant in combination with gopts
. (Klemens Böswirth)
ELEKTRA_PLUGIN_COMMIT
export. (Tobias Schubert @qwepoizt)
toml
plugin now supports all four kinds of strings via the tomltype
metadata.
The plugin also remembers which kind was used and handles escape sequences properly, instead of always
converting to basic strings. For details take a look at the updated README (Klemens Böswirth)
comment/#/space
metakey is now used correctly to store the actual whitespace characters from the file,
instead of a number. (Klemens Böswirth)
The text below summarizes updates to the C (and C++)-based libraries of Elektra.
ksSearch
ksSearchInternal
is now static. Use ksSearch
instead.(Michael Tucek)
ksNeedSync
function. (Mihael Pranjić)
sprintf
by snprintf
and fix out of bounds array access in markdownlinkconverter. (Mihael Pranjić)
mount
ed and spec-mount
ed. (Tobias Schubert @qwepoizt)
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.
Key::createNameless
to Key::create
. To migrate to this change, just update calling code to use the new method name.KDB::open(Key)
KDB::open(KeySet, Key)
KDB::close(Key)
KDB::get(Key)
KDB::get(KeySet, Key)
KDB::set(KeySet, Key)
, better explaining the relevance of the second argument parentKey
KeySet::remove(Key)
and KeySet::remove(String)
KeySet::lookup(Key, int)
and KeySet::lookup(String, int)
as well as accompanying flag definitions KeySet::KDB_O_NONE
, KeySet::KDB_O_DEL
and KeySet::KDB_O_POP
. Please use KeySet::lookup(Key)
and KeySet::lookup(String)
instead. Instead of KeySet::KDB_O_DEL
, please consider using Key::release
. The proper replacement for KeySet::KDB_O_POP
is KeySet::remove(Key)
or KeySet::remove(String)
.Elektra
is now package private (previously was public).whitelist
(see here)Key nextMeta()
to Optional<Key> nextMeta ()
no longer throwing NoSuchElementException for non-exceptional behaviorElektra
is now package private (previously was public)whitelist
Key::getBinary()
and Key::setBinary(byte[])
KeyBinaryTypeNotSupportedException
to KeyStringValueException
KeyBinaryValueException
Key
test coverageexamples/external/java/read-keys-example
KeySetReleasedException
and KeyReleasedException
have been replaced by the native IllegalStateException
ReadableKey
to better reflect the limitations of meta data keys via a type hierarchy. Meta data keys are now returned as ReadableKey
s:
Key
extends ReadableKey
Key
class is now finalKey Key::nextMeta()
to Optional<ReadableKey> Key::nextMeta()
, no longer throwing NoSuchElementException for non-exceptional behaviorKey Key::currentMeta()
to ReadableKey Key::currentMeta()
Optional<Key> Key::getMeta(String)
to Optional<ReadableKey> Key::getMeta(String)
Key::incRef
, Key::decRef
and Key::getRef
ReadableKey
/Key
now implements Comparable<ReadableKey>
int Key::cmp(Key)
has been renamed to int Key::compareTo(Key)
ReadableKey
now implements equals
and hashCode
in line with the contract for int Key::compareTo(Key)
ReadableKey
/Key
no longer implements Iterable<String>
for iterating over the parts of a key's name - use Iterator<String> ReadableKey::keyNameIterator ()
insteadKey
now implements Iterable<Key>
to iterate over a key's meta data ReadableKey
sReadableKey::isDirectBelow
/Key::isDirectBelow
to isDirectlyBelow
KeyNameIterator
and KeySetIterator
are now package privateKeySetAppendException
has been renamed to KeySetException
and now conveys general KeySet
related exceptional statesKeySet
now implements SortedSet<Key>
(see Java API). Previously KeySet
was only implementing Iterator<Key>
. Now a native key set can be used via its KeySet
representation wherever one of the following Java Collection Framework interfaces is supported:
Iterable
Collection
Set
SortedSet
(Michael Tucek)
glib
binding with -Wno-pedantic
for compatibility. (Mihael Pranjić)
-DTOOLS=ALL
. (Markus Raab)
webd
: update npm dependencies. (Mihael Pranjić)
kdb set
, kdb meta-set
: Only allow writes to the cascading namespace if the lookup succeeds. Otherwise, the operation is ambiguous and therefore aborted.
No more guessing of namespaces in case a cascading key is given (user:, system
: for kdb set
, spec:
for kdb meta-set
), (Alexander Firbas)
kdb set
, kdb meta-set
: Validation of keys can no longer be bypassed by using non-cascading keys (except with the new --force (-f) option). (Alexander Firbas)
-N/--namespace
option in all kdb subcommands (Alexander Firbas)
kdb namespace
, kdb basename
and kdb dirname
. (Alexander Firbas)
kdb file
: Remove namespace guessing (in case a cascading key is given, it needs to resolve to an existing key). (Alexander Firbas)
kdb editor/import
: Disable the use of cascading names (and the 'validate' strategy operating on cascading keys) entirely. (Alexander Firbas)
kdb gen
: Generate specification token during code-generation and add it to generated contract. (Tobias Schubert @qwepoizt)
kdb gen
: Improve naming of variables to make code easier to understand. (Tobias Schubert @qwepoizt)
kdb spec-mount
: Improve usability by failing with helpful error messages, if the specification contains errors. (Tobias Schubert @qwepoizt)
loadConfiguration()
's signature in release 0.9.5 (Tobias Schubert @qwepoizt)
kdb gen
. (Tobias Schubert @qwepoizt)
testshell_markdown_tutorial_crypto
on Mac OS and other OS with GnuPG version >= 2.3.1. (Peter Nirschl @petermax2)
keytest
(@lawli3t)
keymeta
(@lawli3t)
docker build
commands. (Mihael Pranjić)
tmpfs
in Docker to speed up the test suite. (Mihael Pranjić)
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:
We closed 59 issues for this release.
About 17 authors changed 396 files with 13155 insertions(+) and 8331 deletions(-) in 597 commits.
Thanks to all authors for making this release possible!
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 using GnuPG from here or on GitHub
The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A
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.
For more information, see https://libelektra.org.
Best regards, Elektra Initiative
We are proud to release Elektra 0.9.7.
Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database. For more information, visit https://libelektra.org.
You can also read the news on our website.
You can try out the latest Elektra release using our docker image elektra/elektra. This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:
docker pull elektra/elektra
docker run -it elektra/elektra
We added an experimental preview of the Filesystem in User Space FUSE tool. This tool enables the inspection and modification of the KDB, in the form of a classical filesystem. (Alexander Firbas)
The experimental ElektraSettings GSettings backend has been updated and is working well with GNOME 40. We do not recommend to use it on production systems yet, but we have been testing ElektraSettings as a replacement for dconf
successfully and want to share the progess with you. If you want to try ElektraSettings back up all your data first. (Mihael Pranjić)
Multiple critical bugs have been fixed in the experimental TOML
plugin see below. We are currently working towards using the TOML
plugin as the default storage plugin for Elektra. (Klemens Böswirth and Jakob Fischer)
The following section lists news about the plugins we updated in this release.
toml
plugin to swallow the first letter of
all keys (after the namespace), if the parent key was a root key (e.g. user:/
). (Klemens Böswirth)
type
metakey is now set for numbers on reading. (Jakob Fischer)
sys.path
. (Mihael Pranjić)
The text below summarizes updates to the C (and C++)-based libraries of Elektra.
/%/
) in the keyname validation and canonicalization logic
have been fixed. (Klemens Böswirth)
Bindings allow you to utilize Elektra using various programming languages. This section keeps you up to date with the multi-language support provided by Elektra.
Key::get*AndRelease
convenience methods introduced with the last release have been removed. (Michael Tucek)
dbus
change notification mechanism. (Mihael Pranjić)
key
. (@lawli3t)
keyname
. (@lawli3t)
keyvalue
. (@lawli3t)
keyset
. (@lawli3t)
glib
, io_ev
, io_glib
and io_uv
. (Robert Sowula)
We are currently working on following topics:
About 18 authors changed 307 files with 6547 insertions(+) and 1914 deletions(-) in 304 commits.
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 using GnuPG from here or on GitHub
The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A
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.
For more information, see https://libelektra.org.
Best regards, Elektra Initiative
We are proud to release Elektra 0.9.6.
Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database. For more information, visit https://libelektra.org.
You can also read the news on our website
You can try out the latest Elektra release using our docker image elektra/elektra.
This is the quickest way to get started with Elektra without compiling and other obstacles, simply run
docker run -it elektra/elektra
.
The JNI plugin was encountering a double free on open. This has been fixed in conjunction with an update to JNA binding release mechanism. The previously disabled JNI test have been fixed and enabled.
For how to write plugins, please refer to java-plugins.md as well as the JNI plugin and JNA binding documentation.
Note that it is currently not possible to mount plugins written in Java (see #3881).
The following section lists news about the plugins we updated in this release.
(Michael Tucek)
Special thanks to (Klemens Böswirth), (Mihael Pranjić) and (Robert Sowula) for helping with the problem analysis!
elektraNotificationContract
. (Klemens Böswirth)
The text below summarizes updates to the C (and C++)-based libraries of Elektra.
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.
-Wno-shift-overflow warnings
option from SWIG bindings compile flags. (Mihael Pranjić)
operator != ignored
. (Mihael Pranjić)
finalize()
to Cleaner
Key::release
and KeySet::release
for recommended resource release handlingKey
API introducing the following changes:
Key
classKey::getCurrentMeta
Elektra.KeyNewArgumentFlags
to Key.NewArgumentTag
int
to boolean
or enabled a fluent interface where appropriateKey::*Integer
to Key::*Int
KeyInvalidNameException
to KeyNameException
KeyTypeMismatchException
to KeyBinaryTypeNotSupportedException
Key::get*AndRelease
convenience methodsKey::createNameless
KeyReleasedException
being thrown when a released Key
is being accessedKeyMetaException
KeyTypeConversionException
Key::needsSync
Key::isNull
KeyReleasedException
is now being thrown when a released (= previously isNull
) Key
is being accessedKey
s with no backing native key pointer cannot be created anymoreKeySet
API introducing the following changes:
KeySet::head
to KeySet::first
KeySet::tail
to KeySet::last
KeySetReleasedException
being thrown when a released KeySet
is being accessedKeySetAppendException
KeySet::create(int, Object[])
KeySet::needsSync
Key
, now return an `Optional<Key>´
KeySet::lookup*
now returns Optional<Key>
Key::getMeta
now returns Optional<Key>
// checking whether the key has been found BEFORE API change
Key found = ks.lookup("/some/key");
if (found != null) {
// process found key
}
// checking whether the key has been found AFTER API change
ks.lookup("/some/key").ifPresent(k -> // process found key );
KDB
API introducing the following changes:
KDBClosedException
being thrown when a closed KDB
session is being accessedKDB::get(Key)
KDB::open()
KDB::open(KeySet)
(Michael Tucek)
kdb set
functionality that creates a null key. (Robert Sowula)
elektraMemDup
to void *
and update the documentation. (Mihael Pranjić)
lodash
and hosted-git-info
dependencies of webd
due to security update. (Mihael Pranjić)
generate-hashsums
. (Mihael Pranjić)
shfmt
v3.2.4 to reformat shell scripts. (Mihael Pranjić)
cmake-format
v0.6.13 (cmakelang
) to reformat CMake. (Mihael Pranjić)
doc/GIT.md
(Klemens Böswirth)
AUTHORS.md
(Michael Tucek)
doc/Doxyfile
to Doxygen 1.9.1 and fix a syntax error with the FILTER_PATTERNS
directive. (Mihael Pranjić)
testshell_markdown_tutorial_crypto
on Mac OS and other OS with GnuPG version >= 2.3.1. (Peter Nirschl @petermax2)
BUILD_TESTING
is disabled. (Robert Sowula)
FindCppCMS.cmake
CMake module and unused Boost
variables. (Mihael Pranjić)
0.10.1.pre1
in Docker images. (Mihael Pranjić)
doc
image. (Mihael Pranjić)
jni
plugin and fix JAVA_HOME
detection. (Mihael Pranjić)
The website is generated from the repository, so all information about plugins, bindings and tools are always up to date. Furthermore, we changed:
highlight.js
due to a ReDOS vulnerability and upgrade other dependencies as well. (Mihael Pranjić)
lodash
dependency due to security update. (Mihael Pranjić)
We are currently working on following topics:
We closed 39 issues for this release.
About 17 authors changed 627 files with 15988 insertions(+) and 16768 deletions(-) in 465 commits.
Thanks to all authors for making this release possible!
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 using GnuPG from here or on GitHub
The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A
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.
For more information, see https://libelektra.org
Best regards, Elektra Initiative