I develop stuff and have opinions on things -
About me/Contact


Poezio 0.10

Originally the next version on the roadmap was 1.0, but I don’t feel like giving a 1.0 tag to the current state of things; so, without further ado: I am pleased to announce that poezio 0.10 has just been released!

Poezio is a terminal-based XMPP client which aims to replicate the feeling of terminal-based IRC clients such as irssi or weechat; to this end, poezio originally only supported multi-user chats.

What's new


Link Mauve spent a sizeable chunk of time to make poezio faster, which makes it nicer and lighter to use in low-powered environments with many contacts and many rooms with many people in it.

A lot of time was spent profiling and cursing python, then writing micro(or not-so-micro)-optimizations. His final goal is to make everything cythonizable, to get even better performance. Thanks a lot to him!

Stream Management (XEP-0198)

Together with fixing the slixmpp plugin for XEP-0198, it was implemented in poezio. It is not enabled by default because it adds overhead and isn’t useful in most poezio use cases (i.e. long-running sessions in a tmux window somewhere on a server), but it can be easily enabled through a config option.

Stream Management (which requires server support) allows a client to restore a session after a disconnection, as long as the server has a sufficiently high timeout value configured. It also allows for more reliability inside a stream, by having acks and sequence numbers interlaced with the stream of normal activity. If sequence numbers don’t match, the entity which sent the missing messages will send it again.

Carbons enabled

It was an oversight, but a big one; carbon copies (XEP-0280) are now enabled by default in poezio 0.10. Carbons allow for a more seamless transition in a multi-device environment by replicating messages sent and received to each device connected.

Commented-out config file

A mistake again; because the options in the config file were uncommented by default, there was no way of checking if a value was there only because it was a default; so there was no way to update default values after someone ran poezio once. Well, there is still no way, but because the options are now commented out, new users will get the default values updates if they didn’t explictly set something else.

The poezio -c command is however available to see which options in your config files differ from the default.

poezio_logs script

Poezio log files adopted a log format close to the mcabber one a long time ago. However, reading logs within poezio is sub-par at best; and while there are plans to remedy to this, it’s still good to be able to read logs without having the custom format cruft around.

So the poezio_logs tool takes a log file path as a parameter and outputs the cleaned-up result to stdout, with some coloration. It can take parameters to remove color, timestamps, or info messages as well.

HTTP Verification (XEP-0070)

The surprise of this release is the arrival of an HTTP Verification tab, which implements XEP-0070 to authenticate HTTP requests using only your JID.


A mediawiki plugin is in the writings, and a wordpress plugin already exists. Because components such as this one talk HTTP, there is no need to add any kind of XMPP support in the application that needs an identity validation; just enter your JID, accept the request on your client, and voilà.

New warning prompt

The previous way of handling a certificate change was really inconvenient, so with HTTP verification implemented, it was easy to just re-use the same tab with a different color scheme in order to have an more user-friendly way to interact (especially since we moved from SHA-1 to SHA-512, which increased the size of the hash by a lot).


Fun with message corrections

It’s more abuse of the protocol than anything else, but since we like writing funny plugins, here are two new ones:

  • marquee, to replicate the behavior of the <marquee/> tag by moving text from left to right in a loop, all in the same message using corrections
  • dice, to roll a number of unicode dice for a time interval, once again using message corrections.

Client State Indication

CSI (XEP-0352) is a mobile-oriented extension that requires both client and server support, and lets the client tell the server that it’s "off" (for example, a mobile client while the screen is off and the phone is in the pocket).

It surprisingly applies well to poezio, thanks to the screen_detach plugin, which is either in attached or detached state.

Toggling this active or inactive state leaves the server free to enable a number of filters to reduce data transfer between the client and server. For example, it could filter all presences received while the client was off.

A "csi" plugin was also added with explicit commands to set or unset that status.


VCard-Temp (XEP-0054) support is still a desirable thing, and this version adds a plugin to view vcard information from remote entities. It’s still a little rough because it only implements a subset of the elements in a vcard, and re-uses a poezio tab that wasn’t designed for readonly data, but it’s getting there.

Of course, once vcard-temp is really done, vcard4 (XEP-0292) support is next.

Bits of Binary

While we still have no real file transfer abilities, we now have a Bits of Binary (XEP-0231) plugin, which allows for small in-band file transfers between clients. Considering stream bandwidth is often limited to a few kilobytes per second for good reasons, it should be used sparingly, but it’s perfect for sending small files.

And many more

Of course, there are many more commits for new features or bug fixes, with a big refactor that removed an ugly python path manipulation hack, minor UI fixes that save some screen space and provide better consistency with themes, no instant reconnect loops on specific error conditions, etc… You can check the CHANGELOG or the git history for more reasons to upgrade.


Just like 0.9, poezio 0.10 depends on slixmpp, which requires aiodns and pyasn1, and can make use of cython (in which case libidn will be required, as well as its headers during the compilation).


Beside myself (mathieui), louiz’, and Link Mauve, I want to thanks the other contributors, eijebong, Lasse Aagren, Frédéric Meynadier, Nicolas Braud-Santoni, Lancelot SIX, Luke Marlin, for their contributed features and fixes.

I also want to thank all users/testers that report bug and suggestions for improvements, either through constructive remarks on the chatroom or bug reports.


As always, if you notice an unreported bug still unfixed in latest master, please report it, thank you.

If you have remarks or suggestions concerning this article, please by all means contact me.