Shared editing applications such as whiteboarding have been developed using XMPP, but there is no general editing and synchronization protocol that can be used by such applications. This document attempts to define the requirements for such a protocol so that work can proceed on protocol development.
The underlying protocol shall be designed for synchronization of XML document instances between entities that communicate via XMPP.
All parties to a shared XML editing session must have the same representation of the XML document after all synchronization messages have been processed.
It should be possible to use the protocol for multiple application types; examples include but are not limited to whiteboarding using Scalable Vector Graphics (SVG) , editing of XHTML 1.0  documents, and Collaborative Data Objects (XEP-0204) .
There is no requirement to synchronize non-XML data.
It must be possible to synchronize XML document instances either between two entities or among more than two entities.
The protocol should not (unduly) limit the number of parties to a shared XML editing session.
The protocol should be as lightweight as possible in order to minimize bandwidth consumption.
Certain applications may need to handle particular features of the XML syntax for that application type (e.g., layers in SVG or pages in XHTML); the protocol must not forbid such specialized semantics.
It must be possible to use the protocol "directly" between two entities without assistance from intermediaries, either via an XMPP server (XMPP Core ) or in serverless mode (Link-Local Messaging (XEP-0174) ).
It should be possible to use the protocol with a specialized synchronization component attached to an XMPP server.
It must be possible to add new "nodes" (elements and attributes) to the XML document.
It must be possible to edit existing nodes.
It must be possible to remove existing nodes.
It should be possible to move a node from one location to another within the XML document.
Where possible, all edits should be commutative in order to minimize the need for locking of the XML document.
It should be possible to send the complete content of a node or only the difference between the last version of the node and the current version.
It should be possible to re-use the XML document outside of a shared editing session (e.g., for offline editing in a different application, or for archiving).
It should be possible to specify the version of the protocol.
It should be possible to refer to outside resources (e.g., images hosted at websites) from within the protocol.
It should be possible to validate synchronization messages against a defined schema for the application type in real time.
It should be possible to log all synchronization messages and associated metadata for archiving and logging purposes.
It must be possible to uniquely identify each node in an XML document, both within the scope of a standalone shared XML editing session and if the edited object is shared with other appliclations or embedded in other objects.
It must be possible to maintain the ordering of XML elements in the document.
It must be possible to specify the parent of any given node.
It should be possible to associate an XML document with other XML documents.
It must be possible to represent human-readable text in a language and character set appropriate for a human user.
It should be possible to associate relevant metadata with each node in the XML document, which might include time of creation, identity of the creator, time of last modification, and identity of last modifier.
It should be possible to mix text nodes with other child nodes (namely elements).
It must be possible to initiate, update, join, and terminate a shared XML editing session.
It must be possible to specify the roles of parties to a shared XML editing session.
It should be possible to re-use the permission from a Multi-User Chat room, Publish-Subscribe node, or other service that has a permissions model.
It should be possible to declare shared editing of the XML document to be complete (e.g., in preparation for archiving of the XML document or editing by another application).
It should be possible to declare shared editing of part of the XML document to be complete.
It must be possible to reject out-of-order synchronization messages.
It should be possible to specify that all parties shall move their viewing context to a particular location in the XML data object.
It should be possible to retrieve the current state of the XML document from a party to the shared editing session.
It should be possible to retrieve the history of edits to the XML document from a party to the shared editing session.
It should be possible to retrieve all the changes to the XML document since a specific sequence number.
It must be possible to discover whether another entity can engage in a shared XML editing session.
It must be possible to discover which application types another entity can handle.
It should be possible to query an entity for the shared XML editing sessions to which it is a party.
It should be possible to query an entity for the XML documents it owns or knows about (which may be the result of a past editing session).
This document requires no action by the Internet Assigned Numbers Authority (IANA) .
This document requires no action by the XMPP Registrar .
For their previous work on XMPP-based shared editing technologies, the author wishes to thank Mats Bengtsson, Michael Bishop, Dave Bryson, Boyd Fletcher, Joonas Govenius, Marshall Huss, Huib-Jan Imbens, Jasen Jacobsen, Michael Krutsch, Keith Lirette, Ian Paterson, Chad Smith, and Dan Winkowski.
This document in other formats: XML PDF
This XMPP Extension Protocol is copyright © 1999 – 2020 by the XMPP Standards Foundation (XSF).
Permission is hereby granted, free of charge, to any person obtaining a copy of this specification (the "Specification"), to make use of the Specification without restriction, including without limitation the rights to implement the Specification in a software program, deploy the Specification in a network service, and copy, modify, merge, publish, translate, distribute, sublicense, or sell copies of the Specification, and to permit persons to whom the Specification is furnished to do so, subject to the condition that the foregoing copyright notice and this permission notice shall be included in all copies or substantial portions of the Specification. Unless separate permission is granted, modified works that are redistributed shall not contain misleading information regarding the authors, title, number, or publisher of the Specification, and shall not claim endorsement of the modified works by the authors, any organization or project to which the authors belong, or the XMPP Standards Foundation.
## NOTE WELL: This Specification is provided on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. ##
In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall the XMPP Standards Foundation or any author of this Specification be liable for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising from, out of, or in connection with the Specification or the implementation, deployment, or other use of the Specification (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if the XMPP Standards Foundation or such author has been advised of the possibility of such damages.
This XMPP Extension Protocol has been contributed in full conformance with the XSF's Intellectual Property Rights Policy (a copy of which can be found at <https://xmpp.org/about/xsf/ipr-policy> or obtained by writing to XMPP Standards Foundation, P.O. Box 787, Parker, CO 80134 USA).
The Extensible Messaging and Presence Protocol (XMPP) is defined in the XMPP Core (RFC 6120) and XMPP IM (RFC 6121) specifications contributed by the XMPP Standards Foundation to the Internet Standards Process, which is managed by the Internet Engineering Task Force in accordance with RFC 2026. Any protocol defined in this document has been developed outside the Internet Standards Process and is to be understood as an extension to XMPP rather than as an evolution, development, or modification of XMPP itself.
The primary venue for discussion of XMPP Extension Protocols is the <email@example.com> discussion list.
Discussion on other xmpp.org discussion lists might also be appropriate; see <http://xmpp.org/about/discuss.shtml> for a complete list.
Errata can be sent to <firstname.lastname@example.org>.
The following requirements keywords as used in this document are to be interpreted as described in RFC 2119: "MUST", "SHALL", "REQUIRED"; "MUST NOT", "SHALL NOT"; "SHOULD", "RECOMMENDED"; "SHOULD NOT", "NOT RECOMMENDED"; "MAY", "OPTIONAL".
7. The Internet Assigned Numbers Authority (IANA) is the central coordinator for the assignment of unique parameter values for Internet protocols, such as port numbers and URI schemes. For further information, see <http://www.iana.org/>.
8. The XMPP Registrar maintains a list of reserved protocol namespaces as well as registries of parameters used in the context of XMPP extension protocols approved by the XMPP Standards Foundation. For further information, see <https://xmpp.org/registrar/>.
Note: Older versions of this specification might be available at http://xmpp.org/extensions/attic/