Running Your Own XMPP in 2026: Privacy, Federation, and Actually Working Calls

You can move your chats to a privacy friendly app and still end up with the same fragile dependency: one company, one service, one set of terms that can change overnight. Self hosting is not automatically safer, but it does change the failure mode. Instead of “a platform banned my account” it becomes “my server is down” which is a problem you can measure, fix, and own.
A recent walkthrough on running Prosody in Docker is a good reminder that modern XMPP is not the clunky experience many of us remember from the 2000s. With the right server modules, sane DNS, and a TURN server for media, you can get a setup that supports multi device sync, push notifications, file sharing, group chats, and end to end encryption.
The Core Insight

The core lesson is not “install Prosody.” It is that the quality of a federated messaging experience is mostly determined by three integration layers:
1) Discovery and trust (DNS SRV, TLS, and server to server policy)
2) Reliability for mobile networks (Stream Management, carbons, push)
3) Real time media traversal (TURN and correct networking)
If any one layer is missing, users conclude the protocol is broken even if the rest of the stack is fine.
Layer 1: Discovery and trust is table stakes
XMPP federation depends on other servers being able to locate and authenticate yours. SRV records are not optional trivia; they are the control plane. Likewise, strict TLS settings are a product decision. If you require encrypted server to server connections and reject weak configurations, you will lose connectivity with some poorly maintained servers, but you also avoid quietly downgrading your privacy goals to accommodate strangers.
A pragmatic approach is to start strict, measure federation failures, and only relax settings when you have a specific partner server you care about. “Compatible with everyone” often means “compatible with the lowest common denominator.” For messaging, that can be a security smell.
Layer 2: The mobile experience is a module checklist
Many self hosted services fail not because the core server is unstable, but because mobile clients live in hostile conditions: roaming, backgrounded apps, power saving, intermittent connectivity. Prosody modules like these are not garnish:
- Message Carbons: keep multiple devices in sync
- Stream Management (XEP-0198): avoid message loss on flaky connections
- Push notifications: let the phone sleep without missing messages
- MAM (Message Archive Management): searchable history and catch up
This is where XMPP’s maturity shows. The protocol is old, but the ecosystem has evolved to handle modern client constraints.
Layer 3: Calls require TURN, and TURN requires reality
If you want voice and video calls to work across NATs, you need STUN and TURN. In practice, that usually means running coturn and wiring it to your XMPP server so credentials are minted automatically.
The painful part is that TURN is extremely sensitive to networking details. The original article calls out a key point: running TURN in Docker with standard port mapping often fails, and host networking is simpler because TURN needs direct access to interfaces and predictable ports. This is also why firewall rules matter more for calls than for text.
If your goal is “calls just work,” treat TURN as its own product with monitoring, rate limits, and a clear cost model. TURN relays media, so bandwidth can spike.
Why This Matters

Federated messaging is having a quiet comeback because the internet is re learning an old lesson: centralization is convenient until it is not.
For builders, XMPP is an underrated platform for three reasons:
- It has decades of protocol hardening and a huge set of extensions.
- It supports a spectrum of ownership models: self host, community host, or managed host.
- It composes well with other self hosted infrastructure (reverse proxies, ACME, observability).
For teams building AI assisted workflows, a self hosted messaging backbone can be more than chat. It can become an event bus with human in the loop approvals, alerts, and audit trails. The difference is trust. A workflow bot that posts sensitive incident context to a third party SaaS is often a non starter for security teams.
Key Takeaways
- Federation is a feature, but it is also a constraint. Start strict on TLS and adjust intentionally.
- “Good XMPP” is mostly about mobile reliability modules: carbons, Stream Management, push, and MAM.
- If you want voice and video, budget time for TURN. It is not optional, and it is not plug and play.
- End to end encryption is a client side habit. OMEMO is only effective if users keep it on.
- Treat file uploads as storage management. Set size limits and retention to avoid surprise disk bills.
Looking Ahead
Self hosting messaging in 2026 is less about nostalgia and more about resilience. The next frontier is operational ergonomics: one click upgrades, better compliance testing, and default secure configurations that do not require a protocol historian to understand.
If you are considering this as a weekend project, the most actionable advice is to define your success criteria up front:
- Do you need federation, or is a private server enough?
- Do you need calls, or is async voice messaging sufficient?
- Do you need compliance scores, or do you just need a working setup for a small group?
Then build the smallest configuration that meets those needs, and add complexity only when it buys real user experience.
Sources
- Running My Own XMPP Server (Prosody, coturn, DNS, TLS, OMEMO)
https://blog.dmcc.io/journal/xmpp-turn-stun-coturn-prosody/
Based on analysis of Running My Own XMPP Server (Prosody, coturn, DNS, TLS, OMEMO) https://blog.dmcc.io/journal/xmpp-turn-stun-coturn-prosody/