Running My Own XMPP Server

I Built My Own Chat Server—and the Internet Has Feelings

TLDR: A tinkerer built a personal XMPP chat server to escape reliance on one company, showing it can run with voice, files, and encryption. Comments split between praise for control, warnings about usability and adoption, and a spicy call‑out that Cloudflare and Let’s Encrypt are still third‑party dependencies.

A DIY rebel just ditched big messaging for a home‑grown chat server using old‑school XMPP and the lightweight Prosody app in Docker—complete with voice calls, file sharing, and end‑to‑end encryption. Think: your texts live on your own box, and servers talk to each other like email. It’s nerdy, yes, but the promise is no single company can pull the plug.

Cue drama. Fans cheered the “own your data” move—seba_dos1 flexed that their XMPP setup has run for a decade and “just works,” while throwing shade at Matrix for being a resource hog. But accessibility hit hard: skerit said even their husband bailed on Matrix because the apps were tough to use, reminding everyone that if your family can’t use it, it’s a museum piece. maltris confessed they quit self‑hosting when all the contacts drifted back to WhatsApp and friends—network effects remain undefeated.

Then came the plot twist: morning‑coffee poked the hornet’s nest asking, “Aren’t you still relying on Cloudflare and Let’s Encrypt?” Translation: escaping Signal’s single company only to lean on other companies for security certificates and DNS. iamcalledrob added a reality check: hosting chat is hard, and scaling beyond “C10K” (10,000 users) is a different beast—federation helps, but it’s not magic. The memes? “Self‑hosting is the new sourdough,” “Spend weekends renewing certs so mom can send stickers,” and “You didn’t leave Big Tech, you just became IT.”

Key Points

  • The article details setting up a self-hosted XMPP server using Prosody in Docker to enable federated messaging.
  • DNS configuration requires SRV records for client (5222) and server-to-server (5269) connections, plus A/CNAME records for main, upload, and conference subdomains.
  • TLS certificates are obtained via Let’s Encrypt using a Cloudflare DNS challenge, with commands, permissions, and a cron renewal process provided.
  • A Docker Compose file configures Prosody (image prosodyim/prosody:13.0), exposes necessary ports, and mounts configuration and certificates read-only.
  • Prosody modules enabled include core features and mobile/multi-device support (carbons, csi_simple, smacks, cloud_notify) to ensure reliable delivery and push notifications.

Hottest takes

"Aren't they in the same boat now with Cloudflare and Let's Encrypt?" — morning-coffee
"It just works, takes close to no resources and needs almost no maintenance" — seba_dos1
"Eventually I stopped because the contacts went away and it was just not easy enough to set up for ordinary people" — maltris
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.