Release Notes for XWiki 18.4.0-rc-1

Last modified by Marius Dumitru Florea on 2026/05/20 09:44

This is the release notes for XWiki Commons, XWiki Rendering and XWiki Platform. They share the same release notes as they are released together and have the same version.

This release enables realtime collaboration for the experimental BlockNote WYSIWYG editor and improves the display of the extension support plans. For developers, this release introduces a client-side component manager and a safe way to pass parameters to the translation macro. This release also fixes a number of security issues, with the highest severity being 9.3/10.

New and Noteworthy (since XWiki 18.3.0)

Full list of issues fixed and Dashboard for 18.4.0.

For Users

BlockNote Realtime Collaboration

 
The experimental BlockNote WYSIWYG editor integration now supports realtime collaboration based on Yjs. This feature is enabled by default. You just need to install the extension and edit the same wiki page. There are a couple of limitations that we are aware of, though:

  • you need to force the edit lock to join the collaboration session
  • there is no auto-save
  • it doesn't use the realtime editing toolbar that is currently used by CKEditor integration
  • macro output is included in the synchronization (e.g. if a macro shows private information that depends on the current user, that information will be shared with all the collaborators joining the same editing session)
  • while it does support clustering (in a best case scenario), it doesn't handle recovery in case a cluster node is restarted or disconnected and reconnected (after some time)

We hope to handle these limitations in the next versions.

Miscellaneous

  • PDF Export Optimization: We discovered that the code responsible for transforming external links to internal ones, when the target page is included in the export, was quite inefficient. We optimized that code, reducing the export time by up to 2 minutes for large exports of 2k print pages. See the PDF Export Application for more information.

For Admins

  • Improvements to the display of extension support plans: Extension support plans now display fields horizontally, and provide a link to the supported extension documentation page.

For Developers

Client-Side component manager

 
Similarly to the server-side Component Module, it is now possible to define and inject components client-side (e.g., using JavaScript or Typescript). See the how-to for a complete example.

Notification Messages HTML support

 
The notifications now only support HTML in their text message when it is explicitly allowed. To do so, an optional textHtml boolean parameters (default value: false) is available.

Example:

new XWiki.widgets.Notification('This is <strong>bold</strong>','done', { textHtml: true});
Warning

When enabling HTML, there is a risk on introducing XSS, use at your own risk.

Change to ModelReferenceHandler's API

 
Two new methods have been added to ModelReferenceHandler's API: getParentDocumentReference and getParentSpaceReference. These provide backend-specific utilities to obtain parent references from an existing Cristal reference.

Script variable support in translation macro

 
It's now possible to pass to the {{translation/}} macro the name of the script variable containing the translation parameters. See Translation Macro for more details.

Added support for Object[] conversion

 
There was no support for conversion from to Object[] in the properties (macro parameters, filter properties, etc.), this is now fixed. Note that there was already support for various types of arrays (as part of Apache BeanUtils).

Eager and anonymous importmap entries

 
The importmap now allow defining two new kinds of imports:

  1. eager: the dependency is loaded when the page is loaded (tutorial)
  2. anonymous: the dependency is excluded from the importmap (tutorial)

Miscellaneous

  • Confirmation Box text content format: And XWiki.widgets.ConfirmationBox.textContentFormat() method is now available. It indicates how the text parameter is interpreted.
    Callers can check for the presence of this method to decide whether to escape their input:

    • When this method is available, the text parameter is treated as plain text and must not be escaped.
    • When this method is missing (before 18.4.0RC1/17.10.9), the text parameter is interpreted as HTML and may need to be escaped.
      The returned value is always the "plain" string.
  • Partial Binary Message Handler: If your WebSocket end-point needs to handle binary messages, you can now use the helper AbstractPartialBinaryMessageHandler:

    session.addMessageHandler(new AbstractPartialBinaryMessageHandler(this.configuration.getMaxMessageSize())
    {
        @Override
        public void onMessage(byte[] message)
        {
            // ...
        }
    });

    It collects and aggregates all the binary message parts, optionally allowing you to enforce an upper limit for the message size. See the WebSocket Integration module documentation for more information.

  • Notification Messages text format: An XWiki.widgets.Notification.textFormat() method is now available. It indicates how the text parameter is interpreted.
    Callers can check for the presence of this method to decide whether to escape their input:

    • When this method is available, the text parameter is treated as plain text and must not be escaped.
    • When this method is missing (before 18.4.0RC1/17.10.9), the text parameter is interpreted as HTML and may need to be escaped.
      The returned value is always the "plain" string.

Upgrades

The following runtime dependencies have been upgraded (they have a different release cycle than XWiki Commons, XWiki Rendering and XWiki Platform):

Translations

The following translations have been updated:

Security Issues

Security issues are not listed in issue lists or dashboards to avoid disclosing ways to use them, but they will appear automatically in them once they're disclosed. See the XWiki Security Policy for more details.

Known issues

Backward Compatibility and Migration Notes

General Notes

  • When upgrading make sure you compare and merge the following XWiki configuration files since some parameters may have been modified, removed or added:
    • xwiki.cfg
    • xwiki.properties
    • web.xml
    • hibernate.cfg.xml
  • Add xwiki.store.migration=1 in xwiki.cfg so that XWiki will attempt to automatically migrate your current database to any new schema. Make sure you backup your Database before doing anything.

Issues specific to XWiki 18.4.0-rc-1

WikiLESSResourceReference

WikiLESSResourceReference#getDocumentReference and WikiLESSResourceReference#getAuthorReference can now throw an LESSResourceReference checked exception.

No more version.properties file by default

The file version.properties is not part of the WAR anymore, by default. It's still supported (and will still impact the value of XWiki#getVersion, and what's displayed in the footer), but it's not really needed to get the WAR version since a long time now (this information, along with various other metadata, is provided as part of the WAR's META-INF/extension.xed file).

API Breakages

The following APIs were modified since XWiki 18.3.0:

No breakage!

Credits

The following people have contributed code and translations to this release (sorted alphabetically):

  • anonymous
  • Cédric LAMBLIN
  • Clemens Robbenhaar
  • Clément Aubin
  • dch
  • DenisF
  • flyger
  • Gankov Andrey
  • hongsikum
  • Ilie Andriuta
  • Jarle Sandmo
  • Lucas Charpentier
  • Manuel Leduc
  • Mario-Hofstaetter
  • Marius Dumitru Florea
  • mathpce
  • Michael Hamann
  • Nikita Petrenko
  • Pierre Jeanjean
  • Prachi Joshi
  • Roland Walter
  • Rostyslav Fitsyk
  • Santiago W. Fernández Lorenzo
  • Simon Urli
  • Simpel
  • Suguru Hirahara
  • Thiago Krieck
  • Thomas Mortagne
  • Valdis Vitolins
  • Vincent Massol
  • xrichard

Get Connected