XMPP
Extensible Messaging and Presence Protocol (XMPP) is an open, XML-based protocol originally aimed at near-real-time, extensible instant messaging (IM) and presence information (e.g., buddy lists), but now expanded into the broader realm of message oriented middleware. It remains the core protocol of the Jabber Instant Messaging and Presence technology. Built to be extensible, the protocol has been extended with features such as VOIP and file transfer signaling.
Unlike most instant messaging protocols, XMPP is an open standard. Like e-mail, it is an open system where anyone who has a domain name and a suitable Internet connection can run his own Jabber server and talk to users on other servers. The standard server implementations and many clients are also free and open source software.
The Internet Engineering Task Force (IETF) formed an XMPP Working Group in 2002 to formalize the core protocols as an IETF instant messaging and presence technology. The XMPP WG produced four specifications which were approved by the IESG as Proposed Standards in 2004. RFC 3920 and RFC 3921 are now undergoing revisions in preparation for advancing them to Draft Standard within the Internet Standards Process. The XMPP Standards Foundation (formerly the Jabber Software Foundation) is active in developing open XMPP extensions. However, no technology correctly implements the RFCs in full.
XMPP-based software is deployed on thousands of servers across the Internet and by 2003 was used by over ten million people worldwide, according to the XMPP Standards Foundation. Popular commercial servers include the Gizmo Project, Nimbuzz and Google Talk. Popular client applications include the freeware clients offered by Google, Nimbuzz and the Gizmo Project, multi-protocol instant messengers such as iChat and Pidgin (formerly Gaim), and free dedicated clients such as Psi and Gajim. Google Talk provides XMPP gateways to its service. Google Wave's federation protocol (GWFP) is an open extension to the XMPP protocol.
Contents
Choices of XMPP server
- Choice of XMPP server at MetaJack
- jabber2d
- ejabberd
- Strophe - a beautiful library for building XMPP applications in JavaScript
Interesting XMPP extensions supported by jabberd2
- XEP-0030: Service Discovery
- XEP-0048: Bookmarks
- XEP-0049: Private XML Storage
- XEP-0072: SOAP Over XMPP (not currently implemented by jabberd2)
- XEP-0079: Advanced Message Processing
- XEP-0083: Nested Roster Groups
- XEP-0114: Jabber Component Protocol
- XEP-0138: Stream Compression
- XEP-0145: Annotations
Extensions we'd like to develop
- Workflow: define processes and sequences, both human and computer (adding current work tree to contexts)
- Schedule: this may already be done: adding a "booking" aspect to contexts
- P2P: A peer-to-peer storage layer
- Objects: this is basically RA: types & instances with search, create, view, edit contexts
- Nodes: nodal model's class/instance structure incorporating workflow, axes, install/remove
XMPP & JavaScript
Strophe is a beautiful library for building XMPP applications in JavaScript (also available as a C library). It has a lot of nice features to help you build stanzas and respond to various event stanzas. It is built on top of the DOM, and unfortunately, the DOM is not always fun to work with. Luckily, we have an excellent DOM slicer and dicer that we can use alongside Strophe, the jQuery library.
- MetaJack - complete article
- drop.io's new real-time web-app - powered by Strophe
- Learn to Make XMPP Powered Web Apps at JSConf 2009
See also
- Wave - our high level document about integrating this technology into our direction
- XMPP extensions
- jabberd2 - the most complete implementation of the XMPP protocol and extensions written in C
- Internet Protocol Suite
- Chesspark Design Details - chesspark.com extends XMPP
- XMPP: Complexity vs Sophistication - metajack article
- XMPP is better with BOSH - metajack article