Release Notes for XWiki Enterprise 2.4

Last modified by Thomas Mortagne on 2023/10/13

XWiki Enterprise 2.4 Release Notes

New and Noteworthy


Changed default search engine

Lucene Search is promoted as default search. While there might still be problems, which are normally resolved by rebuilding the index, Lucene allows more powerful searches, and better ordering of the results.


To read about the benefits of using Lucene search over Database search go to the search application page.

Starting with the 2.4 release you can select the wikis where to search in using the LuceneSearch page.


New search configuration UI


The Search Application now has a dedicated section in the wiki administration section from which you can:

  • Choose the default engine (Lucene or Database).
  • See the status for the Lucene Search: the number of indexed elements and the number of elements waiting in the queue.
  • Control the Lucene index by indexing the whole farm, indexing the wiki or customizing the index to your specific preferences.

For more information check out the documentation page.

New Template-based page creation

Starting with XWiki Enterprise 2.4 users and applications can provide documents that can be used as template when creating new pages. The new document (content, objects and other metadata) will be replicated from the template.


  • "Wanted Links" also offers the choice to create the new document from the available templates ( "My Template" template in the image below):


Find more details about the template creation and administration on the documentation page.

New Invitation Manager application

The Invitation Manager application allows users to send emails, inviting friends and colleagues to join a wiki. You will be able to configure your wiki to send emails through an open mail relay on the server or through an email account of your choosing. 


Read more about this application and learn how to configure it by visiting the application page.

WYSIWYG improvements

Insert external image

You can now insert an external image in the edited page while in WYSIWYG mode. The external image is specified by its location on the web, i.e. its URL. To do this go to Image > Insert Image... menu and select the External tab:


Insert macros

You may insert macros with a single click from the tool bar:


Paste with filtered styles

A paste with filtered styles button has also been added to the tool bar:


The Wysiwyg editor import from office feature now filters style by default.

Objects and classes editor improvements

The object and class editor are now fully panel-less, which among other things means that you have the full object/class editors UI even in an empty wiki without having to import the needed XE xar.


Adding objects or class properties is done with AJAX calls, which means faster response times, no interruptions, no data loss.

The class editor also adds better refactoring capabilities:

  • Reorder class properties
  • Delete a class property
  • Selectively disable and re-enable class properties, which allows making pseudo-read-only properties


There are also many other small ergonomics improvements to discover.

JMX Administration Console


Watchlist improvements

  • Allow to remove elements in the watchlist from the user profile
  • In virtual mode, added a wikis section in elements in your watchlist


Rendering cache

You can now provide a list of pages for which to cache the result. See the core.renderingcache.* properties in to control it.

It's also possible to force a page to refresh by using refresh=1 parameter in the URL.

New Code macro configuration

It's now possible to indicate which Pygments style to use with the default highlighter based on Pygments.

See the code macro documentation for more details.

Security improvements

  • Added support for HttpOnly flag for session cookies (XSS protection measure)
  • Fixed some XSS issues
  • Improved file access sandboxing

Performance improvements

  • Scripts are defered by default, which means that <script> tags will no longer block the page loading until the scripts are downloaded and executed, but will be downloaded in parallel and executed after the full DOM was loaded, right before the document becomes ready.

This is an important change which might break the functionality of custom scripts. Since pulled scripts are executed after the full DOM was loaded, scripts that expect to be executed in place, for example scripts that use document.write, or inline scripts which expect a JS library to be loaded, will fail, or might even make the document unusable. You can instruct the skin extension manager not to defer problematic scripts, using, for example. $xwiki.ssx.use('Some.Extension', {'defer': false}, but a better solution is to fix the code so that it works when being defered.

Chart macro improvements

  • Chart macro now supports more than 26 columns.

Script improvements

  • Make the Query Manager use the Script Service to expose services to scripts. See Query Guide for more details.
  • Make possible to directly return the Block based result of a script macro. It's supported for all JSR 223 macro which means all script macro script Velocity macro for now. See Script Macro for more details.
  • Prevent nested script macros by default: It's now impossible for the output of a script macro to become another script macro for security reasons. See Script Macro for more details.
  • Provide a way to escape regexp literal string from velocity

Javascript improvements

  • Start writing a Javascript mirror of the XWiki data model: Document.getURL
  • New suggestDocuments behavior for input fields

REST improvements

  • Isolate REST API JAXB model classes in a separate module

Dependencies upgrade

  • Doxia 1.1.3
  • JODConverter 3.0 beta3
  • JBossCache 3.2.5.GA
  • Groovy 1.7.3
  • 1.8.3
  • Jython 2.5.2b1
  • Hibernate Validator 4.0.2
  • JGroups 2.8
  • JFreeChart 1.0.13


  • WYSIWYG newly supported language: Russian
  • All the translations have been updated

Known issues

Backward Compatibility and Migration Notes

Important non-compatible changes

ERROR: org.xwiki.bridge.DocumentAccessBridge: Method 'public void setCurrentUser(java.lang.String)' has been added to an interface
ERROR: org.xwiki.officeimporter.openoffice.OpenOfficeManager: Return type of method 'public net.sf.jodconverter.OfficeDocumentConverter getDocumentConverter()' has been changed to org.artofsolving.jodconverter.OfficeDocumentConverter
ERROR: org.xwiki.query.xwql.AliasGenerator: Class org.xwiki.query.xwql.AliasGenerator removed
ERROR: org.xwiki.query.xwql.InvalidQueryException: Class org.xwiki.query.xwql.InvalidQueryException removed
ERROR: org.xwiki.query.xwql.QueryAnalizer: Class org.xwiki.query.xwql.QueryAnalizer removed
ERROR: org.xwiki.query.xwql.QueryContext: Class org.xwiki.query.xwql.QueryContext removed
ERROR: org.xwiki.query.xwql.QueryContext$DocumentInfo: Class org.xwiki.query.xwql.QueryContext$DocumentInfo removed
ERROR: org.xwiki.query.xwql.QueryContext$ObjectInfo: Class org.xwiki.query.xwql.QueryContext$ObjectInfo removed
ERROR: org.xwiki.query.xwql.QueryContext$PropertyInfo: Class org.xwiki.query.xwql.QueryContext$PropertyInfo removed
ERROR: org.xwiki.query.xwql.QueryTranslator: Class org.xwiki.query.xwql.QueryTranslator removed
ERROR: org.xwiki.query.xwql.XWQLQueryExecutor: Class org.xwiki.query.xwql.XWQLQueryExecutor removed
ERROR: org.xwiki.query.xwql.hql.ObjectPrinter: Class org.xwiki.query.xwql.hql.ObjectPrinter removed
ERROR: org.xwiki.query.xwql.hql.Printer: Class org.xwiki.query.xwql.hql.Printer removed
ERROR: org.xwiki.query.xwql.hql.PropertyPrinter: Class org.xwiki.query.xwql.hql.PropertyPrinter removed
ERROR: org.xwiki.query.xwql.hql.TreePrinter: Class org.xwiki.query.xwql.hql.TreePrinter removed
ERROR: org.xwiki.query.xwql.hql.XWQLtoHQLTranslator: Class org.xwiki.query.xwql.hql.XWQLtoHQLTranslator removed
ERROR: org.xwiki.query.jpql.JPQLParser: Class org.xwiki.query.jpql.JPQLParser removed
ERROR: org.xwiki.velocity.VelocityEngine: Method 'public void clearMacroNamespace(java.lang.String)' has been added to an interface
ERROR: org.xwiki.velocity.VelocityEngine: Method 'public void startedUsingMacroNamespace(java.lang.String)' has been added to an interface
ERROR: org.xwiki.velocity.VelocityEngine: Method 'public void stoppedUsingMacroNamespace(java.lang.String)' has been added to an interface
ERROR: org.xwiki.model.ModelContext: Method 'public void setCurrentEntityReference(org.xwiki.model.reference.EntityReference)' has been added to an interface
ERROR: org.xwiki.rendering.scaffolding.RenderingTestCase: In method 'public RenderingTestCase(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, boolean)' the number of arguments has changed
ERROR: org.xwiki.rendering.listener.DefaultAttachement: Class org.xwiki.rendering.listener.DefaultAttachement removed
ERROR: org.xwiki.rendering.transformation.MacroTransformationContext: Method 'public org.xwiki.rendering.internal.transformation.MacroTransformation getMacroTransformation()' has been removed
ERROR: org.xwiki.rendering.transformation.MacroTransformationContext: Method 'public void setMacroTransformation(org.xwiki.rendering.internal.transformation.MacroTransformation)' has been removed
ERROR: org.xwiki.rendering.transformation.Transformation: Method 'public void transform(org.xwiki.rendering.block.Block, org.xwiki.rendering.transformation.TransformationContext)' has been added to an interface
ERROR: org.xwiki.rendering.transformation.TransformationManager: Method 'public void performTransformations(org.xwiki.rendering.block.Block, org.xwiki.rendering.transformation.TransformationContext)' has been added to an interface
ERROR: org.xwiki.rendering.macro.script.AbstractJSR223ScriptMacro: Method 'protected java.lang.String evaluate(org.xwiki.rendering.macro.script.JSR223ScriptMacroParameters, java.lang.String, org.xwiki.rendering.transformation.MacroTransformationContext)' has been removed

Pulled scripts are defered by default

This might break custom scripts, please check the correct behavior before upgrading a production server. Use Firebug in Firefox to catch errors, watch the error console, configure IE to notify all script errors.

Nested script macros are forbidden

Now it's impossible to nest scripting macros, which is a good protection against many potential attacks. While the obvious case of direct nesting is easy to notice, there are other cases which are not as obvious:

{{include document="Some Document With Scripts" /}}

If the included document contains script macros, they will no longer be executed.


If the property contains script macros, for example in the content of a blog post, they will no longer be executed.

General Notes

Always make sure you compare your xwiki.cfg file with the newest version since some configuration parameters were added. Note you should add so that XWiki will attempt to automatically migrate your current database to the new schema. Make sure you backup your Database before doing anything.

Get Connected