Blog —

Breaking news: Slidge v0.1.0 RC1 is out!

2023-01-08 subscribe to my blog's atom feed

Isn't it nice when computers let us use whatever weird colors, workflows, keyboard bindings, or child sacrifice we like to use, instead of forcing us into a one-size-fits-all "intuitive" UI? Slidge is a collection of XMPP gateway components that lets you use your favorite XMPP client(s) to chat with other, non-XMPP and/or non-federated chat networks.

A few adventurous testers have successfully used slidge for a few weeks now, and it sounded fun to tag a release candidate instead of a beta for a change, so here we go! Let's cut to the point: what's new since slidge beta2?


Last time I wrote here, I mentioned that deuill, a random dude from the intertubes, was working on a whatsapp slidge plugin. Well, guess what? He already nailed it.

An avalanche of intercompatible IM clients: dino, movim, cheogram, poezio, beagleim and whatsapp showing the same conversation

To communicate with the infamous walled garden, you need to have the official whatsapp app to register an account (you don't have to give it address book access). You can then register to slidge by flashing a QR code just like you would for the whatsapp web client, and then uninstall this crap if you don't want your phone to feel too dirty. Once every few weeks, you will need to reinstall the whatsapp app to reflash the QR code though.

Interestingly, not giving the official app address book access on Android results in a very subpar user experience where you cannot initiate a chat with a new contact, and where contacts are only identified by their phone number (see screenshot above). The fun part is that neither of these trouble happen when you use whatsapp via slidge (or via the iphone app it seems). It all looks like Meta really wants to your address book, who would have thought? Maybe they are not giving up whatsapp for free out of pure altruism after all.

Experimental groups

Despite what was initially planned, we finally added some rudimentary, experimental group support before the 0.2.0 series. This change of plan was motivated by some internal refactoring to improve the internal representation of the slidged XMPP entities.

Only the telegram and signal plugins implement groups for now. We don't recommend relying on it just yet, as slidge don't implement the modern XMPP way of retrieving history, which may result in missed messages on mobile connections. But since telegram has server-side group archives, we have some basic old-fashioned, "send history on join" thing going on that makes telegram groups somehow usable anyway.

If you want to give groups a try, update slidge send "groups" as a normal chat message to the gateway component. It will reply with a list of clickable XMPP URIs that should open the group as a normal multi-user chat. We obviously plan to improve groups discovery in the future, but if you're feeling adventurous, give them a try and report issues you encounter.

Improved adhoc commands

Cheogram, movim and gajim user interfaces for adhoc commands.

Up to now, even if trying to execute an "admin-only" adhoc command resulted in an error message, all adhoc commands were listed for everyone. They are now only listed for users that can actually run them, for a less confusing user experience.

For clients that don't support in-band registration, and for slidge plugins that require multi-step registration procedures (eg, 2FA), you can now register to the slidge component via a dedicated adhoc command.

jabber:iq:gateway protocol support

This protocol defines a generic way to add a "gatewayed" contact by their username (eg, their phone number), so that XMPP clients can make it look nice in their user interface. There are not many clients out there that support this already, but Cheogram alone made it worth implementing. Since slidge will soon rule the world, I expect other XMPP client to follow any minute.

Adding a new contact via Cheogram

Other changes

Besides bug fixes and refactorings that aren't very interesting to list here, here are some other changes that I don't have to energy to detail, but might make sense to you anyway.

Slidge core

  • MUCs: subject change, self-ping
  • cache contact avatars on disk (instead of re-download on every slidge startup)
  • cache contact presences in RAM (so that if presences should work even when privileged entity is not setup)
  • adhoc commands: delete user (admin only), sync roster, registration
  • replies: support compatibility fallback
  • optionally mark all messages as read and not just the latest one
  • privileges roster push fallback (subscription request)
  • messages sent from first-party clients: support replies and attachments
  • implement last interaction in presence


  • add "n chats to fetch" admin option (default: 20)


  • echo user edits and retractions from official MM client


  • basic group support
  • contacts to roster only if their profile could be resolved
  • new adhoc command: 'link to existing signal account'
  • support attachments sent from official client
  • use attachment caption


  • use JID Escaping rules for contacts JIDs (instead of reinventing the wheel)


  • 2FA one time password support


  • add basic group support
  • do not add all groups partipants to the roster, only actual contacts
  • attachments: support document, audio
  • uploads from official client are now echoed in XMPP
  • reply-to support for attachments

Final notes and what's next?

I attempted to list what was next in the previous blog post, but I already did not respect it. So instead of a real roadmap, I'll just say we plan to do these stuff, but that plans might change for no apparent reason. Remember, we're not big and/or professional.

  • mostly fix bugs before the 0.1.0 release
  • add proper group history maybe soon
  • add advanced group stuff (creation, invites, moderation, …) for the 0.2.0 release
  • split slidge core and plugins, so that plugins have their own repo and release cycle (maybe rename them to something more fun, like slidgenal, whatslidge, matterslidge, etc.)
  • maybe maybe maybe someday have a look at how voice calls could be bridged maybe maybe maybe

That's all, folks! Grab slidge 0.1.0-rc1 from sourcehut, pypi (no whatsapp there yet, telegram: only arm64 and amd64), (amd64-only until we managed to fix the arm builds), or dockerhub (recommended method, image available for amd64 and arm64), and come say hi on our MUC.

Lots of love to slidge early adopters and people who just dropped by to say that slidge looks cool, that's sincerly awesome.