NEWS
mx.client 0.1.1 (2026-06-19)
- First release. Stateful client layer over 'mx.api': configuration
persistence (
mx_client_load()/mx_client_save()/mx_client_configure()),
session construction (mx_client_session()), room resolution
(mx_resolve_room(), mx_room_lookup_by_name()), sync cursor handling
(mx_sync_update()), sync-event extraction (mx_extract_text_events(),
mx_extract_invites(), mx_extract_reaction_verdict()), invite
acceptance (mx_accept_invites()), text sending (mx_send_text(), with
a mentions argument that sets m.mentions and rewrites textual
@localpart into matrix.to pills via mx_pill_mentions()), and a
conservative Markdown-to-HTML converter (mx_markdown_to_html()).
- End-to-end encryption orchestration over the optional 'mx.crypto'
package: a pickled crypto store and account lifecycle
(
mx_crypto_store_dir(), mx_crypto_account()), signed device-key
construction for upload (mx_crypto_device_keys()), Olm room-key
sharing as to-device payloads (mx_crypto_room_key_payload(),
mx_crypto_handle_to_device(), mx_crypto_inbound_session()), and
Megolm event encrypt/decrypt (mx_crypto_encrypt_event(),
mx_crypto_decrypt_event()). A loopback test exercises a full encrypted
round-trip in-process.
mx_room_encrypted() reads a room's m.room.encryption state (with
the usual name/id/default resolution), so callers can pick the
encrypted or plaintext send path before building one.
- Client-layer media sending:
mx_send_media() resolves the room by
name (or default), builds the session from the stored config, and
uploads + posts in one call via mx.api::mx_send_media().
- Token-rotation recovery:
mx_client_relogin() refreshes the access
token with the stored password while preserving the device id (so an
E2EE device identity survives), and mx_with_relogin() wraps any
client operation with a one-shot catch-and-retry on
M_UNKNOWN_TOKEN, using mx.api's classed error conditions. Requires
mx.api >= 0.3.0.
- All exported functions carry examples.