Release Notes for XWiki 18.1.0-rc-1

Last modified by Ilie Andriuta on 2026/05/21 15:36

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 adds options for the Kebab-case Page Naming strategy. Work is progressing on integrating Blocknote as a new WYSIWYG block editor in XWiki (directly converting from Blocknote internal syntax to XWiki syntaxes without going through Markdown), and the preparation work to integrate Cristal inside XWiki is also advancing. This release contains security fixes, with the highest severity being 7.1/10.

New and Noteworthy (since XWiki 18.0.1)

Full list of issues fixed and Dashboard for 18.1.0.

For Users

No changes!

For Admins

Kebab-case Page Naming

 
The "Preformatted Name Strategy" has been renamed to "Kebab-case Name Strategy" since it's easier to understand what it's about.

Several new optional features have been added:

  • Convert letters to lowercase
  • Allow dots when used between digits (to represent versions or numbers)
  • Remove configured forbidden words (e.g. stop words)

Miscellaneous

  • Dedicated database table for passwords: A new dedicated database table has been created in the database to store specifically passwords (to improve security): if you're performing an upgrade, you might see a migration related to the move of passwords values to that new table.

For Developers

Page REST endpoint supports checking user rights

 
A new checkRight query parameter has been added to the REST API endpoint for pages. When fetching a page through the REST API, you can now check if you also have other rights on it, e.g., comment and edit by appending the checkRight=comment&checkRight=edit query string parameter.

Shared eslint configuration

 
A shared eslint configuration is now available, allowing for a consistent linting for all npm packages across xwiki-platform and contrib projects.

Miscellaneous

  • Overwrite transformation list from from transformation context: You can now overwrite the list of rendering transformations to execute from the transformation context:

    TransformationContext transformationContext = new TransformationContext();
    transformationContext.setTransformationNames(Optional.of(List.of("macro", "icon")));
    transformationManager.performTransformations(xdom, transformationContext);

    The transformation manager is using the following fallback chain:

    execution (transformation context) -> request (parameter) -> rendering configuration
  • BlockNote integration drops Markdown dependency: The experimental BlockNote WYSIWYG editor doesn't depend on Markdown syntax any more. We implemented a parser and a renderer for the UniAst syntax used by the editor so we now go directly from UniAst to the wiki syntax used for storage on the backend. The advantage of this is that we're not affected any more by the Markdown syntax limitations (e.g. we now have support for underline syntax in BlockNote).

  • UniAst Syntax: A new JSON-based rendering syntax, called UniAst, is available. It provides both a parser and a renderer, and it is currently used only by the BlockNote WYSIWYG editor.

  • Importmap supports transitive dependencies: The importmap checker now accepts transitive dependencies.

  • Execute rendering transformations from scripts: The rendering script service has two new APIs:

    • $services.rendering.createTransformationContext() used to create a new transformation context
    • $services.rendering.transform($xdom, $transformationContext) used to perform the transformations; requires programming rights

    You can use them like this:

    #set ($targetSyntax = 'uniast/1.0')
    #set ($restricted = "$!source.restricted" == 'true')
    #set ($xdom = $services.rendering.parse($source.content, $source.syntax))
    #set ($transformationContext = $services.rendering.createTransformationContext())
    #set ($discard = $transformationContext.setId("BlockNote:${source.documentReference}"))
    #set ($discard = $transformationContext.setXDOM($xdom))
    #set ($discard = $transformationContext.setSyntax($source.syntax))
    #set ($discard = $transformationContext.setTargetSyntax($targetSyntax))
    #set ($discard = $transformationContext.setRestricted($restricted))
    #set ($discard = $transformationContext.setTransformationNames(['macro']))
    #set ($discard = $transformationContext.setContentDocument($source.documentReference))
    #set ($discard = $services.rendering.transform($xdom, $transformationContext))
    #set ($renderedContent = $services.rendering.render($xdom, $targetSyntax))
  • java.util.Optional Converter: The Converter Manager now supports converting Optionals:

    • from X to Optional<Y>, if conversion from X to Y is possible
    • from Optional<X> to Optional<Y>, if conversion from X to Y is possible.

    This means, for instance, that from now on you can call methods that have Optional arguments from Velocity, by passing the actual value or null for an empty optional.

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: 

Tested Browsers & Databases

Automated testing

XWiki executes a lot of automated tests during its build, testing all supported configurations. In addition, some manual QA is also executed to try to discover additional problems (see below):

Manual testing

Here is the list of browsers we support and how they have been manually tested for this release:

 BrowserTested on:
Firefox30.pngMozilla Firefox 150Not Tested
Chrome30.pngGoogle Chrome 147Not Tested
Edge30.pngMicrosoft Edge 147Jira Tickets Marked as Fixed in the Release Notes
Safari30.pngSafari 18Not Tested

Here is the list of databases we support and how they have been manually tested for this release:

 DatabaseTested on:
hypersql.pngHyperSQL 2.7.4Not Tested
mysql.pngMySQL 9.7Not Tested
postgresql.pngPostgreSQL 17Jira Tickets Marked as Fixed in the Release Notes
mariadb.pngMariaDB 11.8Not Tested
oracle.pngOracle 19cNot Tested

Here is the list of Servlet Containers we support and how they have been manually tested for this release:

 Servlet ContainerTested on:
tomcat-icon.pngTomcat 11.0.22Jira Tickets Marked as Fixed in the Release Notes
jetty-icon.pngJetty 12.1.6 (XWiki Standalone packaging)Not Tested
jetty-icon.pngJetty 12.1.6Not Tested

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.1.0-rc-1

Removal of WikiManager.Dashboard page

The WikiManager.Dashboard page was automatically installed in subwikis but no link was leading to it and it contained deprecated code. It has been decided to remove it from XWiki Standard, so you will be prompted to decide whether you want to remove it (default) or keep it during an upgrade.

Scripts manipulating password properties in queries are broken

Any HQL query aiming at performing operations in XObjects password properties will be broken after the upgrade: those scripts needs to be adapted to ensure to query the property values in the new dedicated table for password properties instead of querying it in StringProperty table where it used to be stored. Note that XWQL queries are not impacted since those don't explicitely indicate the type where the properties are stored.

API Breakages

The following APIs were modified since XWiki 18.0.1:

No breakage!

Credits

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

  • Andi Chandler
  • ClementEXWiki
  • Cédric LAMBLIN
  • Kyoung Chul Lee
  • LucasC
  • Manuel Leduc
  • Marius Dumitru Florea
  • Michael Hamann
  • Nikita Petrenko
  • Pierre Jeanjean
  • Simon Urli
  • Simpel
  • Suguru Hirahara
  • Thiago Krieck
  • Thomas Mortagne
  • Vincent Massol
  • hongsikum
  • xrichard

Get Connected