\subsection*{Problem}

To develop a \href{https://github.com/ElektraInitiative/libelektra/issues/252}{\tt Web UI}, we need to be able to remotely configure Elektra via a network socket.

The idea is to use a Pub/\+Sub concept to synchronize actions which describe changes in the Elektra state.

\subsection*{Constraints}


\begin{DoxyItemize}
\item We need to be able to synchronize all changes in Elektra with the Web UI.
\item This needs to be done via a network socket due to limitations of the Web.
\item That means we need to run an Elektra daemon ({\ttfamily elektrad}) to be able to connect to Elektra at any time.
\end{DoxyItemize}

\subsection*{Assumptions}

\subsection*{Considered Alternatives}


\begin{DoxyItemize}
\item \href{http://zeromq.org/}{\tt Zero\+MQ}\+: small and popular library for pub/sub
\item \href{http://nanomsg.org/}{\tt nanomsg}\+: from the same author as Zero\+MQ, even smaller -\/ \href{http://nanomsg.org/documentation-zeromq.html}{\tt http\+://nanomsg.\+org/documentation-\/zeromq.\+html}
\item \href{http://redis.io/topics/pubsub}{\tt redis}\+: requires a running redis server
\item \href{http://kafka.apache.org/}{\tt kafka}\+: seems too big for Elektra
\end{DoxyItemize}

\subsection*{Decision}

Use Zero\+MQ with \href{https://github.com/zeromq/JSMQ}{\tt J\+S\+MQ}.

\subsection*{Rationale}

nanomsg sounds interesting, but isn\textquotesingle{}t as popular as Zero\+MQ, which is why there are no browser JS bindings available (only Node.\+js, which cannot be easily used for the Web UI).

\subsection*{Implications}

\subsection*{Related Decisions}

\subsection*{Notes}