The Mediated Information eXchange (MIX) protocol is intended as a replacement for Multi-User Chat (MUC). MUC is a major application of XMPP that was developed in 2002 and standardized in Multi-User Chat (XEP-0045) . MIX implements the same basic MUC patterns in a more flexible and extensible way in order to address requirements that have emerged since MUC was developed. MIX supports all of the core chatroom features that are familiar from MUC, such as discussion topics and invitations. Like MUC, it also defines a strong access control model, including the ability to ban users, to name administrators, and to provide controls as to which users can participate in channels.
Several reasons exist for replacing MUC:
Because it is anticipated that there will be significant co-existence between MUC and MIX, this specification is designed so that:
MIX gives guidance on supporting both MUC and MIX representations of chatrooms.
The following requirements have been identified, which MIX aims to address.
MIX is specified as a family of XEPs that address the full set of requirements. Only two of these XEPs are mandatory for providing a MIX service. The others provide additional services and are used when these additional services are required. Each of these specifications has a short name, which is used to refer the specific XEP. The term MIX is used to refer to the family of XEPs. MIX is extensible, and it is anticipated that further XEPs will be added to this family. The XEPs are:
The following table shows which of these specification is mandatory or optional for a MIX server, a server supporting MIX users, a general purpose end user client, and a client providing MIX channel administration.
|Specification||MIX Server||Server supporting MIX Clients||End User MIX Client||Administrative MIX Client|
This section is written as an introduction to MIX for those with detailed knowledge of Multi-User Chat (XEP-0045) , to summarize key differences and some rationale for the differences. For those unfamiliar with MUC, this section should be ignored.
In MUC, a client joins a MUC room. After this, the client is sent history information, presences, and messages until the client leaves the room by going offline. Key MIX features as summarized below:
MIX will enable a wide range of auxiliary services. The goal of the MIX family of specification is to set out the core capabilities needed for MIX. It is anticipated that additional XEPs will be written to extend the current MIX specification, and the MIX specification family notes some areas where this may happen. Profiles referencing sets of related MIX XEPs may be developed in the future.
The following concepts underlie the design of MIX.
MIX is based upon domains providing a MIX service, such as 'mix.shakespeare.example'. Note that although PubSub communication is used, a domain used for MIX is a MIX domain and not a standard Publish-Subscribe (XEP-0060)  domain. Like MUC, there is no requirement on the naming of these domains; the label 'mix' used in examples in this specification and the fact that it is a subdomain of a 'shakespeare.example' service are purely for example.
Every MIX channel is an addressable service based on PubSub (with additional MIX semantics) that will be addressed using a bare JID by other XMPP entities, for example firstname.lastname@example.org. While Publish-Subscribe (XEP-0060)  is used as the basis for the MIX model, MIX uses standard presence and groupchat messages to provide an interface to the MIX service that does not expose PubSub protocol for many of the more common functions.
Historical data (such as the messages sent to the channel) is stored in an archive supporting Message Archive Management (MAM) so that clients can subsequently access this data with MAM. Each node can be archived separately (e.g., the presence node or the configuration node). MIX messages are archived by both the MIX channel and the user's server, so that clients can generally use their local MAM archiver. MIX clients can retrieve archived information with MAM in order to quickly resync messages with regard to a channel, and can do so without providing presence information.
Every channel participant is identified by a Stable Participant ID, which uniquely identifies a channel participant and never changes. The Stable Participant ID MUST NOT contain the '#', '/' or '@' characters.
A Participant's Stable Participant ID is defined when a participant joins a channel. While a user is a participant in a Channel, the Stable Participant ID MUST NOT be changed. This mapping between Participant and Stable Participant ID MUST be maintained after the participant leaves the channel. Stable Participant ID values MUST NOT be re-used. If a participant that left a channel joins the channel again, the same Stable Participant ID MAY be used again or a different Stable Participant ID MAY be assigned.
MIX defines a number of standard nodes, and this specification defines three of these nodes and the framework for adding further nodes.
|Messages||'urn:xmpp:mix:nodes:messages'||For distributing messages to the channel. Each item of this node will contain a message sent to the channel.||Message||Message|
|Participants||'urn:xmpp:mix:nodes:participants'||For storing the list of participants and the associated nick. Channel participants are added when they join the channel and removed when they leave.||Join/Leave/Set Nick||PubSub|
|Information||'urn:xmpp:mix:nodes:info'||For storing general channel information, such as description.||PubSub||PubSub|
Participants is the only mandatory MIX node for a channel, which defines the set of clients that have joined the channel. All other nodes are OPTIONAL. MIX provides mechanisms to allow users to conveniently subscribe to a chosen set of nodes and to unsubscribe to all nodes with a single operation. Some nodes are accessed and managed with PubSub, whereas other nodes define MIX specific mechanisms for their use, as shown in the last two columns of the table.
Nodes MAY be archived and where this is done MAM MUST be used. Archiving of the Messages node MUST be done as part of the MIX-CORE specification. Archiving of other nodes is OPTIONAL.
The Messages node is used to distribute messages. The Messages node is a transient node and so no PubSub items are held. Messages MUST go to the associated MAM archive and history is retrieved by use of MAM. Users subscribe to this node to indicate that messages from the channel are to be sent to them. Private Messages are not distributed by the Messages node.
Each channel participant is represented as an item of the 'urn:xmpp:mix:nodes:participants' channel node. Each item is named by the Stable Participant ID of the participant. For example '123456' might name the node item associated with participant 'email@example.com'. Information is stored in a <participant/> element qualified by the 'urn:xmpp:mix:core:1' namespace.
A Nick MAY be associated with a participant, which provides a user-oriented description of the participant. The nick associated with the user is stored in a <nick/> child element of the <participant/> element. The nick for each channel participant MUST be different to the nick of other participants (where nicks have been assigned).
A channel MAY require nicks to be mandatory for all participants. This is the default behaviour, and nicks MUST only be optional when this is explicitly configured for a channel as specified in MIX-ADMIN.
Where a nick is provided for a user, it is generally recommended to use this nick to display the user. This enables consistent representation of participants for all participants in the channel.
The real JID of the user MAY be held in the participants node. When the real JID is not present, the procedures defined in MIX-ANON must be followed. Note that only the real JID may be held in participants node. Any JID derived from the stable ID MUST NOT be held. The user's JID is stored in a <jid/> child element of the <participant/> element.
When a user joins a channel, an item representing the user is added to the participants node by the MIX service. When a user leaves a channel, the user's item is removed from the participants node. The participants node MUST NOT be directly modified using pubsub.
It may be useful for clients to read the participants list. However it is not necessary for message and presence display, as both messages and presence contain sufficient information to enable display.
Users MAY subscribe to, and read information from this node, when permitted by the channel. Standard PubSub access will allow a full list of participants and associated nicks to be determined. By subscribing to the node, a user will be informed of changes to the Participants Node.
The participants node is MANDATORY. The Participants node is a permanent node with one item per participant.
The Information node holds information about the channel. It will often be helpful for MIX clients to be able to display this information. The information node contains a single item with the current information. The information node is named by the date/time at which the item was created. The information node is accessed and managed using standard pubsub. The Information node is a permanent node with a maximum of one item. Users MAY subscribe to this node to receive information updates. The Information node item MAY contain the following attributes, each of which is OPTIONAL:
|'Name'||A short string providing a name for the channel. For example "The Coven". Typical uses of this value will be to present a user with the name of this channel in a list of channels to select from or as the header of UI display of the channel. It is intended for use where a short string is needed to represent the channel.||text-single||-||-|
|'Description'||A longer description of the channel. For example "The Place where the Macbeth Witches Meet up". A typical use would be to provide a user with more information about the channel, for example in a tool tip.||text-single||-||-|
|'Contact'||The JID or JIDs of the person or role responsible for the channel.||jid-multi||-||-|
Name and Description of the channel apply to the whole channel and will usually be changed infrequently.
JID visibility is included in the Information Node as this is information that will be useful for participant clients and may also be important when choosing to join a channel.
The name and description values MUST contain a "text" element and MAY contain additional text elements. The format of the Information node follows Data Forms (XEP-0004) . This allows configuration to be updated by MIX defined commands and that the results of update commands are the same as the PubSub node. The following example shows the format of a item in the information node for the example firstname.lastname@example.org channel.
The MIX standard allows channels to use non-standard nodes, using names that do not conflict with the standard nodes. Non-Standard nodes MUST NOT duplicate or otherwise provide capability that can be provided by standard nodes.
The MIX specification is built on layered services that have defined errors. This enables the core MIX specification to reflect primarily the successful use case, as in almost all cases the error reporting of the layer service provides what is needed. A message sender MUST be prepared to handle any valid error from the layer services. When a message receiver encounters an error situation, it MUST use the most appropriate layer server error to report this issue back to the sender. For example a receiving entity might use the "not authorized" error in response to a disco query that is not authorized. Errors for the following layer services need to be handled for MIX:
An entity MAY discover a MIX service or MIX services by sending a Service Discovery items ("disco#items") request to its own server.
The MIX service then MUST return its identity and the features it supports, which MUST include the 'urn:xmpp:mix:core:1' feature, and the identity MUST have a category of 'conference' and a type of 'mix', as shown in the following example:
A MIX service MUST return the 'urn:xmpp:mix:core:1' feature and MAY return the other features listed here:
A MIX service MUST NOT advertise support for Message Archive Management (XEP-0313) , as MAM is supported by the channels and not by the service. A MIX service MUST NOT advertise support for generic Publish-Subscribe (XEP-0060) , as although MIX makes use of PubSub it is not a generic PubSub service.
The list of channels supported by a MIX service is obtained by a disco#items command. The MIX service MUST only return channels that exist and that the user making the query has rights to subscribe to.
In order to find out more information about a given channel, a user can send a disco#info query to the channel.
If the querying user is allowed to subscribe, the channel MUST return its identity and the features it supports. Note that a MIX channel MUST support MAM and so the response will always include both MIX and MAM support.
Note that a node MAY be both a MIX channel and a MUC room. In this case, the node will return both MIX and MUC information. MIX and MUC clients MUST be able to handle this.
Use disco#items to find the nodes associated with a channel. The MIX service MUST only return nodes that exist and that the user making the query has rights to subscribe to.
Discovering nodes in MIX MUST use a node='mix' attribute in this query. This is to facilitate server implementations that support a single node being both a MIX channel and a MUC room. MUC rooms use this query to return a list of occupants. The node='mix' attribute allows a server to support both MIX and MUC queries without requiring any change to MUC clients. Where a node only supports a MIX channel, the server MUST reject queries without a node='mix' attribute.
The Information Node contains various information about the channel that can be useful to the user, that the client can access using PubSub, as shown below.
Participants in the channel are determined using PubSub retrieval of the Participants Node which will give Stable Participant ID, JID and nick. Clients using a channel MAY determine participants on start-up, to enable display of participants.
Where a client supports MIX, it MUST advertise this capability in response to a Disco request. This will enable other entities to determine if a client supports MIX, and in particular it facilitates the client's server to determine client support. This can be optimized by use of CAPS. The following example shows a Disco request to and response from a client that supports both MIX and MUC.
MIX Join and Leave communication goes through the clients server. The full specification of client interaction with the client's server is specified in MIX-PAM. This specification shows the protocol between the user's server and the MIX server and sets out behaviour of the MIX server.
A user joins a channel by sending a MIX "join" command from one of the user's clients, which will be relayed to the server as specified in MIX-PAM. There is no default set of nodes, so the user MUST specify the set of nodes to be subscribed to. To achieve the equivalent service to MUC, a user would subscribe to both messages and presence nodes. A user will typically subscribe to at least the message and/or presence nodes but MAY join and not subscribe to any nodes. Note that the presence node is specified in MIX-PRESENCE. The <join/> is a child element of <iq/> element. The <join/> element is qualified by the 'urn:xmpp:mix:core:1' namespace. The requested nodes are encoded as <subscribe/> child elements of the <join/> element. A nick MAY be specified as a <nick/> child elements of the <join/> element.
The join leads to the server subscribing the user to each of the requested nodes associated with the channel. The MIX service will also add the user to the participant list by injecting a new item into the "urn:xmpp:mix:nodes:participants" node automatically.
The default MIX model is that only channel participants are allowed to subscribe to nodes. A MIX channel MAY allow non-participant subscription to some nodes. This will be handled by clients directly subscribing to the desired PubSub nodes.
The user's server needs to make roster changes as part of the join functionality, as specified in MIX-PAM. This means that the join request to the MIX service will come from the user's server from the user's bare JID.
The channel responds to the user's sever with an IQ-result addressed to the user's bare JID, which will be processed as specified in MIX-PAM. This stanza includes the nodes to which the user has been successfully subscribed, as well as the bare JID that will be used for the user in this channel and added to the participant list. The user's Stable Participant ID is returned as an 'id' attribute in the join. The following example shows the result of the above request when the request is completed in full.
If a user cannot be subscribed to one or more of the requested nodes (e.g., because the node does not exist), but can be subscribed to some the response simply lists the nodes successfully subscribed. If at least one node is requested and none of the nodes requested are successfully subscribed to, an error response is sent indicating the reason that the first node requested was not subscribed to. This error response will also include other nodes requested where subscription failed for the same reason.
The following response example shows a successful response to the initial request example where the participant is not subscribed to all nodes associated with the channel (in this case only messages, participants, and information). This example shows the message from the MIX channel to the user's server.
After a successful join and before sending the response, the channel MUST subscribe the user to the negotiated nodes and adds the user to the participants node. When these changes are made, the MIX channel MUST send a PubSub notification of the change to subscribers of the participants node. The following example shows such a notification.
The user that has been added to the channel is identified by the item id of the item added to the Participants node, which is the Stable Participant ID of the new channel participant. The <participant> element MUST include a <jid> element with the JID of the participant, unless MIX-ANON is being followed to hide participant JIDs. The <nick> element will not be included at this point, unless it is automatically generated by the channel. In the likely event that a Nick is subsequently added, an update with the <nick> element will be distributed.
A user MAY subsequently modify subscription to nodes in a channel by sending a subscription modification request encoded as a <update-subscription/> child element of <iq/> element. The <update-subscription/> element is qualified by the 'urn:xmpp:mix:core:1' namespace. The requested nodes are encoded as <subscribe/> and <unsubscribe/> child elements of the <update-subscription/> element with the node name encoded as a 'node' attribute. This modification goes directly from client to the MIX channel, as this change does not impact the roster and so does not need any local action. The following example shows subscription modification.
A user MAY specify a nick when joining the channel. Channels MAY have mandatory nicks, which is default behavior. Therefore it will generally be necessary to include a nick when joining an channel. If nick is missing on a channel where nick is mandatory, the join MUST be rejected. Other error cases are dealt with below with the nick management commands. Where a nick is specified, the join will only complete if the nick is accepted. The nick used MUST be reported back in the join result.
Users generally remain in a channel for an extended period of time. In particular the user remains as a participant the channel when the user goes offline. Note that this is different to Multi-User Chat (XEP-0045) , where the client leaves a room when going offline. So, leaving a MIX channel is a permanent action for a user across all clients. In order to leave a channel, the user's server sends a MIX "leave" command to the channel, as specified in MIX-PAM. The leave command is encoded as a <leave/> child element of <iq/> element. The <leave/> element is qualified by the 'urn:xmpp:mix:core:1' namespace. The following example shows a leave request to a MIX channel.
The MIX channel will then remove the user from the channel, as described below. A response is sent to the user's server.
When the user leaves the channel, the MIX service is responsible for unsubscribing the user from all nodes in the channel and for removing the user from the participants list. Presence removal is specified in MIX-PRESENCE. Deletion from the participants node functions as if the item (channel participant) had been deleted using the PubSub retract mechanism with notification set to true. Notification of the participant deletion is sent to clients subscribed to the participants PubSub node using PubSub protocol, with the node identified by the stable id, as shown in the example below.
Each participant of a channel MAY have a nick, which is how other users in the channel will see the user. In some cases a nick is not needed, for example where a user reads messages in a channel but does not send messages or share presence information. There are four ways that a user's nick can be obtained. The choice of mechanism or mechanisms is dependent on channel policy:
A user will typically set a nick when joining a channel and MAY update this nick from time to time. The user does this by sending a command to the channel to set the nick. This command is a <setnick/> child element of <iq/> element. The <setnick/> element is qualified by the 'urn:xmpp:mix:core:1' namespace. The nick is encoded as a <nick/> child element of the <setnick/> element. If the user wishes the channel to assign a nick (or knows that the channel will assign a nick) the nick field can be left blank, so that the user can see what is assigned in the result.
On successful nick assignment, the channel will return the nick that is to be used, noting that this MAY be different to the requested nick. MIX services SHOULD apply the "nickname" profile of the PRECIS OpaqueString class, as defined in RFC 7700 . The channel MAY return a conflict error or other appropriate error.
A MIX client will typically display message history of the channel to the user. When a client comes online it will need to obtain this message history from the MAM archive associated with the channel on the client's server. There are three basic approaches a client will take:
To achieve this, the client will query the user's own MAM archive using Message Archive Management (XEP-0313) , with the query filtered by the channel JID. This gives the client flexibility to retrieve and display message history in a manner appropriate to the client implementation.
The only exception to this is when a user wishes to access message history in the channel prior to when the user joined the channel. To achieve this, the client will use MAM to retrieve message history directly from the MAM Archive of the MIX channel.
A client sends a message directly to a MIX channel as a standard groupchat message, in exactly the same way as for Multi-User Chat (XEP-0045) . Messages are sent directly to the MIX channel from the user's client. The message id is selected by the client.
The MIX channel then adds information to the message using a <mix> element qualified by the 'urn:xmpp:mix:core:1' namespace. This enables are receiver of the MIX message to determine the message sender. This element contains two child elements:
MIX messages are distributed by the channel with the from using the JID of the channel, with the Stable Participant ID of the sender in the resource. This enables a receiving system to distinguish messages based on sender using only the JID.
The MIX channel then puts a copy of the message into the MAM archive for the channel and sends a copy of the message to each participant in standard groupchat format. These messages sent by the channel are addressed to the bare JID of each participant and this will be handled by the participant's local server as specified in MIX-PAM. The message 'from' attribute is the JID of the channel. The id of the message is the ID from the MAM archive and NOT the id used by the sender. The message placed in the MAM archive is the reflected message without a 'to' attribute.
The message originator may wish to correlate the reflected message with the submitted message. To do this, the originator should include an <origin-id> element in the message as specified in Unique and Stable Stanza IDs (XEP-0359) .
MIX channel nodes MAY be archived. In order to provide a service equivalent to MUC, it is necessary to archive messages sent to the channel. It is anticipated the most MIX services will archive at least messages using MAM.
Messages sent to participants MUST be archived by both the MIX channel and by the user's server. This MAY include presence messages. Correct MIX operation relies on messages being archived.
The client's local server MAY archive messages and advertise this capability as specified in Mediated Information eXchange (MIX): Participant Server Requirements (XEP-0405) . If this is done, clients MUST retrieve MIX messages using standard MAM protocol from the user's archive. The MAM query will filter based on the channel JID to enable access to messages from a given channel. This gives the user a simple mechanism to access all messages sent to the channel. MAM can be used to retrieve older messages that have not been cached by the client.
Messages can also be retrieved from the channel by addressing MAM queries to the channel JID. This will behave like a standard MAM archive. This can be useful for administrators to access archived messages. This enables new channel participants to access the historical archives.
A MIX Channel MAY use MAM to archive nodes other than message nodes. Clients with rights to access these archives MAY use MAM to do this, specifying the PubSub node in the MAM query addressed to the channel.
MIX does not standardize an access control model for creating and deleting MIX channels. The choice is left to the MIX implementer, and could be a very simple or complex approach. A client can determine if it has permission to create a channel on a MIX service, which MAY be used to control options presented to the user. This is achieved by a disco command on the MIX service. If the 'urn:xmpp:mix:core:1#create-channel' feature is returned, the user is able to create a channel.
A client creates a channel by sending a simple request to the MIX service. A channel is always created with default parameters, as shown in the following example. The result MUST include the name of the channel which MUST match the channel name in the request (if present). The create is encoded as a <create/> child element of <iq/> element. The <create/> is qualified by the 'urn:xmpp:mix:core:1' namespace. The <create/> element MUST have a 'channel' attribute to specify the channel name. This attribute specifies the value that will be used in the LHS of the JID for the MIX channel.
When a channel is created , the Owner in the configuration is set to the JID that creates the channel. Modifying channel parameters is specified in MIX-ADMIN. Consideration should be given to selection of default parameters. It will typically be desirable to create channels with restrictive default settings that the owner MAY choose to relax.
Channels MAY be created for ad hoc use between a set of users. Channels of this nature will have channel name created by the server and will not be addressable or discoverable. Here a channel is created without specifying the channel name. Parameters for the channel MAY also be specified.
MIX channels are always explicitly destroyed by an owner of the channel or by a server operator. There is no concept of temporary channel, equivalent to Multi-User Chat (XEP-0045)  temporary room which is automatically destroyed by the server when the users leave. However, channels MAY be configured with an explicit lifetime, after which the channel MUST be removed by the MIX service; This is specified in MIX-ADMIN. Where a channel is created for ad hoc use, it MAY be desirable to keep the channel for history reference or for re-use by the same set of users. Note that the owner of the channel does not need to have presence registered in the channel in order to destroy it.
The destroy operation is encoded as a <destroy/> child element of an <iq/> element. The <destroy/> element is qualified by the 'urn:xmpp:mix:core:1' namespace. The <destroy/> element MUST have a 'channel' attribute to specify the channel to be destroyed. A client destroys a channel using a simple set operation, as shown in the following example.
A server MUST destroy a channel that has exceeded its specified explicit lifetime. Servers MAY destroy channels which have no participants and/or presence according to local policy. There will often be good reasons to not destroy rooms in these scenarios, in particular to facilitate channel re-use and history access.
This section lists a number of capabilities not specified in the core MIX which are provided in Multi-User Chat (XEP-0045) . These capabilities will not be added to core MIX but they could in the future be specified as independent XEPs.
Multi-User Chat (XEP-0045)  provides a mechanism to control access to MUC rooms using passwords. An equivalent mechanism is not included in core MIX, as it has a number of security issues. Control of access to channels is better achieved using an explicit list of participants.
Multi-User Chat (XEP-0045)  defines a mechanism so that MUC moderators can control who is able to send messages to a MUC room using a "voice" mechanism. MIX does not provide an exact functional equivalent, although access control to channels enables some of the goals of voice control to be achieved in a different manner.
Multi-User Chat (XEP-0045)  provide a Subject capability to enable setting of the current topic of discussion. The Name and Description attributes provided by MIX enable descriptive information to be associated with a channel. These attributes can replace Subject in the way it is used in many MUC rooms, but they do not reflect the more limited topic nature of Subject.
It is likely that a new XEP to be used with MIX will be written, perhaps using a "Sticky Messages" approach to fulfil the Subject capability using a different approach.
MIX allows specification of a number of human readable strings associated with a MIX channel, in particular the name and description information of a MIX channel. These strings MAY have language set using an xml:lang attribute, and multiple values MAY be set provided that each one is distinguished using xml:lang.
Nicknames SHOULD be normalized using the "nickname" profile of the PRECIS OpaqueString class, as defined in RFC 7700 .
MIX is built over MAM and PubSub and the security considerations of Message Archive Management (XEP-0313)  and Publish-Subscribe (XEP-0060)  MUST be considered. These services protect MIX channel information, which can be sensitive and needs appropriate protection.
There is no MIX equivalent to Multi-User Chat (XEP-0045)  password controlled rooms, which avoids a number of security issues.
MIX-ADMIN defines flexible access control options, which MUST be used in a manner appropriate to the security requirements of MIX users and services.
The urn:xmpp:mix namespace needs to be registered.
The conference type 'mix' needs to be registered.
To be supplied when MIX progresses to proposed standard.
Peter St Andre provided key early input to MIX and worked on the original specification with Kevin Smith.
Thanks to the following who have made contributions to the ongoing MIX specification development: W. Martin Borgert, Dave Cridland, Daniel Gultsch, Tarun Gupta, Philipp Hancke, Waqas Hussain, Timothée Jaussoin, Evgeny Khramtsov, Georg Lukas, Tobias Markmann, Ralph Meijer, Edwin Mons, Emmanuel Gil Peyrot, Manuel Rubio, Florian Schmaus, Lance Stout, Sam Whited, Jonas Wielicki, Matthew Wild and one anonymous reviewer.
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".
Note: Older versions of this specification might be available at http://xmpp.org/extensions/attic/
Minor editorial fixes
Replace <submission-id/> with XEP-0359; Make Message Archiving Optional; Clarify that participant node only contains real JIDs; Change message retrieval from archive to reflect that MIX-PAM archive is now optional; Bump namespace to core:1;
Remove MIX xmlns from pubsub channel info <item/> example;
remove node='mix' for channel discovery; ensure conference is type mix, and note registration requirements; fix retract id example; clarify that channels always created with default parameters; change to reflect that XEP-0004 does not support multiple languages; correct retract to use pubsub syntax; editorial;
Make Nicks mandatory by default; Add Nick Setting to Join;
Remove Proxy JID; Add Stable Participant ID; Remove recommendation to generate Nick as UUID; Add guidance on Nick display;
Fix example message with proxy JID;
Add mandatory/optional table.
Remove PSA as author (as he requested); Major change to move non-core aspects to different XEPs;
Clarify Owner/Administrator separation from participants and descriptions of channel roles; Clarify Owner handling on channel join; New default for configuration nodes present; Clarify configuration Last Change Made By; Clarify Mandatory Presence; Clarification of MIX annotation of roster updates; Replace contents of section 6.3 (Ensuring Message Delivery) with reference to future XEP; Add MIX Channels in Roster Section; Add Proxy JID Architecture Section; Add MUC Comparison Introduction Section; Add requirement to clarify MIX is intended for non-human use;
Fix typo errors with single quotes (marj). Editorial fixes (ralph)
Various Clarifications from Dave Cridland review: Remove Recommendation to do MIX/MUC on separate domains, Sort Default JID Visibility Preference, Make Owner optional, Clarify that Nick is optional;
Various Clarifications from Georg Lukas review: Role Membership reword, Participant's Node Joining clarification, Joining Channel Clarification, Coming online clarification, Going offline JID error, Allow servers to limit retract time frame, Clarify that private messages must not be groupchat, Creating Channel Clarification, Address security concerns on Converting a 1:1 Conversation to a Channel, Remove requirement for all user clients to support MIX, Change Retract to use MAM-ID; Ensure use of .example throughout (follow RFC conventions);
Remove Legacy MIX Namespace; Add mix element in message to hold MIX additional information; Roster Update Clarifications; Clarify when messages are delivered to clients; Extend Roster Get to select format; Ensure that text defining attributes and elements reference the namespace; Change mix_nick_register to nick-register; Separate namespace for roster information; rename jidmap2 to jidmap-visible; Namespace bump to mix:1; Correct from in response of join/leave IQs; Add capability for MIX in client's server;
Fix xmpp:nodes typos; Remove namespace references in Info/Config nodes; Modify Participant and JID Map syntaxes; Clarifications on subscription to participants node and using this to receive Nick changes; Replace use of "query" as MIX defined operations for setting nick;
Editorial Changes (addressing comments from Timothée Jaussoin);
Editorial Changes (mainly from Georg Lukas); Change to new syntax for proxy JIDs; Clarify MAM archive on Send; Extend to sort Selected JID visibility; Add examples of lookup read JID from proxy JID;
Make example ids pseudo-random; Shorten the example BIND2 resources; Fix Disco features to not use second namespace; Correct encoding of jid-multi; MAM intro clarification; Always add to roster, with direction of roster controlled by share preference;
Editorial Updates; Clarify Access to MAM history, prior to user joining channel; Add option for user to join without presence; Check invitee supports MIX;
Update after Brussels Summit; Remove Explicit Client Activation and replace with client capability discovery (summit 3); Limit Indirect to Join/Leave; Clarify Server use of Disco of Client; Add MIX capability information to Roster (summit 10); MIX as Core Spec (summit 1); Clarifications of password control, voice and name/description (summit 4/5/6) Removal of Subject and reference future Sticky Messages XEP (summit 7); Use example JIDs aligned to anticipated BIND2 specification; Clarify PubSub Node Type; Add Error handling section; Substantial Editorial Review;
Ensure all RFC 2119 keywords are capitalized and used correctly; Use MAM ID to identify message; Clarify use of the various channel names; Require all client operations to be direct or indirect (choice is just confusing); Add description of implicit activation ; MIX Domains must not contain users; Clarification on identifying channels in rosters;
Correct multi-language subject setting; Remove MIX Proxy terminology and replace with Participant Server Behaviour;
Modify MIX Proxy so that client sends to bare JID
Add node='mix' to channel disco to facilitate MIX and MUC co-existence on same node; Return Proxy JID on Join; Adjustment to message reflection
Add Update and Distribution to Table 3; Correct from in messages from channel; Use XEP-0297 in message forwarding; Update Dependent XEPs
Editorial Changes (Georg Lukas Review); Improve 1:1 Conversion; Sort out MIX Proxy and Presence Update
Clarify Direct PubSub access to each node type.
Added Internationalization Consideration section, and various I18n edits; Added Security Considerations section; Tombstoning of Redaction changes made optional; Added a section specifying MIX Proxy; Change configuration and information node management to directly use PubSub; Provide for XEP-0202 (vCard4 over XMPP) in addition to vcard-temp support.
Complete and restructure Administration Section: Creating Channels and modifying configuration; Add avatar nodes; Add section on roster handling; Discovering MIX Services; Resolve questions on future capabilities; Administration of Allowed/Banned; clarify Kick functionality is replaced; User Presence Probes on Channel Start-up; Add user Presence preference; Clarify and Expand MAM Archiving; Sort Retraction; Add Marker IQ; Conversion 1:1
Clarification of MIX Proxy concept; Clarify node definitions; Make all nodes optional; Merge ACL node into configuration node; Add information node including avatar; Resolve 4.1 question by accepting provisional answer; Add discovery examples; setting and sharing Subject; Protocol to request channel information and participants; vCard Request; Private Messages; Set user preferences with XEP-0004; Remove references to member and occupant; Add Role Definition; Add Banned and Allowed Nodes; Update Configuration Definition;Add information on original id to message reflected back to sender Add XEP-0372 mechanism to reference channel and informal invite; Channel Invitations
Introduce MIX Proxy concept. Add MIX capability in client discovery.
Addressing comments from review of 0.2 and expansion/clarification of MUC/MIX dual working
Cleanup, use precis nickname for nicknames, and allow multiple subject languages.
Phrasing and grammar.
Includes Link Mauve (Emmanuel Gil PEYROT) editorial changes
Significant update based on XMPP Summit discussions
Fix XML in join example.
Initial published version approved by the XMPP Council.