← Back to all sparks
C

Converse.js

COMMS
Velocity0.0

Web-based XMPP chat client that runs in the browser

Converse.js 14 lands OMEMO:2 — the browser XMPP client catches up on modern encryption.

xmppomemo-encryptione2e-usabilitypubsub-apibrowser-client
Current state
Converse.js reached 14.0.0 in June 2026 after a tight beta train, and the release is defined by one thing: support for OMEMO:2, the current revision of XMPP's end-to-end encryption. The surrounding work is all encryption ergonomics — per-chat encryption state remembered across chat-close and re-login, an explicit error surfaced for undecryptable messages instead of silently dropping them, the toggle hidden on untrusted devices, and original filenames preserved on encrypted image download. New PubSub API methods for create, subscribe and unsubscribe round out the release.
Where it's heading
The project is closing the gap between having encryption and having usable encryption. Almost every OMEMO change in this cycle is about failure modes users previously had to guess at: a silently dropped message, an encryption toggle offered where it cannot work, an abandoned bundle that never self-healed. That is the work a client does when its encryption is no longer a demo but something people depend on daily. Dropping client-compress for native browser APIs points the same way — fewer bundled dependencies in a security-sensitive path.
Prediction
Expect the 14.x line to settle into interoperability fixes as OMEMO:2 meets other XMPP clients in the wild, with the new PubSub API the most likely base for the next feature layer.

Recent moves

  1. 1mo ago

    OMEMO:2 encryption support ships in Converse 14

    ⚡ SPARK

    The stable release of the OMEMO:2 work, together with the encryption-usability fixes accumulated across the beta train: persistent per-chat encryption state, visible decryption errors, and the toggle suppressed on untrusted devices. This is the release the whole 14.0.0 beta cycle was building toward.

    View source ↗
  2. 1mo ago

    OMEMO bundle self-healing and new PubSub API methods

    The final beta adds self-healing for abandoned or unpublished OMEMO bundles, graceful handling of contacts whose device is listed but whose bundle is missing, and new PubSub methods to create, subscribe and unsubscribe. Recovery behaviour for exactly the states that leave encrypted chat mysteriously broken.

    View source ↗
  3. 1mo ago

    libomemo.js dependency bump

    A beta whose only change is bumping libomemo.js to 2.0.1. Pure dependency movement inside the OMEMO:2 push.

    View source ↗
  4. 1mo ago

    client-compress replaced with native browser APIs

    A single change dropping the client-compress dependency in favour of browser APIs. Small, but consistent with trimming third-party code out of a security-sensitive client.

    View source ↗
  5. 1mo ago

    First beta carrying the OMEMO usability fixes

    Where the 14.0.0 encryption work first appears: persistent per-chat encryption state, surfaced decryption errors, the untrusted-device toggle fix, and preserved filenames on encrypted downloads. The stable release restates this same set.

    View source ↗
  6. 2mo ago

    Reaction attribution and MUC JID parsing fixes

    A patch on the 13.x line fixing wrong JID attribution on reaction-based messages and stripping xmpp: prefixes and query params from MUC JIDs in the join modal. Closing out the previous major before the 14.0.0 train.

    View source ↗