\documentclass{article}
\usepackage{ulem}
\usepackage{graphicx}
\usepackage{hyperref}
\pagestyle{headings}
\begin{document}
\part{ActiveSync Feature Grid}
Feature support for \textbf{Horde 6} (\texttt{FRAMEWORK\_6\_0}) with the Horde groupware stack, compared where useful to other open-source EAS implementations.

For deployment and Autodiscover setup see <a href="https://wiki.horde.org/ActiveSync">ActiveSync</a>. For Horde protocol and version-configuration detail see the <a href="https://github.com/horde/activesync/blob/FRAMEWORK_6_0/README.md">horde/activesync README</a>.

\textbf{Comparison accuracy:} Z-Push and Tine columns below were verified against their upstream source repositories in \textbf{June 2026} (<a href="https://github.com/Z-Hub/Z-Push">Z-Hub/Z-Push</a> \texttt{develop} / release \textbf{2.7.6}; <a href="https://github.com/tine-groupware/tine">tine-groupware/tine</a> \texttt{main} with <a href="https://github.com/tine20/syncroton">tine20/syncroton</a> \texttt{master}). Cells marked \textbf{Partial} or \textbf{Varies} mean backend, edition, or client-dependent behaviour -- not a simple yes/no.

\section{Legend}
<table class="horde-table">Symbol & Meaning \\
\hline
\textbf{Yes} & Supported in the integrated stack / default setup \\
\hline
\textbf{No} & Not supported or not advertised in protocol \\
\hline
\textbf{Partial} & Limited, backend-dependent, or incomplete vs Exchange \\
\hline
\textbf{Varies} & Depends on backend or deployment (see Notes) \\
\hline
\textbf{Planned} & On the roadmap, not yet available \\
\hline
</table>
\section{Protocol version ceiling}
What each stack \textbf{advertises} to clients in \texttt{OPTIONS} / headers (actual feature parity at the highest version may be lower).

<table class="horde-table">Implementation & Advertised EAS versions & Notes \\
\hline
\textbf{Horde 6} & 2.5 - \textbf{16.1} & Configurable global, per-user, and per-device ceiling \\
\hline
\textbf{Z-Push 2.7.x} & 12.0 - \textbf{16.1} & 2.5 removed from default list; \textbf{backend-dependent} completeness \\
\hline
\textbf{Tine / Syncroton} & 2.5 - \textbf{14.1} & \texttt{MS-ASProtocolVersions} in Syncroton \texttt{Options.php}; \textbf{no 16.x, no \texttt{Find}} \\
\hline
</table>
\section{Stack comparison}
<table class="horde-table">Feature & Horde 6 & Z-Push 2.7.x & Tine / Syncroton & Notes \\
\hline
Integrated groupware backend & \textbf{Yes} & \textbf{Varies} & \textbf{Yes} & Z-Push: Kopano (MAPI) is full; IMAP/CalDAV/CardDAV are separate backends \\
\hline
Usable as protocol library & \textbf{Yes} & \textbf{Yes} & \textbf{Partial} & Tine ships Syncroton as part of the product; usable separately in principle \\
\hline
Sync mail + PIM in one session & \textbf{Yes} & \textbf{Varies} & \textbf{Yes} & Z-Push \textbf{Combined} backend wraps multiple backends \\
\hline
Efficient streams for WBXML / MIME & \textbf{Yes} & \textbf{Partial} & \textbf{Partial} & Z-Push: WBXML streams; Horde also streams IMAP MIME parts \\
\hline
History-based change detection & \textbf{Yes} & \textbf{Varies} & \textbf{Partial} & Z-Push IMAP path still uses diff-style polling; Kopano path differs \\
\hline
SOFTDELETE / date-filter sync & \textbf{Yes} & \textbf{Varies} & \textbf{Partial} & Syncroton supports date \texttt{FilterType} filters; SOFTDELETE not evident in Syncroton \\
\hline
SQL state storage & \textbf{Yes} & \textbf{Partial} & \textbf{Yes} & Z-Push: optional \texttt{sqlstatemachine} backend; default is file-based \\
\hline
NoSQL (MongoDB) state & \textbf{Yes} & \textbf{No} & \textbf{No} &  \\
\hline
Multiple folders per collection & \textbf{Yes} & \textbf{Partial} & \textbf{Partial} & Horde: discrete or multiplexed; Tine: per-app folders; Z-Push: backend-dependent \\
\hline
Per-user EAS version policy & \textbf{Yes} & \textbf{No} & \textbf{No} & Horde: permissions (\texttt{horde:activesync:version}) \\
\hline
Per-device EAS version policy & \textbf{Yes} & \textbf{No} & \textbf{No} & Horde: \texttt{activesync\_device\_version} hook \\
\hline
Autodiscover v1 (POX/XML) & \textbf{Yes} & \textbf{Partial} & \textbf{Yes} & Z-Push: deployment-dependent; Tine: native since \textasciitilde{}2019 \\
\hline
Autodiscover v2 (JSON) & \textbf{Yes} & \textbf{No} & \textbf{No} & Horde: requires web server routing to \texttt{rpc.php} \\
\hline
EAS 16.0 / 16.1 features & \textbf{Yes} & \textbf{Partial} & \textbf{No} & See sections below; Z-Push has AS16 code paths (2024+) but completeness varies \\
\hline
Active maintenance (2026) & \textbf{Yes} & \textbf{Yes} & \textbf{Yes} & Z-Push 2.7.6 (Jul 2025); Tine weekly releases; Syncroton PHP 8.4/8.5 fixes Feb 2026 \\
\hline
</table>
\subsection{Z-Push backends (relevant to «Varies» cells)}
<table class="horde-table">Backend & Typical use & AS ceiling in code \\
\hline
\textbf{Kopano} & Full groupware via MAPI & 16.1 \\
\hline
\textbf{Combined} & Wraps multiple backends & Lowest sub-backend, up to 16.1 \\
\hline
\textbf{IMAP} & Mail only & 16.1 advertised; diff-style sync \\
\hline
\textbf{CalDAV / CardDAV} & Calendar / contacts & 16.1 advertised \\
\hline
</table>
Home: <a href="https://github.com/Z-Hub/Z-Push">Z-Hub/Z-Push</a>. Related fork with explicit 16.0/16.1 focus: <a href="https://github.com/grommunio/grommunio-sync">grommunio-sync</a> (separate project; some Z-Push AS16 code derives from it).

\subsection{Tine ActiveSync scope}
Tine integrates \textbf{Syncroton} for protocol handling. ActiveSync frontends exist for \textbf{Felamimail} (mail), \textbf{Calendar}, \textbf{Addressbook} (contacts), and \textbf{Tasks} -- \textbf{no Notes} ActiveSync frontend. Device policies are stored in SQL; policy assignment has limited admin UI (default policy in admin module; custom policies often via DB -- see <a href="https://github.com/tine20/tine20/wiki/EN:ActiveSync">Tine ActiveSync wiki</a>). Current product repo: <a href="https://github.com/tine-groupware/tine">tine-groupware/tine</a>.

\section{Horde features by EAS version}
The tables below list \textbf{Horde 6} support. For Z-Push and Tine at the same protocol level, use the ceiling table and stack comparison above (Tine stops at \textbf{14.1}; Z-Push \textbf{16.x} is partial).

\subsection{EAS 2.5 (Exchange 2003 SP2)}
<table class="horde-table">Feature & Horde 6 & Notes \\
\hline
Email sync & \textbf{Yes} & Via <a href="https://wiki.horde.org/Project/HordeImapLib">Horde\_Imap\_Client</a>; QRESYNC/MODSEQ recommended \\
\hline
Email type property & \textbf{Yes} & Icons for meeting requests, MDN, etc. \\
\hline
Hierarchical folder support & \textbf{Yes} &  \\
\hline
Calendar sync & \textbf{Yes} & Kronolith \\
\hline
Meeting request / response & \textbf{Yes} &  \\
\hline
Tasks sync & \textbf{Yes} & Nag \\
\hline
Contacts sync & \textbf{Yes} & Turba \\
\hline
GAL search & \textbf{Yes} & \texttt{Search}, \texttt{ResolveRecipients} \\
\hline
Provisioning / remote wipe & \textbf{Yes} & Configurable policies via permissions \\
\hline
Notes sync & \textbf{No} & Requires EAS >= 14.0 \\
\hline
</table>
\subsection{EAS 12.0 (Exchange 2007)}
<table class="horde-table">Feature & Horde 6 & Notes \\
\hline
Autodiscover v1 (POX/XML) & \textbf{Yes} & HTTP Basic auth; username mapping in Horde config \\
\hline
Autodiscover v2 (JSON) & \textbf{Yes} & Unauthenticated; requires web server routing to \texttt{rpc.php} \\
\hline
HTML email & \textbf{Yes} &  \\
\hline
Search for items not on device & \textbf{Yes} & \texttt{Search} command \\
\hline
Email flagging (follow-up) & \textbf{Yes} & Seen and flagged-for-follow-up \\
\hline
Full MIME support & \textbf{Yes} &  \\
\hline
Out-of-office & \textbf{Yes} & \texttt{Settings} \\
\hline
</table>
\subsection{EAS 12.1 (Exchange 2007 SP1)}
<table class="horde-table">Feature & Horde 6 & Notes \\
\hline
Reduced bandwidth (body preferences) & \textbf{Yes} & \texttt{AirSyncBase:Body} truncation \\
\hline
S/MIME sign / encrypt / verify on device & \textbf{Partial} & When IMP S/MIME is configured; client-dependent \\
\hline
</table>
\subsection{EAS 14.0 (Exchange 2010 SP1)}
<table class="horde-table">Feature & Horde 6 & Z-Push / Tine (approx.) & Notes \\
\hline
Notes sync & \textbf{Yes} & Z-Push \textbf{Varies} / Tine \textbf{No} & Horde: Mnemo; Tine has no Notes AS frontend \\
\hline
SMS sync & \textbf{No} & \textbf{No} / \textbf{No} & Horde: stubbed so clients do not break mail \\
\hline
Conversation view & \textbf{No} & \textbf{No} / \textbf{No} &  \\
\hline
Reply state sync & \textbf{Yes} & \textbf{Partial} / \textbf{Partial} &  \\
\hline
Free/busy lookup & \textbf{Partial} & \textbf{No} / \textbf{No} & Horde: Kronolith Free/Busy URL for Outlook, not via EAS \\
\hline
Nickname cache & \textbf{No} & \textbf{No} / \textbf{No} &  \\
\hline
</table>
\subsection{EAS 14.1 (Exchange 2010 SP2)}
<table class="horde-table">Feature & Horde 6 & Z-Push / Tine (approx.) & Notes \\
\hline
Conversation segments & \textbf{No} & \textbf{No} / \textbf{No} &  \\
\hline
GAL / search photos & \textbf{Yes} & \textbf{Partial} / \textbf{Partial} &  \\
\hline
Device information in provisioning & \textbf{Yes} & \textbf{Partial} / \textbf{Partial} & Horde: \texttt{activesync\_device\_modify} hook \\
\hline
</table>
\subsection{EAS 16.0 (Exchange 2016) -- Horde only among compared stacks}
<table class="horde-table">Feature & Horde 6 & Z-Push 2.7.x & Tine \\
\hline
\textbf{Find} command (mailbox / GAL) & \textbf{Yes} & \textbf{Partial} & \textbf{No} \\
\hline
Calendar instance model & \textbf{Yes} & \textbf{Partial} & \textbf{No} \\
\hline
\texttt{ClientUid} round-trip & \textbf{Yes} & \textbf{Partial} & \textbf{No} \\
\hline
\texttt{AirSyncBase:Location} & \textbf{Yes} & \textbf{Partial} & \textbf{No} \\
\hline
Draft folder sync & \textbf{Yes} & \textbf{Partial} & \textbf{No} \\
\hline
SmartForward / SmartReply \texttt{Forwardee} & \textbf{Yes} & \textbf{Partial} & \textbf{No} \\
\hline
Recurring meeting requests in mail & \textbf{Yes} & \textbf{Partial} & \textbf{No} \\
\hline
</table>
Z-Push: protocol advertises 16.x; \texttt{Find} handler added for 16.1 (2023-2024, partly from grommunio-sync); Kopano backend furthest along. Tine/Syncroton does not advertise or implement 16.x.

\subsection{EAS 16.1 -- Horde only among compared stacks}
<table class="horde-table">Feature & Horde 6 & Z-Push 2.7.x & Tine \\
\hline
Propose new time (attendee counter) & \textbf{Yes} & \textbf{Partial} & \textbf{No} \\
\hline
\texttt{DisallowNewTimeProposal} & \textbf{Yes} & \textbf{No} & \textbf{No} \\
\hline
Account-only remote wipe & \textbf{Yes} & \textbf{No} & \textbf{No} \\
\hline
Per-user 16.1 permission & \textbf{Yes} & \textbf{No} & \textbf{No} \\
\hline
</table>
\section{Mail features (Horde; typical EAS versions)}
<table class="horde-table">Feature & Horde 6 & Notes \\
\hline
Send / reply / forward & \textbf{Yes} & \texttt{SendMail}, \texttt{SmartReply}, \texttt{SmartForward} \\
\hline
Attachments & \textbf{Yes} & \texttt{GetAttachment}, \texttt{ItemOperations:Fetch} \\
\hline
User-defined IMAP flags as categories & \textbf{Yes} &  \\
\hline
MDN send & \textbf{Yes} &  \\
\hline
TNEF attachments & \textbf{Partial} & Common cases supported \\
\hline
Trash folder behaviour & \textbf{Yes} & Device delete -> move or expunge per IMP config \\
\hline
</table>
\section{Calendar and tasks (Horde)}
<table class="horde-table">Feature & Horde 6 & Notes \\
\hline
Recurrence and exceptions & \textbf{Yes} & Full series + exceptions; 16.0+ instance model \\
\hline
Attendee proposals stored and synced & \textbf{Yes} & 16.1 + iTip mail path \\
\hline
Task recurrence & \textbf{Partial} & Basic RRULE; \texttt{Regenerate=1} \textbf{not} supported \\
\hline
\texttt{FILTERTYPE\_INCOMPLETETASKS} & \textbf{Yes} & Incomplete-tasks-only sync \\
\hline
Multiple calendars / task lists / note pads & \textbf{Yes} & Discrete or multiplexed per device \\
\hline
</table>
\section{Device management (Horde)}
<table class="horde-table">Feature & Horde 6 & Notes \\
\hline
Provisioning policies & \textbf{Yes} & PIN, complexity, timeout, etc. via permissions tree \\
\hline
Full device remote wipe & \textbf{Yes} &  \\
\hline
Account-only remote wipe & \textbf{Yes} & EAS >= 16.1 \\
\hline
Device block / allow & \textbf{Yes} & Hooks and admin UI \\
\hline
Per-device protocol log files & \textbf{Yes} & \texttt{logging.type = perdevice} \\
\hline
Per-device log toggle in admin GUI & \textbf{Planned} &  \\
\hline
\texttt{ItemOperations:Schema} & \textbf{No} & Deferred -- no known client requirement \\
\hline
</table>
\section{Not implemented in Horde (or deferred)}
<table class="horde-table">Feature & Status & Notes \\
\hline
SMS sync & \textbf{No} & Collections stubbed so clients do not break mail sync \\
\hline
Conversation view / segments & \textbf{No} &  \\
\hline
Nickname cache & \textbf{No} &  \\
\hline
HTTP 503 throttling (\texttt{X-MS-Throttle}) & \textbf{No} & Deferred \\
\hline
Task \texttt{Regenerate=1} & \textbf{No} & Outlook series regeneration; Nag uses \texttt{completions[]} \\
\hline
EAS usage dashboard & \textbf{Planned} & Operator tooling, out of protocol library \\
\hline
</table>
\section{Security policies (Horde)}
Horde supports a broad set of Exchange-style provisioning policies configurable under \textbf{Permissions} -> \textit{Horde} -> \textit{ActiveSync} -> \textit{Provisioning}. Examples include:

\begin{itemize}
\item Require device PIN / password


\item Minimum password length and character classes


\item Maximum failed attempts and password expiration


\item Device encryption requirements


\item Allow or block camera, removable storage, Wi-Fi, Bluetooth, etc. (as exposed in the permission tree)


\end{itemize}
Not all clients honor every policy. Use provisioning mode \textbf{Allow} if some devices do not support provisioning. See <a href="https://learn.microsoft.com/en-us/previous-versions/office/exchange-server-2010/bb123484(v=exchg.141)">Microsoft EAS security policy documentation</a> and \textit{Provisioning / Remote Wipe} on <a href="https://wiki.horde.org/ActiveSync">ActiveSync</a>.

Z-Push and Tine also support provisioning with a smaller policy set exposed through their respective configuration (Z-Push: deployment config; Tine: \texttt{tine20\_acsync\_policy} table).

\end{document}
