Skip to content
XMPP library for node.js
Find file
Pull request Compare This branch is even with node-xmpp:future.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



idiomatic XMPP library for node.js

Installation with npm

npm install node-xmpp


You like Strophe.js? You bought a copy of Professional XMPP Programming with JavaScript and jQuery? You even want to use the same XMPP code for the web and node.js? Then you're wrong here: go to xmppjs.

Objectives of node-xmpp:

  • Use node.js conventions, especially EventEmitter, ie. for write buffer control
  • Fast parsing, node-expat was written with this library in mind
  • Support for both XMPP clients and components
  • After authentication, leave trivial protocol bits to the user (later we could offer helpers for entity capabilities hashing, etc)


  • Client authentication with SASL DIGEST-MD5, PLAIN, ANONYMOUS
  • _xmpp-client._tcp SRV record support
  • Simple JID parsing
  • XML builder & serialization, xmlns-aware
  • Component connections



      │ net.Stream │
      │ Connection │
      │            │
┏━━━━━┷━━━━┓ ┏━━━━━┷━━━━━┓
┃  Client  ┃ ┃ Component ┃
┗━━━━━━━━━━┛ ┗━━━━━━━━━━━┛

That means you can use the TCP events of net.Stream with Client and Component objects. Other than that, hook callbacks to these events:

  • authFail, distinguished from error
  • online, when authentication is done and you can send XMPP stanzas (ie. <presence/>)
  • stanza for each incoming XMPP stanza, with the XML Element as parameter
  • error with the <stream:error/> as parameter

This foundation is complemented by two basic data structures:

  • JID: a Jabber-Id, represented as a triple of user, domain, resource
  • Element: any XML Element

Desires about the API? Propose them ASAP!

Building XML Elements

strophejs' XML Builder is very convenient for producing XMPP stanzas. node-xmpp includes it in a much more primitive way: the c(), cnode() and t() methods can be called on any Element object, returning the new child element.

This can be confusing: in the end, you will hold the last-added child until you use up(), a getter for the parent. Connection.send() first invokes tree() to retrieve the uppermost parent, the XMPP stanza, before sending it out the wire.


Something went wrong with that request. Please try again.