Songs of Doom

Kevin Smith's homepage

Revealing Stroke to the world

It’s time to reveal the latest project I’ve been working on to the world and, just to prove that XMPP isn’t all of my life, it’s…an XMPP library.

Stroke is a native Java port of the Swiften XMPP library that Remko and I work on. It came about because Isode (my day job) needed an XMPP library for use in a Java project and none of the alternatives at the time seemed to be suitable, so I’ve been spending some of my work days over the last while porting Swiften. Isode have decided to open-source Stroke and I’ve uploaded the development repository to alongside the Swift and Swiften code.

Stroke’s now in a basic usable state but I’m still working on adding some of the basic necessary features. Particularly, at this stage, it’s lacking in:

  • TLS support.

  • zlib compression support.

  • Many (most?) of the protocol payload handling that its big brother Swiften has.

I intend to address these as time allows.

On the other hand, it’s already inherited some of the nice features that Swiften has, particularly:

  • Support for the SCRAM-SHA1 authentication mechanism (a mandatory feature for XMPP, these days).

  • XEP-0198 stanza acknowledgement support (for reliable messaging).

If you’d like to grab a copy to have a look at, experiment with or just follow development of, head over to

If you’d like to chat about Stroke (or Swiften, or Swift), we’ve got a chat room and a mailing list, linked from our Discussion Page and I’d love to hear from you.

The primary license is the GPL v3, although alternative licensing may be arranged for Stroke (and for Swiften). Contact Us.

Swift 1.0 Release Candidate

A bit under a month since the last beta was released, Swift has reached Release Candidate stage for 1.0. This version is being released to check that each i is dotted and each t crossed, so please report any bugs/issues that you find, and in the absence of problems we’ll aim to release the final builds soon.

The release notes are available at and the changelog since beta9 is:

  • Added Spanish and Catalan translation (Thanks to Jan Kusanagi)

  • Added Russian translation (Thanks to Ivan Tyumentsev)

  • Added German translation (Thanks to Thilo Cestonaro)

  • Fixed a bug where the avatar was not updating in the chat window.

  • Fixed typo in room join message.

  • Fixed a potential hang on shutdown on Mac OS X.

  • Fixed compilation on systems with a recent version of Boost installed.

  • Fixed the last couple of remaining known crashes

Please test, and encourage friends, families and colleagues to do the same, and we’ll look forward to Swift 1.0.

Swift needs *you* for Google Summer of Code 2011

Just under 24 hours ago, the XMPP Standards Foundation were told that they’ve been accepted for Google’s Summer of Code 2011. A healthy chunk of Swift projects are within the ideas the XSF are proposing this summer, and we’re looking forward to the opportunity to involve more people in what is, for Remko and me, a very enjoyable pastime. So if you’re a student, please visit our chat room or our mailing list and see if we can discuss ideas that excite you. If you know students who might be interested, please spread the word, and help make Swift’s first GSoC experience a great one.

Swift 1.0-beta9 released

We’ve just released the final pre-1.0 beta of Swift (next step Release Candidate). We have no known bugs in Swift at this point, so if you find any please report them so we can get them fixed for the RC.

A fuller changelog is available at, but the highlights include:

  • On servers that support it, users can now perform searches for contacts to add or chat to.
  • The roster header can now be configured to show the JID instead of the nick.
  • Server certificates are now verified and validated. Certificates not passing the tests require confirmation.
  • Added dialog changing your nickname and avatar.
  • Swift now uses SCRAM-SHA-1-PLUS authentication on servers that support it.
  • Highlighting an item in the login account list and pressing detele will now prompt you to remove the cached credentials for that account. (Thanks to Thilo Cestonaro)
  • Added keyboard accelerators for tabs and commands. (Thanks to Arnt Gulbrandsen)
  • Security labels (XEP-0258) support has been updated to match the latest version of the specification.
  • It is now possible to edit contacts from the standard menus (without needing to right-click on the item)
  • Fixed all known bugs.
  • Various speed improvements.
  • Various aesthetic improvements.
  • Added Dutch translation.

Please go forth and test:

See you in RC.

Swift-1.0beta7 released.

I’m pleased to announce the release of Swift-1.0beta7 (, with a long list of substantial changes since beta6:

  • Show popup notifications for incoming messages (and optionally, presence changes) through Growl (Mac OS X), Snarl (Windows), or FreeDesktop (Linux).

  • Acknowledge server receipt of sent messages (Demo).

  • Subsequent presence changes in the chat log are now combined to avoid clutter.

  • It’s now possible to rename contacts and groups.

  • It’s now possible to assign your contacts to groups.

  • It’s now possible to cancel a login in progress.

  • Whether roster groups are expanded or collapsed is now persisted between sessions.

  • Fixed a problem where multiple notices were selected when new ones were added.

  • The roster header will no longer show you with (No message) if you specify a message when you go offline.

  • Contacts will no longer show as ‘typing’ if you go offline before they’ve sent the message.

  • Fixed problems with the chat logs not properly scrolling to bottom.

  • Joining rooms when you are not plain ‘available’ now correctly sends your status to the room.

  • Being in a MUC with someone who has their role changed will no longer cause them to appear several times in the occupant list.

  • The Mac Dock icon has stopped jumping when it shouldn’t.

  • System and Presence messages in chat windows are now linkified (as well as chat messages, which were previously).

  • We now only show the system tray message icon for message events.

  • When reconnecting, we now try to reuse server-generated resources to avoid having multiple resources connected for the same client.

  • We now detect when we should use chat state notifications.

  • Fixed a problem where MUC discovery would loop when searching a server that has the same JID with different nodes.

  • The chat window now shows date changes.

  • Support creating new MUCs.

  • Display avatars for offline contacts.

  • Added “Clear” context menu for chat log.

  • Fixed a problem where the roster wasn’t refreshed properly on reconnect.

  • Display the user’s nickname at the top of the roster.

  • Fixed problems with certain LibXML versions failing on the vcard-temp namespace.

  • Various improvements for the Windows installer.

  • Fixed assorted memory leaks.

We’re now approaching feature-completeness for 1.0, and Swift is pretty much ready for day-to-day use, so testing and feedback would be very welcome - grab it now from

Older posts