A beginner's guide to XMPP speak
· in instant messaging
XMPP guides and client settings use a lot of short names and numbers. This glossary explains the XMPP terms you are likely to meet when you set up a server or pick a client, and says why each one matters in practice.
The basics: XMPP, servers and addresses
XMPP
The Extensible Messaging and Presence Protocol. It is an open standard for chat, published by the IETF as RFC 6120 (the core) and RFC 6121 (messaging and contacts). Anyone can write software that speaks it, so there is no single XMPP app or company.
Jabber
The original name of the protocol and its network. People still say "Jabber ID" or "Jabber server", and they mean the same thing as XMPP.
Server
The program that holds accounts, stores contact lists and passes messages on. Prosody and ejabberd are two common XMPP servers. A server serves one or more domains, such as example.org. If you want to run one, the Prosody setup guide covers it.
Client
The app you chat in, such as Conversations on Android or Gajim on a computer. The client guide compares the current ones.
Federation
Servers talking to each other, so a user on one server can message a user on another, the way email works between providers. Clients connect to their own server on port 5222, and servers connect to each other on port 5269. If you run a server at home, other servers reach it on port 5269.
JID (Jabber ID)
An XMPP address. It looks like an email address: alice@example.org. The part before the @ is the localpart (the user name), and the part after it is the domain. RFC 7622 defines the format. Some clients call it a "chat address".
Resource
An extra part after a slash that names one connected device or app: alice@example.org/phone. Each device you log in from gets its own resource, which is how one account can be online on a phone and a laptop at the same time.
Bare JID and full JID
A bare JID is the address without the resource (alice@example.org). A full JID includes it (alice@example.org/phone). You give people your bare JID; the full JID only matters when software needs to reach one specific device.
Contacts and online status
Roster
Your contact list. It is stored on your server, not on your device, so every client you log in with sees the same contacts. RFC 6121 defines it.
Presence
Your online status, such as available, away, do not disturb or offline, with an optional status message. Your server sends your presence to the contacts allowed to see it.
Presence subscription
Permission for a contact to see your presence. When you add someone, you ask to subscribe to their presence, and they approve or decline. A mutual subscription also helps encrypted chat, because clients use it to find each other's encryption keys. If you are still deciding whether XMPP is right for you, the comparison with WhatsApp, Signal and Matrix covers what your server can and can't see.
Group chats
MUC (multi-user chat)
A group chat room, defined in XEP-0045. A room has its own address, such as garden@rooms.example.org, and usually lives on a separate service of the server. Clients often just call it a "group chat" or "channel".
Nickname
The name you use inside one room. It can differ from your account name and from room to room.
Affiliation and role
The two sets of rights in a MUC room. Affiliation is lasting (owner, admin, member, outcast, which means banned). Role applies to the current visit (moderator, participant, visitor) and decides who may speak or remove others.
Public and private rooms
A public room is listed and open to anyone. A private, members-only room only admits people on its member list. End-to-end encrypted group chat with OMEMO needs a private room in which members can see each other's real addresses.
MIX
Mediated Information eXchange (XEP-0369), a proposed successor to MUC. It is still at Experimental status, and the common clients and servers use MUC for group chats.
RFCs, XEPs and compliance
RFC
A standard published by the IETF. The XMPP core is in RFCs 6120, 6121 and 7622.
XEP (XMPP Extension Protocol)
A numbered document that adds one feature to XMPP, such as file upload or message history. The XMPP Standards Foundation publishes them, and XEP-0001 describes the process. When a client or server lists "supported XEPs", this is what it means.
XEP status
Each XEP carries a status. Experimental means it is still being worked out and may change. Stable means the XMPP Council has approved it and it is safe to build on; some lists still show this status by its older name, Draft. Final means it is finished. Deferred means it has had no recent activity. Status does not tell you how widely a XEP is used: push notifications (XEP-0357) are Deferred and OMEMO (XEP-0384) is Experimental, yet Conversations and Monal both support them.
Compliance suites
XEPs that list which other XEPs a client or server should support for a given use, such as mobile chat. The most recent is XEP-0479 (Compliance Suites 2023). The Conversations compliance tester checks a live server against a similar list.
Service discovery (disco)
How a client asks a server what it supports (XEP-0030). This is what a client reads when it shows you "server info".
Features that make chat work on a phone
A phone switches networks, sleeps and loses its connection often. These extensions make that invisible. If your server lacks one of them, the symptom is usually missed messages or notifications that don't arrive.
Carbons
Message Carbons (XEP-0280) send a copy of every message to all your online devices, including messages you sent from another device. Without carbons, a chat you answer on your laptop looks unanswered on your phone.
MAM (message archive management)
Server-side message history (XEP-0313). The server keeps your messages for a time you configure, and a client that was offline fetches what it missed. It is also how a new device gets your recent history.
Stream management
XEP-0198 lets a client resume a dropped connection quickly and makes sure no message gets lost in between. It matters most on mobile data.
Push notifications
XEP-0357 lets the server wake a sleeping phone app when a message arrives. On Android and iPhone this goes through an app server run by the client's developers and then through Google's or Apple's push service. In the Conversations app, the push message is only a wake-up signal with no content. In Prosody the server side is mod_cloud_notify; in ejabberd it is mod_push.
CSI (client state indication)
XEP-0352 lets a client tell the server when the app is in the background, so the server can hold back unimportant traffic such as status changes and save battery.
HTTP file upload
XEP-0363 is how pictures and files are shared. The client uploads the file to a web address the server provides and sends the link. The recipient can download it later, even if the sender is offline. The server needs disk space for these files and a limit on their size.
PEP (personal eventing protocol)
A small store on your account where clients publish data for your contacts, such as your avatar or your OMEMO keys (XEP-0163). OMEMO doesn't work without it.
Bookmarks
Your saved list of group chats, stored on the server so every client joins the same rooms (XEP-0402).
Encryption
TLS (transport encryption)
Encryption of the connection between your client and your server, and between servers. It stops anyone on the network from reading messages in transit, but each server can read messages it handles. Your server needs a valid certificate for its domain.
End-to-end encryption (E2EE)
Encryption on the sender's device that only the recipient's devices can undo. Servers pass the message on but can't read it.
OMEMO
The end-to-end encryption that most current XMPP clients use (XEP-0384). It works with several devices per person and when the contact is offline. The specification says it does not protect against metadata and traffic analysis, so your server still sees who you talk to and when.
Fingerprint
A short code that identifies one device's encryption key. Comparing fingerprints with a contact, in person or by scanning a QR code, proves that the key belongs to them.
BTBV (blind trust before verification)
A trust policy used by Conversations and other clients. New keys are trusted automatically until you verify one of a contact's keys by fingerprint. After that, only verified keys are trusted.
OpenPGP and OX
Older and alternative ways to encrypt XMPP messages with PGP keys. OX is the newer OpenPGP for XMPP. They are less common than OMEMO; Profanity supports both.
OTR (off-the-record)
An older end-to-end encryption scheme for one-to-one chats. A few clients still support it, among them monocles chat and Profanity.
Calls
Jingle
The XMPP way of setting up a direct session between two devices (XEP-0166), used for audio and video calls (XEP-0167) and for some file transfers. The call itself travels between the devices, not through the XMPP server.
STUN and TURN
Helpers for calls between devices behind home routers or mobile networks. A STUN server tells a device its public address. A TURN server relays the call when the devices can't reach each other directly. coturn is a common TURN server, and the audio and video calls guide sets it up.
External service discovery
XEP-0215 lets the XMPP server hand clients the address and temporary login for its STUN and TURN service, so users don't have to configure them.
Server add-ons
Module
A plug-in that adds a feature to the server. In Prosody, most XEPs above are modules you switch on in the configuration, such as mod_mam for message history.
Component
A separate program that connects to the server and handles its own subdomain, using the component protocol (XEP-0114). Group chat services, file upload services and gateways are often run as components.
Gateway (transport or bridge)
A component that connects XMPP to another network, such as SMS, IRC or another chat service, so you can reach those users from your XMPP client. XEP-0100 describes how clients register with one. Cheogram on Android is built around gateways to phone numbers.
In-band registration
Creating an account from inside a client (XEP-0077). Public servers often allow it. On a home server it is usually safer to turn it off and create accounts yourself, so strangers can't sign up.
Frequently asked questions
What is a JID in XMPP?
A JID, or Jabber ID, is an XMPP address such as alice@example.org. A version with a slash and a device name after it, such as alice@example.org/phone, is a full JID and points to one logged-in device.
Is Jabber the same as XMPP?
Yes. Jabber is the original name of the protocol and network, and XMPP is the name of the open standard.
What does XEP stand for?
XEP stands for XMPP Extension Protocol. Each XEP is a numbered document from the XMPP Standards Foundation that adds one feature, such as file upload or message history.
What is MUC in XMPP?
MUC means multi-user chat, the group chat rooms defined in XEP-0045. Each room has its own address and usually runs on a separate service of the server.
What is the difference between MAM and carbons?
Carbons copy each message to all your devices that are online right now. MAM stores messages on the server so a device that was offline can fetch what it missed.
Does OMEMO hide who I talk to?
No. OMEMO encrypts the content of messages, but the XEP-0384 specification says it does not protect against metadata and traffic analysis, so your server still sees who you talk to and when.
Sources
- RFC 6120: XMPP Core
- RFC 6121: XMPP Instant Messaging and Presence
- RFC 7622: XMPP Address Format
- XMPP Extensions (XEP list with statuses)
- XMPP wiki: Usability glossary
- XEP-0384: OMEMO Encryption
- Conversations README (push notifications, OMEMO requirements)
- Blind Trust Before Verification
- Prosody modules documentation