Changes Report

Last modified by Vincent Massol on 2017/05/31

Filesystem templates now have programming right by default

It was decided to give filesystem template programming right by default. The used to be executed with the right of the current document.

Flavors search optimization

Speed up display of flavors mostly containing core dependencies (when resolving flavors dependencies, just assume those with know recommended versions are valid).

Optional extension dependencies

It's now possible for Extension authors to define which of the dependencies are mandatory and which are optional. The Extension Manager will install all of them by default but optional dependencies won't have any impact on the validity of the extension:

  • if the optional dependency install plan fail, the extension is installed without it
  • if the optional dependency is uninstalled, it won't uninstall the extension
  • if the optional dependency is missing at startup, it won't make the extension invalid

The old WYSIWYG editor based on Google WebToolkit has been removed

In XWiki 8.2RC1 we made CKEditor the default WYSIWYG editor but the users could still use the old Google WebToolkit (GWT) editor by enabling it in the wiki administration. Starting with this version the old WYSIWYG editor is no longer available. CKEditor remains the only WYSIWYG editor option available in XWiki by default.

CKEditor Integration Improvements

CKEditor has been upgraded to version 4.6.0 which brings a new flat skin and a lot of improvements and bug fixes. The XWiki integration has been improved to support automatic link creation when dropping a non-image file over the editing area. Creating a link to a non-existing wiki page has been simplified. Check the CKEditor Integration documentation for more information.

System and Extension pages are now protected against accidental deletion

You will no longer accidentally erase system or extensions pages and break your wiki! When you try to delete such pages, XWiki will now ask you to confirm the operation, and list all concerned pages.

Jobs improvements

  • org.xwiki.job.event.status.JobStatus#ask now allows passing a timeout as parameter
  • a new REST API is available to start any job, see Job REST API (require programming right)
  • the existing REST API to get the job status has been improved to also get the request and the log all at once

Safe escaping when querying

When writing XWQL or HQL, it's easy to forget to escape the %, _ or even the [ character in LIKE clauses. It's also easy to forget that MySQL considers the default escape character to be \ and thus when you have a serialized Entity Reference in a LIKE you need to change the escape character as otherwise pages with dots (.) in their names won't match!

To avoid bother we're introducing a new Query Manager API when binding a value.

Example usage:

$services.query.xwql("xwqlstatement like :ref").bindValue("ref").literal("${documentReference}.").anyChars().query().execute()

Application Index

We removed some applications from the AppBar (like Scheduler, Invitation, Panels, etc.) with the intention to simplify the interface and promote a smaller number of applications inside the AppBar panel. In order for the applications to still be discoverable, we added in the Drawer an Application Index.


We have introduced a list of notifications in the top menu, that list some events that have occurred in the wiki recently: a page has been created, a new blog post has been published, etc...

See the Notifications Application's page to have more infos.

Watchlist to be replaced by Notifications

At the end of the 9.x cycle, we plan to remove the Watchlist Application from XWiki Standard. Before being able to do this, we need that the Notifications Application be able to propose the same features (and even more possibilities).

In this version, you can now receive notifications concerning a watched location (ie: a page, a page and its children, a wiki..), without enabling any specific type of events in the preferences.

This feature is disabled by default (and the Watchlist Application is active by default). See Notifications Application to know how to enable it.

App Within Minutes integration with Create Page dialog

We added a new step to the App Within Minutes wizard to configure the location where the application entries are created. This step generates a template provider for the application and thus exposes the application in the Create Page dialog. This means that now you can create application entries not only from the application home page (using "Add new entry") but also from other pages using the Create Page dialog.

New applications created with the new version of the App Within Minutes wizard will not use the Data page any more. The application entries will be created directly under the application home page by default. Of course, you can configure the location with the new wizard step.

Restore a batch of deleted documents

If you have performed an operation that deletes multiple documents at the same time (like delete with children or delete space), it is now possible to restore all the deleted documents together, to their original state and location.

This is achieved by assigning a common batch ID to the deleted documents in the recycle bin. You can now browse the deleted documents and group them by batch.

For each deleted document, you can now also choose to see the batch where it was deleted from and if you want to restore just one document or the entire batch.

Check the documentation for more details.

Better handling of webjar extensions

A new webjars Maven extension is now available to package webjar extensions the "standard" way. It automate a bit of plumbing when producing webjar artifact with Maven and more importantly it explicitly indicate that those are webjar so that Extension Manager apply special handling for them (which usually means not requiring programming right to install them).

See WebJAR Maven Handler for more informations about the Maven plugin.

If you can't depend on 9.0 yet you can also use <xwiki.extension.jar.type>webjar</xwiki.extension.jar.type> Maven property which have pretty much the same effect from Extension Manager point of view (for someone installing your extension on 9.0+ of course).

XAR export/import changes

  • The XML produced in XAR files is now following the XML 1.1 specification (instead of 1.0). Since it's mostly about supporting thing that were simply not working before there should not be any retro compatibility issues.
  • All from/toXML methods located in classes like XWikiDocument, BaseObject, BaseClass, etc. are now based on Filter modules which became the only way to produce XAR XML format. The only difference remaining when using xwiki.action.export.xar.usefilter and xwiki.action.import.xar.usefilter properties in xwiki.cfg configuration file is the handling of the XAR packaging.

Drawer menu has changed

The drawer menu has changed to display the "scope" of the displayed items. Items are ordered regarding if their scope is "local" (i.e. it affects only the current wiki) and "global" (i.e. it affects the whole farm).

The change have been made after users complaining the old menu was not very clear, and after a poll sent on the mailing list.

Some items like "Home", "Create Wiki" and "Delete Wiki" has been removed from that menu, in order to focus on frequent operations that really deserve a place in this important menu. We offer other means in the UI to achieve these operations.

CKEditor Integration Improvements

The CKEditor Integration extension has been upgraded to version 1.9 which brings a couple of improvements and bug fixes:

  • The "WYSIWYG Editor" section from the Wiki Administration has been extended to support CKEditor configuration
  • The link dialog has a new text input to specify the link label
  • The form action buttons are now available in full-screen mode
  • CKEditor has been upgraded to the latest stable version 4.5.11

Runtime injection of REST resources

  • It's now possible to install/uninstall/upgrade REST resources dynamically (it used to require a restart of XWiki)
  • Upgrading/uninstalling a JAR extension doesn't break REST resources coming from extensions anymore

Improved Code Viewer with Blame View

The code viewer (More Actions > View Source) has been improved to look nicer and have proper line numbers that support highlighting and linking.

A new Blame View was also added to the code viewer. In this mode, each line of the document's content is annotated with the last author that modified it and the revision in which this modification was introduced. The blame view also works when viewing the source of a document revision (other than the latest one) so it can be accessed at any point in the history of a document. See the documentation for more details.

New filesystem recycle bin

To work around database limitation when deleting documents with a lot of attachments a new file recycle bin component has been introduced.

You can enable in xwiki.cfg configuration file with the following:

Children Macro

A new {{children/}} macro has been added to display a tree view of all children of the current page.

Templates from JARs

TemplateManager component now also search for templates in current Thread classloader which mean you can put your templates inside your JAR in the /templates folder. This is the last step to any JAR extension can provide default template which can be overwritten in a skin on in /template/ WAR resources.

XWiki Enterprise is dead, long live XWiki Standard!

The XWiki Enterprise distribution of XWiki has been abandoned and replaced in 9.5 by a new XWiki Standard flavor.

Here are the main changes in 9.5 related to distribution packages and flavors:

  • XWiki Enterprise does not exist anymore
  • A new XWiki Standard flavor has been introduced (actually two: one for the main wiki and one for sub wikis like XWiki Enterprise had)
  • Administrators now install XWiki and get to choose which flavor they want (at the time of 9.5 release only XWiki Standard is available but there will be many more as contributors add new ones on to install on top of it
  • A XIP package is provided to help with offline install use case
  • Graphical installers have been abandoned, too hard to maintain (and not working very well anyway) and not providing much value for something that was unusable in production

New Homepage

We replaced the Dashboard application from the main Homepage and added introductory steps as wiki syntax. This change will make it simpler for new users to edit the Homepage content, while also benefiting from some basic help concepts. The left panels area also showcases now the 'Navigation' panel, while the right panels area contain a 'Need Help?' panel.

XAR Children Export

It's now possible, for HTML and XAR formats, to export selected children along with the current page.

Ability to store events in the event stream and display them as notifications

It is now possible to say to the Event Stream Module that some events, sent with the Observation Module, should be stored.

In addition, this events can be displayed in the notifications menu of users. See the tutorial: How to send notifications.

Display recommended extensions in the Extension Manager

Extension Manager is now displaying only recommended extension by default.

You can still switch to All Remote Extensions. If no recommended extension is can be found for the provided search, the result for All Remote Extensions is displayed.

Improved Attachment Index

The Attachments tab from the Page Index has been improved:

  • the Space and Page columns have been replaced with the Location column
  • the Type column is now the first column and you can sort and filter attachments by file type
  • the Type column uses the Icon Theme and shows a thumbnail preview for image attachments
  • there's a new column that displays the attachment file size, with support for sorting and filtering the attachments by their file size
  • attachments can be filtered by date using the new date range picker

We also fixed two important bugs:

  • the sort was not working correctly
  • attachments from hidden pages were displayed even if hidden pages were not visible

Live Table User Filter

Filtering the Live Table rows by a column that display users should be easier now with the new suggest filter.

Partial import of Extensions

By default only the extension file is proxied from external source. Since XWiki 9.5RC1 you can bump proxy level up and proxy also previous extension versions and their dependency information. After update of extensions this information will no longer be kept in document objects but, when requested, proxied from external source. This may be enabled by setting Proxy Level attribute of ExtensionProxy XObject to File and Previous Versions. The point of bumping up proxying level is to save space in XWiki database.

Attachments are not loaded in memory anymore when imported

The XAR input filter used to load an entire attachment in memory before sending it to the Instance output. It's now stored in a temporary file before being sent as an InputStream.

Improved avatar image quality

XWiki supports server-side image resizing since version 2.5 but the quality of the scaled images was poor up until now. Starting with this version we're using the Thumbnailator library which leads to better image quality. This is most noticeable in the case of the user avatars.

Content Menu UIXP

You are now able to contribute new content menu buttons, in addition to the existing Edit, Add, Admin and More Actions by implementing the UI Extension Point and specifying the order.

Language Picker

It's now easier to select a language in the administration for your wiki.

Jobs improvements

  • The JobStatus now indicates the job type. There is nothing to do for Job extending AbstractJob but other will have to properly support it in the their JobStatus.
  • The Job REST API now automatically injects context information (current user, current caller, current wiki, current document, current secure document, the request URL and parameters) in the job thread.

The "page type" picker is bigger

In order to better see the available page types (like Encyclopedia, Article, etc...), the "page type" selector has been enlarged.

Include and exclude Notification filters

A user can now define notification filters that are either inclusive or exclusive.

Notifications that come from a document that matches an exclusive filter will then be discarded.

Solr search without programming right

It's now possible to do Solr request without programming right. In such a case the result will be filtered based on current script author right.

New HQL safe select columns

Some new allowed query select columns have been added:

  • XWikiDeletedDocument
    • id
    • fullname
    • language
  • DeletedAttachment
    • id
    • filename

Notification templates override through XObjects

A wiki administrator can now create custom NotificationDisplayerClass XObjects in order to override default templates used in the notifications tray. For more informations, please refer to the Notifications API documentation.

Disable notifications emails

You can disable the new notifications emails feature with the option notifications.emails.enabled on

CKEditor Integration Improvements

CKEditor has been upgraded to the latest version 4.6.2 which brings a couple of improvements and bug fixes. The XWiki integration has been improved by enabling and configuring the Advanced Content Filter for the XWiki 2.1 syntax. This should prevent the editor from generating content that cannot be saved as wiki syntax. The filter disables automatically the editor features that generate such content. Another improvement concerns the Styles drop down from the tool bar. We removed the styles that were not supported by XWiki and we added some new styles that we hope you will like. The support for wiki rendering macros has also been improved. Inserting a block-level macro in-line will split the paragraph, avoiding the "macro cannot be used inline" error. Besides these improvements, there are a couple of integration bugs that have been fixed.

Live Search in Administration

The administration menu now has a search input at the top that can be used to filter the administration categories and sections. At the moment the live search matches only the category/section name and description.

Notification Filters

When configuring Notifications, it is now possible to control the locations you are interested in. This allows to limit the number of Notifications you receive or only receive specific ones. For example you can decide to receive Notifications when Comments are created but only on the Blog page and its children.

Create Wiki button in the Wiki Index

A button "Create Wiki" has been added on the top of the Wiki Index, so you can decide to create a wiki after browsing the existing ones. 

This behavior is more consistent with the Blog Application, where you can create a new post in the same page that you could read existing ones. In the future, we will make this behavior generic in XWiki.

Confirmation before clearing notifications

Now a confirmation is asked before clearing all notifications.

Notifications Email Renderer

You can override the way notifications emails are generated for each individual event type. See Notifications API.

Grouping of similar Notifications

Similar notifications (for example a page has been updated by the same user several time in a row) are now grouped together and the details of all activities is displayed in the "details" section.

Enhanced notification filters AST (Abstract Syntax Tree)

In XWiki 9.7RC1, we have introduced an Abstract Syntax Tree (AST) to generate the query that fetch the events we want to display as notifications.

This AST has been created for 2 reasons:

  • in the future, the events might be stored in a different way, and the current HQL query might be not effective on a different storage (such as NoSQL). This AST abstracts the language so the query could still be effective, as soon as we have a translator for the target language.
  • it's easier for developers to write a NotificationFilter by generating an AST than generating a good HQL query that must escape its values and co-exists with other filters...

In this release, we have rewritten the whole internal query, and we had to introduce new types of ExpressionNode to handle all use-cases. This new nodes are:

  • BooleanValueNode to handle a boolean value
  • DateValueNode to handle a date
  • EntityReferenceNode to handle an EntityReference without manual serialization
  • GreaterThanNode to handle >= comparison
  • InNode to check if a property or a value is contained in a list
  • LesserThanNode to handle <= comparison
  • StartsWith to check if a value or a property starts with some other value

Since theses nodes have been created for our own implementation needs, please open a JIRA issue if you wish to have more.

Active Installs for Extensions

The number of active installs is displayed for each extension in the Repository App's home page livetable and in the extension page.

In the past, when several long running actions were happening on your wiki (page deletions, copies, subwiki creation, etc), an action had to be finished before the next one could be triggered. This is no longer the case and they run in parallel. If there are common pages affected by the various actions then a wait will still occur.

Ability to filter the page types

When you create a new page, you have to chose the type in a lot of them. To help you to pick the one you want, you can now filter them thanks to a text input.

Blog Post Template

You now have the option to create a blog post from anywhere inside the Blog page (or one of its children) by simply using the + (create page) button and selecting Blog Post as your new page's type

Recommended versions

It's now possible in the build or in the file to indicate a set of extension for which you want to use a specific version when they are installed as dependencies. By default all commons/rendering/platform extension have a recommended version synchronized with the version of the distribution or XWiki you installed.

Improvements of the Menu Application on Mobile

The space taken by the horizontal menus created with the Menu Application has been reduced by introducing menu burgers on Mobile display. The burgers are placed on the left side of the page, to avoid confusion between the Drawer menu and the horizontal menus.

Generate TOC for another page

It's now possible to generate a table of contents for another page with the introduction of the reference parameter.

CKEditor Integration Improvements

The integration with the CKEditor has been improved to support putting dedicated Insert Macro buttons on the tool bar. We enabled the native (in-browser) spellchecker and we fixed a few bugs.

Localization Section

It's now easier to pick a time zone or a language in the "Localization" section of the Administration, thanks to a filter box.

Gadget Wizard Update

The Gadget Wizard used to insert and edit the gadgets from the Dashboard has been updated to use the new Macro Wizard from the CKEditor.

Wiki initialization

Like the main wiki, sub wikis now have asynchronous initialization. This reduce a lot the chance that one or several initializing wikis end up eating all the farm input threads.

Improved HTML Export

The HTML export has been improved to better scale with the Nested Pages concept. The exported pages are now located in directories named after the parent pages in which they are located. In addition a basic HTML index page (index.html) is now generated at the root listing and linking to all exported pages.

Embedded core extension descriptors

All the jars packaged in the standard JAR comes with their complete Extension descriptor so XWiki won't try to find them in the repositories to get more information anymore. It will still be the case for any jar which does not provide a complete descriptor or jars that comes from the application server (but only the first time, then it's cached).

Image Attachment Preview

The attachments tab at the bottom of the page is now displaying a preview for image attachments.

Template Provider Improvements

We have improved the template provider edit form:

  • Both the creation and the visibility restrictions are now using a location picker. When you click on the "+" icon a popup appears with the page tree from where you can select one or multiple locations.
  • The icon field is now using an icon picker.
  • We rearranged the fields in order to better fill the available space. The left column contains visibility / display options, while the right column contains creation options.
  • We added more hints and improved some of the field labels.

See the Template Provider documentation for more information.

Grace time for Live notifications

The grace time of the live email notifications sent by the platform to the users can be configured in You can get more informations in the Notifications Application documentation.

Extension Manager improvements

Extensions installed as dependencies but which don't have any backward dependencies anymore are now taken into account by the upgrade job.

Extension sorted by rating

The Repository REST search API now sort extensions by Ratings when the search query is empty. This means that extensions will end up sorted by Ratings (per repository) in Extension Manager when accessing the Add Extension administration section. 

Note that needs to run XWiki 8.4RC1+ to see this feature for the extension repository (which is the one used by default in XWiki).

New icons

We added new mappings for the menu, more-vertical, edit, copy, move, download, log-in, log-out, th icons. They can be used using the Icon Themes service and they have equivalent in both Silk and FontAwesome themes. 

Also with the upgrade to Font Awesome 4.7.0 we improved the mapping for the basket, bell_delete, book_addresses, cake, calendar_add, calendar_delete, cart_add, chart_curve, cursor, emoticon_smile, hourglass, newspaper, note, paintbrush, shape_group, shape_ungroup, sitemap, television, thumb_down, thumb_up, tick, user_add, user_delete, weather_snow icons.

Optional Standard Flavor dependencies

The following dependencies are now optional, which means that they can now be uninstalled easily (before, uninstalling them would uninstall the Flavor too!):

  • xwiki-platform-logging-ui
  • xwiki-platform-user-directory-ui
  • xwiki-platform-scheduler-ui
  • xwiki-platform-help-ui
  • xwiki-platform-flamingo-theme-bootswatch
  • xwiki-platform-search-solr-ui
  • xwiki-platform-search-ui
  • xwiki-platform-office-ui
  • xwiki-platform-invitation-ui
  • xwiki-platform-appwithinminutes-ui
  • xwiki-platform-linkchecker-ui
  • xwiki-platform-sandbox
  • xwiki-platform-sharepage-ui
  • xwiki-platform-distribution-flavor-tour
  • application-templates-ui
  • editor-tool-highlighting-ui
  • xwiki-platform-wiki-ui-mainwiki
  • xwiki-platform-wiki-ui-wiki
  • xwiki-platform-menu-ui
  • application-help-center

Office Import from CKEditor

We upgraded CKEditor Integration to its latest version which brings support for importing office files directly from the CKEditor. There's a dedicated button on the tool bar that opens a dialog where you can select the office file to import and you can choose to filter the styles or to use the Office Viewer macro. Checkout the CKEditor Integration documentation for more information.

Update of the UI extension point for the Drawer

The UI extension point DrawerItem has a new parameter called category in order to specify where the drawer item should be located (either in the local or global section).

Temporary Resource API

A new API is available to create temporary resources. Here's an example of how you can use it:

// (1) Create the temporary resource reference.
String moduleName = "chart";
List<String> resourcePath = Arrays.asList("pie", "issuesByReporter.png");
EntityReference owningEntityReference = new DocumentReference("wiki", Arrays.asList("Path", "To"), "Page");
TemporaryResourceReference temporaryResourceReference =
   new TemporaryResourceReference(moduleName, resourcePath, owningEntityReference);

// (2) Create the temporary file.
InputStream content = new ByteArrayInputStream("content".getBytes());
File tempFile = this.temporaryResourceStore.createTemporaryFile(temporaryResourceReference, content);

// (3) Obtain the URL that can be used to access the above temporary file.
String temporaryResourceURL =

Non interactive mode in distribution job

The Distribution Job (on which Distribution Wizard is based) now support non interactive mode. For example if you want to fully automate an XWiki install and not get the Distribution Wizard you can use the the new Job REST API to start distribution job in non interactive mode before opening the instance to the public.

Improved Suggest Input for Database List Properties

The edit mode display for Database List properties that have "input" display type and "Use suggest" enabled in their definition has been improved by integrating selectize.js. The new widget handles both single selection and multiple selection properties. See the XWiki Data Model for more information on class properties.

Author Executor

It's now easier to execute code with a different author. Author is used to check SCRIPT and PROGRAMMING right. Example:, getAuthorReference());

Not Found Suggestions

We have added suggestions for the "document not found" and "attachment not found" error screens. The suggestions address minor typos and misspelling (including lower case vs upper case), but also bad location requests.

Added support for attachments bigger than 2GB

Attachment sized used to be limited by the size of a Java integer (2,147,483,647), the size is now a long (9,223,372,036,854,775).

Extension Repository adds recommendations

The Extension Repository Application now supports the optional feature of being able to mark some Extensions as Recommended. This provides some form of curation and separate "good" Extensions from others. The need arises when there are lots of Extensions. 

The screenshots show:

  • The view when the Recommendation feature is turned on
  • How a Recommended Extension is displayed with a badge showing it's Recommended

The Event Stream can now send events

The Event Stream now sends EventStreamAddedEvent and EventStreamDeletedEvent events when an event is added or removed from the Event Stream. You can find more informations in the Event Stream documentation.

Velocity and ScriptContext synchronization

VelocityContext and ScriptContext are now fully in sync (and if you find a use case where it's not true create a BUG on and VelocityContext is now close to internal detail. This allows for example defining a variable in Velocity and accessing it from a Groovy script:

## Setting some script binding in Velocity
#set($myvar = "toto")

// Lets use the script binding that has been set in previous script
print myvar

More details

Syntax highlighting by default in the wiki editor

The Syntax Highlighting Application is now bundled and enabled by default.

Option to use custom temporary file name for download

The temp action supports a new parameter (force-filename) to indicate the file to pass to the browser when force-download is enabled. See Standard URL Format for more.

Menu Application bundled by default

The Menu Application has been bundled with the default XE flavor (on the main wiki only) in order to allow admins to easily setup and display a horizontal menu. It can be easily accessed from the Applications panel by admins (members of the XWiki.AdminGroup) only.

New RSS feed for Notifications

It is now possible to get the notifications occurring on a farm through a RSS feed. The user can access their RSS feeds through two links in the notifications center and in the notifications tray.

Link document to corresponding extensions

A new set of scripting APIs have been introduced to link documents from the database to the corresponding installed extension.

Date filter in Livetables

You can now filter by date in the livetable.

New API for in-page component instantiation

The Wiki Component API offers a new interface called WikiObjectComponentBuilder that allows to instantiate new components using defined XObjects. For more informations, see the Wiki Component API documentation

XWiki Select Widget can be filtered

When you use an XWiki Select Widget, you can now let the user filter the proposed options dynamically.

Menus use the Icon Theme

Before all Icon themes shared the same menu icons (coming from Bootstrap's Glyphicon). Now the Icon themes affect also the icons from the content menu and drawer.

Simplified adding a logo to a Flamingo Theme

Adding a logo to a flamingo theme used to require you to first go into view mode on the theme page and attach the new logo image file before you would be able to see it in edit mode, as an option. Now, we have integrated the attachment selector so that you can upload and select a new logo image directly from edit mode, removing the extra steps. More details in the documentation.

Extracted the $displayContentFooter layout variable from $displayDocExtra

A new $displayContentFooter layout variable is available to control the display of the section after the document content but before the docextra tabs; i.e. tags, creator and creation date.
Now, $displayDocExtra controls only the display of the docextra tabs, without affecting the content footer section, individualized above.

Standard version of the document in the history

It's now possible to see/compare/revert to the standard version of a document (the one coming from the installed extension) right from the document history view.

Mandatory documents improvements

  • AbstractMandatoryDocumentInitializer have been made public (and improved a bit). It's very useful to initialize documents/classes required by an extension and there is no reason to forbid contrib extensions to use it.
  • An AbstractMandatoryClassInitializer base class have also been added to help class related mandatory initializers to concentrate on how they want the class to look like and not deal with how to migrate it anymore. Just need to implement createClass.

Notifications Preferences

It is now possible to enable or disable all the notifications sent by an application.

The server is now able to check for its new versions

The server can now check if a new version of its distribution is available. Note that currently, no notification will be sent to an administrator about this new version.

The version check can be enabled through the parameter extension.versioncheck.environment.enabled in

Content menu usability improvements

We've had various reports that people new to XWiki were struggling to find the content menu (edit, create, etc.) so after some discussions, we've decided to try to make it a bit clearer and user-friendly.
The main changes include:

  • adding labels and backgrounds to each menu button to make it clearer that users could/should interact with them
  • merging the 2 action menus into a single one ("More Actions") to address issues with understanding what is the difference between them and also the "fear of the cog" icon, which was confusing some users.

Live email notifications

A user can now receive live notifications when some events are triggered in the wiki.
Depending on the platform configuration, when an event that should trigger a live notification is sent, the platform will wait X minutes before sending the notification email. If during this period, new events of the same kind are sent, they will be grouped in the same email. You can get more informations in the Notifications Application documentation.

Default UI JAR dependencies installed on root namespace

JAR extensions of the default UI are now automatically installed on root namespace. This allows subwikis to be installed/upgraded by users without programming right.

New XObject type for in-page event definition

Custom events can now be defined directly in wiki pages through XObjects ; more information about this feature can be found in the Event Stream Module documentation.

Attachment Icons use the Icon Theme

The attachment icons displayed on the attachments tab at the bottom of the page is now using the configured Icon Theme.

Configuration in /etc/xwiki

XWiki will now try to find xwiki.cfg and in /etc/xwiki/ on file system before looking in the webapp resources.

Active installs client now send the memory used by the instance.

Configure Syntaxes

It's now possible to easily configure the markup syntaxes that you wish to be made available to your users when writing pages, directly from the Admin UI.
More details

Filtering Query parameters

It's now possible to filter not only Query statements but also Query parameters or in general any value returned by a Query object. This is achieved through a new method in QueryFilter. See the Query Module for more details. Example:

public class MyQueryFilter implements QueryFilter
   public Query filterQuery(Query query)
       return new WrappingQuery(query)
               public String getStatement()
                   return ... modified statement here...

Notifications can now be received by emails

It is now possible to receive notifications by email. The feature is still quite new and the displayed content will be polished in future versions, but you can already use it.

All you need is to select, on your user settings, the types of notifications you are interested in. The emails are sent periodically and according to you preferences: hourly, daily or weekly.

This feature will progressively replace the Watchlist application that has been available in XWiki for several years now.

Ratings on Extensions Repository home page

Rating is now displayed in the Repository App's home page livetable.

Notifications Filters Settings revamped

We have changed the way we display Notification Filters in the Notification Settings page. All filters are listed in a single table so that it is easier to manage (adding, disabling, removing from the same place).

Help Center Application bundled by default

The Help Center Application has been bundled with the default XE flavor (on the main wiki only) in order to help new users get familiar with XWiki faster. It can be easily accessed from the Applications panel.

Global Color Themes

It's now possible, on a subwiki, to use a color theme coming from the main wiki (global themes).

New default notification filters

Default notification filters can now be created.
When a default notification filter is created, it appears as activated on every profile of every user. Each user can then choose to disable it (or re-enable it) by clicking on the "Advanced filtering options" link in its notification center.

In this version, only one default filter is provided (called "System Filter") and allows each user to hide (or not) notifications coming from the system user of XWiki.

Easier Flamingo Skin customizations

We now provide a default less/custom.less file that can be overwritten for your custom Flamingo Skin. You don't longer need to manually overwrite less/style.less.vm in order to add your custom code. This will make the upgrade to a newer version of the skin much smoother.

Recommended Templates when creating pages

Depending on the location, when creating a page, the page type could "promote" several Templates and the first one might be automatically selected. This promotion occurs for Templates that have a "creation restriction" matching the current location (or a parent of the current location).

Example: When going to the Blog home page or when on any Blog post, if you try to create a page, you will see that the Blog Post Template will be displayed first in the list and it will be pre-selected. The same thing will happen for applications created with App Within Minutes.

More details in the documentation.

Template Restrictions

It's now possible to specify visibility restrictions separate from creation restrictions on a template provider and to set default values. See the documentation for more details.

Watched Locations Enhanced

The notifications toggles now take into account the preferences that you have enabled. Events that have not been enabled first will not be displayed anymore, even if you watch a location where these events happen.

This feature is still disabled by default. See how to test it.

Filer Stream improvements

Instance Filter output stream now support xobjects without class definition so input filters don't have to generate events for it. It automatically fallback on the xclass located in the current wiki.

Extension Manager improvements

  • new API in ExtensionManagerConfiguration to get a recommended version for a passed Extension id
  • various optimizations
    • speed resolve when the range contains only one version (don't ask all versions anymore)
    • better merge of version constraint ranges to only keep most specific ranges

Default values in User Preferences

When you go to your user profile in order to changes your preferences, you now see better what are the default values (both in view and edit modes).

Administration Improvements

The Administration has been reorganized. Most of the administration sections from the "Applications" group have been moved to existing or new groups. We applied a consistent style across all the administration sections and we added more hints for the configuration options. The administration menu is now implemented using a collapsible accordion. 

Reset Extension changes

It's now possible to reset changes listed in the Extension diff.

Document Tree Improvements

The tree now displays the rendered translated page title when the showDocumentTitle parameter is set to true, which is the default value. So the document tree is now taking into account the current locale when displaying the page titles. Moreover, the child pages are now sorted by their raw translated title, with a fall-back on the raw default title and then on the page name (if the raw titles are empty). Note that the rendered title may be different than the raw title if the title is dynamic (i.e. has Velocity code) so the child pages may not be sorted correctly if some have dynamic titles. The child pages are sorted by their name when the showDocumentTitle parameter is set to false.

The support for relative references in the root and openTo parameters has been improved. You still need to prefix the entity reference with its entity type though.

{{documentTree root="document:Alice" openTo="document:Bob" /}}

The behavior of the limit parameter has changed a bit: if there is only one child node remaining the "more ..." link is replaced by that child node, instead of displaying "one more".

The child nodes should be loaded much faster now as we refactored and improved the database queries used under the hood.

Ability to re-order items in the Applications Panel

It's now possible to re-order the items displayed in the Application Panel, in the administration.

Jobs REST API improvements

Fail job started with async=false now return an error code 500. A serialized error message with complete stack trace is also provided in the Job status.

"Recommended" concept has been added to Extension and Repository API

Clickable versions in the changes view

When viewing the changes introduced between 2 document versions (diff), the compared versions are now clickable so that the document can be viewed at those specific revisions.

New Namespace class

A new org.xwiki.component.namespace.Namespace has been introduced to help manipulate namespace in components and extensions world. It's mostly a helper for now but will probably be used more and more in APIs.

Admin user as a Simple user

When using the Jetty/HSQLDB demo packaging, the Admin user used to be an Advanced user, and this was troubling for users discovering XWiki since they were seing advanced features from the onset. The Admin user is now a Simple user, matching what you get in other packagings in which the admin user is created in the Distribution Wizard when XWiki is executed the first time.

Macro List in Syntax Help

The Syntax Help page now displays the list of all the macros available in your wiki. This was previously covered by the XWiki.WikiMacros page which has now been removed.

Wiki macros can now access current macro descriptor using $xcontext.macro.descriptor binding.

Consistent Blog Icons

The icons used in the Blog Application are now displayed using the Icon Theme Application, hence they are now consistent with icons used everywhere else in XWiki.

REST Resource to Retrieve Property Values

A new REST resource is available to retrieve the list of values of an XWiki class property. It currently works only with Database List (DBList) properties but we plan to add support for List of Users properties soon. The main use case for this new resource is to provide suggestions when editing object properties. See the REST API documentation for more details.

Execute Macros in context of another page

The Context Macro now supports executing macros in the context of the referenced document by using the new transformationContext parameter.

For example the following content generates the screenshot:

{{context document="Sandbox.WebHome" transformationContext="document"}}

Script Service API to get Macro descriptors

Example of usage: #set ($macroDescriptors = $services.rendering.getMacroDescriptors('xwiki/2.1'). Returns a List<MacroDescriptor>. More information in the Rendering Script Service documentation.

Localization Script service allow passing the Locale to search for (instead of current Locale).

Features of distribution are now sent by active install. This allows to have statistics on the various types of packagings that are used (ZIP packaging, DEB packaging, EXE packaging, etc).

Wiki Links with Auto-Generated Label in CKEditor

We upgraded CKEditor Integration to the latest version which brings support for creating wiki links with auto-generated label. The XWiki Rendering supports these type of links since a long time. They look like this in wiki syntax:


As you can see the link label is missing and so it is generated automatically when the page is rendered. The way the labels are generated can be configured. The new version of CKEditor Integration adds support for creating such links, but it's not enabled by default. You can enable it using the following in the Advanced configuration:

config['xwiki-link'] = config['xwiki-link'] || {};
config['xwiki-link'].autoGenerateLabels = true;

The reason we disabled this feature by default in CKEditor is because XWiki uses the page name (not the page title) for auto-generated link labels by default at the moment, which can confuse the users because we display the page title in the page tree and in the page suggest. But if you change the way the link labels are generated then you may want to enable this feature.

Mail resending at startup

At startup, mails that weren't sent yet are now resent automatically.

A new "instance" ScriptService has been introduced with an API to get the XWiki instance id. New methods will be added if needed. See Instance Module extension for more details.

XWiki Syntax 1.0 Removed

The XWiki Syntax 1.0 is no longer bundled by default. Its configuration has been removed from xwiki.cfg.

The AutoSave feature is now available in the WYSIWYG edit mode.

It's now possible to directly create a pre-configured mail Session. See Mail Sender API.

In some cases Extension Manager is able to propose to uninstall incompatible existing extension when installing/upgrading an extension. It's possible to force Extension Manager to fail the install plan in such a case to avoid any surprise. Note that it means that if an extension id changed it will fail to upgrade.

Notifications can be disabled with a property in

The Dashboard Macro now only displays a Gadget if that gadget's content is not empty when rendered. This allows Gadgets to control whether they should be displayed or not. For example, if you wish to display a Gadget only if the user has some permissions such as Admin rights, you can do that with an if in the Gadget's content.

XWiki#getDocument(..., String revision) now supports a syntax to get document from other sources (installed XAR extension, deleted document, etc.).

Menu application visibility change

The Menu application is configured to only allow Administrators to see it (this can be changed through permissions). However all Menu entries created with the application are viewable by everyone by default (provided the visibility scope used when creating the entry allows it; for example selecting a "Current User" visibility makes the created menu only visible for the current user).

uid Reference serializers now supports Locales in DocumentReference. It's added at the end of the string representation, in the same way as for other parts of the reference (same as what XWikiDocument#getKey() was doing).

It's now possible to change the socket and connection timeouts of a XWiki Repository in See XWiki Commons - Extension - Repository - XWiki.

Live Table Database List Filter

Filtering the Live Table rows by a column that corresponds to a Database List property should be easier now with the new suggest filter.

Filtering for "logo" or "skin" in the Administration menu will now list Look & Feel > Themes as the place to customize them.

The Message Stream Application is now disabled by default and needs to be enabled to activate the feature. This was chosen in order to not clutter the UI by default, considering that not all users would need this feature. In the future, it should be moved as an optional extension to install.

The Let's Encrypt root certificate is now automatically registered at runtime.

Extension Manager improvements

Extension Manager now generate events just before starting to install/uninstall/upgrade an extension.

Annotation toggle on click

We changed the way the annotation popup is shown: instead of hovering over the annotation icon you now have to click on the annotation icon. This new behavior is more mobile friendly.

Each package (WAR, Debian, installers, etc.) now has its own "environment extension" descriptor. Among other things it means they don't send the same id through Active Installs and this allows to know what packaging users have used to install XWiki.

A new method refresh() has been added to XWiki.widgets.LiveTable (javascript) to dynamically refresh a livetable.

Disabling emoticons

It's now possible to disable default emoticons by editing and overriding the mapping with an empty value. For example to disable (n) you'd add:

rendering.transformation.icon.mappings = (n) =

Two new specific extension points for providing recommendations in the Document/Attachment Not Found views:

Ratings Stars Improvement

Improved the way ratings stars are displayed by removing the white background from picture.

Active Installs now sends java specification version

The Active Installs now sends the java specification version in its pings to
See the documentation of the active installs for more informations.

Make most expensive steps more visible

The performance tree give interesting information but it was hard to see quickly which steps where causing performances issues.
More details

It is possible to create custom Notification Filters

see the documentation.

Add some missing CSS class iD : for "children", "comments", "attachments", "history" and "information" menu entries of flamingo flavor like the others menu entries.

Improvements when viewing a document version

When viewing a document revision (other than the last one), we're now showing the version information in the "last modified" section. Also, the "More actions" options are now displayed and the "view source" option will work on the currently displayed revision (instead of working on the latest version). Read more about document versioning in the documentation.

Filter Stream annotations

Thanks to Java 8 now supporting getting method parameter names through reflection, it's not required anymore to use @Name annotation in the definition of a filter. See Filter Module for more details.

It's also possible to override the name of the event (which is by default extracted from the method name) using the @Name annotation.

Filter manager make sure to calculate the event descriptor based on the top most overridden method (usually coming from an interface). Various things were not always properly inherited (like event name or reflection based parameters names).

Editing a Flamingo Theme loads a bit faster now.

Active Installs displays Distribution Graph

The Active Install application now displays a graph showing what packagings users have used to install XWiki (Debian, WAR, HSQLDB/Jetty, etc). You can see it live on

Minor Job API improvement

Added a "canceled" flag to AbstractJobStatus to simplify writing cancelable jobs.

The Active Installs pings are now sent over HTTP using a User Agent of XWikiActiveInstalls. This is important since some servers (such as CloudFlare) consider requests that don't have a User Agent set as being "spammy" request and blocks them. This makes the Active Installs ping module a better citizen.

Improved Not Found Screen

Added partial matches for the Document/Attachment Does Not Exist suggestions, in addition to the existing stemmed and fuzzy matches, for better results.

We were previously searching using indexed Solr data (stemmed) and also using fuzzy searches (string difference of 2; helps with minor typos), but this did not cover partial matches. Example: "Sandb" is matched by the fuzzy search, since it has a difference of 2 characters ("ox"), but "Sand" is not matched by anything (no stemming and too greater string difference - 3).

Extension Search Button

Added a search button on the Extension Manager pages in the Administration, to make it more user-friendly (users had to press the "return" key before).

Recycle Bin API Improvements

Updated the Recycle Bin and Deleted Documents API to make it easier to work with.

Two new generic extension points for the Document/Attachment Not Found views:

Viewers in the more actions menu are no longer affected when customizing the docextra section

The viewers entries in the content menu now listen to the $displayShortcuts layout variable (as intended) and are no longer affected by the usage of the $docextras variable. For example, to remove all tabs and all shortcuts for the current page, you could write in a Velocity script in the page:

#set($displayDocExtra = false)
#set($displayShortcuts = false)

The Velocity #try() directive now accepts an optional parameter to specify the name of a Velocity variable into which to save the caught exception. For example:


#if ($myexception != '')
  ... do something...

Beginning and ending of job is not logged anymore if the verbose is false in the job request.

Debian packages now override standard configuration files handling for xwiki.cfg, and web.xml to provide 3 ways merge with standard dpkg and apt command line tools.

Notifications sent by emails now contains a diff for each event

Previously only a link was displayed.

Layout Macro Category

A new Layout Macro category was added and the following macros were moved to it: Dashboard, Container and Gallery.

Most instances of stored ExtensionDependency, ExtensionAuthor, Version and VersionConstraint are now created through a factory to reduce duplicates in memory.

Multilists are filterable

We can now filter multiselect lists.

A property converter was added for org.xwiki.component.namespace.Namespace. This means among other things that it can be used as Macro parameter and it's now supported by automatic method parameters conversion in Velocity.

Attachment Selector can set a version summary

When using the Attachment Selector macro the user can now specify a version summary that will be recorded in the history. This is disabled by default but you can enabled it by setting the versionSummary parameter to true.

The Blog Category Panel now has an entry for All blog posts with a RSS feed for all.

DefaultReaderInputSource and DefaultWriterOutputTarget now support closing the wrapped Reader/Writer.

Injected extension repositories can now be associated with a priority

Edit Section Styling Improvement

Improved the edit section styling to be in consistency with the Flamingo Skin style.

Delete all mails

There's now a script API to delete all messages having a status in the database and their serialized messages on the file system.

Added an order field to the "After Header" extension point.

It's now possible to indicate flavors known to be incompatible with a distribution package. See Flavor Module for more details.

A new "table" category is now proposed in the Flamingo Theme Editor, where you can change the variables concerning the colors of the tables.

It's now possible to customize a Maven repository in with any Aether property. See XWiki Commons - Extension - Repository - Maven.

Support selecting and uploading SVG logos when editing a skin

Added support for uploading and selecting SVG images as logos when editing a skin. Previously, the attachment selector would not accept SVG files.

Get all org.xwiki* distributions

The graphs now matches all org.xwiki* distributions (used to only match XWiki Enterprise). Before, we were filtering on the org.xwiki.platform:xwiki-platform-web distribution id but since we now send the packaging used in the distribution id property, we needed to find a way to list all distributions done by the XWiki open source project.

New Recycle Bin API methods for batch operations

Added new methods that allow setting a batch ID to a deleted document and retrieving deleted documents for a given batch.

User Profile Preference Hints

We have added documentation hints for User Profile Preferences so that it's more obvious to understand what each option means.

Encoding parameter for RSS Macro

The RSS Macro now supports an optional parameter named encoding that allows forcing an encoding to use when reading the RSS feed. To be used for cases when the guessed encoding is not correct. Example:

{{rss feed="..." encoding="UTF-8"/}}

The default value of xwiki.users.initialGroups now depends on value (users are not added to XWikiAllGroup anymore when is enabled).

It's now possible to disable core extension update at startup. See property extension.core.resolve in

Deprecated and Internal Macros Hidden by Default

When inserting a macro, the WYSIWYG Editor (CKEditor) is now hiding the deprecated and internal macros from the "All Macros" category that is selected by default. In order to insert a deprecated or internal macro you need to explicitly select the corresponding category from the list. The following macros have been moved to the Deprecated category: Spaces, SpacesIndex and Workspaces.

Restore document and translations

When deleting the final revision of a document, from the History tab, the original document and all its translations may get deleted. To avoid having to restore them one by one, they are now all grouped in the same batch so they can be restored together.

Template Icons

When creating a new page, the Template Providers for specific applications can now add an icon and a description. We added new icons and descriptions for the Blog and Dashboard default templates. 

Notifications for comments

A notification is now displayed when a comment is posted on a page (if you enable it in your settings).

An InstanceId converter has been added so that it's now possible to convert from String to InstanceId and vice versa (useful for Velocity scripts needing to call an API that accepts an InstanceId object for example).

Display extension id

The extension id is now also displayed in the Dependencies section of the Repository Application.

New Syntax#valueOf(String) API

SyntaxFactory is now deprecated and replaced by the static Syntax#valueOf(String).

CKEditor Upgrade

The CKEditor has been upgraded from version 4.6.2 to 4.7.2. This brings a lot of bug fixes and some improvements:

  • select and manipulate arbitrary rectangular table fragments (a few cells, a row or a column)
  • paste from Microsoft Excel
  • improved paste from Word
  • new color picker

See the CKEditor release notes for more information.

It's now possible to "match" an ExtensionId with another ExtensionId having a null version. For example extension group:id will match group:id/version considering the first one as "all the version of the extension with id group:id".

Replace attachment with Attachment Selector

When uploading a new file from the Attachment Selector you now have the option to replace the selected attachment.

When importing an office document with embedded images, those images are now saved as attachments to the target wiki page. This used to be the default behavior until recent versions of LibreOffice / OpenOffice have started to embed the images in the generated HTML using the Data URI scheme, which ended up in the wiki syntax. We have now restored the initial behavior.

Features of extensions are now sent by active install. These are the various extension ids under which a given extension is known. Usually used to relocate extensions under a new extension id.

Extension Manager improvements

Extension Manager now gives a chance to users requesting it in their profile configure default conflict resolution behavior at the beginning of the install/upgrade/uninstall.

New typed extensions of Namespace

Each supported type of namespace now have a corresponding typed extension of org.xwiki.component.namespace.Namespace. See Component Module.

Visual separation for page tabs

The page tabs are now visually separated from the page content.

New parameters for the Gallery Macro

The Gallery Macro has 3 new parameters. You can use the width and height parameters to control the amount of space reserved for the gallery. The class parameter can be used to add custom CSS class names in order to customize the appearance of a gallery. Here's an example where we use the Bootstrap Grid system:

{{gallery class="col-xs-12 col-sm-6 col-md-4" width="" height="300px"}}
image:[email protected]

Refactored notifications module

For this release, we refactored the xwiki-platform-notifications modules by splitting it into multiple submodules. Some young APIs have been moved to sub packages.

See XWIKI-14575.

Created by Vincent Massol on 2016/09/23

Get Connected