XMPP Client Daemon

Sunday, May 21, 2006 by darco
Posted in

There are many Jabber clients out there for just about every platform imaginable. This is often cited as one of the strengths of Jabber, but it does have serious drawbacks; namely end-user confusion and (for open-source projects)duplicated developer effort. I'm starting to think that the approach that nearly all Jabber clients take is sub-optimal.

One of the primary reasons people are hesitant to adopt 'yet another instant messaging network' is that no single Jabber client does everything that they want. In fact, many people will find themselves using multiple clients for this reason. I know I do. Why switch when none of the jabber clients out there have all of the features which you use with your legacy service?

I don't believe that there will ever be a do-it-all Jabber client—and if there were, I don't know if I would want to use it. The word "Bloated" comes to mind. Instead, I think the solution is to explicitly not create a do-it-all client, but to create a bare-bones jabber service that would provide jabber connectivity to programs which support it. The idea being that it is hard to write a full-featured client, but it is significantly easier to write a program which just provides one service or function.

When we go to set up a new program that uses the internet, we don't have to explicitly provide all of the log-in details for your ISP. You are either already connected to the internet or not, and all of your programs (in general) use the same internet connection. I think that this is the model we should start considering for XMPP. Have a program for instant messaging and roster management, have a program for whiteboards, Have a program for group chat, but they all use the same connection and API.

What I propose is that, on a desktop system, the individual jabber connections themselves should not be handled by the jabber client at all–they should be handled by some sort of Jabber daemon that would establish a single connection to their jabber server upon logging into the computer.


Apple's iChat already does something similar to this. The iChat program itself does not connect to any chat service directly–iChatAgent does. Programs which are designed to use the presence information for your contacts (like Address Book and Apple Mail) will still be able to report correct presence information even when iChat is closed*.

There are certainly a lot of things that would need to be taken into consideration for such a setup (such as security and API standardization), but I think that perhaps that will be the topic of another post on the subject.