blog.bouah.net/content/posts/poezio-0.14.en.md

199 lines
8.9 KiB
Markdown
Raw Normal View History

---
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