The goal of Elektra is to make it trivial to access and specify configuration by A\+P\+Is. This helps in achieving the following goals\+:


\begin{DoxyItemize}
\item Improve robustness of configuration systems by
\begin{DoxyItemize}
\item avoiding reimplementation of parsers for the same configuration settings.
\item rejecting invalid configuration.
\item avoiding common programming errors through the usage of better bindings.
\item getting more guarantees when accessing configuration.
\end{DoxyItemize}
\item Allow software to be better integrated on configuration level.
\item Postpone some decisions from programmers to maintainers/administrators\+:
\begin{DoxyItemize}
\item Syntax of the configuration file(s)
\item Side effects (e.\+g. logging, vcs commit, notifications)
\item Flexible adoption to specific needs
\item Adoption of standards (xdg, xml, J\+S\+ON)
\end{DoxyItemize}
\end{DoxyItemize}

Elektra follows following goals, in order of preference.\hypertarget{doc_GOALS_md_autotoc_md1511}{}\doxysection{1. Goal\+: Simplicity}\label{doc_GOALS_md_autotoc_md1511}
An overly complex system cannot be managed nor understood. Extensibility brings some complex issues, which need to be solved -\/ but in a way so that the user sees either nothing of it or only needs to understand very simple concepts so that it works flawlessly. Special care for simplicity is taken for the users\+:


\begin{DoxyItemize}
\item Endusers when reconfiguring or upgrading should never take any notice of Elektra, except that it works more robust, better integrated and with less problems.
\item Programmers should have multiple ways to take advantage of Elektra so that it flawlessly integrate with their system.
\item Plugin Programmers\+: it should be simple to extend Elektra in any desired way.
\item Application\textquotesingle{}s Maintainers to correctly setup and upgrade K\+DB
\item Administrators that want to change the maintainers\textquotesingle{} setup according to their needs
\item Key-\/value uniformity that allows introspection
\end{DoxyItemize}\hypertarget{doc_GOALS_md_autotoc_md1512}{}\doxysection{2. Goal\+: Robustness}\label{doc_GOALS_md_autotoc_md1512}
Configuration systems today suffer badly from\+:


\begin{DoxyItemize}
\item Different behavior on different systems
\item Weak input validation
\item Faulty transformations from strings to other types
\item No error messages
\item Undefined behavior
\item Migration from one version to another
\end{DoxyItemize}

We want to tackle this problem by introducing an abstraction layer where all these problems can be dealt with. The goal is that code changes are necessary only within Elektra and not in the applications using Elektra! This makes your code not only portable towards more systems, but also enables global improvements in the configuration systems.\hypertarget{doc_GOALS_md_autotoc_md1513}{}\doxysection{3. Goal\+: Extensibility}\label{doc_GOALS_md_autotoc_md1513}
There are so many variants of


\begin{DoxyItemize}
\item Storage formats
\item Frontend integrations
\item Bindings
\end{DoxyItemize}

Nearly every aspect of Elektra must be extremely extensible. On the other side semantics must be very clear and well defined so that this extensible system works reproducible and predictable.

Only key-\/value pairs are the common factor and a way to get and set them, everything else is an extension.\hypertarget{doc_GOALS_md_autotoc_md1514}{}\doxysection{4. Goal\+: Performance}\label{doc_GOALS_md_autotoc_md1514}
Accessing configuration has impact on bootup and startup-\/time. Elektra needs to be similar fast then current solutions. Ideally it should get faster because of centralized optimization endeavours where everyone using Elektra can benefit from.

Only pay for what you need.\hypertarget{doc_GOALS_md_autotoc_md1515}{}\doxysection{Non-\/\+Goals\+:}\label{doc_GOALS_md_autotoc_md1515}

\begin{DoxyItemize}
\item Support semantics that do not fit into the Key\+Set (key-\/value pairs) with an {\ttfamily \mbox{\hyperlink{group__kdb_ga28e385fd9cb7ccfe0b2f1ed2f62453a1}{kdb\+Get()}}}/{\ttfamily \mbox{\hyperlink{group__kdb_ga11436b058408f83d303ca5e996832bcf}{kdb\+Set()}}} interface.
\item Support for non-\/configuration issues, e.\+g., storing key-\/value data unrelated to configuration settings.
\item Elektra is not a distributed CM, use Puppet, C\+F\+Engine on top or a distributed file system below Elektra.
\end{DoxyItemize}\hypertarget{doc_GOALS_md_autotoc_md1516}{}\doxysection{Further Readings}\label{doc_GOALS_md_autotoc_md1516}

\begin{DoxyItemize}
\item Continue reading\+: \mbox{\hyperlink{doc_WHO_md}{Who uses Elektra?}} 
\end{DoxyItemize}