Changes Report
Improved the icon picker default selection
Instead of proposing an arbitrary set of icons somewhat close to the whole set, the updated icon picker displays only icons that match with the input typed so far, and sorts those icons alphabetically.
Cancel Long Selection Restore
The WYSIWYG editor preserves the selection (caret) when switching between WYSIWYG and Source mode, but this can take a significant amount of time for large documents with many wiki syntax elements (e.g. lots of links, images, macros, etc.). Starting with this version we're showing a progress notification message while the selection is being restored, which can be used to cancel the restore if it takes too much time or if preserving the selection is not worth the time spent waiting.
Notification email headers for autoreplies
![]()
Notifications emails are now sent with the following headers: Auto-Submitted: auto-generated and X-Auto-Response-Suppress: All. This allows the emails to be properly recognized as generated emails and to avoid sending autoreplies to them.
Updated the Solr Search interface

The Solr search landing page has been refreshed. Among other things, the search filters and pagination have received changes that should make them fit better in the modern XWiki. Learn more about this design change.
Run integration tests against S3
![]()
Docker-based integration tests can be executed with S3 as blob store using the -Dxwiki.test.ui.blobStore=s3 command line flag. A MinIO instance is automatically started and configured as blob store in this case. This can be used to verify that the tested code isn't relying on blobs being stored in the file system when using the blob store API.
Mention color contrast enhanced.

Default colors of mentions have been updated to achieve a better contrast and fit the colorTheme. In addition, the mention configuration now exposes the mention text color for configuration. See the new Learn more about this new API.
Required rights analyzers for macro parameters
![]()
A new component type MacroParameterRequiredRightsAnalyzer has been introduced to allow writing required rights analyzers for certain types of macro parameters like wiki syntax parameters. See the documentation for more details.
Message macros now support the "status" role
![]()
A new parameter has been added to the message macros (info, warning, error, success) to improve their accessibility. This new parameter is the boolean status and will make sure any user is notified of the content of the message when it's created and updated. This new parameter is described in detail in the Message Macros documentation.
Servlet resource URLs are cached
![]()
A cache has been added for servlet resources. It significantly speeds up requests in certain Servlet containers like Jetty 12 (we observed 50% faster responses). However, it means that new or deleted files in the WAR might not be noticed anymore by a running XWiki instance. You can bypass the cache in a request by force-refreshing the page. A restart also clears the cache.
Jakarta-based session events
![]()
New Jakarta alternatives to SessionCreatedEvent and SessionDestroyedEvent events have been added. See Container Module for more details.
Compressed tables
![]()
It's possible to enable compression for a table directly in the Hibernate mapping file. See DatabaseSchema for more details.
DocumentModelBridge#isNew
![]()
A new API has been exposed in DocumentModelBridge to know if that document instance is stored or not already.
New Velocity instanceOf
![]()
A new API was added to the Velocity $objecttool to check if a Java Object extend/implement a given class. For example $objecttool.instanceOf($myObject, 'java.lang.Number').
New user registration form updated order

Reverted the changes to the fields of the registration form merged in 16.10.0 . The form fields are now: first name, last name, username, password, password validation, email ( and then Captcha if enabled).
New configuration to improve indexing performance at startup
![]()
By default, the Solr search index is synchronized with the document database when XWiki starts. For this, XWiki queries and compares batches of documents from both the Solr search index and the database. As those queries can take a lot of time in large wikis, the batch size has been increased from 100 to 1000 by default and has been made configurable to allow further increasing it to reduce the number of queries at the expense of a higher memory usage. Increasing this option is recommended for large wikis (for example, more than 100k pages in a single wiki), in particular if you notice that performance is slow and that there is a high load on the database after startup. You can find all options related to synchronization on startup in the documentation.
Filter stream export supports excluding property types
![]()
The XWiki instance input stream supports excluding certain property types now. This can be used to exclude, for example, "Email" and "Password" properties from an export.
Added a way to define macro property features as mandatory with the `@PropertyFeature` annotation
![]()
The @PropertyFeature annotation used to define the feature of a property, typically used in java Macro parameter definitions, now supports a mandatory attribute. A mandatory feature is a feature for which at least one field fulfilling this feature must have a value. E.g. The reference feature of the include macro is implemented by two properties: reference and page. Making the feature mandatory with:
@PropertyFeature(value = "reference", mandatory = true)Means that at least one of the properties reference or page MUST have a value for the provided macro parameters to be valid. This is an intermediate level between making both properties mandatory and having no mandatory property.
Delete an attachment through script
![]()
The script Document API now provide a public API remove an attachment.
Webjar URL Factory
![]()
The operations from the webjars script service are now also available through a role.
Added velocimacros for info, success, warning and error boxes
![]()
Added an inline and a standalone velocimacro for each type of box. Those velocimacros do not accept more parameters than the content. When it's not possible to use the XWiki macros, those velocimacros should be used instead of hard-coding. Read more about the box velocimacros here