Also the desktop clients are garbage:
- Libpurple is such a lowest-common-denominator implementation that lots of features I expect from XMPP tend to just not work (maybe there's configuration buried somewhere in pidgin to make them work, but I haven't found them).
- Psi got abandoned and so has like a dozen forks, some of which sometimes work; and many of which look a bit sketchy
- Gajim is almost great. However its a plugin-based system and too few plugins are enabled by default, so out-of-the-box it doesn't work quite right.
- Dino is getting to the point where it is usable, but if history is any clue, it will be abandoned shortly.
There used to be some promising BOSH clients that could be served as static JS to make a usable web client, but they are quickly becoming out-of-date.