Pidgin
Pidgin is a multi-protocol IM client for Windows and *nix desktops (see Adium for Mac). Pidgin 2.x series is woefully crap in many technical ways, but mostly does what it says on the tin. Development on 2.x has been in maintenance mode since about 2011, and most dev effort is focused on the 3.0 branch, which is pretty much a ground-up rewrite.
Missing XMPP XEPs
XMPP support in Pidgin has been slow to adopt new shiny XMPP extensions (XEP). Tickets exist for them:
- XEP-0280: Message Carbons
- XEP-0313: Message Archive Management
- OMEMO chat encryption - Whisper Systems Axolotl over XEP-0163: Personal Eventing Protocol, see proposed XEP
Here are instructions on how to fix them.
XEP-0280: Message Carbons
There's now a Pidgin 2.x plugin.
XEP-0313: Message Archive Management
This is the bit that lets the server stash messages sent to you while you're offline, and the client to sync the history when next online, also like Hangouts. Especially useful for multiuser chatrooms. A patch potentially exists in the meantime. Pidgin 2.x is limited in its ability to store information on disk (unencrypted plain text, pretty much) which precludes implementing MAM without also implementing SQLite databases and so on.
XEP-384: OMEMO Encryption
There's now a Pidgin 2.x plugin.
Facebook, Hangouts, and Steam
These protocols used to be XMPP-based, but because nobody seems to understand how to implement it properly, and the XEP standards body can't be bothered progressing draft standards that have been in use for years, they have been replaced by proprietary protocols, and there are now plugins for them for libpurple:
- Facebook Messenger protocol, based on a 2015 Google Summer of Code project.
- Google Hangouts, protocol, also based on 2015 GSoC.
- Steam, based on Valve's Open Steamworks API.
These just involve running make and lobbing the .so into your ~/.purple/plugins directory; see their respective README files for installation instructions. You will need Google protobuffers and GLib JSON libraries too:
sudo apt-get install libprotobuf-c1 libjson-glib-1.0-0