Introducing Tinder, an XMPP object implementation library

We’ve just released a new project, named Tinder. Tinder is a new Java based XMPP library, providing an implementation for XMPP stanzas and components.

Tinders origins lie in code that’s shared between Jive Software’s Openfire and Whack implementations. The implementation that’s provided in Tinder hasn’t been written again from scratch. Instead, code has been moved from the original projects into Tinder, preserving al of the existing features and functionality. Most of the code that’s now in Tinder is based on the org.xmpp package implementation that previously existed in Openfire and Whack. This is the code that defines classes such as Packet, JID, IQ, Component and their extensions. Additionally, some multi-purpose code (such as the DataForm and Result Set Management implementations have been moved to Tinder as well.

Why a new project?

Parts of the code of Openfire are useful in other contexts than that of an XMPP server implementation. Developers might, for instance, want to use the XMPP stanza implementation within other projects. Having to include Openfire as a dependency of such a project is quite a bit of overkill. In such an example, it would be useful to have a small project that you can include, that offers you a lightweight XMPP object implementation, without the rest of the features that Openfire offers. Enter Tinder. Tinder will allow developers to re-use parts of Openfire, without having to include Openfire itself.

There’s other benefits to Tinder though:

Tinder will replace some most of the duplicate code that’s currently shared in Openfire, Whack and ConnectionManager projects. Removing duplicate code will make it easier to maintain and develop these projects. By delegating the implementation and maintenance of the low-level XMPP implementation, Openfire, Whack and other developers will be able to focus on the development that adds value to their project.

On the flip-side of that medal, you can argue that the ‘core’ code that will make up Tinder deserves a bit of dedicated development attention (unit tests, bug-tracking, stuff like that). This would benefit any attempt to really fine-tune the code, for example for high-performance tuning. Currently, the code is a bit put in the shadows of the other projects (of which they are part of).

So, will this replace Smack (the library that provides the base of Spark)?

No, definitely not. Smack offers a full-fledged XMPP client implementation, while Tinder only defines some XMPP building blocks. Tinder provides some basic objects on which a client library such as Smack could be build. However, Smack does not share the same code base as Openfire and Whack do. It’s therefor unlikely that Tinder and Smack will be merged in the foreseeable future - there’s simply to much difference.

What’s next?

We’ve wrapped up a initial roadmap, in which we capture the first steps of the development of Tinder. As always, you’re invited to contribute. We’re looking forward to hear your suggestions, thoughts and ideas. If you’re interested, you can find more information on the new Tinder-related community space and project page that have been opened on IgniteRealtime.org.

This sound interesting, but I will really love this new project lead to be able to share org.jivesoftware.smack.packet.PacketExtension (smack) and org.xmpp.packet.PacketExtension (whack), the same with how both libraries implements and register and PacketExtensionProvider, one of them using DOM4J and the other using XPP

This wil be helpful for us because we use both libs, on the client side and server side, and it is a shame we need to implement each PacketExtension two times

Congratulations, Nice and Clean Idea!

This story might shed a light.

I discovered this project today http://sourceforge.net/projects/xws4j/, its LGPL, so maybe it should be the focus of our attention instead.

Tinder is now released under Apache 2 license (see TINDER-33 or Tinder 1.2.0 release notes).

I am a little confused in all of these libraries - Smack, Tinder, Whack…

Do you have future plans to combine them into a single hierarchy?

WTF? Could use it to swipe right?