Skip to content
slixmpp 1.8.0 release

Slixmpp 1.8.0 is out, thanks to pep., Link Mauve, mathieui, Nicolas Cedilnik,
Tim-Oliver Husser, southerntofu as well as the various people who run slixmpp
and report bugs!

The most important part of this release is that it fixes compatibility with
python 3.10, but there are also plenty of changes and bugfixes!

Many XEPs have been modified to accomodate an internal change, and as a
result their public APIs have been modified. Slixmpp has an "internal API"
for plugins, inherited from SleekXMPP which allows users of the library to
substitute internal functions with their own, in order to e.g. provide a
different storage backend (many default to in-memory), etc. This API has
always been synchronous, which is not ideal in an asyncio library, and puts
huge limits on what is possible to do.

This change makes it possible to use async functions with the internal API,
and as a result it forces us to change XEPs using this API to async in the
relevant methods.

As a rule of thumb, thin wrappers around del/set are generally preserved and return a
future to guarantee that the task is done, while getters (which would require awaiting
anyway when returning a future) are now pure coroutines. This inconsistency is a
tradeoff to prevent wider changes across slixmpp internals and programs using it.

- XEP-0012, Last Activity:
    - `begin_idle`, `end_idle`, `start_uptime`, `set_last_activity`,
      `del_last_activity` now return futures.
- XEP-0027: GPG
    - `get_keyids` and `get_keyid` are now coroutines.
    - `set_keyid` and `del_keyid` now return a Future.
- XEP-0030: Disco
    - `supports`, `has_identity`, `get_info`, `get_items` are now coroutines
    - `set_info``set_items`, `del_items`, `add_item`, `add_identity`,
      `del_identity`, `set_identities`, `del_identities`, `add_feature`,
      `del_feature`, `set_feature`, `set_features`, `del_features`
      now return a Future
- XEP-0054: Vcard-Temp
    - `get_vcard`, `publish_vcard` are now coroutines.
- XEP-0095: Stream Initiation
    - `accept` and `decline` are now coroutines.
- XEP-0115: Entity Capabilities
    - `get_verstring`, `get_caps` are now coroutines.
    - `assign_verstring`, `cache_caps` now return a Future.
- XEP-0128: Extended disco
    - `set_extended_info`, `add_extended_info` and `del_extended_info` return Futures.
- XEP-0231: BoB
    - `get_bob` and `set_bob` are now coroutines.
    - `del_bob` returns a Future.
- XEP-0319: Idle
    - `idle` and `active` are now coroutines.

XMLStream.process() is now deprecated, and will be removed in the next version.
This shorthand makes things more confusing for new users, and complicates
integration with other asyncio libraries.

- If defusedxml is available, it will be used, to mitigate XML parser vulns

- `XMLStream.ca_certs` should be a list of paths to the CA certificates

Nicoco (Nicolas Cedilnik) contributed an implementation of XEP-0356
(privileged entities), and XEP-100 (gateway interaction).

The Form element (`{jabber:x:data}x`) can now be accessed properly if their are
several available in a parent element, through a 'forms' multi attribute.

- Add an async join method (returns once the rooms is properly joined, or
  raises on error).
- Deprecate the old join_muc() API

Nicoco added the possibility to register with components to the existing
XEP-0077 implementation.

- MAM preferences have been split into an XEP-0441 plugin.
- Tests have been added
- An `iterate()` method has been added, which should be easier to use.

- XEP-0369: add events for participant and channels
- XEP-0405: Add a method to retrieve annotated roster items
- Add a simple MIX bot

- Make `StanzaBase.get_plugin` a public API, so that slixmpp users can check
  for the existence of a substanza without risking to create it.

- Change the sphinx theme to [Furo](https://github.com/pradyunsg/furo) which
  has a dark mode, and looks good. See
  [slixmpp.readthedocs.io](https://slixmpp.readthedocs.io).

- Improve the toctree to be more logical

- Update obsolete documentation and tutorials (and add some)

- Update the event index

- Add the proper XEP title instead of the number to the index, for easier
  discovery and search.

More integration and stanza/stream tests have been added, which gives us
more confidence on the overall stability.

The HTTPUpload example has been updated to include an oob reference, because
many people were reusing the code as-is and wondering why clients were not
displaying their images inline.

A lot of work in this release has been to incrementally type the internals of
slixmpp as well as the public interfaces, to make it easier to validate changes
and integrate seemlessy with the various IDEs and typecheckers. It is still
very much a work in progress, in part due to the dynamicity of the API, but
it should help catch some errors.

The library now ships with a py.typed file to indicate that it is shipping
type annotations.