Misplaced Pages

XMPP: Difference between revisions

Article snapshot taken from Wikipedia with creative commons attribution-sharealike license. Give it a read and then ask your questions in the chat. We can research this topic together.
Browse history interactively← Previous editContent deleted Content addedVisualWikitext
Revision as of 12:49, 16 November 2009 editBeno1000 (talk | contribs)Pending changes reviewers3,659 editsm Decentralization and addressing← Previous edit Latest revision as of 11:27, 28 December 2024 edit undoWikiCleanerBot (talk | contribs)Bots926,203 editsm v2.05b - Bot T20 CW#61 - Fix errors for CW project (Reference before punctuation)Tag: WPCleaner 
(581 intermediate revisions by more than 100 users not shown)
Line 1: Line 1:
{{Short description|Communications protocol for message-oriented middleware}}
]]]
{{Distinguish||text=], a web server software stack, or ], a memory overclocking standard}}
{{Use mdy dates|date=November 2019}}


{{Infobox network protocol|title=|logo=XMPP logo.svg|purpose=]|date={{start date and age|1999}}|rfcs= (Core), (IM & Presence), (Address Format), (CPIM), (Encryption)|logo size=175px|osilayer=]|ports=TCP 5222, 5269, 8010}}
'''Extensible Messaging and Presence Protocol''' ('''XMPP''') (formerly named '''Jabber'''<ref></ref>) is an open, ]-based ] originally aimed at near-], ] ] (IM) and ] (e.g., ]s), but now expanded into the broader realm of ]<ref>{{Citation | contribution-url = http://www.gnomis.org/presentasjoner/oslo2005/xmpp.pdf | contribution = XMPP as MOM | title = Greater NOrdic MIddleware Symposium (GNOMIS) | first = Leif | last = Johansson | publisher = University of Stockholm | date = 18 April 2005 | place = Oslo }}</ref>. It was developed by the Jabber open-source community in 1999. Built to be extensible, the protocol has been extended with features such as ] and file transfer signaling.


'''Extensible Messaging and Presence Protocol''' (] '''XMPP''', originally named '''Jabber'''<ref>{{cite web|url=http://www.cisco.com/web/about/ac49/ac0/ac1/ac258/JabberInc.html |title=Jabber Inc |publisher=Cisco.com |access-date=November 24, 2012}}</ref>) is an ] ] designed for ] (IM), ], and ] maintenance.<ref>{{Cite web|url=http://www.gnomis.org/presentasjoner/oslo2005/xmpp.pdf |title=XMPP as MOM - Greater NOrdic MIddleware Symposium (GNOMIS) |first=Leif |last=Johansson |publisher=University of Stockholm |date=April 18, 2005 |place=Oslo |url-status=dead |archive-url=https://web.archive.org/web/20110510012207/http://www.gnomis.org/presentasjoner/oslo2005/xmpp.pdf |archive-date=May 10, 2011 }}</ref> Based on ] (Extensible Markup Language), it enables the ] exchange of structured data between two or more network entities.<ref>{{Cite IETF | title = Extensible Messaging and Presence Protocol (XMPP): Core | rfc = 6120 | last1 = Saint-Andre | first1 = P. |date=March 2011 | publisher = ] | access-date = May 4, 2014}}</ref> Designed to be ], the protocol offers a multitude of applications beyond traditional IM in the broader realm of ], including signalling for ], video, ], ] and other uses.
Unlike most instant messaging protocols, XMPP is an ]. Like ], it is an ] where anyone who has a domain name and a suitable Internet connection can run their own XMPP server and talk to users on other servers. The standard server implementations and many clients are also ].


Unlike most commercial instant messaging protocols, XMPP is defined in an ] in the ]. The architecture of the XMPP network is similar to ]; anyone can run their own XMPP server and there is no central master server. This ] ] approach allows users to interoperate with others on any server using a 'JID' user account, similar to an email address. XMPP implementations can be developed using any software license and many server, client, and library implementations are distributed as ]. Numerous ] and ] implementations also exist.
The ] (IETF) formed an XMPP Working Group in ] to formalize the core protocols as an IETF instant messaging and presence technology. The XMPP WG produced four specifications which were approved by the ] as Proposed Standards in ]. RFC 3920 and RFC 3921 are now undergoing revisions in preparation for advancing them to Draft Standard within the Internet Standards Process. The ] (formerly the Jabber Software Foundation) is active in developing open XMPP extensions.


XMPP-based software is deployed on thousands of servers across the Internet and by ] was used by over ten million people worldwide, according to the XMPP Standards Foundation<ref>{{cite press release | url = http://xmpp.org/xsf/press/2003-09-22.shtml | title = Jabber Instant Messaging User Base Surpasses ICQ | publisher = XMPP Standards Foundation | date = 22 September 2003 | accessdate = 30 November 2007 }}</ref>. Originally developed by the ], the protocols were formalized as an approved instant messaging standard in 2004 and have been continuously developed with new extensions and features. Various XMPP client software are available on both desktop and mobile platforms and devices - by 2003 the protocol was used by over ten million people worldwide on the network, according to the ].<ref>{{cite press release|url=http://xmpp.org/xsf/press/2003-09-22.shtml |title=Jabber Instant Messaging User Base Surpasses ICQ |publisher=] |date=September 22, 2003 |access-date=November 30, 2007 |url-status=dead |archive-url=https://web.archive.org/web/20071103080257/http://www.xmpp.org/xsf/press/2003-09-22.shtml |archive-date=November 3, 2007 }}</ref>{{update inline|date=December 2021}}

]'s federation protocol is an open extension to the XMPP protocol<ref>{{cite web|url=http://www.waveprotocol.org/draft-protocol-spec#intro-overview|title=Google Wave Federation Protocol|publisher=Google}}</ref>.


{{IPstack}} {{IPstack}}


== Protocol characteristics ==
== History ==
=== Decentralization ===
] began the Jabber project in ]. Its first major public release occurred in May 2000. The project's main software was <tt>]</tt>, a XMPP server. Its main product was the XMPP protocol.
]
The XMPP network architecture is reminiscent of the ] (SMTP), a ] model; clients do not talk directly to one another as it is decentralized - anyone can run a server. By design, there is no central authoritative server as there is with messaging services such as ], ], ] or ]. Some confusion often arises on this point as there is a public XMPP server being run at <code>jabber.org</code>, to which many users subscribe. However, anyone may run their own XMPP server on their own domain.


=== Addressing ===
This early Jabber ] formed the basis for XMPP, published as RFC 3920. It has often been regarded as a competitor to ], based on the ] (SIP) protocol, as the standard protocol for instant messaging and presence notification<ref> ], ] - is still maintained (March 2008)</ref>.
]
Every user on the network has a unique XMPP address, called ''Jabber ID''.<ref>{{cite web |title = "XEP-0029: Definition of Jabber Identifiers (JIDs)" |url = https://xmpp.org/extensions/xep-0029.html |access-date = November 10, 2019 |work = Extensible Messaging and Presence Protocol |author = XMPP Standards Foundation|date = October 3, 2003 }}</ref> The JID is structured like an ] with a username and a ] (or ]<ref>RFC 6122</ref>) for the server where that user resides, separated by an ] (<code>@</code>) - for example, “<code>alice@example.com</code>“: here <code>alice</code> is the username and <code>example.com</code> the server with which the user is registered.


Since a user may wish to log in from multiple locations, they may specify a '''resource'''. A resource identifies a particular client belonging to the user (for example home, work, or mobile). This may be included in the JID by appending a slash followed by the name of the resource. For example, the full JID of a user's mobile account could be <code>username@example.com/mobile</code>.
The first IM service based on XMPP was Jabber.org, which was run by a small group of volunteers. Jabber.org has operated since 1999. The first users of XMPP could sign up for a free account<ref> Linux Journal ], ] by Marcel Gagné</ref>.


Each resource may have specified a numerical value called '''priority'''. Messages simply sent to <code>username@example.com</code> will go to the client with highest priority, but those sent to <code>username@example.com/mobile</code> will go ''only'' to the mobile client. The highest priority is the one with largest numerical value.
In August 2005, ] introduced ], a combination ] and IM system which uses XMPP for its instant messaging function and as a base for its voice and file transfer signalling protocol. The initial launch did not include ] communications, but since ], ], server-to-server communications is enabled<ref>{{cite web |

JIDs without a username part are also valid, and may be used for system messages and control of special features on the server. A resource remains optional for these JIDs as well.

The means to route messages based on a logical endpoint identifier - the JID, instead of by an explicit IP Address present opportunities to use XMPP as an ] implementation on top of different underlay networks.<ref>{{Cite web |title=Extensible Messaging and Presence Protocol (XMPP): Core |url=https://xmpp.org/rfcs/rfc3920.html |access-date=2023-09-21 |website=xmpp.org}}</ref>

=== XMPP via HTTP ===
The original and "native" transport protocol for XMPP is ] (TCP), using open-ended XML streams over long-lived TCP connections. As an alternative to the TCP transport, the XMPP community has also developed an ] transport for web clients as well as users behind restricted ]. In the original specification, XMPP could use HTTP in two ways: ''polling''<ref>{{cite web|url=http://xmpp.org/extensions/xep-0025.html |author1=Joe Hildebrand |author2=Craig Kaes |author3=David Waite |title=XEP-0025: Jabber HTTP Polling |publisher=Xmpp.org |date=June 3, 2009 |access-date=November 24, 2012}}</ref> and ''binding''. The polling method, now deprecated, essentially implies messages stored on a server-side database are being fetched (and posted) regularly by an XMPP client by way of HTTP 'GET' and 'POST' requests. The binding method, implemented using ''Bidirectional-streams Over Synchronous HTTP'' (]),<ref name="bosh">{{cite web|url=http://xmpp.org/extensions/xep-0124.html |author1=Ian Paterson |author2=Dave Smith |author3=Peter Saint-Andre |author4=Jack Moffitt |title=XEP-0124: Bidirectional-streams Over Synchronous HTTP () |publisher=Xmpp.org |date=July 2, 2010 |access-date=November 24, 2012}}</ref> allows servers to push messages to clients as soon as they are sent. This push model of notification is more efficient than polling, where many of the polls return no new data.

Because the client uses HTTP, most firewalls allow clients to fetch and post messages without any hindrances. Thus, in scenarios where the TCP port used by XMPP is blocked, a server can listen on the normal HTTP port and the traffic should pass without problems. Various websites let people sign into XMPP via a browser. Furthermore, there are open public servers that listen on standard http (port 80) and https (port 443) ports, and hence allow connections from behind most firewalls. However, the IANA-registered port for BOSH is actually 5280, not 80.

===Extensibility===
The ] or XSF (formerly the Jabber Software Foundation) is active in developing open XMPP extensions, so called ''XEP''.<ref>{{cite web|url=http://xmpp.org/extensions/index.html|title=Specifications|website=xmpp.org|publisher=]|pages=1|access-date=January 6, 2017}}</ref> However, extensions can also be defined by any individual, software project, or organization. To maintain interoperability, common extensions are managed by the XSF. XMPP applications beyond IM include: ]s, ], ], collaboration tools, ], gaming, remote systems control and monitoring, ], ] and ], VoIP, and identity services.

Building on its capability to support discovery across local ]s, XMPP is well-suited for ] where virtual machines, networks, and firewalls would otherwise present obstacles to alternative service discovery and presence-based solutions. Cloud computing and storage systems rely on various forms of communication over multiple levels, including not only messaging between systems to relay state but also the migration or distribution of larger objects, such as storage or virtual machines. Along with authentication and in-transit data protection, XMPP can be applied at a variety of levels and may prove ideal as an extensible middleware or ] (MOM) protocol.

===Current limitations===
At the moment, XMPP does not support Quality of Service (QoS); assured delivery of messages has to be built on top of the XMPP layer. There are two XEPs proposed to deal with this issue, XEP-0184 Message delivery receipts which is currently a draft standard, and XEP-0333 Chat Markers which is considered experimental.

Since XML is text based, normal XMPP has a higher network overhead compared to purely binary solutions. This issue was being addressed by the experimental XEP-0322: Efficient XML Interchange (EXI) Format, where XML is serialized in an efficient binary manner, especially in schema-informed mode. This XEP is currently deferred.

In-band binary data transfer is limited. ] must be first ] encoded before it can be transmitted in-band. Therefore, any significant amount of binary data (e.g., ]s) is best transmitted ], using in-band messages to coordinate. The best example of this is the ] XMPP Extension Protocol, XEP-0166.

== Features ==
], an XMPP client for Android]]

===Peer-to-peer sessions===
Using the extension called ], XMPP can provide an open means to support ] or ] communications across a diverse set of networks. This feature is mainly used for ] (VoIP).

===Multi-user chat===
XMPP supports conferences with multiple users, using the specification Multi-User Chat (MUC) (XEP-0045). From the point of view of a normal user, it is comparable to ] (IRC).

===Security and encryption===
XMPP servers can be isolated (e.g., on a company ]), and secure authentication (]) and point-to-point encryption (]) have been built into the core XMPP specifications.

] (OTR) is an extension of XMPP enabling encryption of messages and data. It has since been replaced by a better extension, multi-end-to-multi-end encryption (], XEP-0384) end-to-end encryption between users. This gives a higher level of security, by encrypting all data from the source client and decrypting again at the target client; the server operator cannot decrypt the data they are forwarding.

Messages can also be encrypted with ], for example with the software ].

===Service discovery===
While several ] protocols exist today (such as ] or the ]), XMPP provides a solid base for the discovery of services residing locally or across a network, and the availability of these services (via presence information), as specified by XEP-0030 DISCO.<ref name="XEP-0030"/>

=== Connecting to other protocols ===
]
One of the original design goals of the early Jabber open-source community was enabling users to connect to multiple instant messaging systems (especially non-XMPP systems) through a single client application. This was done through entities called ''transports'' or ''gateways'' to other instant messaging protocols like ], AIM or ], but also to protocols such as ], ] or ]. Unlike ], XMPP provides this access at the server level by communicating via special gateway services running alongside an XMPP server. Any user can "register" with one of these gateways by providing the information needed to log on to that network, and can then communicate with users of that network as though they were XMPP users. Thus, such gateways function as client proxies (the gateway authenticates on the user's behalf on the non-XMPP service). As a result, any client that fully supports XMPP can access any network with a gateway without extra code in the client, and without the need for the client to have direct access to the Internet. However, the client proxy model may violate ] on the protocol used (although such terms of service are not legally enforceable in several countries) and also requires the user to send their IM username and password to the third-party site that operates the transport (which may raise privacy and security concerns).

Another type of gateway is a server-to-server gateway, which enables a non-XMPP server deployment to connect to native XMPP servers using the built in interdomain federation features of XMPP. Such server-to-server gateways are offered by several enterprise IM software products, including:

* ]<ref>"Lotus Sametime 7.5 Interoperates with AIM, Google Talk", eWeek, December 6, 2006 </ref><ref>"Lotus ships gateway to integrate IM with AOL, Yahoo, Google", Network World, December 6, 2006 {{webarchive|url=https://web.archive.org/web/20081101072959/http://www.networkworld.com/news/2006/120606-sametime-links-up-with-aim.html|date=November 1, 2008}}</ref>
* ] (formerly named Microsoft Lync Server and Microsoft Office Communications Server – OCS)<ref>"Unified Communications: Uniting Communication Across Different Networks", Microsoft Press Release, October 1, 2009 {{webarchive|url=https://web.archive.org/web/20100105062129/https://www.microsoft.com/Presspass/Features/2009/oct09/10-01UCInterop.mspx|date=January 5, 2010}}</ref>

==Software==
XMPP is implemented by many clients, servers, and code libraries.<ref>{{cite web|url=http://xmpp.org/xmpp-software/clients/|title=Clients|work=xmpp.org}}</ref> These implementations are provided under a variety of software licenses.

===Servers===
Numerous XMPP server software exist, some well known ones include ] and ].

===Modern clients===
]<ref name=":0" />]]
A large number of XMPP client software exist on various modern and legacy platforms, including both graphical and command line based clients. According to the XMPP website, some of the most popular software include ] and Quicksy (]), Dino (], ], ], ]), Converse.js (web browser, ], ], ]),<ref name=":0">{{Cite web |title=XMPP Software |url=https://xmpp.org/software/?platform=windows |access-date=2024-09-19 |website=XMPP Org}}</ref> ] (], ]),<ref name=":0" /> Monal (], ]), and Swift.IM (macOS, Windows, Linux). Lately, Monal has been forked as a Quicksy release for ].

Other clients include: Bombus, ], ], ],<ref name=":0" /> ], ],<ref name=":0" /> ], ], and ].

== Deployment and distribution ==
There are thousands of XMPP servers worldwide, many public ones as well as private individuals or organizations running their own servers without commercial intent. Numerous websites show a list of public XMPP servers where users may register at (for example on the XMPP.net website).

Several large public IM services natively use or used XMPP, including ]'s "LJ Talk",<ref>{{cite web|url=http://www.livejournal.com/support/faqbrowse.bml?faqid=270 |title=Question FAQ #270-What is LJ Talk? |publisher=Livejournal.com |date=September 27, 2010 |access-date=November 24, 2012}}</ref> ], and ]. Various hosting services, such as ], enable hosting customers to choose XMPP services alongside more traditional web and email services. Specialized XMPP hosting services also exist in form of ] so that domain owners need not directly run their own XMPP servers, including ] ] Connect, Chrome.pl, Flosoft.biz, i-pobox.net, and hosted.im.

XMPP is also used in deployments of non-IM services, including smart grid systems such as ] applications, message-oriented middleware, and as a replacement for ] to provide text messaging on many ] clients.

===Non-native deployments===
Some of the largest messaging providers use, or have been using, various forms of XMPP based protocols in their backend systems without necessarily exposing this fact to their end users.<ref>{{Cite web |date=December 25, 2024 |title=XMPP Messaging Protocol Reference |url=https://www.sent.dm/resources/xmpp-messaging |url-status=live |access-date=December 25, 2024 |website=www.sent.dm}}</ref><ref>{{Cite web|url=https://www.process-one.net/blog/whatsapp-facebook-erlang-and-realtime-messaging-it-all-started-with-ejabberd/|title=Whatsapp, Facebook, Erlang and realtime messaging: It all started with ejabberd|last=Rémond|first=Mickaël|date=February 23, 2014|work=ProcessOne — Blog|access-date=2020-09-17|language=en}}</ref> One example is ], which in August 2005 introduced ], a combination VoIP and IM system that uses XMPP for instant messaging and as a base for a voice and file transfer signaling protocol called ]. The initial launch did not include ] communications; Google enabled that feature on January 17, 2006.<ref>{{cite web |
url=http://googletalk.blogspot.com/2006/01/xmpp-federation.html | url=http://googletalk.blogspot.com/2006/01/xmpp-federation.html |
title=XMPP Federation | title=XMPP Federation |
last=Burd | last=Burd |
first=Gary | first=Gary |
date=17 January 2006 | date=January 17, 2006 |
access-date=November 30, 2007 }}</ref> Google later added video functionality to Google Talk, also using the Jingle protocol for signaling. In May 2013, Google announced XMPP compatibility would be dropped from Google Talk for server-to-server federation, although it would retain client-to-server support.<ref>{{cite web| url=https://support.google.com/code/answer/62464 | title=How do I allow my internal XMPP client or server to connect to the Talk service? | website=support.google.com }}</ref> Google Talk has since been dropped from Google's line of products.
accessdate=30 November 2007 }}</ref>.


In January 2008, AOL introduced experimental XMPP support for its ] (AIM) service,<ref>{{cite web|url=http://florianjensen.com/2008/01/17/aol-adopting-xmpp-aka-jabber/|title=AOL adopting XMPP aka Jabber|date=January 17, 2008|access-date=January 17, 2008|first=Florian|last=Jensen|archive-url=https://web.archive.org/web/20080120143857/http://florianjensen.com/2008/01/17/aol-adopting-xmpp-aka-jabber/|archive-date=January 20, 2008|url-status=dead}}</ref> allowing AIM users to communicate using XMPP. However, in March 2008, this service was discontinued.{{Citation needed|date=December 2010}} As of May 2011, AOL offers limited XMPP support.<ref>{{cite web|url=http://www.aim.com/xmpp|title=AOL XMPP Gateway|date=May 14, 2011|access-date=May 14, 2011| archive-url= https://web.archive.org/web/20110522092331/http://www.aim.com/xmpp| archive-date=May 22, 2011| url-status= live}}</ref>
== Strengths ==
* Decentralization: The architecture of the XMPP network is similar to email; anyone can run their own XMPP server and there is no central master server.
* Open standards: The ] has formalized XMPP as an approved instant messaging and presence technology under the name of XMPP, and the XMPP specifications have been published as RFC 3920 and RFC 3921. No royalties are required to implement support of these specifications and their development is not tied to a single vendor.
* History: XMPP technologies have been in use since ]. Multiple implementations of the XMPP standards exist for clients, servers, components, and code libraries, with the backing of large companies such as ] and ].
* Security: XMPP servers may be isolated from the public XMPP network (e.g., on a company intranet), and robust security (via ] and ]) has been built into the core XMPP specifications. To encourage use of channel encryption, the also runs an intermediate ] at offering free ] to XMPP server administrators under the auspices of the StartCom Certification Authority (which is the root CA for the intermediate CA).
* Flexibility: Custom functionality can be built on top of XMPP; to maintain interoperability, common extensions are managed by the XMPP Software Foundation. XMPP applications beyond IM include network management, content syndication, collaboration tools, file sharing, gaming, and remote systems monitoring.


In February 2010, the social-networking site ] opened up its ] to third-party applications via XMPP.<ref>{{cite web |
== Weaknesses ==
url=http://blog.facebook.com/blog.php?post=297991732130 |
* Presence data overhead: With typically over 70% of XMPP inter-server traffic being presence data<ref></ref> and close to 60% of it being redundantly transmitted,<ref></ref> XMPP currently has a large overhead in delivering presence data to multiple recipients. New protocols are being researched to alleviate this problem{{Citation needed|date=September 2009}}.
title=Facebook Chat Now Available Everywhere |
* In-band binary data transfer is inefficient: Because XMPP is encoded as a single long XML document, binary data must be first base64 encoded before it can be transmitted in-band. Therefore any significant amount of binary data (e.g., ]s) is best transmitted out-of-band, using in-band messages to coordinate. The best example of this is the Jingle XMPP Extension Protocol, XEP-0166.
access-date=February 11, 2010}}</ref> Some functionality was unavailable through XMPP, and support was dropped in April 2014.<ref>{{cite web |
url=https://developers.facebook.com/docs/chat/?_fb_noscript=1 |
title=Chat API (deprecated) |
access-date=July 5, 2015}}</ref> Similarly, in December 2011, Microsoft released an XMPP interface to its ].<ref>{{cite web|url=http://windowsteamblog.com/windows_live/b/windowslive/archive/2011/12/14/anyone-can-build-a-windows-live-messenger-client-with-open-standards-access-via-xmpp.aspx |title=Anyone can build a Messenger client—with open standards access via XMPP |publisher=Windowsteamblog.com |first=Dare|last=Obasanjo |date=December 14, 2011 |access-date=November 24, 2012}}</ref> ], its de facto successor, also provided limited XMPP support.<ref>{{cite web|first=Janko|last=Roettgers |url=http://gigaom.com/2011/06/28/skype-xmpp-support/ |title=Skype adds XMPP support, IM interoperability next? — Tech News and Analysis |publisher=Gigaom.com |date=June 28, 2011 |access-date=November 24, 2012}}</ref> ] is another example.<ref>{{cite web|url=http://www.waveprotocol.org/protocol/draft-protocol-specs/draft-protocol-spec#intro-overview|title=Google Wave Federation Protocol|archive-url=https://web.archive.org/web/20160304205841/http://www.waveprotocol.org/protocol/draft-protocol-specs/draft-protocol-spec#intro-overview|archive-date=March 4, 2016}}</ref>


XMPP is the ] for private chat in gaming related platforms such as ],<ref>{{cite web|url=https://www.slightfuture.com/security/ea-origin-chat-unencrypted |title=Origin game platform sends login and messages in plain-text |publisher=Slight Future |date=June 30, 2015 |access-date=February 22, 2016}}</ref> and ], as well as the now discontinued ] and ].<ref>{{cite web|url=https://www.pcgamesn.com/raptr-gaming-evolved-dead|title=Raptr is dead. No more Gaming Evolved a year after AMD ditch the app |publisher=Pcgamesn.com |date=September 13, 2017 |access-date= October 16, 2020}}</ref> Two notable exceptions are ]<ref>{{cite web|url=https://github.com/EionRobb/pidgin-opensteamworks/blob/master/steam-mobile/libsteam.c |title=libsteam.c |publisher=Github |access-date=February 22, 2016}}</ref> and ]; both use their own ] messaging protocols.
== Decentralization and addressing ==
The XMPP network uses a client-server architecture (i.e. clients do not talk directly to one another) but decentralized: by design there is no central authoritative server, as there is with services such as ] or ]. Some confusion often arises on this point as there is a public XMPP server being run at "gmail.com", to which a large number of users subscribe. However, anyone may run their own XMPP server on their own domain. The standard ] port for XMPP is 5222<ref>JabberLive! (2007-03-09) </ref>.


== History and development ==
Every user on the network has a unique ''Jabber ID'' (usually abbreviated as ''JID''). To avoid the need for a central server with a list of IDs, the JID is structured like an e-mail address with a username and a ] address for the server where that user resides separated by an ] (@), such as ''username@domain.com''.
]
] began working on the Jabber technology in 1998 and released the first version of the <code>jabberd</code> server on January 4, 1999.<ref>{{cite web|url=http://tech.slashdot.org/article.pl?sid=99/01/04/1621211 |title=Open Real Time Messaging System |publisher=Tech.slashdot.org |date=January 4, 1999 |access-date=November 24, 2012}}</ref> The early Jabber community focused on open-source software, mainly the jabberd server, but its major outcome proved to be the development of the XMPP protocol.


The ] (IETF) formed an XMPP ] in 2002 to formalize the core protocols as an IETF instant messaging and presence technology. The early Jabber ], as developed in 1999 and 2000, formed the basis for XMPP as published in <nowiki>RFC 3920</nowiki> and <nowiki>RFC 3921</nowiki> in October 2004 (the primary changes during formalization by the IETF's XMPP Working Group were the addition of ] for channel encryption and ] for authentication). The XMPP Working group also produced specifications <nowiki>RFC 3922</nowiki> and <nowiki>RFC 3923</nowiki>. In 2011, <nowiki>RFC 3920</nowiki> and <nowiki>RFC 3921</nowiki> were superseded by <nowiki>RFC 6120</nowiki> and <nowiki>RFC 6121</nowiki> respectively, with <nowiki>RFC 6122</nowiki> specifying the XMPP address format. In 2015, <nowiki>RFC 6122</nowiki> was superseded by <nowiki>RFC 7622</nowiki>. In addition to these core protocols standardized at the IETF, the ] (formerly the Jabber Software Foundation) is active in developing open XMPP extensions.
Since a user may wish to log in from multiple locations, the clients specify a further string known as a resource, which identifies which of the user's clients it is (for example home, work and mobile). This may then be included in the JID by adding a forward slash followed by the name of the resource. Each resource may have specified a numerical value called priority. For example, the full JID of a user's mobile account would be ''username@domain.com/mobile''. Messages that are simply sent to ''username@domain.com'' will go to the client with highest priority, but those sent to ''username@domain.com/mobile'' will only go to the mobile client.


The first IM service based on XMPP was Jabber.org,<ref name=":0" /> which has operated continuously and offered free accounts since 1999.<ref>{{cite web|url= http://www.linuxjournal.com/article/6489 |title=Chatting Up the Chef |website=Linux Journal |date=March 1, 2003 |author=Marcel Gagné}}</ref> From 1999 until February 2006, the service used jabberd as its server software, at which time it migrated to ] (both of which are ] application servers). In January 2010, the service migrated to the ] M-Link server software produced by Isode Ltd.<ref>{{cite web
JIDs without a username part are also valid and may be used (with or without a resource part) for system messages and control of special features on the server.
|url=http://www.jabber.org/2009/08/xmpp-server-migration/
|title=Jabber.org – XMPP Server Migration
|date=August 12, 2009
|access-date=December 14, 2009
|url-status=dead
|archive-url=https://web.archive.org/web/20091213180443/http://www.jabber.org/2009/08/xmpp-server-migration/
|archive-date=December 13, 2009
}}</ref>


In September 2008, ] acquired Jabber, Inc., the creators of the commercial product Jabber XCP.<ref>{{cite web
== Message delivery scenario ==
|url=http://newsroom.cisco.com/dlls/2008/corp_091908.html
Suppose ''juliet@capulet.com'' wants to chat with ''romeo@montague.net''. Juliet and Romeo each respectively have accounts on the capulet.com and montague.net servers. When Juliet types in and sends her message, a sequence of events is set in motion:
|title=Cisco Announces Definitive Agreement to Acquire Jabber
# Juliet's client sends her message to the capulet.com server
|access-date=January 2, 2010
#* If montague.net is blocked on capulet.com, the message is dropped.
|url-status=dead
# The capulet.com server opens a connection to the montague.net server.
|archive-url=https://web.archive.org/web/20091223033256/http://newsroom.cisco.com/dlls/2008/corp_091908.html
#* If capulet.com is blocked on montague.net, the message is dropped.
|archive-date=December 23, 2009
#* If Romeo is not currently connected, the message is stored for later delivery.
}}</ref>
# The montague.net server delivers the message to Romeo.


The ] (XSF) develops and publishes extensions to XMPP through a standards process centered on ''XMPP Extension Protocols'' (XEPs, previously known as Jabber Enhancement Proposals - JEPs). The following extensions are in especially wide use:
{| style="margin-left: auto; margin-right: auto; margin-top: 1em; text-align: center"
| style="border: 1px solid #cccccc; border-collapse:collapse; background-color:#ffffff; text-align:center; padding: 0.33em" | Juliet
| style="width: 2em" | →
| style="border: 1px solid #999999; border-collapse:collapse; background-color:#cccccc; text-align:center; padding: 0.33em" | capulet.com
| style="width: 2em" | →
| style="border: 1px solid #999999; border-collapse:collapse; background-color:#cccccc; text-align:center; padding: 0.33em" | montague.net
| style="width: 2em" | →
| style="border: 1px solid #cccccc; border-collapse:collapse; background-color:#ffffff; text-align:center; padding: 0.33em" | Romeo
|}


* Data Forms<ref>{{cite web|url=http://xmpp.org/extensions/xep-0004.html|title=XEP-0004: Data Forms|work=xmpp.org|date=June 8, 2021}}</ref>
== Connecting to other protocols ==
* Service Discovery<ref name="XEP-0030">{{cite web|url=http://xmpp.org/extensions/xep-0030.html|title=XEP-0030: Service Discovery|work=xmpp.org|date=October 3, 2017}}</ref>
]
* Multi-User Chat<ref name="autogenerated1">{{cite web|url=http://xmpp.org/extensions/xep-0045.html|title=XEP-0045: Multi-User Chat|work=xmpp.org|date=March 4, 2021}}</ref>
Another useful feature of the XMPP system is that of ''transports'', also known as ''gateways'', which allow users to access networks using other protocols. This can be other instant messaging protocols, but also protocols such as ] or ]. Unlike ], XMPP provides this access at the server level by communicating via special gateway services running on a remote computer. Any user can "register" with one of these gateways by providing the information needed to log on to that network, and can then communicate with users of that network as though they were XMPP users. This means that any client which fully supports XMPP can be used to access any network for which a gateway exists, without the need for any extra code in the client and without the need for the client to have direct access to the Internet. This may violate terms of service on the protocol used; however, such terms of service are not legally enforceable in several countries.
* Publish-Subscribe<ref name="autogenerated2">{{cite web|url=http://xmpp.org/extensions/xep-0060.html|title=XEP-0060: Publish-Subscribe|work=xmpp.org|date=September 7, 2021}}</ref> and Personal Eventing Protocol<ref>{{cite web|url=http://xmpp.org/extensions/xep-0163.html|title=XEP-0163: Personal Eventing Protocol|work=xmpp.org|date=March 18, 2018}}</ref>
* XHTML-IM<ref>{{cite web|url=http://xmpp.org/extensions/xep-0071.html|title=XEP-0071: XHTML-IM|work=xmpp.org|date=March 8, 2018}}</ref>
* File Transfer<ref>{{cite web|url=http://xmpp.org/extensions/xep-0096.html|title=XEP-0096: SI File Transfer|work=xmpp.org|date=November 29, 2017}}</ref>
* Entity Capabilities<ref>{{cite web|url=http://xmpp.org/extensions/xep-0115.html|title=XEP-0115: Entity Capabilities|work=xmpp.org|date=May 5, 2020}}</ref>
* HTTP Binding<ref name="bosh" />
* ] for voice and video


== XMPP via HTTP transport == === Internet of Things ===
XMPP features such as federation across domains, publish/subscribe, authentication and its security even for mobile endpoints are being used to implement the ]. Several XMPP extensions are part of the experimental implementation: Efficient XML Interchange (EXI) Format;<ref>{{cite web|url=http://xmpp.org/extensions/xep-0322.html|title=XEP-0322: Efficient XML Interchange (EXI) Format|work=xmpp.org|date=January 25, 2018}}</ref> Sensor Data;<ref>{{cite web|url=http://xmpp.org/extensions/xep-0323.html|title=XEP-0323: Internet of Things - Sensor Data|work=xmpp.org|date=May 20, 2017}}</ref> Provisioning;<ref>{{cite web|url=http://xmpp.org/extensions/xep-0324.html|title=XEP-0324: Internet of Things - Provisioning|work=xmpp.org|date=March 4, 2021}}</ref> Control;<ref>{{cite web|url=http://xmpp.org/extensions/xep-0325.html|title=XEP-0325: Internet of Things - Control|work=xmpp.org|date=March 4, 2021}}</ref> Concentrators;<ref>{{cite web|url=http://xmpp.org/extensions/xep-0326.html|title=XEP-0326: Internet of Things - Concentrators|work=xmpp.org|date=May 20, 2017}}</ref> Discovery.<ref>{{cite web|url=http://xmpp.org/extensions/xep-0347.html|title=XEP-0347: Internet of Things - Discovery|work=xmpp.org|date=November 3, 2018}}</ref>
Another aspect of XMPP is the ] binding for users behind restricted ]. In the original specification, XMPP could use HTTP in two ways: ''polling''<ref></ref> and ''binding''.<ref name="autogenerated1"></ref>. The polling method, now deprecated, essentially implies messages stored on a server-side database are being fetched (and posted) regularly by an XMPP client by way of HTTP 'GET' and 'POST' requests. With HTTP binding, the client uses longer-lived HTTP connections to receive messages as soon as they are sent. This push model of notification is more efficient than polling, where many of the polls return no new data.


These efforts are documented on a page in the XMPP wiki dedicated to Internet of Things<ref>{{cite web|url=http://wiki.xmpp.org/web/Tech_pages/IoT_systems|title=Tech pages/IoT systems|work=xmpp.org}}</ref> and the XMPP IoT mailing list.<ref>{{cite web|url=http://mail.jabber.org/mailman/listinfo/iot|title=IOT Info Page|work=jabber.org}}</ref>
Because the client uses HTTP, most firewalls allow clients to fetch and post messages without any hindrances. Thus, in scenarios where the TCP port used by XMPP is blocked, a server can listen on the normal HTTP port and the traffic should pass without problems. There also are various websites which allow people to sign in to XMPP via their browser. Furthermore, there are open public servers, that listen on standard http (port 80) and https (port 443) ports and hence allow connections from behind most firewalls.


== Specifications and standards ==
== Implementations ==
The ] XMPP working group has produced a series of ] (RFC) documents:
{{Main|List of XMPP client software}}
XMPP is implemented by a large number of XMPP clients, servers, and code libraries. The main article contains a ] for multiple platforms.


* <nowiki>RFC 3920</nowiki> (superseded by <nowiki>RFC 6120</nowiki>)
== Development ==
* <nowiki>RFC 3921</nowiki> (superseded by <nowiki>RFC 6121</nowiki>)
The IETF XMPP ] has produced a number of ] protocol documents:
* <nowiki>RFC 3922</nowiki>
RFC 3920, RFC 3921, RFC 3922, RFC 3923, RFC 4622, RFC 4854, RFC 4979
* <nowiki>RFC 3923</nowiki>
* RFC 3920, ''Extensible Messaging and Presence Protocol (XMPP): Core'' which describes ] messaging using two open-ended ] streams. XML streams consist of &lt;presence/&gt;, &lt;message/&gt; and &lt;iq/&gt; (info/query). A connection is authenticated with ] (SASL) and ] with ] (TLS).
* <nowiki>RFC 4622</nowiki> (superseded by <nowiki>RFC 5122</nowiki>)
* RFC 3921, ''Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence'' describes ] (IM), the most common application of XMPP.
* <nowiki>RFC 4854</nowiki>
* RFC 3922, ''Mapping the Extensible Messaging and Presence Protocol (XMPP) to Common Presence and Instant Messaging (CPIM)'' relates XMPP and the Common Presence and Instant Messaging (CPIM) specifications.
* <nowiki>RFC 4979</nowiki>
* RFC 3923, ''End-to-End Signing and Object Encryption for the Extensible Messaging and Presence Protocol (XMPP)'' describes end to end ] of XMPP messages using ]. Conflicting this proposal, many clients currently use ] for encrypting messages<ref></ref>.
* <nowiki>RFC 6122</nowiki> (superseded by <nowiki>RFC 7622</nowiki>)


The most important and most widely implemented of these specifications are:
The XMPP Standards Foundation (XSF) develops and publishes extensions to XMPP through a standards process centered on ''XMPP Extension Protocols'' (XEPs, previously known as Jabber Enhancement Proposals - JEPs). The following extensions are in especially wide use:
* Data Forms<ref></ref>
* Service Discovery<ref></ref>
* Multi-User Chat<ref></ref>
* XHTML-IM<ref></ref>
* File Transfer<ref></ref>
* Entity Capabilities<ref></ref>
* HTTP Binding<ref name="autogenerated1" />
* Personal Eventing Protocol<ref></ref>


* <nowiki>RFC 6120</nowiki>, ''Extensible Messaging and Presence Protocol (XMPP): Core'', which describes ] messaging using two open-ended ] streams. XML streams consist of &lt;presence/&gt;, &lt;message/&gt; and &lt;iq/&gt; (info/query). A connection is authenticated with ] (SASL) and ] with ] (TLS).
XMPP is currently being extended to handle signaling / negotiation for ] (VoIP) and other media sessions. This signaling protocol is called ]. Jingle is designed to be consistent with the ] service and bridgeable with the Session Initiation Protocol.
* <nowiki>RFC 6121</nowiki>'', Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence'' describes ] (IM), the most common application of XMPP.
* <nowiki>RFC 7622</nowiki>, ''Extensible Messaging and Presence Protocol (XMPP): Address Format'' describes the rules for XMPP addresses, also called JabberIDs or JIDs. Currently JIDs use PRECIS (as defined in <nowiki>RFC 7564</nowiki>) for handling of ] characters outside the ASCII range.

=== Competing standards ===
XMPP has often been regarded as a competitor to ], based on ] (SIP), as the standard protocol for instant messaging and presence notification.<ref>"XMPP rises to face SIMPLE standard", Infoworld magazine, April 17, 2003 </ref><ref>"XMPP vs SIMPLE: The race for messaging standards", Infoworld magazine, May 23, 2003 </ref>

The XMPP extension for multi-user chat<ref name="autogenerated1" /> can be seen as a competitor to ], although IRC is far simpler, has far fewer features, and is far more widely used.{{citation needed|date=April 2016}}

The XMPP extensions for publish–subscribe<ref name="autogenerated2" /> provide many of the same features as the ] (AMQP).


== See also == == See also ==
* ] * ]
* ] * ]
* ]
* ]
* ]
* ]
* ] * ]
* ]
* ]


== References == == References ==
{{reflist|2}} {{Reflist}}


== External links == == External links ==
{{Commons category|Extensible Messaging and Presence Protocol}}
*
* {{Official website|http://xmpp.org/}}
* - End user introduction to XMPP (archive)
{{URI_scheme}}
*
{{Instant messaging}}
*
{{Authority control}}
*
* ] interviewed by ] and ]


]
{{DEFAULTSORT:Extensible Messaging And Presence Protocol}}
]
] ]
] ]
] ]
]
] ]
] ]
]

]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]

Latest revision as of 11:27, 28 December 2024

Communications protocol for message-oriented middleware Not to be confused with XAMPP, a web server software stack, or Extreme Memory Profile (XMP), a memory overclocking standard.

XMPP
Communication protocol
PurposeInstant messaging
Introduction1999; 26 years ago (1999)
OSI layerApplication layer
Port(s)TCP 5222, 5269, 8010
RFC(s)RFC 6120 (Core), RFC 6121 (IM & Presence), RFC 7622 (Address Format), RFC 3922 (CPIM), RFC 3923 (Encryption)
Websitexmpp.org

Extensible Messaging and Presence Protocol (abbreviation XMPP, originally named Jabber) is an open communication protocol designed for instant messaging (IM), presence information, and contact list maintenance. Based on XML (Extensible Markup Language), it enables the near-real-time exchange of structured data between two or more network entities. Designed to be extensible, the protocol offers a multitude of applications beyond traditional IM in the broader realm of message-oriented middleware, including signalling for VoIP, video, file transfer, gaming and other uses.

Unlike most commercial instant messaging protocols, XMPP is defined in an open standard in the application layer. The architecture of the XMPP network is similar to email; anyone can run their own XMPP server and there is no central master server. This federated open system approach allows users to interoperate with others on any server using a 'JID' user account, similar to an email address. XMPP implementations can be developed using any software license and many server, client, and library implementations are distributed as free and open-source software. Numerous freeware and commercial software implementations also exist.

Originally developed by the open-source community, the protocols were formalized as an approved instant messaging standard in 2004 and have been continuously developed with new extensions and features. Various XMPP client software are available on both desktop and mobile platforms and devices - by 2003 the protocol was used by over ten million people worldwide on the network, according to the XMPP Standards Foundation.

Internet protocol suite
Application layer
Transport layer
Internet layer
Link layer

Protocol characteristics

Decentralization

A simple XMPP network with the servers jabber.org and draugr.de. Green clients are online, yellow clients are writing each other and small green subclients are the resources of one user. The brown network is not connected to the internet. The server draugr.de is connected to other IM services (ICQ, AIM and other) via XMPP transports.

The XMPP network architecture is reminiscent of the Simple Mail Transfer Protocol (SMTP), a client–server model; clients do not talk directly to one another as it is decentralized - anyone can run a server. By design, there is no central authoritative server as there is with messaging services such as AIM, WLM, WhatsApp or Telegram. Some confusion often arises on this point as there is a public XMPP server being run at jabber.org, to which many users subscribe. However, anyone may run their own XMPP server on their own domain.

Addressing

A standard JID

Every user on the network has a unique XMPP address, called Jabber ID. The JID is structured like an email address with a username and a domain name (or IP address) for the server where that user resides, separated by an at sign (@) - for example, “alice@example.com“: here alice is the username and example.com the server with which the user is registered.

Since a user may wish to log in from multiple locations, they may specify a resource. A resource identifies a particular client belonging to the user (for example home, work, or mobile). This may be included in the JID by appending a slash followed by the name of the resource. For example, the full JID of a user's mobile account could be username@example.com/mobile.

Each resource may have specified a numerical value called priority. Messages simply sent to username@example.com will go to the client with highest priority, but those sent to username@example.com/mobile will go only to the mobile client. The highest priority is the one with largest numerical value.

JIDs without a username part are also valid, and may be used for system messages and control of special features on the server. A resource remains optional for these JIDs as well.

The means to route messages based on a logical endpoint identifier - the JID, instead of by an explicit IP Address present opportunities to use XMPP as an Overlay network implementation on top of different underlay networks.

XMPP via HTTP

The original and "native" transport protocol for XMPP is Transmission Control Protocol (TCP), using open-ended XML streams over long-lived TCP connections. As an alternative to the TCP transport, the XMPP community has also developed an HTTP transport for web clients as well as users behind restricted firewalls. In the original specification, XMPP could use HTTP in two ways: polling and binding. The polling method, now deprecated, essentially implies messages stored on a server-side database are being fetched (and posted) regularly by an XMPP client by way of HTTP 'GET' and 'POST' requests. The binding method, implemented using Bidirectional-streams Over Synchronous HTTP (BOSH), allows servers to push messages to clients as soon as they are sent. This push model of notification is more efficient than polling, where many of the polls return no new data.

Because the client uses HTTP, most firewalls allow clients to fetch and post messages without any hindrances. Thus, in scenarios where the TCP port used by XMPP is blocked, a server can listen on the normal HTTP port and the traffic should pass without problems. Various websites let people sign into XMPP via a browser. Furthermore, there are open public servers that listen on standard http (port 80) and https (port 443) ports, and hence allow connections from behind most firewalls. However, the IANA-registered port for BOSH is actually 5280, not 80.

Extensibility

The XMPP Standards Foundation or XSF (formerly the Jabber Software Foundation) is active in developing open XMPP extensions, so called XEP. However, extensions can also be defined by any individual, software project, or organization. To maintain interoperability, common extensions are managed by the XSF. XMPP applications beyond IM include: chat rooms, network management, content syndication, collaboration tools, file sharing, gaming, remote systems control and monitoring, geolocation, middleware and cloud computing, VoIP, and identity services.

Building on its capability to support discovery across local network domains, XMPP is well-suited for cloud computing where virtual machines, networks, and firewalls would otherwise present obstacles to alternative service discovery and presence-based solutions. Cloud computing and storage systems rely on various forms of communication over multiple levels, including not only messaging between systems to relay state but also the migration or distribution of larger objects, such as storage or virtual machines. Along with authentication and in-transit data protection, XMPP can be applied at a variety of levels and may prove ideal as an extensible middleware or Message-oriented middleware (MOM) protocol.

Current limitations

At the moment, XMPP does not support Quality of Service (QoS); assured delivery of messages has to be built on top of the XMPP layer. There are two XEPs proposed to deal with this issue, XEP-0184 Message delivery receipts which is currently a draft standard, and XEP-0333 Chat Markers which is considered experimental.

Since XML is text based, normal XMPP has a higher network overhead compared to purely binary solutions. This issue was being addressed by the experimental XEP-0322: Efficient XML Interchange (EXI) Format, where XML is serialized in an efficient binary manner, especially in schema-informed mode. This XEP is currently deferred.

In-band binary data transfer is limited. Binary data must be first base64 encoded before it can be transmitted in-band. Therefore, any significant amount of binary data (e.g., file transfers) is best transmitted out-of-band, using in-band messages to coordinate. The best example of this is the Jingle XMPP Extension Protocol, XEP-0166.

Features

File transfer options in a chat in Conversations, an XMPP client for Android

Peer-to-peer sessions

Using the extension called Jingle, XMPP can provide an open means to support machine-to-machine or peer-to-peer communications across a diverse set of networks. This feature is mainly used for IP telephony (VoIP).

Multi-user chat

XMPP supports conferences with multiple users, using the specification Multi-User Chat (MUC) (XEP-0045). From the point of view of a normal user, it is comparable to Internet Relay Chat (IRC).

Security and encryption

XMPP servers can be isolated (e.g., on a company intranet), and secure authentication (SASL) and point-to-point encryption (TLS) have been built into the core XMPP specifications.

Off-the-Record Messaging (OTR) is an extension of XMPP enabling encryption of messages and data. It has since been replaced by a better extension, multi-end-to-multi-end encryption (OMEMO, XEP-0384) end-to-end encryption between users. This gives a higher level of security, by encrypting all data from the source client and decrypting again at the target client; the server operator cannot decrypt the data they are forwarding.

Messages can also be encrypted with OpenPGP, for example with the software Gajim.

Service discovery

While several service discovery protocols exist today (such as zeroconf or the Service Location Protocol), XMPP provides a solid base for the discovery of services residing locally or across a network, and the availability of these services (via presence information), as specified by XEP-0030 DISCO.

Connecting to other protocols

Alice sends a message through the XMPP net to the ICQ transport. The message is next routed to Bob via the ICQ network.

One of the original design goals of the early Jabber open-source community was enabling users to connect to multiple instant messaging systems (especially non-XMPP systems) through a single client application. This was done through entities called transports or gateways to other instant messaging protocols like ICQ, AIM or Yahoo Messenger, but also to protocols such as SMS, IRC or email. Unlike multi-protocol clients, XMPP provides this access at the server level by communicating via special gateway services running alongside an XMPP server. Any user can "register" with one of these gateways by providing the information needed to log on to that network, and can then communicate with users of that network as though they were XMPP users. Thus, such gateways function as client proxies (the gateway authenticates on the user's behalf on the non-XMPP service). As a result, any client that fully supports XMPP can access any network with a gateway without extra code in the client, and without the need for the client to have direct access to the Internet. However, the client proxy model may violate terms of service on the protocol used (although such terms of service are not legally enforceable in several countries) and also requires the user to send their IM username and password to the third-party site that operates the transport (which may raise privacy and security concerns).

Another type of gateway is a server-to-server gateway, which enables a non-XMPP server deployment to connect to native XMPP servers using the built in interdomain federation features of XMPP. Such server-to-server gateways are offered by several enterprise IM software products, including:

Software

XMPP is implemented by many clients, servers, and code libraries. These implementations are provided under a variety of software licenses.

Servers

Numerous XMPP server software exist, some well known ones include ejabberd and Prosody.

Modern clients

Buddy list and a multi-user chat in Spark

A large number of XMPP client software exist on various modern and legacy platforms, including both graphical and command line based clients. According to the XMPP website, some of the most popular software include Conversations and Quicksy (Android), Dino (BSD, Windows, Unix, Linux), Converse.js (web browser, Linux, Windows, macOS), Gajim (Windows, Linux), Monal (macOS, iOS), and Swift.IM (macOS, Windows, Linux). Lately, Monal has been forked as a Quicksy release for iOS.

Other clients include: Bombus, ChatSecure, Coccinella, Miranda NG, Pidgin, Psi, Tkabber, Trillian, and Xabber.

Deployment and distribution

There are thousands of XMPP servers worldwide, many public ones as well as private individuals or organizations running their own servers without commercial intent. Numerous websites show a list of public XMPP servers where users may register at (for example on the XMPP.net website).

Several large public IM services natively use or used XMPP, including LiveJournal's "LJ Talk", Nimbuzz, and HipChat. Various hosting services, such as DreamHost, enable hosting customers to choose XMPP services alongside more traditional web and email services. Specialized XMPP hosting services also exist in form of cloud so that domain owners need not directly run their own XMPP servers, including Cisco Webex Connect, Chrome.pl, Flosoft.biz, i-pobox.net, and hosted.im.

XMPP is also used in deployments of non-IM services, including smart grid systems such as demand response applications, message-oriented middleware, and as a replacement for SMS to provide text messaging on many smartphone clients.

Non-native deployments

Some of the largest messaging providers use, or have been using, various forms of XMPP based protocols in their backend systems without necessarily exposing this fact to their end users. One example is Google, which in August 2005 introduced Google Talk, a combination VoIP and IM system that uses XMPP for instant messaging and as a base for a voice and file transfer signaling protocol called Jingle. The initial launch did not include server-to-server communications; Google enabled that feature on January 17, 2006. Google later added video functionality to Google Talk, also using the Jingle protocol for signaling. In May 2013, Google announced XMPP compatibility would be dropped from Google Talk for server-to-server federation, although it would retain client-to-server support. Google Talk has since been dropped from Google's line of products.

In January 2008, AOL introduced experimental XMPP support for its AOL Instant Messenger (AIM) service, allowing AIM users to communicate using XMPP. However, in March 2008, this service was discontinued. As of May 2011, AOL offers limited XMPP support.

In February 2010, the social-networking site Facebook opened up its chat feature to third-party applications via XMPP. Some functionality was unavailable through XMPP, and support was dropped in April 2014. Similarly, in December 2011, Microsoft released an XMPP interface to its Microsoft Messenger service. Skype, its de facto successor, also provided limited XMPP support. Apache Wave is another example.

XMPP is the de facto standard for private chat in gaming related platforms such as Origin, and PlayStation, as well as the now discontinued Xfire and Raptr. Two notable exceptions are Steam and Xbox LIVE; both use their own proprietary messaging protocols.

History and development

Jabber logo

Jeremie Miller began working on the Jabber technology in 1998 and released the first version of the jabberd server on January 4, 1999. The early Jabber community focused on open-source software, mainly the jabberd server, but its major outcome proved to be the development of the XMPP protocol.

The Internet Engineering Task Force (IETF) formed an XMPP working group in 2002 to formalize the core protocols as an IETF instant messaging and presence technology. The early Jabber protocol, as developed in 1999 and 2000, formed the basis for XMPP as published in RFC 3920 and RFC 3921 in October 2004 (the primary changes during formalization by the IETF's XMPP Working Group were the addition of TLS for channel encryption and SASL for authentication). The XMPP Working group also produced specifications RFC 3922 and RFC 3923. In 2011, RFC 3920 and RFC 3921 were superseded by RFC 6120 and RFC 6121 respectively, with RFC 6122 specifying the XMPP address format. In 2015, RFC 6122 was superseded by RFC 7622. In addition to these core protocols standardized at the IETF, the XMPP Standards Foundation (formerly the Jabber Software Foundation) is active in developing open XMPP extensions.

The first IM service based on XMPP was Jabber.org, which has operated continuously and offered free accounts since 1999. From 1999 until February 2006, the service used jabberd as its server software, at which time it migrated to ejabberd (both of which are free software application servers). In January 2010, the service migrated to the proprietary M-Link server software produced by Isode Ltd.

In September 2008, Cisco Systems acquired Jabber, Inc., the creators of the commercial product Jabber XCP.

The XMPP Standards Foundation (XSF) develops and publishes extensions to XMPP through a standards process centered on XMPP Extension Protocols (XEPs, previously known as Jabber Enhancement Proposals - JEPs). The following extensions are in especially wide use:

  • Data Forms
  • Service Discovery
  • Multi-User Chat
  • Publish-Subscribe and Personal Eventing Protocol
  • XHTML-IM
  • File Transfer
  • Entity Capabilities
  • HTTP Binding
  • Jingle for voice and video

Internet of Things

XMPP features such as federation across domains, publish/subscribe, authentication and its security even for mobile endpoints are being used to implement the Internet of Things. Several XMPP extensions are part of the experimental implementation: Efficient XML Interchange (EXI) Format; Sensor Data; Provisioning; Control; Concentrators; Discovery.

These efforts are documented on a page in the XMPP wiki dedicated to Internet of Things and the XMPP IoT mailing list.

Specifications and standards

The IETF XMPP working group has produced a series of Request for Comments (RFC) documents:

  • RFC 3920 (superseded by RFC 6120)
  • RFC 3921 (superseded by RFC 6121)
  • RFC 3922
  • RFC 3923
  • RFC 4622 (superseded by RFC 5122)
  • RFC 4854
  • RFC 4979
  • RFC 6122 (superseded by RFC 7622)

The most important and most widely implemented of these specifications are:

  • RFC 6120, Extensible Messaging and Presence Protocol (XMPP): Core, which describes client–server messaging using two open-ended XML streams. XML streams consist of <presence/>, <message/> and <iq/> (info/query). A connection is authenticated with Simple Authentication and Security Layer (SASL) and encrypted with Transport Layer Security (TLS).
  • RFC 6121, Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence describes instant messaging (IM), the most common application of XMPP.
  • RFC 7622, Extensible Messaging and Presence Protocol (XMPP): Address Format describes the rules for XMPP addresses, also called JabberIDs or JIDs. Currently JIDs use PRECIS (as defined in RFC 7564) for handling of Unicode characters outside the ASCII range.

Competing standards

XMPP has often been regarded as a competitor to SIMPLE, based on Session Initiation Protocol (SIP), as the standard protocol for instant messaging and presence notification.

The XMPP extension for multi-user chat can be seen as a competitor to IRC, although IRC is far simpler, has far fewer features, and is far more widely used.

The XMPP extensions for publish–subscribe provide many of the same features as the Advanced Message Queuing Protocol (AMQP).

See also

References

  1. "Jabber Inc". Cisco.com. Retrieved November 24, 2012.
  2. Johansson, Leif (April 18, 2005). "XMPP as MOM - Greater NOrdic MIddleware Symposium (GNOMIS)" (PDF). Oslo: University of Stockholm. Archived from the original (PDF) on May 10, 2011.
  3. Saint-Andre, P. (March 2011). Extensible Messaging and Presence Protocol (XMPP): Core. IETF. doi:10.17487/RFC6120. RFC 6120. Retrieved May 4, 2014.
  4. "Jabber Instant Messaging User Base Surpasses ICQ" (Press release). XMPP Standards Foundation. September 22, 2003. Archived from the original on November 3, 2007. Retrieved November 30, 2007.
  5. XMPP Standards Foundation (October 3, 2003). ""XEP-0029: Definition of Jabber Identifiers (JIDs)"". Extensible Messaging and Presence Protocol. Retrieved November 10, 2019.
  6. RFC 6122
  7. "Extensible Messaging and Presence Protocol (XMPP): Core". xmpp.org. Retrieved September 21, 2023.
  8. Joe Hildebrand; Craig Kaes; David Waite (June 3, 2009). "XEP-0025: Jabber HTTP Polling". Xmpp.org. Retrieved November 24, 2012.
  9. ^ Ian Paterson; Dave Smith; Peter Saint-Andre; Jack Moffitt (July 2, 2010). "XEP-0124: Bidirectional-streams Over Synchronous HTTP ([BOSH])". Xmpp.org. Retrieved November 24, 2012.
  10. "Specifications". xmpp.org. XSF. p. 1. Retrieved January 6, 2017.
  11. ^ "XEP-0030: Service Discovery". xmpp.org. October 3, 2017.
  12. "Lotus Sametime 7.5 Interoperates with AIM, Google Talk", eWeek, December 6, 2006 Eweek.com
  13. "Lotus ships gateway to integrate IM with AOL, Yahoo, Google", Network World, December 6, 2006 Networkworld.com Archived November 1, 2008, at the Wayback Machine
  14. "Unified Communications: Uniting Communication Across Different Networks", Microsoft Press Release, October 1, 2009 Microsoft.com Archived January 5, 2010, at the Wayback Machine
  15. "Clients". xmpp.org.
  16. ^ "XMPP Software". XMPP Org. Retrieved September 19, 2024.
  17. "Question FAQ #270-What is LJ Talk?". Livejournal.com. September 27, 2010. Retrieved November 24, 2012.
  18. "XMPP Messaging Protocol Reference". www.sent.dm. December 25, 2024. Retrieved December 25, 2024.{{cite web}}: CS1 maint: url-status (link)
  19. Rémond, Mickaël (February 23, 2014). "Whatsapp, Facebook, Erlang and realtime messaging: It all started with ejabberd". ProcessOne — Blog. Retrieved September 17, 2020.
  20. Burd, Gary (January 17, 2006). "XMPP Federation". Retrieved November 30, 2007.
  21. "How do I allow my internal XMPP client or server to connect to the Talk service?". support.google.com.
  22. Jensen, Florian (January 17, 2008). "AOL adopting XMPP aka Jabber". Archived from the original on January 20, 2008. Retrieved January 17, 2008.
  23. "AOL XMPP Gateway". May 14, 2011. Archived from the original on May 22, 2011. Retrieved May 14, 2011.
  24. "Facebook Chat Now Available Everywhere". Retrieved February 11, 2010.
  25. "Chat API (deprecated)". Retrieved July 5, 2015.
  26. Obasanjo, Dare (December 14, 2011). "Anyone can build a Messenger client—with open standards access via XMPP". Windowsteamblog.com. Retrieved November 24, 2012.
  27. Roettgers, Janko (June 28, 2011). "Skype adds XMPP support, IM interoperability next? — Tech News and Analysis". Gigaom.com. Retrieved November 24, 2012.
  28. "Google Wave Federation Protocol". Archived from the original on March 4, 2016.
  29. "Origin game platform sends login and messages in plain-text". Slight Future. June 30, 2015. Retrieved February 22, 2016.
  30. "Raptr is dead. No more Gaming Evolved a year after AMD ditch the app". Pcgamesn.com. September 13, 2017. Retrieved October 16, 2020.
  31. "libsteam.c". Github. Retrieved February 22, 2016.
  32. "Open Real Time Messaging System". Tech.slashdot.org. January 4, 1999. Retrieved November 24, 2012.
  33. Marcel Gagné (March 1, 2003). "Chatting Up the Chef". Linux Journal.
  34. "Jabber.org – XMPP Server Migration". August 12, 2009. Archived from the original on December 13, 2009. Retrieved December 14, 2009.
  35. "Cisco Announces Definitive Agreement to Acquire Jabber". Archived from the original on December 23, 2009. Retrieved January 2, 2010.
  36. "XEP-0004: Data Forms". xmpp.org. June 8, 2021.
  37. ^ "XEP-0045: Multi-User Chat". xmpp.org. March 4, 2021.
  38. ^ "XEP-0060: Publish-Subscribe". xmpp.org. September 7, 2021.
  39. "XEP-0163: Personal Eventing Protocol". xmpp.org. March 18, 2018.
  40. "XEP-0071: XHTML-IM". xmpp.org. March 8, 2018.
  41. "XEP-0096: SI File Transfer". xmpp.org. November 29, 2017.
  42. "XEP-0115: Entity Capabilities". xmpp.org. May 5, 2020.
  43. "XEP-0322: Efficient XML Interchange (EXI) Format". xmpp.org. January 25, 2018.
  44. "XEP-0323: Internet of Things - Sensor Data". xmpp.org. May 20, 2017.
  45. "XEP-0324: Internet of Things - Provisioning". xmpp.org. March 4, 2021.
  46. "XEP-0325: Internet of Things - Control". xmpp.org. March 4, 2021.
  47. "XEP-0326: Internet of Things - Concentrators". xmpp.org. May 20, 2017.
  48. "XEP-0347: Internet of Things - Discovery". xmpp.org. November 3, 2018.
  49. "Tech pages/IoT systems". xmpp.org.
  50. "IOT Info Page". jabber.org.
  51. "XMPP rises to face SIMPLE standard", Infoworld magazine, April 17, 2003 XMPP rises to face SIMPLE standard
  52. "XMPP vs SIMPLE: The race for messaging standards", Infoworld magazine, May 23, 2003 Infoworld.com

External links

Uniform Resource Identifier (URI) schemes
Official
Unofficial
Protocol list
Instant messaging
Protocols
(comparison)
Open
Closed
Services
Clients
(comparison)
Single protocol
Multi-protocol
XMPP (Jabber)
MSNP
Defunct
Related
Categories: