Releases: conversejs/converse.js
Release list
14.0.0 (2026-06-26)
🔒 This release adds support for OMEMO:2 encryption. 🔒
-
#1472: feat(omemo): remember the per-chat encryption (on/off) state across chat-close and re-login
-
#2097: fix(omemo): surface an error for an undecryptable OMEMO message instead of silently dropping it when it carries no fallback body
-
#2336: fix(omemo): hide the encryption toggle on an untrusted device, where OMEMO can't be used
-
#2606: fix(omemo): hiding media now also hides decrypted OMEMO media instead of re-rendering it
-
#2632: fix(omemo): preserve the original filename when downloading a received encrypted image
-
#4041: fix: strip trailing slashes from
assets_pathto prevent double-slash asset URLs -
#4076: fix(omemo): don't send encrypted MUC messages to banned (outcast) or non-affiliated occupants
-
Remove
client-compressand use browser APIs -
feat(pubsub): Add new API methods to create, subscribe and unsubscribe.
-
feat(version): Add XEP-0092 Software Version support and show the server's software version in the profile modal
-
feat: add support for OMEMO 2 (
urn:xmpp:omemo:2), using Stanza Content Encryption (XEP-0420) -
fix(omemo): Detect omemo:2-only contacts as OMEMO-capable
-
fix(omemo): Enable self-healing of abandoned or unpublished bundle
-
fix(omemo): Gracefully handle contact device listed but bundle not published
-
fix(theme): Clear the background class list before setting theme attributes.
-
fix: Prior theme CSS class is not removed when changing the theme dynamically.
-
fix:
isTrustedIdentityin OMEMO store wasn't properly loading the identity -
fix: broadcast presence when the chat status (
show) is cleared -
fix: the idle status flag could never be cleared, leaving stale idle presence after the user became active again
-
refactor: Drop deprecated Karma test runner and Jasmine testing library and use Vitest instead.
Backwards incompatible changes
- OMEMO now uses a WebAssembly crypto module (libomemo). If you serve Converse under a strict Content-Security-Policy, you must add
'wasm-unsafe-eval'to yourscript-srcdirective, otherwise OMEMO fails to initialize with aWebAssembly.instantiate()CSP error. This token is much narrower than'unsafe-eval'(it permits WASM compilation only).
See the security docs for the recommended CSP. api.modal.showno longer takes a modal instance as first parameter- The CJS build has been removed. Only ESM builds are produced. If you include Converse via a
<script>tag, you must addtype="module":<script type="module" src="converse.js"></script>. Any inline scripts callingconverse.initialize()must also usetype="module". - #2405: Hide the trusted device login checkbox when persistent browser storage is unavailable.
14.0.0-beta.4 (2026-06-22)
- Bump libomemo.js to version 2.0.2
- fix(omemo): Enable self-healing of abandoned or unpublished bundle
- fix(omemo): Gracefully handle contact device listed but bundle not published
- fix(theme): Clear the background class list before setting theme attributes.
- feat(pubsub): Add new API methods to create, subscribe and unsubscribe.
14.0.0-beta.3 (2026-06-19)
- Bump libomemo.js to version 2.0.1
14.0.0-beta.2
- Remove
client-compressand use browser APIs
14.0.0-beta.1
- #1472: feat(omemo): remember the per-chat encryption (on/off) state across chat-close and re-login
- #2097: fix(omemo): surface an error for an undecryptable OMEMO message instead of silently dropping it when it carries no fallback body
- #2336: fix(omemo): hide the encryption toggle on an untrusted device, where OMEMO can't be used
- #2606: fix(omemo): hiding media now also hides decrypted OMEMO media instead of re-rendering it
- #2632: fix(omemo): preserve the original filename when downloading a received encrypted image
- #4041: fix: strip trailing slashes from
assets_pathto prevent double-slash asset URLs - #4076: fix(omemo): don't send encrypted MUC messages to banned (outcast) or non-affiliated occupants
- feat: add support for OMEMO 2 (
urn:xmpp:omemo:2), using Stanza Content Encryption (XEP-0420) - fix:
isTrustedIdentityin OMEMO store wasn't properly loading the identity - fix: broadcast presence when the chat status (
show) is cleared - fix: the idle status flag could never be cleared, leaving stale idle presence after the user became active again
Backwards incompatible changes
api.modal.showno longer takes a modal instance as first parameter- The CJS build has been removed. Only ESM builds are produced.
If you include Converse via a<script>tag, you must addtype="module":
<script type="module" src="converse.js"></script>.
Any inline scripts callingconverse.initialize()must also usetype="module". - #2405: Hide the trusted device login checkbox when persistent browser storage is unavailable.
13.0.1 (2026-05-27)
- Fix attribution bug where wrong JID is applied to message based on reactions
- Strip
xmpp:prefix and query params from MUC JID entered in join modal
13.0.0 (2026-05-20)
- #1855: Use default or locked domain when adding contacts or starting new chats
- #2311: Strip locked MUC domain from room address input to avoid mangled JIDs
- #2398: Add support for XEP-0444: Message Reactions (see XEP-0444)
- #2740: Add autocomplete of possible XMPP servers when registering a new account
- #2857: Fix underscores and other styling directives inside URLs being mistakenly treated as emphasis markers
- #2929: Add XMPP providers autocomplete when adding contacts (new
autocomplete_providers_urlsetting) - #3023: Fix empty roster group name treated as a valid group instead of "Ungrouped"
- #3382: Fix audio player accessibility for screen reader users (NVDA, JAWS)
- #3502: Fix custom emoji shortnames overlapping with built-in emoji shortnames
- #3815: Removal of boomark leads to new bookmark named
Symbol(lit-nothing) - #3824: Dates and times are not translated
- #3829: Rich text from LibreOffice Calc is sent as screenshots
- #3830: The message textarea blocks undo of the pasted text
- #3839: Fix contacts menu displayed off-screen in fullscreen mode
- #3863: Shift
unescapeHTMLhelper function (used to setisOnlyEmojion a message) to converse-headless - #3885: Don't show contact approval alerts when
allow_contact_requestsis false (e.g. anonymous mode) - #3886: Don't show OMEMO padlock icon when libsignal is not available (e.g. anonymous mode)
- #3889: MUC join: Use room jids localpart as name in case name or identity not found
- #3710: Fix autocomplete adding a trailing space when selecting a group name with the mouse
- #3916: Add support for XEP-0461 Message Replies, allowing users to reply to specific messages
- #3939: Don't show invitations to groupchats in which the user is already present
- #3941: add adhoc completed command result and text-multi as merged lines of text
- #3989: properly display occupant hats in details dialog
- Don't render unfurls for retracted messages.
12.0.0 (2025-08-28)
- #3581: Don't unnecessarily regenerate pot and po files
- #3700: Fix exception that occurs when optional cp attribute is missing
- #3714: Don't include
maxstanzasif no value is available - #3719, #3770: Handle
connection._sasl_mechanismnot being defined - #3730: QR Code doesn't work on dark backgrounds
- #3764: Create an ESM build for @converse/headless
- #3769: Various OMEMO fixes
- #3791: Fetching pubsub node configuration fails
- #3792: Node reconfiguration attempt uses incorrect field names
- Add approval banner in chats with requesting contacts or unsaved contacts
- Add mongolian as a language option
- Breaking:
Strophe.shimshas been removed. Instead, just use the globals. - Create ESM builds of converse.js and converse-headless.js
- Moved
jsdomandwsfrom optionalDependencies to peerDependencies - New API method
api.disco.entities.findto return all entities that implement a specific feature. - Regional locales weren't being applied.
- Registration: Use https://providers.xmpp.net instead of https://compliance.conversations.im
- Replace webpack with rspack
- Set up a test runner for @converse/headless so that the headless tests use the headless build
- Show approval alert in chats with unsaved contacts
- Some fixes regarding manually resized chats in
overlayedview mode. - Update controlbox to not show logo, navbar and version while connecting
- Updated translations
- bugfix: Don't show closed MUCs in the rooms list
- bugfix: dragresize resistance not applied
11.0.1 (2025-06-09)
- #3672: Images not rendering
- #3676: Flyout box is not positioned correctly on mobile devices in "overlayed" mode
- #3689: Chat view not accesible for certain widths in "fullscreen" mode
- Remove modal from the DOM when it's closed
- Fix login form style for
classictheme - Fix css for the
headlinesfeed - Properly handle OGP metadata that doesn't have an image
- Fix TypeError which prevents logging out
- Fix auto zoom in when input message in ios safari
- Add a service discovery browser to the settings modal
- Add a modal to view blocked XMPP addresses
- Check for PubSub
config-node-maxfeature before using themaxvalue
11.0.0 (2025-05-21)
Note: The Desktop version of Converse can be downloaded here:
https://github.com/conversejs/converse-desktop/releases
Github Issues
- #122: Set horizontal layout direction based on the language
- #317: Add the ability to render audio streams. New config option fetch_url_headers
- #690: Allow setting a custom name and the group for an existing contact
- #698: Add support for MUC private messages
- #1021: Message from non-roster contacts don't appear in fullscreen view_mode
- #1038: Support setting node config manually
- #1057: Removed the
mobileview mode. Instead of settingview_modetomobile, set it tofullscreen. - #1174: Show MUC avatars in the rooms list
- #1181: Show OMEMO fingerprint as QR code
- #1195: Add actions to quote and copy messages
- #1303: Display non-contacts who sent us a message somehow in fullscreen
- #1349: XEP-0392 Consistent Color Generation
- #1700: Deleted pending contacts reappear after page reload
- #1810: Create clickable link to load older MAM messages if there is no scrollbars.
- #2118: Show reflected message in MUC
- #2335: Support list virtualization of the message history
- #2383: Add modal to start chats with JIDs not in the roster
- #2586: Add support for XEP-0402 Bookmarks
- #2623: Merge MUC join and bookmark, leave and unset autojoin
- #2716: Fix issue with chat display when opening via URL
- #2844: Contact stays in "pending contacts"
- #2940: Avoid gaps in history when new message is received before MAM query is made
- #2980: Allow setting an avatar for MUCs
- #3033: Add the
muc_grouped_by_domainoption to display MUCs on the same domain in collapsible groups - #3038: Message to self from other client is ignored
- #3038: Support showing yourself in the left sidebar. Adds new config option show_self_in_roster.
- #3100: fixed width
.box-flyoutbreaks responsive design in embedded, mobile viewport mode. - #3155: Some ad-hoc commands not working
- #3155: Some adhoc commands aren't working
- #3299: Registration fails when a password contains an &
- #3300: Adding the maxWait option for
debouncedPruneHistory - #3302: debounce MUC sidebar rendering
- #3305: New config option muc_search_service
- #3307: Fix inconsistency between browsers on textarea outlines
- #3337: Correctly display multiline nested quotes
- #3340: Save draft messages when switching channels
- #3362: Don't create empty nick element in bookmarks
- #3386: Registration form is not fetched
- #3464: Missing localization: the online status is not localized
- #3476: better UI for form "fixed" fields
- #3478: MUC participant status indicator misplaced
- #3510: MUC's configuration panel loads endlessly, if it's jthe second one you want to configure
- #3529: Unbookmarked channels no longer change their name when clicked with an unread indicator (or text icon)
- #3579: Changing nickname in a groupchat once, forbids to change nickname in another groupchat afterwards
- #3589: Hats namespace change
Bugfixes
- Fix: MUC occupant list does not sort itself on nicknames or roles changes
- Fix: refresh the MUC sidebar when participants collection is sorted
- Fix: room information not correctly refreshed when modifications are made by other users
- Fix: prevent busy-loop when session resumption fails
- Fix: unhandled exception on new message arriving when user has not permitted playing audio in the browser
- Fix: incorrect unread messages counter badge on the application icon after switching to new XMPP user
- Fix: unhandled exception in disconnect function when controlbox is not shown by UI
- Fix: "Click to mention..." title was misplaced in MUC occupant list.
- Fix: removing the "add to contact" button in occupant modal in singleton mode (as there is no roster).
- Fix: trying to use emojis with an uppercase letter breaks the message field.
- Fix: renaming getEmojisByAtrribute to getEmojisByAttribute.
- Fix: replace duplicated Romanian strings with correct values
Changes and features
- Upgrade to the latest versions of XEP-0424 and XEP-0425 (Message Retraction and Message Moderation).
Converse loses the ability to retract or moderate messages in the older format,
so you might need to upgrade your XMPP server's implementation of these as well. - Embed the Spotify player for links to Spotify tracks. New config option embed_3rd_party_media_players.
- Add support for XEP-0191 Blocking Command
- Upgrade to Bootstrap 5
- Add an occupants filter to the MUC sidebar
- Change contacts filter to rename the anachronistic
Onlinestate toAvailable. - Enable reuse_scram_keys by default.
- New
loadEmojishook, to customize emojis at runtime. - Add new themes
CyberpunkandNordicand remove the oldConcordtheme. - Improved accessibility.
- New "getOccupantActionButtons" hook, so that plugins can add actions on MUC occupants.
- Update the "Add MUC" modal to add validation and to allow specifying only the MUC name and not the whole address.
- MUC occupants badges: displays short labels, with full label as title.
- New config option stanza_timeout
- New config option lazy_load_vcards
- New config option enable_roster_versioning
- New config option rtl_langs for specifying languages for which
Converse's UI should be shown in right-to-left order.
Default config changes
- Make
fullscreenthe defaultview_mode. - Set
auto_register_muc_nicknamedefault to'unregister'so that your
nickname is automatically registered with a MUC upon entering and
unregistered upon explicitly leaving the MUC (by closing it). - The
allow_non_roster_messagingsetting now defaults totrue.
Breaking changes:
- Removed the
autocomplete_add_contactconfig setting. Auto-complete is now always enabled. - Remove the old
_converse.BootstrapModalin favor of_converse.BaseModalwhich is a web component. - The connection is no longer available on the
_converseobject. Instead, useapi.connection.get(). - Add a new
exportsattribute on the_converseobject which is meant for
providing access for 3rd party plugins to code (e.g. classes) from
converse.js. Some classes that were on the_converseobject, like
CustomElementare not on_converse.exports. - The
windowStateChangedevent has been removed. If you used it, rely on the
visibilitychangeevent ondocumentinstead. api.modal.createno longer takes a class, instead it takes the name of a custom DOM element.getAssignableRolesandgetAssignableAffiliationsare no longer on the_converseobject, but on the Occupant instance.- Removed the
chatBoxFocusedandchatBoxBlurredevents. - Changed the signature of the
api.contacts.addAPI method. - The deprecated API method
api.settings.updatehas been removed. Use
api.settings.extendinstead. - Removed the
default_stateconfig option.