A PLT scheme module for the XMPP or Jabber protocol
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.



A basic module for IM using the Jabber/XMPP protocol with PLT Scheme.

Protocol Support

Should eventually implement XMPP-Core and XMPP-IM to conform with RFCs 3920 and 3921. Progress toward supporting the full protocol is currently documented in the file xmpp.ss


(require (planet zzkt/xmpp))


It is necessary to establish a session with a Jabber server before sending any messages or presence updates. This can be done manually, or with the help of with-xmpp-session.


Once a session is established, the send function can be used to send messages, presence updates or queries.

(with-xmpp-session jid pass 
  (send (message "user@host" "some random message")))    		       

Where jid is the senders jid and pass is the password. A presence update can be sent as (send (presence #:status "garden path")) and queries are similar (send (iq #:type get))

Response Handlers

A handler can be registered to respond to 'message 'presence 'iq or 'other stanzas. Note that an 'iq handler will receive any error messages from the server

(set-xmpp-handler 'message print-message)

Example Chat Client

(require xmpp)

(define (read-input prompt)
  (display prompt)
  (read-line (current-input-port)))

(define (chat)
  (let ((jid  (read-input "jid: "))
        (pass (read-input "password: "))
        (to   (read-input "chat with: ")))
    (with-xmpp-session jid pass 
                       (set-xmpp-handler 'message print-message)
                       (let loop ()                         
                         (let ((msg (read-line (current-input-port))))
                           (send (message to msg))

possibly interesting extensions to implement.

see http://xmpp.org/extensions/

  • XEP-0047: In-Band Bytestreams
  • XEP-0066: Out of Band Data
  • XEP-0030: Service Discovery
  • XEP-0060: Publish-Subscribe
  • XEP-0045: Multi-User Chat
  • XEP-0149: Time Periods
  • XEP-0166: Jingle
  • XEP-0174: Serverless Messaging
  • XEP-0199: XMPP Ping
  • XEP-0224: Attention
  • XEP-0077: In-Band Registration