Changes Report
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
Macro execution can be marked as isolated for improved rendering performance
![]()
In case of slow rendering times due to thousands of macros on a page, it is now possible to configure macros as being isolated without needing to modify the used macros. This is particularly useful for macros that have been installed as extensions whose authors haven't updated the macros to indicate if the execution is isolated yet.
Added font weight properties to the skin
![]()
When developping a UI element, instead of hard-coding font-weights, prefer using the CSS properties font-weight-regular, font-weight-semibold and font-weight-bold. Learn more about CSS properties in XWiki and those new variables.
Regular case on form labels


To improve legibility on XWiki forms, all form labels use regular case now, instead of uppercase.
document macro filters parameter
![]()
The documents macro now provides a filters optional parameter. It allows for the definition of a default filtering of the Live Data displaying the list of documents.
UserManager#hasUsers
![]()
The UserManager API now offers a way to check if a given wiki contains users: UserManager#hasUsers(WikiReference wiki).
Conversion filter made more generic
![]()
The conversion (servlet) filter allows WYSIWYG editors to submit HTML even if the edited content is supposed to be saved as wiki syntax, by intercepting the request and replacing the HTML with the conversion result. But not all WYSIWYG editors are using HTML internally to edit the content. In order to support such editors we made the conversion filter more generic, allowing it to convert from any input syntax (for which there is a parser) to any output syntax (for which there is a renderer). The WYSIWYG editor needs to submit 4 parameters, like this:
fieldName=value
RequiresConversion=fieldName
fieldName_inputSyntax=foo/1.0
fieldName_outputSyntax=xwiki/2.1Replace "fieldName" with the name of the edited field and replace "foo/2.1" with the syntax expected by the editor as input. See the WYSIWYG Editor module for more information.