Kaidan logo with text

What happened in 2019...

   Dec 31, 2019 • lnj

Another year of Kaidan development is over. Kaidan is still not usable for daily use, but we also got many things done and our vision of a simple and powerful Jabber/XMPP client for everyone came a good step closer. This is a summary of what we have done in this year.


In January not much happened in Kaidan itself, but Linus Jahn started to work on the MIX implementation in QXmpp, the XMPP library we are using. MIX stands for Mediated Information eXchange and is the upcoming modern groupchat extension for XMPP, replacing the old, IRC-like MUC (Multi-User Chat).

For details, have a look at the issue for MIX.


Plasma Mobile Sprint in Berlin

We were much more active in February, this is also because of the Plasma Mobile sprint in Berlin that Ilya Bizyaev, Jonah Brüchert and Linus Jahn attended.

The sprint week was in the end one of the, or even the most productive week for Kaidan in this year. Thanks to Endocode for hosting us!

Day and night at the Plasma Mobile sprint

View from the Plasma Mobile sprint at day and night (CC BY 4.0, Linus Jahn)

Qt Quick Compiler

Jonah Brüchert added support for building Kaidan using the Qt Quick Compiler which leads to no visual changes but an improved performance. This is worth mentioning, because this is also required for being accepted in the Apple App Store since they do not allow the usage of JIT compilers. The Qt Quick Compiler converts Kaidan’s QML code into binary code in advance.

Last Message Correction

Jonah Brüchert and Linus Jahn worked together on implementing the Last Message Correction extension, which allows you to (as the name suggests) send corrected versions of your last message. Previously, if someone corrected their message, the corrected message just appeared as a new message.


One advantage of free software is that you can share the code that somebody else has written already. Jonah Brüchert did that with the Spectral’s Emoji picker that he added to Kaidan.


At the one-week Plasma Mobile sprint Linus Jahn also worked on Kaidan’s back-end and added the functionality to download received files. Uploading was already implemented using HTTP File Upload. This was one essential missing point for the Kaidan 0.4 release.


Linus Jahn also did some experiments with MAM, the extension used for receiving messages from the server’s archive. MAM is also needed when you want to receive your offline messages and you have multiple devices in use. Fortunately MAM is already supported by QXmpp. While trying to use this, we noticed that Kaidan’s database back-end is blocking the user interface when inserting new messages. In practise this made Kaidan unusable when the message history is loaded. Upon that Linus Jahn started to rewrite the database back-end using different threads. (In the end we found out that the problem was not that the database is running in the same thread, but that the database was safely saved to disk after each message. However, having the database separated in a different thread is still a good thing.)


Consistent Color Generation

In March Linus Jahn implemented XEP-0392: Consistent Color Generation for generating user / contact colors that are consistent with all different XMPP clients and devices.

Jonah Brüchert could use that to replace our old fallback avatar image with proper text avatars. They contain the first two letters of the contact’s name and use the consistent user color as background.

Berlin XMPP Sprint

The Berlin XMPP sprint was (not like the Plasma Mobile Sprint) only a weekend long. It was very nice for us to finally meet many people known from the mailing lists and MUCs. At the sprint itself didn’t do much of coding and rather got to talking with the attendees.

One major feature was realized though, spoiler messages were implemented at the sprint by on of the co-authors of the XEP, Xavier Ferrer. That we were in direct contact at the sprint was very helpful here, so Linus Jahn could assist in the whole process.

Many other things that happened can be found in the blog post by our host, Tim Schrock from the DBJR.


In April we launched our website based on the design of the Falkon web browser. Posts for the old releases were added belated, so the website was not completely empty.

We also published a release candidate for Kaidan 0.4.

Jonah Brüchert worked on Windows builds using the cross-compilation toolchain MXE that could be added to our GitLab pipeline allowing us to have automated builds for every merge request and commit.


In May we introduced the new adapting settings page by Jonah Brüchert which is used on a new layer on mobile devices and inside of a sheet on desktop.

The first thing we used the settings for was the new change password dialog by Jonah Brüchert (user interface) and Linus Jahn (back end). It allows you to change the password of your account on the server now.

We also got two new contributors to Kaidan, Melvin Keskin and Germán Márquez Mejía (mancho) who later participanted in Kaidan and QXmpp.


Melvin Keskin improved the presence indicator by replacing the dot on the avatars by a vertical bar at the side of the contacts on the contacts page.

Jonah Brüchert added automated macOS builds using the cross-compilation toolchain osxcross.

The emoji picker was improved by Filipe Azevedo. He added an emoji search and a favourite emoji tab to it.

Linus Jahn and Melvin Keskin finished the database rewrite to solve the UI blocking problem.

The notifications were previously only added as a proof-of-concept using the libnotify-bin command in a shell. Linus Jahn replaced this by KNotifications. This allows us to have notifications on most of the platforms, currently missing iOS.


In July we finally released Kaidan 0.4, details about that can be found in the blog post.

Linus Jahn implemented XMPP URI parsing in Kaidan. This is important for us to read QR codes in the future, e.g. for OMEMO or to log in with an account.

QR code scanning was implemented by Linus Jahn and Melvin Keskin. It can be used to scan (currently not standardized) XMPP login QR codes, allowing a very fast account transfer to another device.

Robert Maerkisch implemented the new contacts search and notification muting for contacts under assistance from Linus Jahn.

Jonah Brüchert (UI), Linus Jahn (back end & UI) and Robert Maerkisch all worked together on the new VCard based profile page and also contact renaming.

Jonah Brüchert published Kaidan on the Flathub, so Kaidan (stable) can be easily used on all Linux distros providing flatpak.

Melvin Keskin and Linus Jahn started to work on the in-band registration in QXmpp and in Kaidan. Jonah Brüchert helped with UI designing.


Basically nothing happened in August. :’(


In September Linus Jahn became the new lead-developer of QXmpp, allowing us way faster progress there since the original author(s) are not very active anymore.


In October Volker Krause helped us to fix the Android builds with KNotifications. Volker was the one who implemented notifications for Android in KNotifications for KDE Itinerary.

On requests Linus Jahn added a secondary roster (contact list) sorting by contact name, so the contacts are at least not randomly sorted when logging in for the first time.


In November a new contributor, Yury Gubich (Blue), implemented a nice message search with animations.

Also, Filipe Azevedo’s huge multimedia recording branch could finally be merged after several months. You can now record images from your camera, voice and video, all in Kaidan. What’s also new are the previews in the chat for audio and video.


In December we did some refactoring and Melvin Keskin did some design improvements to the chat and other parts of Kaidan.

Linus Jahn and Melvin Keskin together with an iOS developer started to work on proper iOS support.


2019 was a great year, we got many new contributors and have implemented many features. Let’s see what we can do in the next year.