XMPP in the Field: Open Messaging That Works
A working photographer's field notes on Jabber and XMPP: what the protocol does, how to pick a client, and where to run your own server.

What does XMPP actually do that other messengers do not?
Jabber, now standardized as XMPP, is an open messaging protocol built on XML streams and defined in the RFC series. It lets two people exchange messages across different servers without either side owning the network. For a photographer, that means one address that works from a phone in the field, a laptop in the studio, and a server you control. XMPP is a federated protocol. Your account lives on a server, identified by a JID that looks like an email address: name@domain. When you send a message, your server routes it to the recipient's server. Neither server has to be run by the same company, and neither has to be running the same software. The protocol defines three stanza types: message, presence, and IQ. Message carries the content. Presence carries availability, so the network knows whether you are online, away, or offline. IQ, short for info/query, handles requests and responses: roster management, service discovery, authentication steps. Everything travels as XML over a long-lived stream, usually over TLS. That design has consequences a photographer will notice. Presence is explicit, so you can appear offline while still receiving messages, which is useful when you are shooting and do not want a client thread lighting up your lock screen. Rosters are server-side, so your contact list follows your account rather than your device. And because the protocol is documented in public RFCs, any client can implement it. You are not waiting for one vendor to ship a feature. The tradeoff is real. Federation means someone has to run a server, and that someone may be you. Group chat, file transfer, and end-to-end encryption are handled by extensions rather than the core protocol, so two clients can both claim XMPP support and behave differently. Check what your client actually implements before you promise a client a workflow.
How do you choose a client without wasting a week?
The honest answer: start with the constraints of your phone, not the feature list of your desktop app. On mobile, the hard problem is background delivery. A phone that aggressively kills background processes will drop messages unless the client uses push notifications, which on Android and iOS means a push service sitting between your server and your device. Some clients handle this well, some do not, and the difference shows up as messages arriving hours late or not at all. Test this before you commit. Send yourself a message, lock the phone for an hour, and see what happens. On desktop, the field is wider. You want a client that supports OMEMO if you are discussing client work, because that is the end-to-end encryption extension most widely implemented. You want clear handling of multiple accounts, since you may keep a personal JID and a studio JID. You want a roster that syncs, and you want to be able to see the raw XML when something misbehaves, because that view tells you whether the problem is yours. A reasonable approach is to run two clients for a week: one on the phone, one on the laptop, both pointed at the same account. Note where they disagree. That gap is the real cost of the setup, and it is better to find it before a shoot than during one.
What changes when you run your own server?
Running a server gives you control over retention, domain, and uptime. It also gives you a new category of problem. The common choices are ejabberd, Prosody, and Openfire. They differ in language, configuration style, and how much they assume you already know. Prosody is often described as the easiest to start with because its configuration file is short and readable. ejabberd is built for scale and has a long operational history. Openfire ships with an admin interface that some people find faster to work with than a text file. Whichever you pick, two things will decide whether it works: DNS and TLS. You need the right SRV records so other servers can find yours, and you need a valid certificate so the connection is encrypted and clients do not refuse it. Get those wrong and everything else is irrelevant. Get them right and the server mostly disappears into the background, which is the goal. One more consideration: federation is a two-way street. Your server talks to the wider network, and the wider network talks to yours. If you are running this for a small studio, decide early who can register and whether you want to allow server-to-server traffic from anywhere. The defaults are usually reasonable, but they are defaults, not decisions.
Where does the history fit in?
The Jabber project predates the smartphone era. It started as an open messaging system, went through a standardization process, and the core specifications were published as RFCs in 2004. The name Jabber is a trademark with its own ownership history, which is why the protocol is formally called XMPP while the older name persists in conversation. Extensions live in the XEP series, which is how the protocol grows without breaking what already works. OMEMO, multi-user chat, and the newer MIX work for group conversations all arrived this way. If you have ever wondered why two XMPP clients can feel like different products, the XEP list is the answer: they implement different subsets. There is also a directory tradition. The JabberPowered badges date to 2003 and come with their own license and usage conditions, which is a reminder that this network has been maintained by volunteers for a long time. That history is not nostalgia. It explains why the ecosystem values interoperability over polish, and why a client that works today may be unmaintained tomorrow.
What should you test before trusting it with a client?
Run a short checklist. Send a message from your phone to your laptop with the phone on cellular data and the laptop on a different network. Confirm the message arrives and that the timestamp is sane. Send a file and see whether it transfers directly or through a server, because the two behave differently on a slow connection. Start a group chat with three accounts and confirm everyone sees everyone. Turn on encryption and verify it is actually on, not just offered. Then do the boring test: leave it alone for a week. Federation problems often show up as intermittent failures, not clean breaks. If a message goes missing once, note the time and the two JIDs involved. That record is what you need to debug it.
The practical takeaway
XMPP is not a drop-in replacement for the messenger your clients already use. It is a different arrangement: an address you own, a protocol documented in public, and a set of tradeoffs you choose rather than inherit. For a photographer, the useful version is small. One JID, two clients, a server you understand, and a tested path for the messages that matter. Everything else is optional, and most of it can wait until you actually need it.
The practical reason to care is not ideology. It is that a message thread between you and a client, or between you and an assistant on location, should not depend on which app store approved which build this month. XMPP separates the address from the client, the way email does. You can change apps without changing who you are. If you want the protocol explained from the wire format up, including how a session opens and how the three stanza types fit together, the editorial guide at the open messaging protocol walks through it in plain English. That matters when something breaks at 6 a.m. and you need to know whether the problem is your client, your server, or the DNS record you set six months ago.


