After trying XMPP for months and unable to make it work on slow network, we decided to write a new protocol on mqtt. We loved XMPP for it's extensibility and the protocol completely mimics XMPP - chat, chatstates, client-state indiciation.
Just the namespaces are replaced by MQTT topics and with wildcards clients are really lightweight.
Advantages: 1. Streaming Binary instead XML (XMPP have exi so it can be fixed). 2. Super easy to implement. Just took us a day to implement to port most of the functionality from XMPP. 3. Just like XMPP it's infinitely extendible. Wanted to add a new packet type is just adding a provider and registering it to manager (to all those who worked with Smack - will feel at home). 4. Out of the box support for Webrtc - audio and video calls.
Here is the protocol - https://github.com/bangarharshit/Mqtt-chat and here is a proof of concept - https://github.com/DrawersApp/Node-Sdk/tree/mqtt/src . We are polishing the SDK and will be releasing the android sdk, java client, node client and server support - emqttd in the next few weeks.
One more thing we didn't like about XMPP was the time it takes for an XEP to go from draft to implementation (sometimes in years). We are trying to create an echo-system on git itself, where we can bring it down to days (or at-least weeks/months). Please submit feature requests on Github as an issue, propose a solution (or let it be proposed by community), quickly implement it and test it out.
Feel free to cut an issue for any discussion.
Thanks, Harshit