Extensible Messaging and Presence Protocol (XMPP) is a messaging protocol that supports the instant transmission of data between distributed systems in real-time. It’s an open-source and extensible protocol based on XML (Extensible Markup Language) for message-oriented middleware, making the exchange of XML fragments possible between any two network endpoints.
As an open-source protocol, XMPP utilizes an open systems approach of development and application, by which anyone may implement an XMPP service and interoperate with other implementations. The open protocol systems permit any developer to develop multiple implementations using many clients, servers, server components, and code libraries under a variety of software licenses.
As an extensible middleware protocol, XMPP supports asynchronous messaging, pub/sub systems, signalling for VoIP, video, file transfer, gaming, and Internet of Things (IoT) applications including the smart grid and social networking services.
XMPP was released on January 4, 1999 by Jeremie Miller as an instant communication protocol. The earliest version of XMPP was developed by the JSF open-source community and was originally named ‘’Jabber Protocol’’. During Jabber’s early development period, attention was focused on developing an open-source, decentralized alternative to the closed instant-messaging services. However, XMPP ultimately became a protocol for message-oriented middleware that supports the real-time transmission of structured yet extensible data between distributed systems.
Over the years, XMPP has undergone various improvements and extensions. Its base protocols have been formalized by the Internet Engineering Task Force (IETF) – the international standards organization. Click through to read more about the history of XMPP.
Today, XMPP is used by General, Mendix, Vidyo, Contus Fly, GIST, Topical Core, and Zangi, among others.
XMPP is based on a decentralized client-server architecture. In this architecture, clients don’t communicate directly with each other; instead, there’s a decentralized server acting as the intermediary between them. XMPP network shares a similar architectural design with email servers — there’s no central master server, and anyone can run their own XMPP server.
XMPP allocates an XMPP address (JabberID) to every client on the XMPP network. This address works just like a standard email address with an IP address/domain name, an optional node, and a username for the resident server.
In a simple XMPP architecture consisting of a server and two clients, a client with a unique name communicates through an associated XMPP server with another client using a unique name. Each client on the XMPP network implements the client form of the protocol with the XMPP server providing routing capability. The architecture may include XMPP gateways which are often used to translate between foreign messaging domains and IM protocols. The XMPP gateways permit the termination of a given client-to-server session as well as the initiation of a new client-to-server session to the target endpoint protocol, along with the necessary protocol translation.
In a more complex XMPP architecture, there can be several domains (servers and clients) and an XMPP internet with XMPP gateways acting as a link among different endpoint protocols. For instance, in the figure below, an XMPP network with gateways is used to provide universal connectivity between a Short Message Service (SMS) domain and a Simple Mail Transfer Protocol (SMTP). In this context, XMPP gateways are also used to translate between IM protocols.
Multiple levels of security are built into the core XMPP specifications. It uses Simple Authentication and Security Layer (SASL) for secure connection authentication and data security in Internet protocols. XMPP also utilizes two types of encryption: point-to-point encryption (TLS) and multi-end-to-end encryption (OMEMO).
XMPP is based on XML and developers can thus build custom functionality on top of the XMPP core protocols. Due to XML’s extensibility, developers can build up applications beyond instant messaging (IM) such as group chat, voice over IP, identity service (like OpenID & OAuth), online gaming, file sharing, network management, geolocation, content syndication, and more.
XMPP uses the Transmission Control Protocol (TCP) as its original and ‘’native’’ transport protocol for web applications and firewalls. However, in some cases there are restricted firewalls and the XMPP’s TCP port is blocked. Clients can then use an HTTP transport also developed by the XMPP community to overcome this issue.
✔ Open standard instant messaging protocols
✔ Utilizes a decentralized client-server architecture
✔ Secure protocols via SASL, TLS, and OMEMO
✔ Supports HTTP transport protocol
✔ Supports multiple implementations with non-XMPP protocols
Building realtime apps with Flutter and WebSockets: client-side considerations
Learn about the many challenges of implementing a dependable client-side WebSocket solution for Flutter apps.
Building realtime apps with Ruby and WebSockets
Learn about the many challenges of implementing a dependable client-side WebSocket solution in Ruby to provide realtime data.
WebSockets and Android apps - client-side considerations
Learn about the many challenges of implementing a dependable client-side WebSocket solution for Android.