\label{doc_news_2021-10-04_0_9_8_md_md_doc_news_2021_10_04_0_9_8}%
\Hypertarget{doc_news_2021-10-04_0_9_8_md_md_doc_news_2021_10_04_0_9_8}%

\begin{DoxyItemize}
\item guid\+: 0CB8\+C139-\/730\+C-\/4\+CCD-\/9\+FB4-\/0\+C7\+C4\+AA4\+DBF2
\item author\+: Mihael Pranjić
\item pub\+Date\+: Mon, 04 Oct 2021 00\+:02\+:45 +0200
\item short\+Desc\+: Redshift Elektrified, HL API \& Java Binding Improvements
\end{DoxyItemize}

We are proud to release Elektra 0.\+9.\+8.\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3900}{}\doxysection{What is Elektra?}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3900}
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}{\texttt{ https\+://libelektra.\+org}}.

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

You can try out the latest Elektra release using our docker image \href{https://hub.docker.com/r/elektra/elektra}{\texttt{ elektra/elektra}}. This is the quickest way to get started with Elektra without compiling and other obstacles, simply run\+:


\begin{DoxyCode}{0}
\DoxyCodeLine{docker pull elektra/elektra}
\DoxyCodeLine{docker run -\/it elektra/elektra}

\end{DoxyCode}
\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3901}{}\doxysection{Highlights}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3901}

\begin{DoxyItemize}
\item {\ttfamily kdb} now prohibits write operations on cascading keys that miss a corresponding existing key. See the details in the {\ttfamily Tools} section below and the new subsection on cascading writes in the \mbox{\hyperlink{doc_tutorials_cascading_md}{tutorial}} on cascading keys for further information. \+\_\+(\+Alexander Firbas)\+\_\+
\item Redshift is now elektrified. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3902}{}\doxysubsection{Redshift and Elektra}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3902}
We have created a version of \href{https://github.com/jonls/redshift/}{\texttt{ Redshift}} that uses Elektra for configuration management!

We removed and refactored Redshift\textquotesingle{}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 \href{https://github.com/jonls/redshift/pull/837}{\texttt{ Refactor to use Elektra}} and follow the instructions provided in \href{https://github.com/qwepoizt/redshift/blob/improve-config/elektrify/CONTRIBUTING.md}{\texttt{ CONTRIBUTING.\+md}}.\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3903}{}\doxysubsubsection{Benefits of Redshift using Elektra}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3903}
Refactoring Redshift to use Elektra brings the following benefits\+:


\begin{DoxyItemize}
\item Fewer lines of code\+: reduction of $\sim$700 LOC or 16\% (measured across all {\ttfamily $\ast$.c} and {\ttfamily $\ast$.h} files exclusive of files automatically generated by Elektra).
\item Adding new configuration settings is easier and takes less time\+: Validation and parsing of setting values (from configuration file and CLI options) is handled by Elektra -\/ no custom code required!
\item Clean separation of application code and the specification of supported configuration settings (including defaults and validation rules).
\item Automatic generation of CLI help text.
\end{DoxyItemize}\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3904}{}\doxysubsection{HL API improvements}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3904}
Redshift with Elektra uses the \href{https://www.libelektra.org/tutorials/high-level-api}{\texttt{ high-\/level API}}.

We have made a large number of improvements to the \href{https://www.libelektra.org/tutorials/high-level-api}{\texttt{ high-\/level API}} in the course of refactoring Redshift. The highlights are\+:


\begin{DoxyItemize}
\item Improved detection of differences in specification between an application\textquotesingle{}s compilation and runtime.
\item Improved validation of CLI options.
\item Early detection of errors in specification files.
\item Updated and improved documentation and tutorials.
\item Various other bugfixes.
\end{DoxyItemize}

More improvements and details are explained in later sections of these release notes.

Thanks to {\itshape Klemens Böswirth}, {\itshape Markus Raab} and {\itshape Tobias Schubert}!\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3905}{}\doxysubsection{Windows releases}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3905}
We are now shipping experimental releases for Windows 32-\/ and 64-\/bit! They can be downloaded \href{https://build.libelektra.org/job/libelektra-release/lastSuccessfulBuild/artifact/artifacts/}{\texttt{ here}}.

A big success is that Redshift already works with Elektra under Windows.\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3906}{}\doxysection{Plugins}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3906}
The following section lists news about the \href{https://www.libelektra.org/plugins/readme}{\texttt{ plugins}} we updated in this release.\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3907}{}\doxysubsection{gopts}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3907}

\begin{DoxyItemize}
\item The {\ttfamily gopts} plugin now includes deeply nested options and arguments in the generated help message. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\item Errors from {\ttfamily gopts} are now correctly reported. \+\_\+(Klemens Böswirth)\+\_\+
\item Fix wrong variable names in {\ttfamily gopts\+\_\+win32.\+h}. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3908}{}\doxysubsection{range}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3908}

\begin{DoxyItemize}
\item The {\ttfamily range} plugin now uses metakey {\ttfamily type} as fallback, if {\ttfamily check/type} is not specified. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\item The {\ttfamily range} now treats all validation problems as warnings during \mbox{\hyperlink{group__kdb_ga28e385fd9cb7ccfe0b2f1ed2f62453a1}{kdb\+Get()}}. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3909}{}\doxysubsection{spec}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3909}

\begin{DoxyItemize}
\item The {\ttfamily spec} plugin now runs before other {\ttfamily postgetstorage} plugins, so that validation can happen during {\ttfamily kdb\+Get} as well. This is especially relevant in combination with {\ttfamily gopts}. \+\_\+(Klemens Böswirth)\+\_\+
\item Make spec plugin (with no support for \# and \+\_\+ in key names) work in mingw-\/w64 builds. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3910}{}\doxysubsection{sync}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3910}

\begin{DoxyItemize}
\item Add support for mingw-\/w64 builds using fflush. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3911}{}\doxysubsection{wresolver}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3911}

\begin{DoxyItemize}
\item Add missing {\ttfamily ELEKTRA\+\_\+\+PLUGIN\+\_\+\+COMMIT} export. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3912}{}\doxysubsection{TOML}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3912}

\begin{DoxyItemize}
\item Improvements to the parser, comment handling and especially quoting of strings. \+\_\+(Klemens Böswirth)\+\_\+
\item The {\ttfamily toml} plugin now supports all four kinds of strings via the {\ttfamily 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 \mbox{\hyperlink{md_src_plugins_toml_README_src_plugins_toml_README_md}{README}} \+\_\+(Klemens Böswirth)\+\_\+
\item The {\ttfamily comment/\#/space} metakey is now used correctly to store the actual whitespace characters from the file, instead of a number. \+\_\+(Klemens Böswirth)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3913}{}\doxysection{Libraries}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3913}
The text below summarizes updates to the \href{https://www.libelektra.org/libraries/readme}{\texttt{ C (and C++)-\/based libraries}} of Elektra.\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3914}{}\doxysubsection{Compatibility}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3914}

\begin{DoxyItemize}
\item Introduced public C API function {\ttfamily ks\+Search}
\item Previously public function {\ttfamily ks\+Search\+Internal} is now static. Use {\ttfamily ks\+Search} instead.
\end{DoxyItemize}

\+\_\+(\+Michael Tucek)\+\_\+\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3915}{}\doxysubsection{Core}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3915}

\begin{DoxyItemize}
\item Remove obsolete {\ttfamily ks\+Need\+Sync} function. \+\_\+(Mihael Pranjić)\+\_\+
\item Replace various occurences of {\ttfamily sprintf} by {\ttfamily snprintf} and fix out of bounds array access in markdownlinkconverter. \+\_\+(Mihael Pranjić)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3916}{}\doxysubsection{High-\/level API}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3916}

\begin{DoxyItemize}
\item Modified High-\/level API to treat all warnings as errors. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\item Implemented support for warnings in High-\/level API error handling. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\item Fix a small bug for warnings in High-\/level API. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\item Fix resource management in High-\/level API error handling. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\item Implement a check to detect whether an application\textquotesingle{}s specification was properly {\ttfamily mount}ed and {\ttfamily spec-\/mount}ed. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\item Implement a check to detect whether an application\textquotesingle{}s specification was changed after installation. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\item Add sanity-\/checks to resource management. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\item Refactor and modularize code. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\item Update and improve inline documentation. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\item Remove \char`\"{}minimal validation\char`\"{} in favor of the new checks (see above). \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3917}{}\doxysubsection{Ease}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3917}

\begin{DoxyItemize}
\item Implement calculation of a specification token (=sha-\/256 hash). \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\item Add \href{https://github.com/amosnier/sha-2}{\texttt{ asmonier\textquotesingle{}s sha-\/2}} for sha-\/256 hash calculation. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3918}{}\doxysection{Bindings}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3918}
Bindings allow you to utilize Elektra using \href{https://www.libelektra.org/bindings/readme}{\texttt{ various programming languages}}. This section keeps you up-\/to-\/date with the multi-\/language support provided by Elektra.\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3919}{}\doxysubsection{Java binding}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3919}

\begin{DoxyItemize}
\item Upgraded Java binding gradle wrapper to 7.\+2.
\item Java source files are formatted using the \href{https://github.com/google/google-java-format}{\texttt{ Google Java format}}
\item Renamed zero argument static factory method {\ttfamily Key\+::create\+Nameless} to {\ttfamily Key\+::create}. To migrate to this change, just update calling code to use the new method name.
\item Updated method documentation previously publishing the error key based error handling approach to the Java binding consumer. Such arguments are now explicitly only used for returning warning information in case no error occurred. In case of an exceptional state, appropriate exceptions are thrown. Such exceptions provide access to the underlying key containing warning and error information as metadata. Please review API usage to consider the more elaborated explanation of how Elektra uses this argument\textquotesingle{}s value. Affected signatures\+:
\begin{DoxyItemize}
\item Updated javadoc for {\ttfamily KDB\+::open(\+Key)}
\item Updated javadoc for {\ttfamily KDB\+::open(\+Key\+Set, Key)}
\item Updated javadoc for {\ttfamily KDB\+::close(\+Key)}
\item Updated javadoc for {\ttfamily KDB\+::get(\+Key)}
\item Updated javadoc for {\ttfamily KDB\+::get(\+Key\+Set, Key)}
\item Updated javadoc for {\ttfamily KDB\+::set(\+Key\+Set, Key)}, better explaining the relevance of the second argument {\ttfamily parent\+Key}
\end{DoxyItemize}
\item Introduced {\ttfamily Key\+Set\+::remove(\+Key)} and {\ttfamily Key\+Set\+::remove(\+String)}
\item Removed {\ttfamily Key\+Set\+::lookup(\+Key, int)} and {\ttfamily Key\+Set\+::lookup(\+String, int)} as well as accompanying flag definitions {\ttfamily Key\+Set\+::\+KDB\+\_\+\+O\+\_\+\+NONE}, {\ttfamily Key\+Set\+::\+KDB\+\_\+\+O\+\_\+\+DEL} and {\ttfamily Key\+Set\+::\+KDB\+\_\+\+O\+\_\+\+POP}. Please use {\ttfamily Key\+Set\+::lookup(\+Key)} and {\ttfamily Key\+Set\+::lookup(\+String)} instead. Instead of {\ttfamily Key\+Set\+::\+KDB\+\_\+\+O\+\_\+\+DEL}, please consider using {\ttfamily Key\+::release}. The proper replacement for {\ttfamily Key\+Set\+::\+KDB\+\_\+\+O\+\_\+\+POP} is {\ttfamily Key\+Set\+::remove(\+Key)} or {\ttfamily Key\+Set\+::remove(\+String)}.
\item Native library proxy interface {\ttfamily Elektra} is now package private (previously was public).
\item Added example Java plugin {\ttfamily whitelist} (see here)
\item Changed {\ttfamily Key next\+Meta()} to {\ttfamily Optional$<$Key$>$ next\+Meta ()} no longer throwing No\+Such\+Element\+Exception for non-\/exceptional behavior
\item Native library proxy interface {\ttfamily Elektra} is now package private (previously was public)
\item Added example Java plugin {\ttfamily whitelist}
\item Added support of binary valued keys\+:
\begin{DoxyItemize}
\item Introduced {\ttfamily Key\+::get\+Binary()} and {\ttfamily Key\+::set\+Binary(byte\mbox{[}$\,$\mbox{]})}
\item Renamed {\ttfamily Key\+Binary\+Type\+Not\+Supported\+Exception} to {\ttfamily Key\+String\+Value\+Exception}
\item Introduced {\ttfamily Key\+Binary\+Value\+Exception}
\item Improved {\ttfamily Key} test coverage
\end{DoxyItemize}
\item Fixed example project in {\ttfamily examples/external/java/read-\/keys-\/example}
\begin{DoxyItemize}
\item now works with a standard installation of Elektra
\item updated code to work with current Java binding
\end{DoxyItemize}
\item {\ttfamily Key\+Set\+Released\+Exception} and {\ttfamily Key\+Released\+Exception} have been replaced by the native {\ttfamily Illegal\+State\+Exception}
\item Introduced abstraction {\ttfamily Readable\+Key} to better reflect the limitations of metadata keys via a type hierarchy. Metadata keys are now returned as {\ttfamily Readable\+Key}s\+:
\begin{DoxyItemize}
\item {\ttfamily Key} extends {\ttfamily Readable\+Key}
\item {\ttfamily Key} class is now final
\item Changed {\ttfamily Key Key\+::next\+Meta()} to {\ttfamily Optional$<$Readable\+Key$>$ Key\+::next\+Meta()}, no longer throwing No\+Such\+Element\+Exception for non-\/exceptional behavior
\item Changed {\ttfamily Key Key\+::current\+Meta()} to {\ttfamily Readable\+Key Key\+::current\+Meta()}
\item Changed {\ttfamily Optional$<$Key$>$ Key\+::get\+Meta(\+String)} to {\ttfamily Optional$<$Readable\+Key$>$ Key\+::get\+Meta(\+String)}
\item Metadata keys can no longer be manually released
\item Removed {\ttfamily Key\+::inc\+Ref}, {\ttfamily Key\+::dec\+Ref} and {\ttfamily Key\+::get\+Ref}
\item {\ttfamily Readable\+Key}/{\ttfamily Key} now implements {\ttfamily Comparable$<$Readable\+Key$>$}
\begin{DoxyItemize}
\item {\ttfamily int Key\+::cmp(\+Key)} has been renamed to {\ttfamily int Key\+::compare\+To(\+Key)}
\item {\ttfamily Readable\+Key} now implements {\ttfamily equals} and {\ttfamily hash\+Code} in line with the contract for {\ttfamily int Key\+::compare\+To(\+Key)}
\end{DoxyItemize}
\item {\ttfamily Readable\+Key}/{\ttfamily Key} no longer implements {\ttfamily Iterable$<$String$>$} for iterating over the parts of a key\textquotesingle{}s name -\/ use {\ttfamily Iterator$<$String$>$ Readable\+Key\+::key\+Name\+Iterator ()} instead
\item {\ttfamily Key} now implements {\ttfamily Iterable$<$Key$>$} to iterate over a key\textquotesingle{}s metadata {\ttfamily Readable\+Key}s
\item Fixed API method typo\+: Renamed {\ttfamily Readable\+Key\+::is\+Direct\+Below}/{\ttfamily Key\+::is\+Direct\+Below} to {\ttfamily is\+Directly\+Below}
\end{DoxyItemize}
\item {\ttfamily Key\+Name\+Iterator} and {\ttfamily Key\+Set\+Iterator} are now package private
\item {\ttfamily Key\+Set\+Append\+Exception} has been renamed to {\ttfamily Key\+Set\+Exception} and now conveys general {\ttfamily Key\+Set} related exceptional states
\item {\ttfamily Key\+Set} now implements {\ttfamily Sorted\+Set$<$Key$>$} (see \href{https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/SortedSet.html}{\texttt{ Java API}}). Previously {\ttfamily Key\+Set} was only implementing {\ttfamily Iterator$<$Key$>$}. Now a native key set can be used via its {\ttfamily Key\+Set} representation wherever one of the following Java Collection Framework interfaces is supported\+:
\begin{DoxyItemize}
\item {\ttfamily Iterable}
\item {\ttfamily Collection}
\item {\ttfamily Set}
\item {\ttfamily Sorted\+Set}
\end{DoxyItemize}
\end{DoxyItemize}

\+\_\+(\+Michael Tucek)\+\_\+\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3920}{}\doxysubsection{GLib}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3920}

\begin{DoxyItemize}
\item Compile {\ttfamily glib} binding with {\ttfamily -\/Wno-\/pedantic} for compatibility. \+\_\+(Mihael Pranjić)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3921}{}\doxysection{Tools}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3921}

\begin{DoxyItemize}
\item Really add all tools when using {\ttfamily -\/DTOOLS=ALL}. \+\_\+(\+Markus Raab)\+\_\+
\item Zero\+MQ Hub\+: fix compilation and man page. \+\_\+(\+Markus Raab)\+\_\+
\item Configure packaging for FUSE tool. \+\_\+(\+Alexander Firbas)\+\_\+
\item FUSE\+: fix bug preventing binary writes. \+\_\+(\+Alexander Firbas)\+\_\+
\item Ambiguous write operations are now disabled in kdb. \+\_\+(\+Alexander Firbas)\+\_\+
\item {\ttfamily webd}\+: update npm dependencies. \+\_\+(Mihael Pranjić)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3922}{}\doxysubsection{KDB}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3922}

\begin{DoxyItemize}
\item {\ttfamily kdb set}, {\ttfamily 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 ({\ttfamily user\+:, system}\+: for {\ttfamily kdb set}, {\ttfamily spec\+:} for {\ttfamily kdb meta-\/set}), \+\_\+(\+Alexander Firbas)\+\_\+
\item {\ttfamily kdb set}, {\ttfamily 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)\+\_\+
\item Disable {\ttfamily -\/N/-\/-\/namespace} option in all kdb subcommands \+\_\+(\+Alexander Firbas)\+\_\+
\item Implement new name part getter commands {\ttfamily kdb namespace}, {\ttfamily kdb basename} and {\ttfamily kdb dirname}. \+\_\+(\+Alexander Firbas)\+\_\+
\item {\ttfamily kdb file}\+: Remove namespace guessing (in case a cascading key is given, it needs to resolve to an existing key). \+\_\+(\+Alexander Firbas)\+\_\+
\item {\ttfamily kdb editor/import}\+: Disable the use of cascading names (and the \textquotesingle{}validate\textquotesingle{} strategy operating on cascading keys) entirely. \+\_\+(\+Alexander Firbas)\+\_\+
\item Update numerous tests to comply with changes above. \+\_\+(\+Alexander Firbas)\+\_\+
\item Add a new subsection on cascading writes to the \mbox{\hyperlink{doc_tutorials_cascading_md}{tutorial}} on cascading keys. \+\_\+(\+Alexander Firbas)\+\_\+
\item {\ttfamily kdb gen}\+: Generate specification token during code-\/generation and add it to generated contract. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\item {\ttfamily kdb gen}\+: Improve naming of variables to make code easier to understand. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\item {\ttfamily kdb spec-\/mount}\+: Improve usability by failing with helpful error messages, if the specification contains errors. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3923}{}\doxysection{Scripts}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3923}

\begin{DoxyItemize}
\item Add script for mingw-\/w64 i686 build. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3924}{}\doxysection{Documentation}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3924}

\begin{DoxyItemize}
\item Add link and small improvements to tutorial about \mbox{\hyperlink{doc_tutorials_specification_md}{writing specifications}} and \mbox{\hyperlink{doc_tutorials_logger_md}{logger}}. \+\_\+(\+Markus Raab)\+\_\+
\item doc\+: add pre/postconditions and invariants to module key \+\_\+(@lawli3t)\+\_\+
\item doc\+: add pre/postconditions and invariants to module keymeta \+\_\+(@lawli3t)\+\_\+
\item Fix broken links \+\_\+(@lawli3t)\+\_\+
\item Remove previous authors. \+\_\+(\+Markus Raab)\+\_\+
\item add pre/postconditions and invariants to module keytest \+\_\+(@lawli3t)\+\_\+
\item Updated the news template. \+\_\+(Mihael Pranjić)\+\_\+
\item Update and improve tutorial and in-\/code comments for high-\/level API \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\item Improve documentation of opts library \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\item Update tutorial \char`\"{}\+High-\/level API (with code-\/generation)\char`\"{} to reflect change of {\ttfamily load\+Configuration()}\textquotesingle{}s signature in release 0.\+9.\+5 \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\item add pre/postconditions and invariants to module keyvalue \+\_\+(@lawli3t)\+\_\+
\item Update and improve inline documentation of {\ttfamily kdb gen}. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\item Fix broken links. \+\_\+(\+Robert Sowula)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3925}{}\doxysection{Tests}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3925}

\begin{DoxyItemize}
\item Fix failing {\ttfamily testshell\+\_\+markdown\+\_\+tutorial\+\_\+crypto} on Mac OS and other OS with Gnu\+PG version $>$= 2.\+3.\+1. \+\_\+(Peter Nirschl @petermax2)\+\_\+
\item Use clang-\/format 12 for Restyled and update Restyled version. \+\_\+(Mihael Pranjić)\+\_\+
\item Update all Restyled formatters to current versions. \+\_\+(Mihael Pranjić)\+\_\+
\item Add additional test cases for module {\ttfamily keytest} \+\_\+(@lawli3t)\+\_\+
\item Update tests for high-\/level API to work with new specification token mechanism. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\item Add tests for libease\textquotesingle{}s sha-\/256. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\item Add tests for sha-\/256 hash calculation of a Key\+Set. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\item Add additional test cases for module {\ttfamily keymeta} \+\_\+(@lawli3t)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3926}{}\doxysection{Packaging}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3926}

\begin{DoxyItemize}
\item Add packages for open\+Suse Leap 15.\+3. \+\_\+(\+Robert Sowula)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3927}{}\doxysection{Build}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3927}
\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3928}{}\doxysubsection{CMake}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3928}

\begin{DoxyItemize}
\item Add files generated by CMake to .gitignore. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\item Add support for i686 to mingw-\/w64 toolchains. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\item Add plugins type, cache, spec, gopts, sync to mingw-\/w64 builds. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3929}{}\doxysubsection{Docker}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3929}

\begin{DoxyItemize}
\item Add docker images for ABI tests. \+\_\+(\+Robert Sowula)\+\_\+
\item Enable Build\+Kit features to leverage tmpfs to speed up {\ttfamily docker build} commands. \+\_\+(Mihael Pranjić)\+\_\+
\item Bump Gradle to version 7.\+2. \+\_\+(Mihael Pranjić)\+\_\+
\item Bump Debian Buster images to Bullseye and Stretch images to Buster. We still leave one Debian Stretch job due to upstream Debian LTS support until June 2022. \+\_\+(Mihael Pranjić)\+\_\+
\item Add Dockerfiles for open\+SUSE Leap 15.\+3 and Cent\+OS Stream 8. \+\_\+(\+Robert Sowula)\+\_\+
\item Add docker image for Open\+Wrt package building. \+\_\+(\+Robert Sowula)\+\_\+
\item Add files generated by docker when tutorial \href{https://www.libelektra.org/tutorials/run-all-tests-with-docker}{\texttt{ run-\/all-\/tests-\/with-\/docker}} is followed to .gitignore. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3930}{}\doxysubsection{Restyled}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3930}

\begin{DoxyItemize}
\item Upgrade to latest stable restylers. \+\_\+(Mihael Pranjić)\+\_\+
\item Added Google Java formatter \+\_\+(\+Michael Tucek)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3931}{}\doxysection{Infrastructure}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3931}
\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3932}{}\doxysubsection{Jenkins}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3932}

\begin{DoxyItemize}
\item Add ABI test stage for release pipeline. \+\_\+(\+Robert Sowula)\+\_\+
\item Move check stages that don\textquotesingle{}t build the code to a dedicated stage, to avoid confusion when parallel builds are aborted. \+\_\+(\+Robert Sowula)\+\_\+
\item Add test stages for open\+SUSE and Cent\+OS. \+\_\+(\+Robert Sowula)\+\_\+
\item Use {\ttfamily tmpfs} in Docker to speed up the test suite. \+\_\+(Mihael Pranjić)\+\_\+
\item Add Open\+Wrt package building stage to release pipeline. \+\_\+(\+Robert Sowula)\+\_\+
\item Add debian-\/bullseye-\/mingw-\/w64-\/i686 build to Jenkinsfile. \+\_\+(Tobias Schubert @qwepoizt)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3933}{}\doxysubsection{Cirrus}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3933}

\begin{DoxyItemize}
\item Bump Free\+BSD images to 12.\+2 and 13.\+0 using the LLVM 12 toolchain, drop Free\+BSD 11. \+\_\+(Mihael Pranjić)\+\_\+
\item Fix cirrus-\/file parsing errors. \+\_\+(Mihael Pranjić)\+\_\+
\item Redistribute CPU and memory resources and enable greedy instances. \+\_\+(Mihael Pranjić)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3934}{}\doxysubsection{Git\+Hub Actions}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3934}

\begin{DoxyItemize}
\item Migrate most mac\+OS build jobs to Git\+Hub actions to speed up builds. \+\_\+(Mihael Pranjić)\+\_\+
\item Upgrade mac\+OS GCC build job to GCC 11. \+\_\+(Mihael Pranjić)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3935}{}\doxysection{Website}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3935}
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 Update npm dependencies. \+\_\+(Mihael Pranjić)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3936}{}\doxysection{Outlook}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3936}
We are currently working on following topics\+:


\begin{DoxyItemize}
\item 1.\+0 API \+\_\+(\+Stefan Hanreich)\+\_\+ and \+\_\+(Klemens Böswirth)\+\_\+
\item KDB access using FUSE \+\_\+(\+Alexander Firbas)\+\_\+
\item Improve Java Development Experience \+\_\+(\+Michael Tucek)\+\_\+
\item Improve Plugin Framework \+\_\+(Klemens Böswirth)\+\_\+
\item Default TOML plugin \+\_\+(Klemens Böswirth)\+\_\+, \+\_\+(\+Markus Raab)\+\_\+ and \+\_\+(\+Jakob Fischer)\+\_\+
\item Elektrify KDE \+\_\+(\+Dardan Haxhimustafa)\+\_\+, \+\_\+(\+Felix Resch)\+\_\+ and \+\_\+(Mihael Pranjić)\+\_\+
\item Elektrify GNOME \+\_\+(Mihael Pranjić)\+\_\+
\item Continious Releases \+\_\+(\+Robert Sowula)\+\_\+
\item Improve 3-\/way merge \+\_\+(Dominic Jäger)\+\_\+
\item Shell completion \+\_\+(Ulrike Schäfer)\+\_\+
\item Ansible module \+\_\+(\+Thomas Waser)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3937}{}\doxysection{Statistics}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3937}
We closed \href{https://github.com/ElektraInitiative/libelektra/milestone/29?closed=1}{\texttt{ 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!\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3938}{}\doxysection{Join the Initiative!}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3938}
We welcome new contributors! Read \href{https://www.libelektra.org/devgettingstarted/ideas}{\texttt{ 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}{\texttt{ issue tracker}}.\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3939}{}\doxysection{Get the Release!}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3939}
You can download the release from \href{https://www.libelektra.org/ftp/elektra/releases/elektra-0.9.8.tar.gz}{\texttt{ here}} or \href{https://github.com/ElektraInitiative/ftp/blob/master/releases/elektra-0.9.8.tar.gz?raw=true}{\texttt{ Git\+Hub}}

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


\begin{DoxyItemize}
\item name\+: elektra-\/0.\+9.\+8.\+tar.\+gz
\item size\+: 7753097
\item md5sum\+: d978c17aae94d79f9d1f26b547bc46fe
\item sha1\+: 9725bfd6fca832ed472290e9de3711e01e9bfe54
\item sha256\+: b1e8908c138b84e788fdff25eab1c2b07e0b422a5fd1667814539ea02f151c58
\end{DoxyItemize}

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

The following GPG Key was used to sign this release\+: 12CC44541\+E1\+B8\+AD9\+B66\+AFAD55262\+E7353324914A

Already built API documentation can be found \href{https://doc.libelektra.org/api/0.9.8/html/}{\texttt{ here}} or on \href{https://github.com/ElektraInitiative/doc/tree/master/api/0.9.8}{\texttt{ Git\+Hub}}.\hypertarget{doc_news_2021-10-04_0_9_8_md_autotoc_md3940}{}\doxysection{Stay tuned!}\label{doc_news_2021-10-04_0_9_8_md_autotoc_md3940}
Subscribe to the \href{https://www.libelektra.org/news/feed.rss}{\texttt{ 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 \href{http://issues.libelektra.org}{\texttt{ on Git\+Hub}}.

\href{https://www.libelektra.org/news/0.9.8-release}{\texttt{ Permalink to this NEWS entry}}

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

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