Blog — nicoco.fr

The first beta of Slidge (XMPP bridges) is out!

2022-09-04 subscribe to my blog's atom feed

After one year and a half of development, including a very long pause, a few rewrites, and thanks to my summer vacations, I am proud to announce the release of slidge version 0.1.0-beta0.

Early Christmas this year, slidge beta is already out!

Slidge?

Slidge lets you use your usual XMPP client to communicate with your buddies on other "legacy" instant messaging networks, much like spectrum2, but without libpurple, and targeted at XMPP exclusively. It is an XMPP server component, acting as an alternative client using your legacy credentials. Your legacy contacts are assigned a puppet JID (someusername@legacynetwork.example.com) that you can use to exchange messages with them.

Slidge in itself is just a library, and legacy networks clients are actually slidge's plugins. Slidge includes plugins for 7 different instant messaging (IM) services.

Rationale

After discovering IM with mIRC, ICQ and then MSN messenger in the late 90s/early 2000s, I was amazed when I discovered pigdin and was a happy user for many years (oh psychic mode, how you made me look a like a magician to non-techies). But a few years ago, when I finally jumped into the smartphone bandwagon, it was a bit frustrating not to have the same "single chat app" experience across multiple devices.

XMPP gateways are a nice way to achieve this, but except for the excellent biboumi IRC gateway, I have always been frustrated by the shortcomings of the available implementations. Spectrum2 is the leading project in this area, but has been in maintenance mode for a while and does not plan to integrate new cool features of the now experimental XEPs, such as message reactions which I hope many more XMPP clients will implement in the future (only Movim implements it AFAIK; it's great BTW).

Does it work?

Yes it does, with the limitation of not providing any group-related feature: only direct messages are supported. If everything goes according to the plan, groups will be part of the 0.2.0 release, some day™.

I use it daily, and it works just fine for me (which was and still is slidge's main goal). It has not been extensively battle-tested, and I would be happy to have feedback of any kind, including bug reports and/or criticism of the implementation/technical choice/code style/whatever. Sucking less at writing code is a big reason for me to work on this project.

Some technical details

Slidge is written in async python, using the sleek slixmpp library. It attempts to make good use of mypy for static type checking, and includes (too few) tests using the pytest framework.

The general idea is to make it trivial to write plugins through the plugin API, abstracting away the XMPPalities and exposing simple methods. Hopefully, thanks to the rich python ecosystem, plugins should be a thin layer between the plugin API and some external library handling the legacy network specifics.

Screenshots

Slidge is a server software, and screenshots of log outputs might not be very interesting to look at. Instead, here are side-by-side screenshots of the XMPP client Movim (left) and the official signal desktop app (right) side by side.

Left: Movim; right: signal desktop appmovim.png)

Neat, ain't it?

(Since XMPP is an open standard, Slidge will also work with any XMPP client, and I don't think there is a single OS that does not have at least one XMPP client.)

That's amazing, how do I give it a try?

Right now, the recommended way to try it out is to go the container route; this is what I use with my personal XMPP server. A pypi package is also available if you prefer.

Cloning the git repo and trying it locally is also a very easy option to test slidge using docker-compose, which spins up a local XMPP server and a browser-based XMPP client.

A nice thing about cloning the repo is that it makes you about halfway to writing the patch fixing the bug that annoys you or implementing some amazing new feature. ;)