2018-12-16 04:46:54 -05:00
<?xml version='1.0' encoding='UTF-8'?>
< !DOCTYPE xep SYSTEM 'xep.dtd' [
2019-01-01 10:17:01 -05:00
<!ENTITY % ents SYSTEM 'xep.ent'>
2018-12-16 04:46:54 -05:00
%ents;
2019-01-01 10:17:01 -05:00
<!ENTITY component "<note> Support can be enabled via an external component or an internal server module/plugin. If claiming compliance using such an addition, the necessary components/modules/plugins MUST be detailed.</note> ">
<!ENTITY usecases "<note> Support for the Entity Use Cases and Occupant Use Cases is REQUIRED; support for the remaining use cases is RECOMMENDED.</note> ">
<!ENTITY onlyone "<note> Only one of the recommended providers must be implemented for compliance.</note> ">
<!ENTITY nocli "<note> Not required for command line or terminal based interfaces.</note> ">
<!ENTITY avatar "<note> While 'User Avatars' is more modern, 'vCard-Based Avatars' is more widely deployed. Although it is suggested that to maximise interoperability with existing software a client fully supports both it is sufficient to claim compliance with this suite if the support for 'vCard-Based Avatars' is read-only.</note> ">
<!ENTITY pubsubjid "<note> While 'Personal Eventing Protocol' does not require all the features of 'Publish-Subscribe' to be available on the users' JIDs, and nor does this suite, it is desirable for this to be the case and it is expected that this will a requirement of future Compliance Suites.</note> ">
2018-12-16 04:46:54 -05:00
]>
<?xml-stylesheet type='text/xsl' href='xep.xsl'?>
<xep >
2019-01-01 10:17:01 -05:00
<header >
<title > XMPP Compliance Suites 2019</title>
<abstract >
This document defines XMPP protocol compliance levels.
</abstract>
&LEGALNOTICE;
<number > 0412</number>
2019-04-04 15:35:25 -04:00
<status > Draft</status>
2019-02-04 10:41:15 -05:00
<lastcall > 2019-02-29</lastcall>
2019-01-01 10:17:01 -05:00
<type > Standards Track</type>
<sig > Standards</sig>
<dependencies >
<spec > RFC 6120</spec>
<spec > RFC 6121</spec>
<spec > RFC 7395</spec>
<spec > RFC 7590</spec>
<spec > RFC 7622</spec>
<spec > XEP-0030</spec>
<spec > XEP-0045</spec>
<spec > XEP-0048</spec>
<spec > XEP-0049</spec>
<spec > XEP-0084</spec>
<spec > XEP-0085</spec>
<spec > XEP-0114</spec>
<spec > XEP-0115</spec>
<spec > XEP-0124</spec>
<spec > XEP-0163</spec>
<spec > XEP-0191</spec>
<spec > XEP-0198</spec>
<spec > XEP-0206</spec>
<spec > XEP-0223</spec>
<spec > XEP-0249</spec>
<spec > XEP-0280</spec>
<spec > XEP-0313</spec>
<spec > XEP-0352</spec>
<spec > XEP-0368</spec>
</dependencies>
<supersedes >
2019-07-27 14:43:11 -04:00
<spec > XEP-0387</spec>
2019-01-01 10:17:01 -05:00
</supersedes>
<supersededby />
<shortname > CS2019</shortname>
2019-03-25 14:07:44 -04:00
<author >
<firstname > Georg</firstname>
<surname > Lukas</surname>
<email > georg@op-co.de</email>
<jid > georg@yax.im</jid>
</author>
2019-04-04 15:35:25 -04:00
<revision >
<version > 1.0.0</version>
<date > 2019-04-04</date>
<initials > XEP Editor</initials>
<remark > Accepted as Draft per Council vote on 2019-03-27</remark>
</revision>
2019-03-25 14:07:44 -04:00
<revision >
<version > 0.5.0</version>
<date > 2019-03-25</date>
<initials > gl</initials>
2019-04-04 15:35:19 -04:00
<remark > <ul > <li > Taken over ownership.</li> <li > Improved structure of category and level names.</li> <li > Added XEP-0313 and XEP-0410 to 'Advanced Group Chat'</li> </ul> </remark>
2019-03-25 14:07:44 -04:00
</revision>
2019-01-13 07:18:38 -05:00
<revision >
<version > 0.4.0</version>
<date > 2019-01-13</date>
<initials > jsc</initials>
<remark > <ul > <li > Fix mess-up with TLS: TLS itself is of course required, it is just Direct TLS which is supposed to be advanced.</li> <li > Add XEP-0308 (Last Message Correction) for Advanced Client</li> <li > Minor typographical fixes</li> </ul> </remark>
</revision>
2019-01-13 05:17:13 -05:00
<revision >
<version > 0.2.0</version>
<date > 2019-01-13</date>
<initials > jsc</initials>
<remark > <ul > <li > Remove XEP-0184 from server support (doesn't make sense)</li> <li > Do not require Avatars for Core clients</li> <li > Add a note for RFC 7622 and do not require it</li> <li > Do not require XEP-0368 in core servers</li> </ul> </remark>
</revision>
2018-12-16 04:46:54 -05:00
<revision >
2019-01-01 10:17:01 -05:00
<version > 0.1.0</version>
<date > 2018-12-16</date>
<initials > XEP Editor (jsc)</initials>
<remark > Accepted by vote of Council on 2018-12-19.</remark>
2018-12-16 04:46:54 -05:00
</revision>
2019-01-01 10:17:01 -05:00
<revision >
<version > 0.0.1</version>
<date > 2018-12-08</date>
<initials > jsc</initials>
<remark >
<p > First draft based on XEP-0378. Non-editorial Changes:</p>
<ul >
<li > Prefer XEP-0084 for Avatars, use XEP-0398 for compat.</li>
<li > Add XEP-0184</li>
</ul>
</remark>
</revision>
</header>
<section1 topic= 'Introduction' anchor= 'intro' >
<p >
The &XSF; defines protocol suites for the purpose of compliance testing
and software certification.
This document specifies compliance levels for XMPP clients and servers; it
is hoped that this document will advance the state of the art, and provide
guidance and eventual certification to XMPP client and server authors.
2019-03-25 14:07:34 -04:00
</p>
<p >
This document defines <strong > Categories</strong> based on
typical use cases (Core, Web, IM, Mobile) and <strong > Levels</strong>
(Core, Advanced) based on functionality in the respective category.
</p>
<p >
2019-01-01 10:17:01 -05:00
Unless explicitly noted, support for the listed specifications is REQUIRED
for compliance purposes.
A feature is considered supported if all comma separated feature providers
listed in the "Providers" column are implemented (unless otherwise noted).
</p>
</section1>
2019-03-25 14:07:34 -04:00
<section1 topic= 'Compliance Categories' anchor= 'categories' >
2019-01-01 10:17:01 -05:00
<section2 topic= 'Core Compliance Suite' anchor= 'core' >
<table caption= 'XMPP Core Compliance Levels' >
<tr >
<th > Feature</th>
<th > Core Server</th>
<th > Core Client</th>
<th > Advanced Server</th>
<th > Advanced Client</th>
<th > Providers</th>
</tr>
<tr >
<td > <strong > Core features</strong> </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
2019-01-13 05:17:13 -05:00
<td > &rfc6120; <note > &rfc7622; is not listed due to the unclear interoperability impact of using PRECIS and Stringprep in the same ecosystem.</note> </td>
2019-01-01 10:17:01 -05:00
</tr>
<tr >
<td > <strong > TLS</strong> </td>
2019-01-13 07:18:38 -05:00
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td > &rfc7590; </td>
</tr>
<tr >
<td > <strong > Direct TLS</strong> </td>
2019-01-13 05:17:13 -05:00
<td align= 'center' > ✕ </td>
<td align= 'center' > ✕ </td>
2019-01-01 10:17:01 -05:00
<td align= 'center' > ✓ <note > Server support of XEP-0368 means having the ability to accept direct TLS connections.</note> </td>
<td align= 'center' > ✓ </td>
2019-01-13 07:18:38 -05:00
<td > &xep0368; </td>
2019-01-01 10:17:01 -05:00
</tr>
<tr >
<td > <strong > Feature discovery</strong> </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td > &xep0030; </td>
</tr>
<tr >
<td > <strong > Feature broadcasts</strong> </td>
<td align= 'center' > ✕ </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td > &xep0115; </td>
</tr>
<tr >
<td > <strong > Server Extensibility</strong> </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > N/A</td>
<td align= 'center' > ✓ </td>
<td align= 'center' > N/A</td>
<td > &xep0114; </td>
</tr>
<tr >
<td > <strong > Event publishing</strong> </td>
<td align= 'center' > ✕ </td>
<td align= 'center' > ✕ </td>
<td align= 'center' > ✓ &pubsubjid; </td>
<td align= 'center' > ✓ </td>
<td > &xep0163; </td>
</tr>
</table>
</section2>
<section2 topic= 'Web Compliance Suite' anchor= 'web' >
<p >
To be considered XMPP web compliant, all features from the core
2019-03-25 14:07:34 -04:00
compliance category must be met, as well as all features in this suite.
2019-01-01 10:17:01 -05:00
</p>
<table caption= 'XMPP Web Compliance Levels' >
<tr >
<th > Feature</th>
<th > Core Server</th>
<th > Core Client</th>
<th > Advanced Server</th>
<th > Advanced Client</th>
<th > Providers</th>
</tr>
<tr >
<td > <strong > Web Connection Mechanisms</strong> </td>
<td align= 'center' > ✓ &component; </td>
<td align= 'center' > ✓ &onlyone; </td>
<td align= 'center' > ✓ &component; </td>
<td align= 'center' > ✓ &onlyone; </td>
<td > &rfc7395; , &xep0206; (See also: &xep0124; )</td>
</tr>
</table>
</section2>
<section2 topic= 'IM Compliance Suite' anchor= 'im' >
<p >
To be considered XMPP IM compliant, all features from the core
2019-03-25 14:07:34 -04:00
compliance category must be met, as well as all features in this suite.
2019-01-01 10:17:01 -05:00
</p>
<table caption= 'XMPP IM Compliance Levels' >
<tr >
<th > Feature</th>
<th > Core Server</th>
<th > Core Client</th>
<th > Advanced Server</th>
<th > Advanced Client</th>
<th > Providers</th>
</tr>
<tr >
<td > <strong > Core features</strong> </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td > &rfc6121; </td>
</tr>
<tr >
<td > <strong > User Avatars</strong> </td>
<td align= 'center' > N/A</td>
2019-01-13 05:17:13 -05:00
<td align= 'center' > ✕ </td>
2019-01-01 10:17:01 -05:00
<td align= 'center' > N/A</td>
<td align= 'center' > ✓ &nocli; </td>
<td > &xep0084; </td>
</tr>
<tr >
<td > <strong > User Avatar Compatibility</strong> </td>
<td align= 'center' > ✕ </td>
2019-01-13 05:17:13 -05:00
<td align= 'center' > ✕ </td>
2019-01-01 10:17:01 -05:00
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ &nocli; </td>
<td > &xep0398; , &xep0153; </td>
</tr>
<tr >
<td > <strong > vcard-temp</strong> </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td > &xep0054; </td>
</tr>
<tr >
<td > <strong > Outbound Message Synchronization</strong> </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td > &xep0280; </td>
</tr>
<tr >
<td > <strong > User Blocking</strong> </td>
<td align= 'center' > ✕ </td>
<td align= 'center' > ✕ </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td > &xep0191; </td>
</tr>
<tr >
<td > <strong > Group Chat</strong> </td>
<td align= 'center' > ✓ &component; </td>
<td align= 'center' > ✓ &usecases; </td>
<td align= 'center' > ✓ &component; </td>
<td align= 'center' > ✓ &usecases; </td>
<td > &xep0045; <note > Implementations should take note that future versions of these compliance suites may rely on &xep0369; instead.</note> , &xep0249; </td>
</tr>
<tr >
2019-03-25 15:16:49 -04:00
<td > <strong > Advanced Group Chat</strong> </td>
2019-01-01 10:17:01 -05:00
<td align= 'center' > ✕ </td>
<td align= 'center' > ✕ </td>
<td align= 'center' > ✓ &component; </td>
<td align= 'center' > ✓ </td>
2019-03-25 15:16:49 -04:00
<td > &xep0048; , &xep0313; <note > Support for requesting history from a MUC archive as opposed to from the user's account.</note> , &xep0410; </td>
2019-01-01 10:17:01 -05:00
</tr>
<tr >
<td > <strong > Persistent Storage of Private Data via PubSub</strong> </td>
<td align= 'center' > ✕ </td>
<td align= 'center' > ✕ </td>
<td align= 'center' > ✓ &component; </td>
<td align= 'center' > ✓ </td>
<td > &xep0223; </td>
</tr>
<tr >
<td > <strong > Private XML Storage</strong> </td>
<td align= 'center' > ✕ </td>
<td align= 'center' > ✕ </td>
<td align= 'center' > ✓ &component; </td>
<td align= 'center' > ✓ </td>
<td > &xep0049; </td>
</tr>
<tr >
<td > <strong > Session Resumption</strong> </td>
<td align= 'center' > ✕ </td>
<td align= 'center' > ✕ </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td > &xep0198; </td>
</tr>
<tr >
<td > <strong > Stanza Acknowledgements</strong> </td>
<td align= 'center' > ✕ </td>
<td align= 'center' > ✕ </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td > &xep0198; </td>
</tr>
<tr >
<td > <strong > Message Acknowledgements</strong> </td>
2019-01-13 07:18:38 -05:00
<td align= 'center' > N/A</td>
2019-01-01 10:17:01 -05:00
<td align= 'center' > ✕ </td>
2019-01-13 07:18:38 -05:00
<td align= 'center' > N/A</td>
2019-01-01 10:17:01 -05:00
<td align= 'center' > ✓ </td>
<td > &xep0184; </td>
</tr>
<tr >
<td > <strong > History Storage / Retrieval</strong> </td>
<td align= 'center' > ✕ </td>
<td align= 'center' > ✕ </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td > &xep0313; </td>
</tr>
<tr >
<td > <strong > Chat States</strong> </td>
<td align= 'center' > N/A</td>
<td align= 'center' > ✕ </td>
<td align= 'center' > N/A</td>
<td align= 'center' > ✓ </td>
<td > &xep0085; </td>
</tr>
2019-01-13 07:18:38 -05:00
<tr >
<td > <strong > Message Correction</strong> </td>
<td align= 'center' > N/A</td>
<td align= 'center' > ✕ </td>
<td align= 'center' > N/A</td>
<td align= 'center' > ✓ </td>
<td > &xep0308; </td>
</tr>
2019-01-01 10:17:01 -05:00
</table>
</section2>
<section2 topic= 'Mobile Compliance Suite' anchor= 'mobile' >
<p >
To be considered XMPP mobile compliant, all features from the core
2019-03-25 14:07:34 -04:00
compliance category must be met, as well as all features in this suite.
2019-01-01 10:17:01 -05:00
</p>
<table caption= 'XMPP Mobile Compliance Levels' >
<tr >
<th > Feature</th>
<th > Core Server</th>
<th > Core Client</th>
<th > Advanced Server</th>
<th > Advanced Client</th>
<th > Providers</th>
</tr>
<tr >
<td > <strong > Session Resumption</strong> </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td > &xep0198; </td>
</tr>
<tr >
<td > <strong > Stanza Acknowledgements</strong> </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td > &xep0198; </td>
</tr>
<tr >
<td > <strong > Client State Indication</strong> </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td align= 'center' > ✓ </td>
<td > &xep0352; </td>
</tr>
<tr >
<td > <strong > Third Party Push Notifications</strong> </td>
<td align= 'center' > ✕ </td>
<td align= 'center' > ✕ </td>
<td align= 'center' > ✓ &component; </td>
<td align= 'center' > ✓ </td>
<td > &xep0357; </td>
</tr>
</table>
</section2>
</section1>
<section1 topic= 'Implementation Notes' anchor= 'impl' >
<p >
Some of the protocol specifications referenced herein have their own
dependencies; developers need to consult the relevant specifications for
further information.
</p>
</section1>
<section1 topic= 'Security Considerations' anchor= 'security' >
<p >
This document introduces no additional security considerations above and
beyond those defined in the documents on which it depends.
</p>
</section1>
<section1 topic= 'IANA Considerations' anchor= 'iana' >
<p > This document requires no interaction with &IANA; .</p>
</section1>
<section1 topic= 'XMPP Registrar Considerations' anchor= 'registrar' >
<p > This document requires no interaction with the ®ISTRAR; .</p>
</section1>
<section1 topic= 'Acknowledgements' anchor= 'ack' >
<p >
The author would like to thank Guus der Kinderen, Dele Olajide, Marc
Laporte, Dave Cridland, Daniel Gultsch, Florian Schmaus, Tobias Markmann,
2019-03-25 14:07:44 -04:00
and Jonas Schäfer for their suggestions.
2019-01-01 10:17:01 -05:00
</p>
2018-12-16 04:46:54 -05:00
</section1>
</xep>