Report on the Dusseldorf XMPP sprint

| categories: xmpp, sprint, dusseldorf

Recently we held another XMPP sprint, this time in Dusseldorf at the Chaosdorf clubhouse.

We had 10 participants and an ambitious agenda with a long list of proposed topics to sprint on. We didn't get to work on everything, and we spent a considerable amount of time discussing and prioritizing the agenda. Some of the things not worked on can however easily be moved to future sprints.

After the sprint, iNPUTmice suggested that we consider having more focused sprints, for example focusing only on implementing XEP-369 MIX in clients and servers.

I think having a more focused, single-topic sprint is a great idea, and MIX is a good topic to tackle. AFAIK there's currently no FOSS MIX implementation for either clients or servers. IMO this can partly be attributed to a stalemate situation where everyone is waiting for someone else to make the first move. By organizing a sprint around it we can break the deadlock by starting to work on it together.


XEP-0283 <moved/> (pep., Ge0rG)

XEP-0283 provides a mechanism for informing your contacts that you're changed your account and now have a new JID.

pep. and Ge0rG had a discussion on how to automate the operation entirely.

Currently the security considerations contain a clause which to them defeats the point of the XEP:

"In order to prevent other users from maliciously altering contacts the client SHOULD NOT automatically subscribe to a <moved/> JID when it receives an unsubscribe and SHOULD NOT automatically unsubscribe to a <moved/> JID when it receives a subscribe."

Also the XEP uses presence stanza only, which makes the whole operation rather ephemeral.

The plan is to change the XEP to use PEP mostly.

Programming, documentation and various other tasks

iNPUTmice added two new tests to the compliance tester, one for MUC Avatars and a check for CORS Headers on HTTP Upload, which is especially important for webchat clients like Converse.

He also tried to fix a bug in Conversations that happens intermittently on Android 9.

MattJ worked on the 0.11 release of Prosody. He also worked on adding support for CORS in mod_http_upload.

pep. registered an XMPP assembly for 35C3. He also worked on the slixmpp OMEMO plugin and got decryption working. Additionally he and Link Mauve worked on a French translation of the Prosody release announcement.

Link Mauve worked on implementing Jingle in Converse, fixing bugs and updating strophe.jingle.js to not use jQuery. As part of this, he and I looked at better exception handling in Converse.

He also helped pep. and syndace with the slixmpp plugin interface and spent some time trying to deploy JSXC.

Roel worked on the article on how to configure a modern XMPP server. MattJ helped out on Sunday as well and AFAIK their collaboration also caused MattJ to add some clarifications and simplifications to the Prosody config file.

Roel and rtq3 also worked on a Spanish translation of the article.

Syndace worked on resurrecting a non-merged PR from Andy Straub for the OMEMO XEP which adds various changes to the XEP, including using an XML-based wire format. By choosing our own wire format, we also make permissive OSS licensed OMEMO implementations possible. Such a change will however not be backwards compatible with current OMEMO implementations.

Andy joined us on Sunday and participated in discussions around the PR and OMEMO in general with iNPUTmice, pep and Syndace.

Haeckse showed us a demo of Chatty, the chat (and SMS) client that she is working on for the upcoming Purism phone.

I worked on adding support for XEP-0156 to Converse, based on a PR from Link Mauve. The original PR was closed, due to being very old and difficult to merge, and work is now continuing in a branch with a new PR #1340.

I also made smaller fixes and changes, for example only rendering image URLs inline if they use HTTPS (to avoid mixed-content warnings in the browser).



Much thanks to Chaosdorf, for generously making their clubhouse available for the sprint.

Kuro even made some chilli for lunch and baked a cake!

In the evenings we went out to dinner. Dusseldorf has a large Japanese population, so we were quite keen to try out some Japanese food.

I had proper Ramen for the first time on Sunday night and on Saturday we had some great sushi.

Future sprints

A sprint can be measured by its output in the form of code, documentation, translations and so forth, but this only tells part of the story.

Much of what makes sprints valuable is the social aspect of making friends and working together on something you all care about.

One way to judge the success of the sprint, is to consider how excited the participants are about organising and attending future sprints.

Roel intends to organize a sprint in Brussels, around the time of the XMPP summit and FOSDEM. This sprint will focus on UI/UX issues and on finding a common user-facing terminology for XMPP clients. Roel comes from a design background and will be inviting some fellow like-minded designers to join.

Link Mauve indicated that he'd like to organize a sprint in Paris in 2019 and pep. thinks we should go to Sweden.

During our sprint we also found out that the Berlin XMPP Meetup group is considering organizing a sprint there soon.

Then there's also the upcoming 35C3, where there will be an XMPP assembly and the opportunity to hack together.

Thanks to everyone who joined the Dusseldorf sprint, some of whom spent a considerable sum of money in order to be there. I had a great time and am looking forward to more such events coming in 2019.

Come chat with us

We hang out in the XMPP-Sprint groupchat and this is also where upcoming XMPP sprints will be discussed and planned.

You can visit the webchat at or click on to open it in an installed client.


Dusseldorf XMPP Sprint, 16 and 17 January 2018