Communications protocol for message-oriented middleware
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 Jabber identifier (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
needs update
Federated Instant Messaging
edit
Although the protocol has other uses, the primary application is
Federated
Instant Messaging
, to deliver a standard
Instant Messaging and Presence Protocol
, outlined below.
A client Alice ("alice@example.com") has a message for some other user, Beth ("beth@example.com"), and uses XMPP to convey this to the example.com server. If Beth is online, the server delivers the message instantly, otherwise it will be held for delivery later. If Beth is offline, this status is visible to Alice.
If the message is for a user on another server, Charles ("charles@example.
net
"), then the example.
com
server connects using XMPP to pass the message to the example.
net
server. The message is then similarly delivered or held, and Alice is informed of the status.
Following the initial message delivery, the end clients are in a "chat" and each party is subsequently informed of changes to the other's status.
Client-to-Server XMPP and Server-to-Server XMPP
edit
The XMPP client communicates with the server over a TLS-encrypted TCP stream on port 5222. XMPP servers communicate with each other over a TLS-encrypted TCP stream on port 5269.
Protocol characteristics
edit
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.
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 underlying networks.
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
),
10
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. XMPP also supports using
WebSockets
to communicate to a server.
11
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.
The
XMPP Standards Foundation
or XSF (formerly the Jabber Software Foundation) is active in developing open XMPP extensions, so called
XEPs
12
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
edit
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. In most cases this is dealt with by using an attachment to a message and the widely implemented XEP-0363 HTTP File Upload mechanism. Voice and Video chat can be done via the
Jingle
XMPP Extension Protocol, XEP-0166.
File transfer options in a chat in
Conversations
, an XMPP client for Android
Peer-to-peer sessions
edit
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).
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
edit
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
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.
13
Connecting to other protocols
edit
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
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:
XMPP is implemented by many clients, servers, and code libraries.
17
These implementations are provided under a variety of software licenses.
Numerous XMPP server software exist, some well known ones include
ejabberd
and
Prosody
Main window of XMPP client
Gajim
18
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
, Cheogram, Monocles and Quicksy (
Android
), Dino (
BSD
Windows
Unix
Linux
), Converse.js (web browser,
Linux
Windows
macOS
),
18
Gajim
Windows
Linux
),
18
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
18
Pidgin
Psi
18
Tkabber
Trillian
, and
Xabber
Deployment and distribution
edit
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",
19
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.
The majority of these services are
Federated
– so that users of one service can communicate with users of another service.
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
edit
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.
20
21
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.
22
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.
23
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,
24
allowing AIM users to communicate using XMPP. However, in March 2008, this service was discontinued.
citation needed
As of May 2011, AOL offers limited XMPP support.
25
In February 2010, the social-networking site
opened up its
chat feature
to third-party applications via XMPP.
26
Some functionality was unavailable through XMPP, and support was dropped in April 2014.
27
In 2024, in response to EU
Digital Markets Act
Meta
were compelled to enable a higher degree of interoperability between their products
WhatsApp
and
Facebook Messenger
(both closed XMPP implementations) and other XMPP systems.
28
This describes a possible route for third parties to interoperate with Meta XMPP products, which is a much lower level of interoperability than true Federation.
Similarly, in December 2011, Microsoft released an XMPP interface to its
Microsoft Messenger service
29
Skype
, its de facto successor, also provided limited XMPP support.
30
Apache Wave
is another example.
31
XMPP is the
de facto standard
for private chat in gaming related platforms such as
Origin
32
and
PlayStation
, as well as the now discontinued
Xfire
and
Raptr
33
Two notable exceptions are
Steam
34
and
Xbox LIVE
; both use their own
proprietary
messaging protocols.
History and development
edit
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.
35
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,
18
which has operated continuously and offered free accounts since 1999.
36
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.
37
In September 2008,
Cisco Systems
acquired Jabber, Inc., the creators of the commercial product Jabber XCP.
38
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 or JEPs). The following extensions are in especially wide use:
Data Forms
39
Service Discovery
13
Multi-User Chat
40
Publish-Subscribe
41
and Personal Eventing Protocol
42
XHTML-IM
43
File Transfer
44
Entity Capabilities
45
HTTP Binding
10
Jingle
for voice and video
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;
46
Sensor Data;
47
Provisioning;
48
Control;
49
Concentrators;
50
Discovery.
51
These efforts are documented on a page in the XMPP wiki dedicated to Internet of Things
52
and the XMPP IoT mailing list.
53
Specifications and standards
edit
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 , and (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
edit
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.
54
55
The XMPP extension for multi-user chat
40
can be seen as a competitor to
IRC
, although IRC is far simpler, has far fewer features, and is far more widely used.
citation needed
The XMPP extensions for publish–subscribe
41
provide many of the same features as the
Advanced Message Queuing Protocol
(AMQP).
"Jabber Inc"
. Cisco.com
. Retrieved
November 24,
2012
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.
Saint-Andre, P. (March 2011).
Extensible Messaging and Presence Protocol (XMPP): Core
IETF
doi
10.17487/RFC6120
RFC
6120
. Retrieved
May 4,
2014
"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
"Use of Transport Layer Security (TLS) in the Extensible Messaging and Presence Protocol (XMPP) RFC 7590"
IETF
. Retrieved
January 4,
2026
XMPP Standards Foundation (October 3, 2003).
"XEP-0029: Definition of Jabber Identifiers (JIDs)"
Extensible Messaging and Presence Protocol
. Retrieved
November 10,
2019
RFC 6122
"Extensible Messaging and Presence Protocol (XMPP): Core"
xmpp.org
. Retrieved
September 21,
2023
Joe Hildebrand; Craig Kaes; David Waite (June 3, 2009).
"XEP-0025: Jabber HTTP Polling"
. Xmpp.org
. Retrieved
November 24,
2012
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
Stout, Lance; Moffitt, Jack; Cestari, Eric (October 2014).
An Extensible Messaging and Presence Protocol (XMPP) Subprotocol for WebSocket
(Report). Internet Engineering Task Force.
"Specifications"
xmpp.org
XSF
. p. 1
. Retrieved
January 6,
2017
"XEP-0030: Service Discovery"
xmpp.org
. October 3, 2017.
"Lotus Sametime 7.5 Interoperates with AIM, Google Talk", eWeek, December 6, 2006
Eweek.com
permanent dead link
"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
"Unified Communications: Uniting Communication Across Different Networks", Microsoft Press Release, October 1, 2009
Microsoft.com
Archived
January 5, 2010, at the
Wayback Machine
"Clients"
xmpp.org
"XMPP Software"
XMPP Org
. Retrieved
September 19,
2024
"Question FAQ #270-What is LJ Talk?"
. Livejournal.com. September 27, 2010
. Retrieved
November 24,
2012
"XMPP Messaging Protocol Reference"
www.sent.dm
. December 25, 2024. Archived from
the original
on December 25, 2024
. Retrieved
December 25,
2024
Rémond, Mickaël (February 23, 2014).
"Whatsapp, Facebook, Erlang and realtime messaging: It all started with ejabberd"
ProcessOne — Blog
. Retrieved
September 17,
2020
Burd, Gary (January 17, 2006).
"XMPP Federation"
. Retrieved
November 30,
2007
"How do I allow my internal XMPP client or server to connect to the Talk service?"
support.google.com
Jensen, Florian (January 17, 2008).
"AOL adopting XMPP aka Jabber"
. Archived from
the original
on January 20, 2008
. Retrieved
January 17,
2008
"AOL XMPP Gateway"
. May 14, 2011.
Archived
from the original on May 22, 2011
. Retrieved
May 14,
2011
"Facebook Chat Now Available Everywhere"
. Retrieved
February 11,
2010
"Chat API (deprecated)"
. Archived from
the original
on July 14, 2015
. Retrieved
July 5,
2015
Brouwer, Dick.
"Making messaging interoperability with third parties safe for users in Europe"
Engineering at Meta
. Meta Platforms
. Retrieved
March 24,
2026
Obasanjo, Dare (December 14, 2011).
"Anyone can build a Messenger client—with open standards access via XMPP"
. Windowsteamblog.com
. Retrieved
November 24,
2012
Roettgers, Janko (June 28, 2011).
"Skype adds XMPP support, IM interoperability next? — Tech News and Analysis"
. Gigaom.com. Archived from
the original
on June 29, 2011
. Retrieved
November 24,
2012
"Google Wave Federation Protocol"
. Archived from
the original
on March 4, 2016.
"Origin game platform sends login and messages in plain-text"
. Slight Future. June 30, 2015. Archived from
the original
on January 17, 2017
. Retrieved
February 22,
2016
"Raptr is dead. No more Gaming Evolved a year after AMD ditch the app"
. Pcgamesn.com. September 13, 2017
. Retrieved
October 16,
2020
"libsteam.c"
. Github
. Retrieved
February 22,
2016
"Open Real Time Messaging System"
. Tech.slashdot.org. January 4, 1999
. Retrieved
November 24,
2012
Marcel Gagné (March 1, 2003).
"Chatting Up the Chef"
Linux Journal
"Jabber.org – XMPP Server Migration"
. August 12, 2009. Archived from
the original
on December 13, 2009
. Retrieved
December 14,
2009
"Cisco Announces Definitive Agreement to Acquire Jabber"
. Archived from
the original
on December 23, 2009
. Retrieved
January 2,
2010
"XEP-0004: Data Forms"
xmpp.org
. June 8, 2021.
"XEP-0045: Multi-User Chat"
xmpp.org
. March 4, 2021.
"XEP-0060: Publish-Subscribe"
xmpp.org
. September 7, 2021.
"XEP-0163: Personal Eventing Protocol"
xmpp.org
. March 18, 2018.
"XEP-0071: XHTML-IM"
xmpp.org
. March 8, 2018.
"XEP-0096: SI File Transfer"
xmpp.org
. November 29, 2017.
"XEP-0115: Entity Capabilities"
xmpp.org
. May 5, 2020.
"XEP-0322: Efficient XML Interchange (EXI) Format"
xmpp.org
. January 25, 2018.
"XEP-0323: Internet of Things - Sensor Data"
xmpp.org
. May 20, 2017.
"XEP-0324: Internet of Things - Provisioning"
xmpp.org
. March 4, 2021.
"XEP-0325: Internet of Things - Control"
xmpp.org
. March 4, 2021.
"XEP-0326: Internet of Things - Concentrators"
xmpp.org
. May 20, 2017.
"XEP-0347: Internet of Things - Discovery"
xmpp.org
. November 3, 2018.
"Tech pages/IoT systems"
xmpp.org
"IOT Info Page"
jabber.org
. Archived from
the original
on June 30, 2014
. Retrieved
August 26,
2014
"XMPP rises to face SIMPLE standard", Infoworld magazine, April 17, 2003
XMPP rises to face SIMPLE standard
"XMPP vs SIMPLE: The race for messaging standards", Infoworld magazine, May 23, 2003
Infoworld.com