Release Notes for XWiki 18.1.0
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 configurationBlockNote 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:
| Browser | Tested on: | |
|---|---|---|
| Mozilla Firefox 150 | Not Tested | |
| Google Chrome 147 | Not Tested | |
| Microsoft Edge 147 | Jira Tickets Marked as Fixed in the Release Notes | |
| Safari 18 | Not Tested |
Here is the list of databases we support and how they have been manually tested for this release:
| Database | Tested on: | |
|---|---|---|
| HyperSQL 2.7.4 | Not Tested | |
| MySQL 9.7 | Not Tested | |
| PostgreSQL 17 | Jira Tickets Marked as Fixed in the Release Notes | |
| MariaDB 11.8 | Not Tested | |
| Oracle 19c | Not Tested |
Here is the list of Servlet Containers we support and how they have been manually tested for this release:
| Servlet Container | Tested on: | |
|---|---|---|
| Tomcat 11.0.22 | Jira Tickets Marked as Fixed in the Release Notes | |
| Jetty 12.1.6 (XWiki Standalone packaging) | Not Tested | |
| Jetty 12.1.6 | Not 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
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
- anonymous
- Cédric LAMBLIN
- ClementEXWiki
- hongsikum
- 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
- xrichard