AI Art generated from the prompt 'A new release of dav-xmpp-sync, version 1.2.0, that allows for group synchronization between and XMPP server getting SMS messages from and a CardDav server'

Years ago, I migrated from Google Voice over to a Voice/SMS service called Jmp.Chat. I host my address book using Radicale, an open source CardDav/CalDav server. In order to synchronize contacts between the two, I wrote dav-xmpp-sync, a Python application for CardDav to XMPP synchronization. It’s worked fairly well for a while. I recently did some maintenance: updating dependencies and adding support for SMS/Text groups. The v1.2.0 release is available via a Docker image, and is fully backwards compatible with the previous release.

The biggest new feature of v1.2 is the addition of SMS group display name synchronization. Previously, dav-xmpp-sync wouldn’t touch the display names for group text messages. would display them as a comma separated list of phone numbers; e.g +15551112222, Due to maintaining backwards compatibility, you must manually set include_group_chats to True in the sync section of the dav-xmpp-sync configuration file. With this feature enabled, the display names for groups are changed to coma separated lists of contact names.

Screenshot of logs from group chat display name update
Screenshot of logs from group chat display name update

If you want to preserve a custom name for a SMS group, simply edit the display name and prefix it with a custom title in brackets, e.g. [Baseball Group] .... The name in brackets will be preserved on synchronizations, while individual names will be updated if they’ve change in your address book.

Changelog for dav-xmpp-sync v1.2.0:

  • Display name for groups support added
  • Adjusted namespaces to be consistent
  • XMPP module cleanup and additional testing
  • Improved build logging
  • Updated dependencies
  • Updated Python Docker image to 3.11


Properly labeling group conversations has been on the roadmap for a while. I was encouraged to start working on it again after someone contacted me about an issue they had getting dav-xmpp-sync to connect to Snikket. It turns out the issue had to do with Snikket requiring authentication mechanisms such as SCRAM-SHA-1. Currently the underlying XMPP python library I use only supports PLAIN or MD5 for SASL authentication1. There has been an open issue for supporting newer schemes for several years2.

Although I updated the dependencies, I was only able to update the Docker container to Python 3.11. xmpppy still uses ssl.wrap_socket, which was deprecated in Python 3.7 and removed in Python 3.123.

The recent group chat support is slightly incomplete. It only adjusts display names for group chats that are in your XMPP roster. This will include chats you create, but doesn’t include group SMS texts others have you included you in. I’m not sure if it’s possible to get these chats via the xmpppy library due to the nature of how the XMPP protocol works. Even trying to add these chats to my roster using XMPP clients often results in an error.

I’d like to change the sync mode of dav-xmpp-sync to keep the XMPP connection open, and handle adjusting display names for incoming SMS messages and group texts. It might also be beneficial to implement assigning a default XMPP group for group texts. Although I have made small contributions to the xmpppy library in the past, I’m not sure if I’m ready to tackle attempting to add SCRAM-SHA-1 support. This release included a lot of additional tests, in case I attempt to use another XMPP library.


dav-xmpp-sync is a small project that’s served me well. It doesn’t do anything huge. It’s just a script for people trying to take back control of how their text and voice communications work. Yet, it seems to have a decent amount of users and even a few contributors.

  1. xmpppy/xmpp/ at master line 162. Retrieved 11 May 2024 

  2. SCRAM-SHA-1-(PLUS) + SCRAM-SHA-256(-PLUS) + SCRAM-SHA-512(-PLUS) supports #32. 30 March 2020. Neustradamus. xmpppy/xmpppy. Github. 

  3. What’s New In Python 3.12 - removed/ssl. Turner. Python. Retrieved 11 May 2024.