
\begin{DoxyItemize}
\item guid\+: 8c64fe8a-\/87a5-\/4b72-\/b772-\/d98c8a4a5efd
\item author\+: Mihael Pranjić
\item pub\+Date\+: Tue, 26 Nov 2019 14\+:55\+:19 +0100
\item short\+Desc\+: K\+DE Integration, Rust\&Go Bindings, Code Generation
\end{DoxyItemize}

We are proud to release Elektra 0.\+9.\+1.

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

You can also read the news \href{https://www.libelektra.org/news/0.9.1-release}{\tt on our website}


\begin{DoxyItemize}
\item We are working on integrating Elektra into \href{https://kde.org/}{\tt K\+DE}. A new Elektra plugin called {\ttfamily kconfig} was added which can read K\+DE\textquotesingle{}s kconfig ini files. Additionally we are working on a \href{https://github.com/ElektraInitiative/kconfig}{\tt fork} of K\+DE\textquotesingle{}s {\ttfamily K\+Config} configuration system and patching it to use libelektra. \+\_\+(\+Dardan Haxhimustafa)\+\_\+ and \+\_\+(\+Felix Resch)\+\_\+
\item The \href{https://crates.io/crates/elektra}{\tt elektra} and \href{https://crates.io/crates/elektra-sys}{\tt elektra-\/sys} crates have been published to crates.\+io for easier usage of our Rust binding. \+\_\+(\+Philipp Gackstatter)\+\_\+
\item We improved our \href{https://github.com/ElektraInitiative/go-elektra}{\tt Go bindings}. \+\_\+(\+Raphael Gruber)\+\_\+
\item Code Generation is ready for productive use. \+\_\+(Klemens Böswirth)\+\_\+
\end{DoxyItemize}

While the new {\ttfamily kdb gen} was already included in the last release, it is now fully functional and ready for productive use. To get started take a look at the new man-\/page for \href{https://www.libelektra.org/manpages/kdb-gen}{\tt {\ttfamily kdb-\/gen(1)}}.

If you specifically want to use it with the High-\/\+Level A\+PI take a look at \href{https://www.libelektra.org/tutorials/high-level-api}{\tt this tutorial}.

We also created a new C\+Make function that will be available, if you include Elektra via C\+Make\textquotesingle{}s {\ttfamily find\+\_\+package}. The function is called {\ttfamily elektra\+\_\+kdb\+\_\+gen} and can be used to tell C\+Make about files that are generated via {\ttfamily kdb gen}. \+\_\+(Klemens Böswirth)\+\_\+


\begin{DoxyItemize}
\item We migrated our \href{https://build.libelektra.org}{\tt build server} and \href{https://www.libelektra.org}{\tt website} to up-\/to-\/date hardware. \+\_\+(\+Markus Raab and Djordje Bulatovic)\+\_\+
\item Elektra now has a technical preview of a new \hyperlink{doc_tutorials_cmerge_md}{merge library}. It is written in C99 and can currently be used with \hyperlink{doc_help_kdb-cmerge_md}{`kdb cmerge`}. \+\_\+(Dominic Jäger)\+\_\+
\item We make it easier for new developers to join Elektra, e.\+g., see new \hyperlink{doc_GETSTARTED_md}{get started}. \+\_\+(\+Hani Torabi)\+\_\+
\item We made many cleanups, to get Elektra ready for 1.\+0!
\end{DoxyItemize}

The following section lists news about the \href{https://www.libelektra.org/plugins/readme}{\tt plugins} we updated in this release.


\begin{DoxyItemize}
\item We removed 12 obsolete or unfinished plugins\+:
\begin{DoxyItemize}
\item {\ttfamily boolean},
\item {\ttfamily cachefilter},
\item {\ttfamily cpptype},
\item {\ttfamily dini},
\item {\ttfamily enum},
\item {\ttfamily regexstore},
\item {\ttfamily required},
\item {\ttfamily haskell},
\item {\ttfamily simplespeclang},
\item {\ttfamily regexdispatcher},
\item {\ttfamily typechecker},
\item {\ttfamily struct}. \+\_\+(Markus Raab, René Schwaiger)\+\_\+
\end{DoxyItemize}
\item We unified the name of the config check function of the plugins to {\ttfamily name\+Of\+Plugin\+Check\+Conf}. Before this update some plugins used the name {\ttfamily name\+Of\+Plugin\+Check\+Config} instead. \+\_\+(René Schwaiger)\+\_\+
\item We improved the error messages in {\ttfamily crypto}, {\ttfamily fcrypt}, and {\ttfamily gpgme} plugins. \+\_\+(\+Peter Nirschl)\+\_\+
\item We now correctly handle return codes (error codes) of {\ttfamily execv} in the G\+PG module. \+\_\+(\+Peter Nirschl)\+\_\+
\item We improved the documentation of {\ttfamily ks\+Append\+Key} regarding ownership of keys. \+\_\+(\+Raphael Gruber)\+\_\+
\item We removed the experimental status of the following plugins\+:
\begin{DoxyItemize}
\item {\ttfamily gopts}
\item {\ttfamily specload}. \+\_\+(Klemens Böswirth)\+\_\+
\end{DoxyItemize}
\item We added the following experimental plugins\+:
\begin{DoxyItemize}
\item {\ttfamily kconfig}. \+\_\+(\+Dardan Haxhimustafa)\+\_\+
\end{DoxyItemize}
\end{DoxyItemize}

We removed the experimental plugin. For a plugin that is able to parse similar syntax, please take a look at the


\begin{DoxyItemize}
\item \hyperlink{autotoc_md786_src_plugins_yajl_README_md}{Y\+A\+JL} , and
\item \hyperlink{autotoc_md817_src_plugins_yamlcpp_README_md}{Y\+A\+ML C\+PP}
\end{DoxyItemize}

plugins. \+\_\+(René Schwaiger)\+\_\+


\begin{DoxyItemize}
\item The error message, if non of the gopts variants can be compiled, was improved. \+\_\+(Klemens Böswirth)\+\_\+
\item A better error, if the plugin fails to load {\ttfamily argv} from the system, was added. \+\_\+(Klemens Böswirth)\+\_\+
\item A function to detect help mode, without invoking {\ttfamily elektra\+Get\+Opts} was added. It simply checks, whether {\ttfamily -\/-\/help} is one of the string in {\ttfamily argv}. \+\_\+(Klemens Böswirth)\+\_\+
\item Increase test timeout from 120s to 240s. \+\_\+(Mihael Pranjić)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item We added a plugin which can be used to parse kconfig I\+NI files. \+\_\+(\+Dardan Haxhimustafa)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item We now store the O\+P\+M\+P\+HM inside of the mmap format. \+\_\+(Mihael Pranjić)\+\_\+
\item The storage format was changed and many sanity checks were improved or added. \+\_\+(Mihael Pranjić)\+\_\+
\item Enforce consistency by writing the magic file footer last. \+\_\+(Mihael Pranjić)\+\_\+
\item Filter empty meta Key\+Sets to save space. \+\_\+(Mihael Pranjić)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item The plugin now correctly sets the path in the {\ttfamily parent\+Key}. It therefore now supports set calls. \+\_\+(Klemens Böswirth)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item The \href{https://master.libelektra.org/tests/shell/shell_recorder/tutorial_wrapper}{\tt Markdown Shell Recorder} test of the plugin now also works, if you execute it as root user. \+\_\+(René Schwaiger)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item There is now the config key {\ttfamily missing/log} that allows logging of all missing {\ttfamily require}d keys. \+\_\+(Klemens Böswirth)\+\_\+
\item {\ttfamily spec} now internally handles errors differently. There should be no external impact apart from better performance. \+\_\+(Klemens Böswirth)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item We now treat relative paths as relative to {\ttfamily K\+D\+B\+\_\+\+D\+B\+\_\+\+S\+P\+EC} instead of the current working directory. \+\_\+(Klemens Böswirth)\+\_\+
\item Changes to {\ttfamily default} or {\ttfamily type} metadata are no longer supported, since they are not safe in every case. \+\_\+(Klemens Böswirth)\+\_\+
\item The plugin no longer has the {\ttfamily experimental} status. \+\_\+(Klemens Böswirth)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item We made sure that building the plugin works, if you use the latest version of C\+Make ({\ttfamily 3.\+15.\+3}) and Boost ({\ttfamily 1.\+71}). \+\_\+(René Schwaiger)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item We added an option to disable the restoring of boolean values. This useful for storage formats like Y\+A\+ML that have native boolean types. \+\_\+(Klemens Böswirth)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item Yajl now correctly supports Elektras boolean types using the {\ttfamily type} plugin. For example, setting {\ttfamily on}, {\ttfamily enable} or {\ttfamily true} all map to J\+S\+O\+Ns native {\ttfamily true} value. See the \hyperlink{autotoc_md752_src_plugins_type_README_md}{type} plugin for more details about boolean types. \+\_\+(\+Philipp Gackstatter)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item We removed the plugin in favor of Yan LR. \+\_\+(René Schwaiger)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item We removed the plugin in favor of Yan LR. \+\_\+(René Schwaiger)\+\_\+
\end{DoxyItemize}

The text below summarizes updates to the \href{https://www.libelektra.org/libraries/readme}{\tt C (and C++)-\/based libraries} of Elektra.

We introduced several incompatible changes\+:


\begin{DoxyItemize}
\item The library {\ttfamily libelektra}, which is a collection of different elektra libraries, is now removed. Users of C\+Make or pkg-\/config should not be affected. Otherwise change {\ttfamily -\/lelektra} to {\ttfamily -\/lelektra-\/core -\/lelektra-\/kdb} or whatever parts of Elektra your application uses. \+\_\+(\+Markus Raab)\+\_\+
\item The conversion functions {\ttfamily elektra\+Key\+To$\ast$} and {\ttfamily elektra$\ast$\+To\+String} are now part of the {\ttfamily elektra-\/ease} library instead of the {\ttfamily elektra-\/highlevel} library. This should not cause any breaking changes since {\ttfamily elektra-\/highlevel} already depends on {\ttfamily elektra-\/ease}. In addition the header {\ttfamily \hyperlink{conversion_8h}{elektra/conversion.\+h}} is kept for compatibility. \+\_\+(Klemens Böswirth)\+\_\+
\item Fixes in documentation that might disallow some code operating in grey areas before. \+\_\+(\+Markus Raab)\+\_\+
\item We removed {\ttfamily key\+Rel} and {\ttfamily key\+Rel2} since it can be easily replaced by other existing functions. \+\_\+(\+Philipp Gackstatter)\+\_\+
\end{DoxyItemize}

We changed the following symbols\+:


\begin{DoxyItemize}
\item E\+L\+E\+K\+T\+R\+A\+\_\+\+P\+L\+U\+G\+I\+N\+\_\+\+C\+O\+M\+M\+IT
\item elektra\+Key\+To\+String
\item elektra\+Key\+To\+Boolean
\item elektra\+Key\+To\+Char
\item elektra\+Key\+To\+Octet
\item elektra\+Key\+To\+Short
\item elektra\+Key\+To\+Unsigned\+Short
\item elektra\+Key\+To\+Long
\item elektra\+Key\+To\+Unsigned\+Long
\item elektra\+Key\+To\+Long\+Long
\item elektra\+Key\+To\+Unsigned\+Long\+Long
\item elektra\+Key\+To\+Float
\item elektra\+Key\+To\+Double
\item elektra\+Key\+To\+Long\+Double
\item elektra\+Boolean\+To\+String
\item elektra\+Char\+To\+String
\item elektra\+Octet\+To\+String
\item elektra\+Short\+To\+String
\item elektra\+Unsigned\+Short\+To\+String
\item elektra\+Long\+To\+String
\item elektra\+Unsigned\+Long\+To\+String
\item elektra\+Long\+Long\+To\+String
\item elektra\+Unsigned\+Long\+Long\+To\+String
\item elektra\+Float\+To\+String
\item elektra\+Double\+To\+String
\item elektra\+Long\+Double\+To\+String
\item kdb\+\_\+octet\+\_\+t
\item kdb\+\_\+boolean\+\_\+t
\item kdb\+\_\+short\+\_\+t
\item kdb\+\_\+long\+\_\+t
\item kdb\+\_\+long\+\_\+long\+\_\+t
\item kdb\+\_\+unsigned\+\_\+short\+\_\+t
\item kdb\+\_\+unsigned\+\_\+long\+\_\+t
\item kdb\+\_\+unsigned\+\_\+long\+\_\+long\+\_\+t
\item kdb\+\_\+char\+\_\+t
\item kdb\+\_\+float\+\_\+t
\item kdb\+\_\+double\+\_\+t
\item kdb\+\_\+long\+\_\+double\+\_\+t
\end{DoxyItemize}


\begin{DoxyItemize}
\item A new plugin function, {\ttfamily kdb\+Commit}, was implemented. The function is carried out in the {\ttfamily commit} phase of {\ttfamily kdb\+Set} and separates the commit functionality from the {\ttfamily \hyperlink{group__kdb_ga11436b058408f83d303ca5e996832bcf}{kdb\+Set()}} function. \+\_\+(\+Vid Leskovar)\+\_\+
\item {\ttfamily kdbconfig.\+h} is no longer included in the installed headers. This is because it could cause conflicts with other {\ttfamily config.\+h}-\/type headers from applications. \+\_\+(Klemens Böswirth)\+\_\+
\item {\ttfamily ks\+Append\+Key}\+: state that it only fail on memory problems. \+\_\+(\+Markus Raab)\+\_\+
\item Fix memory leak in {\ttfamily kdb\+Get}. \+\_\+(\+Markus Raab)\+\_\+
\item Implemented {\ttfamily \hyperlink{kdberrors_8h}{kdberrors.\+h}} directly without generation of the {\ttfamily specification} file because of drastically reduced error code count \+\_\+(\+Michael Zronek)\+\_\+
\item {\ttfamily key\+Is\+Direct\+Below} was renamed to {\ttfamily key\+Is\+Directly\+Below}. \+\_\+(\+Philipp Gackstatter)\+\_\+
\item {\ttfamily key\+Meta} was added to provide access to a key\textquotesingle{}s underlying Key\+Set that holds its metadata keys. \+\_\+(\+Philipp Gackstatter)\+\_\+
\item Removed the obsolete {\ttfamily ks\+Lookup\+By\+String} and {\ttfamily ks\+Lookup\+By\+Binary}, as well as deprecated {\ttfamily K\+D\+B\+\_\+\+O\+\_\+$\ast$} options. \+\_\+(\+Philipp Gackstatter)\+\_\+
\item Added {\ttfamily key\+Lock} and {\ttfamily key\+Is\+Locked}. \+\_\+(\+Manuel Mausz)\+\_\+
\item Removed {\ttfamily key\+V\+Init}. \+\_\+(\+Manuel Mausz)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item The option {\ttfamily -\/h} is no longer used to indicate help mode. Only {\ttfamily -\/-\/help}, will invoke help mode. \+\_\+(Klemens Böswirth)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item Removed or moved several functions of {\ttfamily \hyperlink{kdbproposal_8h}{kdbproposal.\+h}}\+:
\begin{DoxyItemize}
\item {\ttfamily elektra\+Ks\+To\+Mem\+Array} was moved to {\ttfamily kdbease.\+h},
\item {\ttfamily elektra\+Lookup\+Options} was moved to {\ttfamily \hyperlink{kdbprivate_8h}{kdbprivate.\+h}},
\item {\ttfamily key\+Set\+StringF} was moved to {\ttfamily \hyperlink{kdbinternal_8h}{kdbinternal.\+h}},
\item Removed {\ttfamily ks\+Prev} and {\ttfamily elektra\+Ks\+Prev},
\item Removed {\ttfamily elektra\+Rename\+Keys} and replaced it with {\ttfamily ks\+Rename\+Keys}. \+\_\+(\+Philipp Gackstatter)\+\_\+
\end{DoxyItemize}
\end{DoxyItemize}

Bindings allow you to utilize Elektra using \href{https://www.libelektra.org/bindings/readme}{\tt various programming languages}. This section keeps you up to date with the multi-\/language support provided by Elektra.


\begin{DoxyItemize}
\item We removed the Haskell and GI bindings. \+\_\+(\+Markus Raab)\+\_\+
\item Avoid unnecessary copying std\+::string where possible (set\+String and set\+Meta only). \+\_\+(\+Manuel Mausz)\+\_\+
\item C\+PP\+: add {\ttfamily Key\+::is\{Name,Value,Meta\}Locked}. \+\_\+(\+Manuel Mausz)\+\_\+
\item G\+L\+IB\+: removed {\ttfamily gelektra\+\_\+keyset\+\_\+resize}. \+\_\+(\+Manuel Mausz)\+\_\+
\item G\+L\+IB\+: removed {\ttfamily gelektra\+\_\+keyset\+\_\+rewind}, {\ttfamily gelektra\+\_\+keyset\+\_\+next}, {\ttfamily gelektra\+\_\+keyset\+\_\+current}, {\ttfamily gelektra\+\_\+keyset\+\_\+getcursor}, {\ttfamily gelektra\+\_\+keyset\+\_\+setcursor}. \+\_\+(\+Manuel Mausz)\+\_\+
\item G\+L\+IB\+: renamed {\ttfamily gelektra\+\_\+keyset\+\_\+atcursor} to {\ttfamily gelektra\+\_\+keyset\+\_\+at}. \+\_\+(\+Manuel Mausz)\+\_\+
\item gsettings\+: adapt iterator. \+\_\+(\+Manuel Mausz)\+\_\+
\item S\+W\+IG\+: Add {\ttfamily Key\+Not\+Found\+Exception} exception. \+\_\+(\+Manuel Mausz)\+\_\+
\item S\+W\+IG\+: Fix Key\+Set equality operators. \+\_\+(\+Manuel Mausz)\+\_\+
\item S\+W\+I\+G/\+Python\+: {\ttfamily hash(key)} will throw unless the key name is locked. \+\_\+(\+Manuel Mausz)\+\_\+
\item S\+W\+I\+G/\+Python\+: Add operator overloadings for {\ttfamily len(\+Key)}, {\ttfamily repr(\+Key)}, {\ttfamily str(\+Key\+Set)}, {\ttfamily repr(\+Key\+Set)}. \+\_\+(\+Manuel Mausz)\+\_\+
\item S\+W\+I\+G/\+Python\+: Add alternative Key constructor {\ttfamily Key(name, value, \mbox{[}dict\mbox{]})}. \+\_\+(\+Manuel Mausz)\+\_\+
\item S\+W\+I\+G/\+Python\+: Add {\ttfamily Key\+Set.\+extend(\mbox{[}key1, key2,...\mbox{]})} and {\ttfamily Key\+Set.\+append(key1, key2, ...)}. \+\_\+(\+Manuel Mausz)\+\_\+
\item S\+W\+I\+G/\+Python\+: Add {\ttfamily Key\+Set.\+append(key\+\_\+name, key\+\_\+value, key\+\_\+opts)} which directly creates and appends a key. \+\_\+(\+Manuel Mausz)\+\_\+
\item S\+W\+I\+G/\+Python\+: Add {\ttfamily Key\+Set.\+unpack\+\_\+names()}, {\ttfamily Key\+Set.\+unpack\+\_\+basenames()}, {\ttfamily Key\+Set.\+filter(func)}, {\ttfamily Key\+Set.\+filter\+\_\+below(where)}, {\ttfamily Key.\+array\+\_\+elements()}. \+\_\+(\+Manuel Mausz)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item Completely overhauled the Java binding to be able to use Elektra plugins directly. A new Plugin\+Loader can load Elektra plugins or a native implemented Java plugin. All Plugins now implement the new Plugin interface. For an example see the test case. \+\_\+(\+Michael Zronek)\+\_\+
\item Upgraded maven dependencies for Java binding \+\_\+(\+Michael Zronek)\+\_\+
\item The Java binding now supports the \hyperlink{doc_decisions_error_codes_md}{error codes} in a native way. All exceptions contain the necessary information. \+\_\+(\+Michael Zronek)\+\_\+
\item Further improved the Java binding such as wording and documentation. \+\_\+(\+Michael Zronek)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item Add the {\ttfamily elektra-\/sys} crate which contains raw bindings to libelektra for Rust. \+\_\+(\+Philipp Gackstatter)\+\_\+
\item Add the {\ttfamily elektra} crate which contains safe wrapper methods for the raw bindings. The crate contains bindings for the low-\/level A\+PI, which means that the data types {\ttfamily Key} and {\ttfamily Key\+Set} can now safely be used from Rust. The Rust version of the A\+PI has been designed to take advantage of Rust\textquotesingle{}s type system and to be in accordance with the memory safety of Rust. For instance, the Key has been divided into {\ttfamily String\+Key} and {\ttfamily Binary\+Key}, to prevent type mismatches at compile time. With the binding for {\ttfamily K\+DB}, one can take advantage of the elektra ecosystem from Rust. See the Readme for more. \+\_\+(\+Philipp Gackstatter)\+\_\+
\item Rewrote the {\ttfamily K\+D\+B\+Error} to follow the specification fully and in particular allow catching out of memory errors by catching resource errors. \+\_\+(\+Philipp Gackstatter)\+\_\+
\item Added a {\ttfamily keyset!} macro to easily create a keyset with many keys in a single invocation. \+\_\+(\+Philipp Gackstatter)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item {\ttfamily K\+D\+B\+\_\+\+E\+X\+E\+C\+\_\+\+P\+A\+TH}, which can be used to add further external tools to {\ttfamily kdb}, now supports {\ttfamily \+:} to separate paths. {\ttfamily kdb list-\/tools} and {\ttfamily run\+\_\+env} were improved to take advantage of this. \+\_\+(\+Markus Raab)\+\_\+
\item Checks for {\ttfamily kdb\+Commit} have been added to \hyperlink{doc_help_kdb-plugin-check_md}{kdb plugin-\/check}. \+\_\+(\+Vid Leskovar)\+\_\+
\item Added P\+ID file config setting for kdb-\/run-\/rest-\/frontend \+\_\+(\+Markus Raab)\+\_\+
\item Added {\ttfamily kdb meta-\/show} command which prints out all metadata along with its values for a given key. \+\_\+(\+Michael Zronek)\+\_\+
\item Removed {\ttfamily kdb vset} as it does not properly put meta-\/data to the spec namespace. \+\_\+(\+Michael Zronek)\+\_\+
\item Renamed kdb plugin commands following a hierarchical structure. {\ttfamily kdb info} is now {\ttfamily kdb plugin-\/info}, {\ttfamily kdb check} is now {\ttfamily kdb plugin-\/check} and {\ttfamily kdb list} is now {\ttfamily kdb plugin-\/list}. We also removed the obsolete {\ttfamily kdb fstab}. \+\_\+(\+Philipp Gackstatter)\+\_\+
\item Renamed kdb meta commands\+:
\begin{DoxyItemize}
\item {\ttfamily kdb getmeta} is now {\ttfamily kdb meta-\/get}
\item {\ttfamily kdb lsmeta} is now {\ttfamily kdb meta-\/ls}
\item {\ttfamily kdb showmeta} is now {\ttfamily kdb meta-\/show}
\item {\ttfamily kdb rmmeta} is now {\ttfamily kdb meta-\/rm}
\item {\ttfamily kdb setmeta} is now {\ttfamily kdb meta-\/set} \+\_\+(\+Philipp Gackstatter)\+\_\+
\end{DoxyItemize}
\item Fix test tool {\ttfamily gen-\/gpg-\/testkey} by giving a narrower G\+PG key description. Fixes mismatches with existing G\+PG keys that contain \char`\"{}elektra.\+org\char`\"{} as e-\/mail address. \+\_\+(\+Peter Nirschl)\+\_\+
\item {\ttfamily kdb list-\/commands} and {\ttfamily kdb plugins-\/list} now sort their output in an alphabetical order \+\_\+(Anton Hößl)\+\_\+
\item {\ttfamily kdb plugin-\/list} does now mention in the helptext that with option {\ttfamily -\/v} the output is sorted by the plugin status \+\_\+(Anton Hößl)\+\_\+
\item {\ttfamily kdb import}, {\ttfamily kdb export} and {\ttfamily kdb editor} now search the plugin database for suitig plugins so it\textquotesingle{}s now possible to run {\ttfamily kdb export /hello json} instead of having to specify the plugin for the desired format directly. \+\_\+(Anton Hößl)\+\_\+
\item {\ttfamily get} and {\ttfamily mount}\+: Remove dependency on {\ttfamily \hyperlink{kdbprivate_8h}{kdbprivate.\+h}} \+\_\+(\+Philipp Gackstatter)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item We structured the \hyperlink{scripts_README_md}{scripts}. \+\_\+(\+Markus Raab)\+\_\+
\item Removed the scripts
\begin{DoxyItemize}
\item {\ttfamily scripts/elektra-\/merge},
\item {\ttfamily scripts/elektra-\/mount},
\item {\ttfamily scripts/elektra-\/umount},
\item {\ttfamily convert-\/fstab},
\item {\ttfamily convert-\/hosts},
\item {\ttfamily convert-\/inittab},
\item {\ttfamily convert-\/users},
\item {\ttfamily scripts/benchmark\+\_\+libsplit.\+sh},
\item {\ttfamily scripts/zsh} and
\item {\ttfamily example-\/xorg}. \+\_\+(\+Markus Raab)\+\_\+
\end{DoxyItemize}
\item Renamed {\ttfamily scripts/run\+\_\+dev\+\_\+env} to {\ttfamily scripts/dev/run\+\_\+env}. \+\_\+(\+Markus Raab)\+\_\+
\item The script `draw-\/all-\/plugins` now also works properly, if the repository path contains space characters. \+\_\+(René Schwaiger)\+\_\+
\item The script `link-\/checker` now deduplicates the list of links before checking them. The timeout and amount of retries was also reduced. Lastly the script now supports a whitelist. Any link stored in `tests/linkchecker.whitelist` will not be checked. \+\_\+(Klemens Böswirth)\+\_\+
\item We removed a script used to compare the runtime performance of Y\+A\+ML plugins. \+\_\+(René Schwaiger)\+\_\+
\item Cleanup\+: separation of dev, admin and completion scripts. \+\_\+(\+Markus Raab, Rene Schwaiger)\+\_\+
\item Pre-\/commit hook {\ttfamily pre-\/commit-\/check-\/formatting} now lives in `scripts/dev/pre-\/commit-\/check-\/formatting`. \+\_\+(Klemens Böswirth)\+\_\+
\item The new script {\ttfamily reformat-\/javascript} formats the Java\+Script code of the repository using the tool \href{https://prettier.io}{\tt {\ttfamily prettier}}. \+\_\+(René Schwaiger)\+\_\+
\item We renamed
\begin{DoxyItemize}
\item the script {\ttfamily reformat-\/source} to {\ttfamily reformat-\/c}, and
\item the script {\ttfamily reformat-\/shfmt} to {\ttfamily reformat-\/shell}. \+\_\+(René Schwaiger)\+\_\+
\end{DoxyItemize}
\item The script cmake-\/format now requires {\ttfamily cmake-\/format} 0.\+6. \+\_\+(René Schwaiger)\+\_\+
\item The new script {\ttfamily reformat-\/java} formats the Java code in the repository using \href{https://clang.llvm.org/docs/ClangFormat.html}{\tt {\ttfamily clang-\/format}}. \+\_\+(René Schwaiger)\+\_\+
\item The \href{https://master.libelektra.org/tests/shell/shell_recorder/tutorial_wrapper}{\tt Markdown Shell Recorder} now also works correctly on Free\+B\+SD. \+\_\+(René Schwaiger)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item Added a tutorial on how to write language bindings. Visit our new \hyperlink{doc_tutorials_language-bindings_md}{R\+E\+A\+D\+ME}. \+\_\+(\+Michael Zronek, Raphael Gruber, Philipp Gackstatter)\+\_\+
\item Clarified subtyping in the language bindings tutorial. \+\_\+(\+Michael Zronek)\+\_\+
\item A \hyperlink{doc_tutorials_highlevel-bindings_md}{second tutorial} on writing bindings for the high-\/level A\+PI was created as well. \+\_\+(Klemens Böswirth, Raphael Gruber)\+\_\+
\item Added \hyperlink{autotoc_md774_src_plugins_xerces_README_md}{info} on how to include xerces plugin with homebrew installation. \+\_\+(Anton Hößl)\+\_\+
\item The \hyperlink{doc_COMPILE_md}{compile instructions} do not assume that you use {\ttfamily make} or {\ttfamily gcc} to build Elektra anymore. \+\_\+(René Schwaiger)\+\_\+
\item Add hints about reformatting with docker. \+\_\+(Dominic Jäger)\+\_\+
\item Add instructions about sourcing on Free\+B\+SD. \+\_\+(Dominic Jäger)\+\_\+
\item Add information on debuggers to main testing documentation. \+\_\+(Dominic Jäger)\+\_\+
\item Added design decision for error code implementations. \+\_\+(\+Michael Zronek)\+\_\+
\item Fixed some typos and links in the documentation and add new iterate example. \+\_\+(\+Philipp Gackstatter)\+\_\+
\item Clarified warnings metadata in the \hyperlink{doc_dev_error-handling_md}{error-\/handling guideline}. \+\_\+(\+Michael Zronek)\+\_\+
\item We fixed minor spelling mistakes in the documentation. \+\_\+(René Schwaiger)\+\_\+
\item Corrected buildserver documentation. \+\_\+(\+Djordje Bulatovic)\+\_\+
\item Add merge library into kdbset example. \+\_\+(Dominic Jäger)\+\_\+
\item We updated links for the I\+NI parsing library Nickel. \+\_\+(René Schwaiger)\+\_\+
\item Added some informations about contributing to Elektra. \+\_\+(\+Hani Torabi)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item We changed how the {\ttfamily formatting test} detects code differences. This update should get rid of transient errors as \href{https://issues.libelektra.org/2927#issuecomment-528058641}{\tt reported here}. \+\_\+(René Schwaiger)\+\_\+
\item We disabled the test for the conversion engine. For more information, please take a look at \href{https://issues.libelektra.org/3086}{\tt issue \#3086}. \+\_\+(René Schwaiger)\+\_\+
\item We disabled the test {\ttfamily testmod\+\_\+zeromqsend} from the command {\ttfamily kdb run\+\_\+all}, since it caused timeouts in high load scenarios. \+\_\+(Mihael Pranjić)\+\_\+
\item The (Markdown) Shell Recorder now prints the protocol for a failed test, even if the test modified the database permanently. \+\_\+(René Schwaiger)\+\_\+
\item We rerun ctest twice to ignore temporary build failures. \+\_\+(\+Markus Raab)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item {\ttfamily kdbtypes.\+h} is now generated directly via a C\+Make {\ttfamily configure\+\_\+file} call. \+\_\+(Klemens Böswirth)\+\_\+
\item The variable {\ttfamily E\+L\+E\+K\+T\+R\+A\+\_\+\+S\+T\+A\+T\+\_\+\+S\+T\+\_\+\+S\+I\+Z\+E\+\_\+F} now contains the correct format specifier for the {\ttfamily st\+\_\+size} member of the {\ttfamily stat} struct on mac\+OS. \+\_\+(René Schwaiger)\+\_\+
\item We simplified and unified the C\+Make code for the Shell Tests and the Shell Recorder. \+\_\+(René Schwaiger)\+\_\+
\item C\+Make now prints warnings about missing man pages. \+\_\+(René Schwaiger)\+\_\+
\item The build system does not update a man page in the folder doc/man any more, if ronn only changed the creation date of the man page. \+\_\+(René Schwaiger)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item We now have a \hyperlink{doc_dev_symbol-versioning_md}{setup for proper symbol versioning}. \+\_\+(Klemens Böswirth)\+\_\+
\item We do not use implicit typing in the code of the {\ttfamily conditionals} and {\ttfamily yamlcpp} plugin any more. After this update, the code compiles without any warnings, even though we now use the compiler switch {\ttfamily -\/\+Wconversion}. \+\_\+(René Schwaiger)\+\_\+
\item J\+NA and J\+NI are not built concurrently anymore to avoid \href{https://jira.apache.org/jira/browse/MDEP-518}{\tt dependency resolution fails}. \+\_\+(\+Michael Zronek)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item Added Dockerfile for Ubuntu Bionic \+\_\+(\+Djordje Bulatovic)\+\_\+
\item We removed all Haskell packages from the Dockerfiles in the folder scripts/docker. \+\_\+(René Schwaiger)\+\_\+
\item We added a basic Dockerfile for Arch Linux. \+\_\+(René Schwaiger)\+\_\+
\item We updated the Dockerfile for Alpine Linux. \+\_\+(René Schwaiger)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item We added a Vagrantfile for a virtual machine based on Free\+B\+SD 12. \+\_\+(René Schwaiger)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item The reformatting script now checks that the correct version of {\ttfamily cmake-\/format} is used. \+\_\+(Klemens Böswirth, René Schwaiger)\+\_\+
\item Improved various error messages and synchronized documentations. \+\_\+(\+Michael Zronek)\+\_\+
\item Improved {\ttfamily range} plugin error message. \+\_\+(\+Michael Zronek)\+\_\+
\item Improved error codes documentation to clarify the hierarchy for developers. \+\_\+(\+Michael Zronek)\+\_\+
\item Release notes now use git\textquotesingle{}s union merge driver. \+\_\+(Dominic Jäger)\+\_\+
\item Updated asciinema recording to correctly use {\ttfamily sudo}. \+\_\+(\+Michael Zronek)\+\_\+
\item Add pkg-\/config file for kdbmerge. \+\_\+(\+Raphael Gruber)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item The {\ttfamily 🔗 Check} build job now merges P\+Rs before checking links. \+\_\+(Klemens Böswirth)\+\_\+
\item We enabled logging in the build job {\ttfamily 🍎 Clang}. This update makes sure that Elektra’s logging code compiles without warnings on mac\+OS. \+\_\+(René Schwaiger)\+\_\+
\item All mac\+OS build jobs now use Xcode {\ttfamily 11.\+1} instead of Xcode {\ttfamily 10.\+1}. \+\_\+(René Schwaiger)\+\_\+
\item We removed all non-\/\+P\+O\+S\+IX shell code from the Cirrus configuration file. \+\_\+(René Schwaiger)\+\_\+
\item The mac\+OS build jobs now use Ruby {\ttfamily 2.\+6}. \+\_\+(René Schwaiger)\+\_\+
\item We do not call {\ttfamily ninja} directly anymore. Instead we use {\ttfamily cmake -\/-\/build}. This has the advantage that we do not have to care about the Generator used by C\+Make. \+\_\+(René Schwaiger)\+\_\+
\item We added the build job {\ttfamily 😈 A\+S\+AN}, which builds and executes Elektra on Free\+B\+SD with enabled \href{https://github.com/google/sanitizers/wiki/AddressSanitizer}{\tt Address\+Sanitizer}. \+\_\+(René Schwaiger)\+\_\+
\item We now store common commands in one place at the top of the configuration file. This makes it easier to selectively disable certain build jobs. \+\_\+(René Schwaiger)\+\_\+
\item The new job {\ttfamily 📚 Check} checks
\begin{DoxyItemize}
\item that the man pages are up to date, and
\item that building the P\+DF version of the Doxygen documentation works. \+\_\+(René Schwaiger)\+\_\+
\end{DoxyItemize}
\item The new build job {\ttfamily 🐧 Fedora} builds and tests Elektra on Fedora Linux. \+\_\+(René Schwaiger)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item We upgraded all servers to Buster. \+\_\+(\+Markus Raab)\+\_\+
\item Jenkins does not auto cancel build jobs of the {\ttfamily master} branch anymore. \+\_\+(René Schwaiger)\+\_\+
\item Updated x\+Unit plugin in Jenkinsfile. \+\_\+(\+Djordje Bulatovic)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item \href{https://restyled.io}{\tt Restyled} now also formats Markdown files with \href{https://prettier.io}{\tt {\ttfamily prettier}}. \+\_\+(René Schwaiger)\+\_\+
\end{DoxyItemize}


\begin{DoxyItemize}
\item The build job {\ttfamily 🍏 G\+CC} now uses the \href{https://docs.travis-ci.com/user/installing-dependencies/#installing-packages-on-macos}{\tt Travis Homebrew addon} to install dependencies. \+\_\+(René Schwaiger)\+\_\+
\item We now build and test Elektra on Ubuntu {\ttfamily 18.\+04} (Bionic Beaver) instead of Ubuntu {\ttfamily 16.\+04} (Xenial Xerus). \+\_\+(René Schwaiger)\+\_\+
\end{DoxyItemize}

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


\begin{DoxyItemize}
\item Renamed the sub menu {\itshape Getting Started} in the menu {\itshape Documentation} to {\itshape About Elektra} and removed the sub-\/sub-\/menus {\itshape Compiling}, {\itshape Installation} and {\itshape Tutorials}. These sub-\/sub-\/menus are now sub-\/menus of {\itshape Documentation}. A new sub menu labeled {\itshape Get Started} added to the menu {\itshape Documentation} with some newcomer-\/friendly informations. Renamed the {\itshape Getting Started} sub menu in {\itshape Development} to {\itshape Contribute to Elektra}. The green button on the main page is routed to the new {\itshape Get Started} page. \+\_\+(\+Hani Torabi)\+\_\+
\item The website now lives in the folder website to avoid confusion with the R\+E\+ST backend of the Web-\/\+UI. \+\_\+(\+Markus Raab)\+\_\+
\item Improve main page of website, restructure getting started. \+\_\+(\+Markus Raab)\+\_\+
\end{DoxyItemize}

We are currently working on following topics\+:


\begin{DoxyItemize}
\item Elektrify K\+DE \+\_\+(\+Dardan Haxhimustafa)\+\_\+ and \+\_\+(\+Felix Resch)\+\_\+
\item Elektrify L\+C\+Dproc \+\_\+(Klemens Böswirth)\+\_\+ and \+\_\+(\+Jakob Fischer)\+\_\+
\item Reduce the number of merge conflicts in 3-\/way merge. \+\_\+(Dominic Jäger)\+\_\+
\item Go bindings and improved Web-\/\+UI \+\_\+(\+Raphael Gruber)\+\_\+
\item Improved Error handling \+\_\+(\+Michael Zronek)\+\_\+
\item New default storage \+\_\+(René Schwaiger)\+\_\+ and \+\_\+(\+Jakob Fischer)\+\_\+
\item Shell completion \+\_\+(Ulrike Schäfer)\+\_\+
\item Improve Elektra developer experience \+\_\+(\+Hani Torabi)\+\_\+
\item Ansible bindings \+\_\+(\+Thomas Waser)\+\_\+
\item Plugin interface improvements \+\_\+(\+Vid Leskovar)\+\_\+
\end{DoxyItemize}

We closed \href{https://github.com/ElektraInitiative/libelektra/milestone/21?closed=1}{\tt 75 issues} for this release.

About 29 authors changed 1651 files with 82267 insertions(+) and 41690 deletions(-\/) in 1623 commits.

Thanks to all authors for making this release possible!


\begin{DoxyItemize}
\item \href{https://www.libelektra.org/ftp/elektra/publications/boeswirth2019highlevel.pdf}{\tt Klemens Böswirth}\+: We explore the feasibility of using Elektra in a real-\/world project. We focused especially on using the high-\/level A\+PI with code-\/generation. In the thesis, we implemented new versions of L\+C\+Dproc, one with the low-\/level A\+PI and one with the high-\/level A\+PI. Then we did some benchmarks to compare them. Our results indicate, that Elektra is very much usable in real-\/world projects. However, we also found that there is still potential for further optimizations.
\item Mihael Pranjić\+: We design a binary storage format for Elektra\textquotesingle{}s data structures and implement a \href{https://www.libelektra.org/plugins/cache}{\tt cache plugin} based on the format. The cache plugin leverages the {\ttfamily mmap()} system call to read and write data. Our cache implementation for Elektra\textquotesingle{}s data structures makes the access to the K\+DB more than 80 times faster for larger data sets. The penalty for cache misses is below 20 percent for reasonably sized data sets.
\end{DoxyItemize}

We welcome new contributors! Read \href{https://www.libelektra.org/devgettingstarted/ideas}{\tt here} about how to get started.

As first step, you could give us feedback about these release notes. Contact us via our \href{https://issues.libelektra.org}{\tt issue tracker}.

You can download the release from \href{https://www.libelektra.org/ftp/elektra/releases/elektra-0.9.1.tar.gz}{\tt here} or \href{https://github.com/ElektraInitiative/ftp/blob/master/releases/elektra-0.9.1.tar.gz?raw=true}{\tt Git\+Hub}

The \href{https://github.com/ElektraInitiative/ftp/blob/master/releases/elektra-0.9.1.tar.gz.hashsum?raw=true}{\tt hashsums are\+:}


\begin{DoxyItemize}
\item author\+: mpranj
\item file\+: elektra-\/0.\+9.\+1.\+tar.\+gz
\item size\+: 7534156
\item md5sum\+: 42ff587adb7c3f15807ac4dae6722261
\item sha1\+: bf250260a4efa20e5444f0a7f0027430bc7aa8a0
\item sha256\+: df1d2ec1b4db9c89c216772f0998581a1cbb665e295ff9a418549360bb42f758
\end{DoxyItemize}

The release tarball is also available signed by Mihael Pranjic using Gnu\+PG from \href{https://www.libelektra.org/ftp/elektra/releases/elektra-0.9.1.tar.gz.gpg}{\tt here} or on \href{https://github.com/ElektraInitiative/ftp/blob/master/releases/elektra-0.9.1.tar.gz.gpg?raw=true}{\tt Git\+Hub}

Already built A\+P\+I-\/\+Docu can be found \href{https://doc.libelektra.org/api/0.9.1/html/}{\tt here} or on \href{https://github.com/ElektraInitiative/doc/tree/master/api/0.9.1}{\tt Git\+Hub}.

Subscribe to the \href{https://www.libelektra.org/news/feed.rss}{\tt R\+SS 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 \href{http://issues.libelektra.org}{\tt on Git\+Hub}.

\href{https://www.libelektra.org/news/0.9.1-release}{\tt Permalink to this N\+E\+WS entry}

For more information, see \href{https://libelektra.org}{\tt https\+://libelektra.\+org}

Best regards, \href{https://www.libelektra.org/developers/authors}{\tt Elektra Initiative} 