198 lines
8.9 KiB
Markdown
198 lines
8.9 KiB
Markdown
---
|
||
title: "Updates from the Poezio ecosystem"
|
||
date: 2022-04-10T12:00:00+01:00
|
||
translationKey: 'poezio-0.14'
|
||
tags: [XMPP, Poezio, Slixmpp, OMEMO, Rust]
|
||
---
|
||
|
||
Releases have happened recently that revolve around [Poezio][poezio], a TUI
|
||
(Terminal UI) client for XMPP, including Poezio itself, its backend XMPP
|
||
library [Slixmpp][slix], and also the [poezio][poezio-omemo] and
|
||
[slixmpp][slix-omemo] plugins for OMEMO.
|
||
|
||
# Many bug fixes and improvements
|
||
|
||
<figure>
|
||
<picture>
|
||
<source srcset="/2022/04/poezio-full.avif" type="image/avif" />
|
||
<img
|
||
decoding="async"
|
||
src="/2022/04/poezio-full.png"
|
||
alt="Poezio example screenshot"
|
||
/>
|
||
</picture>
|
||
<figcaption>Release chat in the poezio chatroom.</figcaption>
|
||
</figure>
|
||
|
||
[Mathieui][mathieui] has already made a proper [release note for
|
||
Slixmpp][slix180] and I invite you to read it! It includes many
|
||
bugfixes of course, and internal changes around async handling, that may
|
||
reflect on some of the APIs you are using.
|
||
|
||
Poezio has also seen many improvements.
|
||
|
||
Internally, for one, our default branch has also been moved to "main", many
|
||
type hints have been added, implicit casts (safeJID) have been removed, lots
|
||
of event handlers and calls are now async, APIs from Slixmpp are being used
|
||
instead of redoing our own, many refactoring, various performance
|
||
improvements.
|
||
|
||
Pypy3 support was removed because it was causing many users to use the cffi
|
||
module specifically implemented for pypy3 instead of the more performant C
|
||
implementation. For those who are running from sources and not using the
|
||
update script, don't forget to run `make` to build the C module.
|
||
|
||
A license change has happened, and Poezio is now under [GPLv3+][GPL]! While I am not
|
||
exactly in favour of intellectual property[^0], this is a straightforward
|
||
lever we have against capitalism[^1]. Poezio being a prime resource for
|
||
Slixmpp examples, GPL code should reasonably ensure that the 4 freedoms reach
|
||
end-users. In practice, this should allow for poezio-omemo to be merged into
|
||
Poezio. I am now personally hoping for Slixmpp to change its license as well.
|
||
|
||
[^0]: *TODO: write about this.* A TL;DR would certainly be "abolish intellectual
|
||
property, and private property in general".
|
||
[^1]: When they don't decide to ignore it and give us the finger.
|
||
|
||
And other changes more visible to users! To name a few, quality of life
|
||
improvements such as `xmpp:...?join` URIs handling in `/join`, impromptu rooms
|
||
creation is now more reliable and creates rooms with shorter names, and tab
|
||
names in the activity bar can be colored using [Consistent Color
|
||
Generation][XEP-0392] by setting [`autocolor_tab_names`][autocolor_tab_names]
|
||
to `True`. Read more [in the changelog][poezio-changelog].
|
||
|
||
<figure>
|
||
<img
|
||
decoding="async"
|
||
src="/2022/04/poezio-tab-colors.png"
|
||
alt="Poezio colored tab numbers"
|
||
/>
|
||
<figcaption>The tab name color on top can also be reversed
|
||
(foreground/background) in the theme to look the same as the activity bar
|
||
below.</figcaption>
|
||
</figure>
|
||
|
||
Plugins have seen changes as well. A new `untrackme` plugin replaces the now
|
||
deprecated `remove_get_trackers`. [Link Mauve][linkmauve] has also developped
|
||
a `sticker` plugin (to send them), similar in essence to what [Movim][movim]
|
||
has been doing for ages. Rich presence (activity, gaming, mood and user tune)
|
||
has been removed from Poezio core and moved in the `user_extras` plugin. And
|
||
again many fixes.
|
||
|
||
<figure>
|
||
<video controls="true" poster="/2022/04/poezio-sticker.png">
|
||
<source src="/2022/04/poezio-sticker-av1.webm" type="video/webm;codecs=av1" />
|
||
<source src="/2022/04/poezio-sticker-vp9.webm" type="video/webm;codecs=vp9" />
|
||
<source src="/2022/04/poezio-sticker-vp8.webm" type="video/webm;codecs=vp8" />
|
||
<picture>
|
||
<source srcset="/2022/04/poezio-sticker.avif" type="image/avif" />
|
||
<img
|
||
decoding="async"
|
||
src="/2022/04/poezio-sticker.png"
|
||
alt="Sticker picker tool in front with Poezio and Dino in the back."
|
||
/>
|
||
</picture>
|
||
</video>
|
||
<figcaption>Poezio sticker plugin in action!</figcaption>
|
||
</figure>
|
||
|
||
Many of these fixes have been realized by [mathieui][mathieui], who is by far
|
||
the biggest committer on the release, and in general probably the person with
|
||
the best understanding of the project. Thanks also to louiz for providing the
|
||
infrastructure all this time, and to eijebong, Ge0rG, Kaghav Gururajan,
|
||
kaliko, Thomas Hrnciar, jonas’, and southerntofu for the many patches.
|
||
|
||
# Archiving
|
||
|
||
Archive handling ([MAM][XEP-0313]) was already in the previous release, but
|
||
has been reworked and should now be more reliable.
|
||
|
||
When opening a tab, Poezio will fetch 2 screen pages worth of messages if it
|
||
has no logs for this tab. Archives are automatically stored locally if
|
||
configured (default), in which case they won't be redownloaded but read from
|
||
the local copy directly the next time they're requested.
|
||
|
||
To read older chat messages in a tab, just scroll up with `PageUp` and Poezio
|
||
will fetch more automatically if it needs to.
|
||
|
||
This is configurable with options that have been introduced such as
|
||
[`mam_sync`][mam_sync] or [`mam_sync_limit`][mam_sync_limit] to enable/disable
|
||
the use of [MAM][XEP-0313] and how many messages to fetch at most. And
|
||
[`use_log`][use_log] also configures the fact that archives are stored
|
||
locally.
|
||
|
||
Some work around storing message IDs -- that our log format doesn't do -- will
|
||
be needed in the future to allow for easier message deduplication.
|
||
|
||
# End-to-End Encryption
|
||
|
||
The Poezio `E2EEPlugin` API has been improved to accommodate changes in
|
||
poezio-omemo, slixmpp-omemo and changes of the OMEMO backend library. Two
|
||
plugins which are also seeing changes!
|
||
|
||
Heartbeats are now supported. Heartbeats are meta-messages which transfer only
|
||
cryptographic key material (nothing else) and are used to strengthen OMEMO's
|
||
forward secrecy. This is particularly relevant on clients like Poezio that can
|
||
stay running in the back for some time, receiving messages without replying.
|
||
|
||
Some other changes include colored fingerprints using the [Consistent Color
|
||
Generation][XEP-0392] document -- such as specified in the current (0.8)
|
||
[OMEMO][XEP-0384] spec -- and sending encrypted media (aesgcm URIs).
|
||
|
||
What hasn't changed is that this plugin lacks a UI and trust management.
|
||
Hopefully this should come soon, with a little motivation to do UI work.
|
||
|
||
# What comes next
|
||
|
||
All in all, there aren't (m)any revolutionary changes, but with these releases
|
||
come many fixes for paper cuts that hopefully make users happier. This makes
|
||
me think that even though Poezio is far from being perfect, there doesn't seem
|
||
to be many important things missing.
|
||
|
||
There are however changes that would require a lot of refactoring, such as a
|
||
multi-account feature, or easier maintenance in general.
|
||
|
||
We have decided to start migrating Poezio to Rust, in part to be able to
|
||
refactor the project more easily, and also because it's a language we've come
|
||
to appreciate over the years with experience in other projects, and more
|
||
specifically with [xmpp-rs][xmpp-rs], an XMPP library in Rust.
|
||
|
||
All of this will happen right after the release, and we invite interested
|
||
people to join the effort!
|
||
|
||
P.S.: I am looking for poezio screenshots with various setups to display in
|
||
public places, under a free license. Please send me your screenshots in
|
||
relatively high quality at `blog` `at` `bouah.net`. And don't forget to ask
|
||
pixels appearing on the image for permission!
|
||
|
||
[poezio]: https://lab.louiz.org/poezio/poezio
|
||
[slix]: https://lab.louiz.org/poezio/slixmpp
|
||
[poezio-omemo]: https://lab.louiz.org/poezio/poezio-omemo
|
||
[slix-omemo]: https://lab.louiz.org/poezio/slixmpp-omemo
|
||
[movim]: https://movim.eu
|
||
[xmpp-rs]: https://xmpp.rs
|
||
|
||
[mathieui]: https://mathieui.net
|
||
[linkmauve]: https://linkmauve.fr
|
||
|
||
[poezio014]: https://lab.louiz.org/poezio/poezio/-/tags/v0.14
|
||
[poezio-changelog]: https://lab.louiz.org/poezio/poezio/-/raw/v0.14/CHANGELOG
|
||
[slix180]: https://lab.louiz.org/poezio/slixmpp/-/tags/slix-1.8.0
|
||
[slix181]: https://lab.louiz.org/poezio/slixmpp/-/tags/slix-1.8.1
|
||
[slix182]: https://lab.louiz.org/poezio/slixmpp/-/tags/slix-1.8.2
|
||
[poezio-omemo050]: https://lab.louiz.org/poezio/poezio-omemo/-/tags/v0.5.0
|
||
[poezio-omemo051]: https://lab.louiz.org/poezio/poezio-omemo/-/tags/v0.5.1
|
||
[poezio-omemo060]: https://lab.louiz.org/poezio/poezio-omemo/-/tags/v0.6.0
|
||
[slix-omemo060]: https://lab.louiz.org/poezio/slixmpp-omemo/-/tags/v0.6.0
|
||
[slix-omemo061]: https://lab.louiz.org/poezio/slixmpp-omemo/-/tags/v0.6.1
|
||
[slix-omemo070]: https://lab.louiz.org/poezio/slixmpp-omemo/-/tags/v0.7.0
|
||
|
||
[GPL]: https://en.wikipedia.org/wiki/GNU_General_Public_License
|
||
|
||
[XEP-0313]: https://xmpp.org/extensions/xep-0313.html
|
||
[XEP-0384]: https://xmpp.org/extensions/xep-0384.html
|
||
[XEP-0392]: https://xmpp.org/extensions/xep-0392.html
|
||
|
||
[mam_sync]: https://doc.poez.io/configuration.html#term-mam_sync
|
||
[mam_sync_limit]: https://doc.poez.io/configuration.html#term-mam_sync_limit
|
||
[use_log]: https://doc.poez.io/configuration.html#term-use_log
|
||
[autocolor_tab_names]: https://doc.poez.io/configuration.html#term-autocolor_tab_names
|