XMPP (Jabber): Surprisingly Better Than It Used To Be

tl;dr version: Jabber (now known as XMPP) is way better than it used to be. It's super simple to set up an account, set up a decent modern Android or Linux client, and do text, voice and video(!!!) chat, and send files, and even do desktop remoting. And even host your own server if you like. So I'm back on the service: add me as adamw AT happyassassin DOT net (self-hosting FTW!) if you like.

So if you're anything like me, you may have used/tried Jabber for a bit back in the day, found it a bit over-complicated or awkward or buggy, not really had much use for it, and then stopped thinking about it for a long time.

Well, I was on vacation and wanted to meet up with Bochecha. The proprietary-but-popular-and-easy messaging service of choice with my friends is WhatsApp, so I was mostly using that for messaging to avoid paying SMS fees. Turns out, though, there's no WhatsApp for the Palm(!) phone bochecha runs. Stymied!

Look, I said, we're geeks, we can figure this out, and fairly quickly realized, hey, Jabber...er...sorry...it's called XMPP now...would be the geeky way to do it. So we did. bochecha sent me his ID, which is on the talkr.im server. I found none of my old accounts still worked, so I thought hey, I'll use what he's using.

First Modern Day XMPP surprise: modern Jabber providers are good! At least, talkr.im is pretty no-nonsense. (I think they're the same people who write ejabberd). You go to their perfectly decent site, enter a user ID and a password, and in about ten seconds you have an account. Well, that was painless.

Ah, but that's only half the battle, I thought. Now I have to fight with my XMPP client. Surely that'll suck as much as I remember.

Second Modern Day XMPP Surprise: they stopped making the setup so damn unnecessarily complex!

A bit of Googling suggested that Xabber is a nice open source Android client, and guess what, it actually is. I installed that, told it my ID and password and nothing else, and it actually successfully connected to the server. On the first try. I nearly fell off the bus.

Pushing my luck to its limits, I added bochecha's account to my contact list, and wrote a message to him. And sent it. And he sent one back to me. And it worked!

So...yeah, XMPP is still this incredibly open-ended protocol with all sorts of neat capabilities and features and extensions and whatknot, but you can also just use it to 'text' someone with about as simple a setup as is possible without tying your account to your phone number, and it all actually works and doesn't fall over or break in weird ways. Offline message delivery works. Typing notification works. Statuses work. This is surely not news to anyone who stuck with things, but when you last tried this stuff in like 2002 or something, it comes as a welcome and novel experience.

So this evening I decided to push my luck yet further, with continuing amazingly positive results.

I set myself up an XMPP server. In about ten minutes. It worked, second try (after I figured out there was some permissions problem with the TLS key, but that's pretty small beer). yum install prosody, poke at the config file for three minutes, set up port forwarding and firewalls for ports 5222 and 5269, and...it worked. I can send messages from my talkr account to my newly-created account right here at happyassassin.net.

I can also, and I really did nearly fall out of my freaking chair when this worked first time, sign into the talkr.im account on my laptop and the happyassassin.net account on my desktop and do a video chat between them. Using Empathy. And it worked, first time. And the sound worked. And it didn't fall over mysteriously half way through, or fail when I tried again. I imagine you can run into codec issues trying to talk to people using non-Linux-y clients, but holy moley, just working right out of the box between Fedora 19 and Fedora 20 is a hell of a lot better than I remember just about all my historic video calling attempts being. (It doesn't seem to work in F18, for me; something crashes as soon as you try to initiate or answer a voice/video call). There doesn't appear to be a stable Android client with support for the video/voice stuff (which is called Jingle) yet, but apparently the Android port of Jitsi which is currently available as unstable, unsupported nightlies can do it; I'll try that in a bit.

So yeah. If you're like me and you haven't tried XMPP for a long time you might want to give it another shot. It is actually kind of awesome now. Two minutes creating an account and adding it to empathy and you can video chat (and, of course, audio chat and plain old boring normal chat) with anyone else who spends two minutes doing the same thing. If you're a personal server nerd like me you can also set up your own federated server in like ten minutes, but there's not much reason to unless you think all public servers might be evil or you just want to have your Jabber ID match your personally-hosted email ID. Which is pretty damn cool. Mine does, now: I'm adamw AT happyassassin DOT net for XMPP as well as email. ;) Next stop, SIP?

edit: just tested, and you can also do remote desktop and file sharing. And, again, they both work. It's like the future!


Eric Mesa wrote on 2013-09-18 09:56:
Sounds pretty awesome. I wonder if that has to do with Google and Facebook using XMPP for their chat? (Although Google is supposedly moving to something proprietary) How much bandwidth do you use when chatting?
Matěj Cepl wrote on 2013-09-18 12:02:
And for the weird among us ... Loqui (https://loqui.im/) took over all two of us who use Firefox OS like storm. It works like a charm.
Syam Krishnan wrote on 2013-09-18 14:22:
Which XMPP server did you install on your server/network?
adamw wrote on 2013-09-18 15:38:
Eric: it does have quite a lot to do with Google, yes, as I understand it; Jingle is basically what Google was using for GTalk, AIUI. You can apparently interoperate with GTalk users if you have an h.264 codec installed. And yes, sadly, after pushing a lot of this stuff for a while, Google is moving to a completely proprietary platform and rebranding basically all its chat stuff as Hangouts. Facebook I think comes more under the heading of just 'using' XMPP. (For those who don't know, Facebook messaging is just XMPP; you can use any XMPP client to do Facebook messages. Their server is not federated though, meaning you have to have a Facebook account to use it, you can't send messages to/from Facebook users with any other XMPP service.) mcepl: thanks for the tip! If I ever do go Firefox OS, I'll remember it. syam: prosody. ejabberd seems to be the 'standard' choice but it looks a bit more complex to set up than prosody, and its dependencies in Fedora are currently ridiculous due to how erlang packaging is set up: https://bugzilla.redhat.com/show_bug.cgi?id=784693 - 'yum install ejabberd' on a minimal Fedora pulls in nearly a hundred packages including two(!) graphical toolkits.
kparal wrote on 2013-09-18 19:01:
In Jabber protocol (or most common implementations, I don't know) I'm really missing: a) server-side history b) functional heartbeat (so that you don't lose messages if you don't log out properly and don't appear to be online for another 10 minutes) c) multiuser chat without using a server room Otherwise, of course, Jabber is the way to go. Always has been. PS: I had no idea Jabber supports remote desktop, very interesting.
Peter Saint-Andre wrote on 2013-09-18 21:42:
@ Syam, he mentioned that he's running the Prosody server (as I am for my personal server). Very easy to install and run. Visit https://prosody.im/ for details. Highly recommended.
Peter Saint-Andre wrote on 2013-09-18 21:45:
@ kparal, there are definitely specs for server-side history and the heartbeat / reliability stuff, see http://xmpp.org/extensions/xep-0313.html and http://xmpp.org/extensions/xep-0198.html respectively (implementations are slowly appearing, and I know Prosody supports those on the server side). Multiuser chat without a reflector on the server is a bit more dicey, although we've had discussions about that in the past, see http://xmpp.org/extensions/inbox/private-muc.html for some ideas in that direction.