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

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.

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.

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.

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 entry types improvements

Starting XWiki 10.4 we started to introduce the concept of page "Types".

  • Several ways to protect extension pages are now provided and can be configured in

    #-# The possible choices are:
    #-# * none: no protection at all
    #-# * warning (the default): everyone get a warning when trying to edit a protected document
    #-# * deny = EDIT/DELETE right is denied for everyone except for admins who just get a warning
    #-# * forcedDeny = EDIT/DELETE right is denied for everyone, admins can't force edit/delete
    #-# * denySimple = EDIT/DELETE right is denied for simple users except for simple admins who just get a warning
    #-# * forcedDenySimple = EDIT/DELETE right is denied for all simple users, simple admins can't force edit/delete
  • Main.WebHome page entry type is now demo since the wiki home page is configurable so there is no reason to prevent its deletion
  • XWiki.XWikiAdminGroup page entry type is now configuration, was forgotten in previous version
  • the type home has been removed since it was designed for wiki home page use case which does not make much sense anymore

New default Color Theme

We wanted to refresh the default color theme (Charcoal) for the XWiki Standard 10.x cycle and the community voted for the Iceberg theme, which is our new default theme. We kept a professional / clean look and feel and opted for blue as our main color. The purpose of the default color theme is to cover as many use cases as possible, so if you want to spice up your instance try one of our community contributed color themes

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

Link Autocomplete in WYSIWYG Editor

You can now create links to existing wiki pages and attachments directly from the editing area using the link auto-complete feature. Just type [ (open square bracket) followed by at least 2 characters and you will get link suggestions based on the typed text. Checkout the CKEditor Integration documentation for more information.

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()

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

Improved Notifications UI

The notifications menu is more clear now, and a link to see what has changed is available in the details of each event, when you click on the date.

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:

Activity Stream is not bundled anymore

The good old Activity Stream Application is not bundled anymore with XWiki. This decision has been made because the Notifications Application can now handle the same features with better performances.

As a consequence, we have also modified every applications that was using Activity Stream to use the new Notifications features.

For backward compatibility, we also provide a Legacy Notification Activity Macro that would help you not to break the pages you have created with the use of the {{activity/}} macro..

Children Macro

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

Inline Macro Content Editing

The macro content can now be edited inline with the WYSIWYG editor, if the macro is used on a separate line (stand-alone, not inside a paragraph of text) and the macro descriptor declares that its content is rendered without being transformed. There are a few macros that do this at the moment (box, info, warning, error and figure macros) but we're planing to add support for more macros in the next versions.

See the CKEditor Integration documentation for more information.

Improved Notifications email layout

The email layout for notifications has been totally redesigned.

Filesystem store by default

Filesystem store is now the default location for attachments and deleted documents. See attachment storage documentation for more details.

XAR Children Export

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

New CAPTCHA API and CAPTCHA implementations

A new CAPTCHA Application and API have been implemented, replacing the old Captcha Module, thus making it even easier to use and validate a CAPTCHA in a form. Also, it's now very easy to change the CAPTCHA implementation that you want to use in your wiki, directly from Administration, without having to touch a line of code.

Also, a new and much more extensive JCaptcha implementation has been provided for the new API, that works offline and features image, sound and text CAPTCHAS. It is bundled by default with XWiki Standard.

As a popular alternative, a Google reCAPTCHA implementation is also available, installable as an extension using the Extension Manager.

The locations in XWiki where CAPTCHA is being used by default (e.g. Registration and Comments) will use the CAPTCHA implementation that you have enabled and configured in the "Administration >> CAPTCHA" section.

Notifications fully replace the Watchlist

It's finally done! In this version, we have decided to disable the Watchlist in XWiki, by default. Instead, the Notifications Application is now the central feature in XWiki for notifications. 

Don't forget to warn your users about the need to enable email in their notification settings!

Note: you can rollback this change by disabling the Notifications Application and enabling the Watchlist again.

Page picker velocity macro

You can now use a #pagePicker($parameters) velocity macro (works like #userPicker) to display an input auto-suggesting pages. Pages are searched by full name (e.g. Sandbox.Page) and title (depending on the locale of the user).

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

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

Improved performances

We have enabled asynchronous rendering of several UI elements: side Panels, Menu entries and more. This allows to have the page content rendered much faster than before giving a nice feeling of increased performance and snappiness.

Page fields now support auto-suggestion

You can now use the auto-suggestion feature on Page fields by typing the page title or the page reference. 


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.

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.

Table of content in the notifications email

Now, the events described in the notification emails are ordered by pages, and then by dates. To have a quick view of all the changes, a table of content is now displayed at the beginning of the mail.

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.

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

New Notifications Macro

It is now possible to list the notifications for the wiki by using the Notifications Macro. You can use it in any page or any dashboard. The goal is to be able to replace the Activity Stream which is going to be deprecated (too slow and missing some features).

New asynchronous rendering framework

It's now possible to easily enable asynchronous execution and caching for panels, wiki UI extensions and wiki macros.

The following fields have been added:

  • Asynchronous rendering (async_enabled): a boolean indicating if the element should be executed asynchronously. Disabled by default.
  • Cached (async_cached): a boolean indicating if the result of the execution of the element should be cached. Disabled by default.
  • Context elements (async_context): the context information required for the execution of the element (current user, current document, etc.). It's also used to generate the cache key.

A org.xwiki.rendering.async.AsyncContext Java class and corresponding $services.async script service have been introduced to control:

  • if the asynchronous execution should be enabled/disabled in the current context (in which case any following execution of panels will be synchronous no matter how it was configured in the first place for example).
  • a set of methods to help register a set of entities and components which should lead to cache invalidation if they are modified, for the current asynchronous execution.
  • a way to register some custom resources to remember. Their cached results will be reinjected later (for example it's used to remember the skin extensions required by a cached element). One can then implement org.xwiki.rendering.asyncAsyncContextHandler to restore them when using the cached content.

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.

New Page API

10.6 brings the Page concept which was introduced in 7.4 to the API and the macros.

PAGE EntityType and Page*Reference classes

First thing first we now have a few new types in EntityType and the corresponding typed Page*Reference helpers. One for each of the element you can have in a page:

  • PAGE

Corresponding resolvers/serializer/providers

Each of the already existing DOCUMENT oriented resolvers and serializers have their PAGE oriented implementation.

Conversion from DOCUMENT to PAGE world

The entity resolvers automatically convert from/to DOCUMENT from/to PAGE world references. So yes, using a resolver is the official way to do that conversion.

New syntax

Pages reference have a very different syntax.

To summarize it's a filesystem path syntax with support for parameters.

Here is are a few examples:



  • separator: "/" between all elements except WIKI which is still ":"
  • escaping: still "\"
  • current, parent support: like in a file system you can refer to the current page or parent page/wiki using "." and ".."
  • parameters: we now have syntax to express the parameters of an EntityReference. Each parameter is separated by a ";" at the end of the entity name
  • default parameter: the syntax have the concept of default parameter which mean a parameter for which you don't need to indicate the name. For example PAGE reference default parameter is "locale"

New resource reference

A new resource reference of type PAGE has been added and can be used in links for example:



  • the $services.model API also got his own new helpers to manipulate pages
  • support for page references have been added to various oldcore (XWiki/XWikiDocument/Document) and bridge (DocumentAccessBridge) APIs
  • support for page references have been added to the security module

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.

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.

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.

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).

Auto-suggest for pages

Several inputs related to selecting pages references now support auto-suggestion, making it much simpler to use and less error prone (such as not having to know if the reference should end with WebHome or not!). See the screenshots for some examples.

New document type in XAR extensions

It's now possible to indicate a type for each entry in a XAR extension. The type indicates what actions are allowed for a document once it's installed (edit, delete) and how it should be handled during upgrade (merge, skip, overwrite, etc.). See XAR package format for more details about this new property.

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.

No more unset xobject property

Missing properties in an xobject (compared to the xclass) are now automatically added (with a null value most of the time) during save or when adding a new field in a class. Among other things it means you can now use fields in a database query without wondering if the field exist or not, no more missing result because the property is not set in some object yet.

Syntax highlighting by default in the wiki editor

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

New super secret developers shortcuts

We are now providing the following developer shortcuts:

  • The key sequence X, X, X, A toggles the "advanced user mode" for the currently logged in user. Performing this sequence as an advanced user will switch it back to the "simple user mode" (the default).
  • The key sequence X, X, X, H toggles the "show hidden pages" option for the currently logged in user. Performing this sequence while already viewing hidden pages will switch back to hiding hidden pages (the default).

Get the complete list of developer shortcuts here.

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.

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).

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.

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.

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.

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

The identity of the current user is now available in javascript

JavaScript developers can now get the reference of the current user thanks to the xwiki-meta module that you can use like this:

require(['xwiki-meta'], function (xm) {
  console.log('Hello: ' + XWiki.Model.serialize(xm.userReference));
 // Will display "Hello xwiki:XWiki.Admin" in the console

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

External URL generation improvements

It's now possible to set the port to use when generating an URL for a wiki in the each wiki descriptor. When the port is not set for a wiki, XWiki fallback on the main wiki descriptor.

Subwiki secure property (which indicate if HTTPS should be used instead of HTTP when generating a URL for the wiki) now inherit main wiki value if not explicitly set.

The first time XWiki is accessed the main wiki descriptor is generated using what can be found in the request's URL. For example if you access your wiki using https:mydomain:9898/xwiki/ you will end up with the following main wiki descriptor:

  • alias: mydomain
  • secure: true
  • port: 9898

Also XWiki now supports the Forwarded (RFC7239) standard HTTP header when extracting information from the URL used by the client.

Filesystem attachment improvements

A few of the long standing issues in the filesystem attachments storage have been fixed:

  • Deleted attachments are now available on the "Deleted Attachments" tab of the Page Index
  • The attachment porter script is not needed anymore (XWiki supports mixed attachment storage which means database attachment will stay in the database and keep working after changing the default store)
  • Various other bugfixes

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).

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.

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 =

Priority between Notification Filters

Notifications Filter has now a getPriority() method, to handle advanced use-cases when a filter needs to have priority over some others.

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.

User membership in the profile

It's now possible to see the groups a user is member of in the profile. See User Profile Application.

Filesystem store improvements has changed format

Support for case insensitive filesystems has been added in the filesystem store. Among other things it means that most of the existing paths need to be modified (upper case characters are now escaped). There is an automatic migration for it but be careful if you are using some custom tool manipulating directly the store files (since the format has changed).

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.

All filters preferences are displayed in the same livetable

The "advanced filtering options" window has disappeared, and all filters are displayed in the same place.

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.

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.

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.

Updated the comments modals

The comments pop-ups that are displayed for deleting a comment and for permalink are now bootstrap modals, having the same functionality as before.

Allow wiki macros to indicate the type of parameters

You can now specify the Java type of a wiki macro parameter. It used to not be possible and all wiki macro parameters were Strings.

Notification emails embed images present on the mail template

The notification emails are based on a template (XWiki.Notifications.MailTemplate) that you can customize. Now it is possible to attach images to that templates, and they will be embedded in the notifications email.

To display them in the email, you need to use the syntax <img src="cid:myImage.png" />.

Notifications Filters Store

Due to scaling issue, we have changed the way the notification filter preferences are stored in the wiki. They are not saved in the user profile pages anymore, but in their own database table.

A migration to the new store is necessary for existing filter preferences. It is done automatically when you first start XWiki after upgrading, but it may take time.

Thanks to this improvement, we have re-enabled the default behavior for the Auto Watch feature so that users automatically watch pages they have contributed to.

Author Executor

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

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.

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).

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.

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

Macro Content Prefill in WYSIWYG Editor

When inserting a macro, the macro content text area is prefilled with the text selected within the editing area. This means you can for instance transform a paragraph into an error message by selecting the paragraph text, click the Insert Macro button from the tool bar, select the Error Message macro and insert it. Checkout the CKEditor Integration documentation for more information.

Followed users in the user profile

A user can now see again (it was temporarily removed in past version while we migrated from WatchList to Notifications) the list of the users she is watching in the "network" panel of her user profile.

Removed misleading shortcut

Removed the META+V shortcut used in the jump dialog as it was preventing users from pasting.

New Page picker in the App Within Minutes field palette

A Page picker has been integrated in the App Within Minutes and works like the User picker.

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).

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.

Rename/Move protection

As with the delete action, if you try to rename a page that belongs to an installed extension you will now get a warning suggesting you to uninstall the extension instead and asking you to explicitly select the standard pages you want to rename.

Note that the displayed message text is currently the same one as for delete but that will be fixed in the next version.

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.

Minor changes do not generate notifications anymore

A new filter has been created, to hide events about minor changes. This filter can be disabled, but is enabled by default.

Default empty choice for list properties

In the default list property editor an empty choice (generally displayed as "---" but it can be translated) is now always added for non multi select based editing. This avoid hacks like the "---" value which used to be used in various XWikiPreferences properties choices.

Shortcuts are now handled by the Keypress JS library

We now handle keyboard shortcuts using the Keypress JS library.

The old API for declaring and managing shortcuts has been kept (XWiki.shortcuts). However, some parameters such as propagate or type are now handled differently.

Please refer to the API to learn more.

Delete all from the recycle bin

It is now possible to permanently delete all pages that have been already deleted, in order to clean the recycle bin. See Index Application Documentation.

Reset Extension changes

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

Create a job to delete all from the recycle bin

It is now possible to create a job for permanently delete elements from the recycle bin. It is supported in the Refactoring Script Service as explained in its documentation.

Macro content can be declared to be inline editable

Some part of the macro content can be declared as inline editable: the user will then be able to edit those parts of the content directly in the wysiwyg editor.

In order to make this available you need to specify 2 information when declaring the macro:

  1. the type of the macro content
  2. the parts of the macro that can be editable inline

Specify the type of the macro content


You need to specify it in the constructor of the DefaultContentDescriptor

public DefaultContentDescriptor(String description, boolean mandatory, Type type)

The type of a content which can be editable inline, is List<Block>.
In order to simplify its declaration, we created a constant that can be immediately used:

new DefaultContentDescriptor("Content of the message", true, Block.LIST_BLOCK_TYPE));

Specify the parts of the macro that can be editable inline

When declaring the result of the macro by overridding execute method, you can specify which parts of the macro will be editable inline, by specifying some metadata.

For example, if you want to declare a block containing a logo which is always the same and a block which will be editable inline you can specify it like that:

ResourceReference imageReference = // declare the reference to the image logo
Block logoBlock = new ImageBlock(imageReference, true);
List<Block> content = this.contentParser.parse(content, context, false, context.isInline()).getChildren(); // parse the existing content and get its children blocks
Block editableContent = new MetadataBlock(content, this.getNonGeneratedContentMetadata()); // specify the right metadata in order to make the content editable inline
return Arrays.asList(logoBlock, editableContent);

The obtained result for the rendering will look like:

<span id="logo"><img src="mylogo.png" /></span>
<div data-xwiki-non-generated-content="java.util.List&lt; org.xwiki.rendering.block.Block &gt;" class="xwiki-metadata-container">
    <p>my editable content</p>

The syntax used inside the editable part can be declared by using a syntax metadata. 

Consider that nested macro will be editable inline, only if they also declare an editable content. On the same idea, if a nested macro declare an editable content, it can be used only if the parent macro also declare an editable content.

Please note that between 10.10RC1 and 10.10 the metadata changed its name.
So with 10.10RC1, in the above snippets you should replace the method getNonGeneratedContentMetadata by getUnchangedContentMetadata, and the html attribute data-xwiki-non-generated-content by data-xwiki-unchanged-content.

Notifications Preferences

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

REST API now supports the use of minor revision for page changes

Add ?minorRevision=true to your REST calls and the page will be updated with minor revision. See the whole documentation for the REST API.

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.

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.

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.

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.

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.

Auto Notifications on changes

Thanks to an improvement to the AutoWatch feature of the notifications, users now get notified on changes done to pages they previously edited.

Notification Filter Preferences that concern hidden pages are not listed anymore

Filters that concern hidden pages are not shown in the table, unless you enabled the option to see hidden pages. More informations: Hidden (technical) pages.

Context save/restore

New tools have been introduced to help save and restore contextual information. It's useful for example when transferring contextual information from one thread to another to execute asynchronous tasks. This is done trough org.xwiki.context.concurrent.ContextStoreManager.

It's possible to add support for more contextual information by implementing org.xwiki.context.concurrent.ContextStore components. See documentation for more details.

On Jobs side a new context property have been added to the org.xwiki.job.Request to automatically restored passed context data before executing the job.

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

After document header extension point

It is now possible to inject some content after the document header, that is below the title / update info / actions block, by implementing the org.xwiki.platform.content.header.after UI Extension Point.

XWiki Select Widget can be filtered

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

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

Use RequestFactory to create a request from the refactoring script service

The refactoring script service has been refactored: you need to access the new RequestFactory in order to create any kind of request.
For example a script using :

#set ($renameRequest = $services.refactoring.createRenameRequest($source, 'NewName')) 

should now use: 

#set ($renameRequest = $services.refactoring.requestFactory.createRenameRequest($source, 'NewName')) 

All the API related to refactoring operations themselves remains at the same place. See the Refactoring Module Documentation for all information.

Figure Macro

A new Figure Macro was created to be able to add illustrations (images, tables, code, graphs, etc) along with optional captions.


[[image:macaque.jpg||alt="Macaque in the trees"]]

{{figureCaption}}A cheeky macaque, Lower Kintaganban River, Borneo. Original by [[Richard Clark>>]]{{/figureCaption}}

New XAR entry types

The following new XAR entry types have been added:

  • customizable

Notification email details

It's now possible to configure what kind of information is displayed in the "details" section of the notification emails. Currently, there are 2 levels:

  • None, if you don't want to see change details and only get links to changes
  • Standard to display the change details as diffs.

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.

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.

Ratings on Extensions Repository home page

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

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.

Larger attachments by default

Till now the default limit for attachments was set at 32MB. It's now been increased to 100GB.

Global Color Themes

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

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.

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.

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 but this feature is not active by default and the information about new versions are not displayed anywhere yet. In the near future, we'll add a new notification visible to administrators when a new version is found.

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

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.

Notifications Auto Watch is now disabled by default

An important bug has been discovered in the Notification Applications that prevents using the Auto Watch feature when the wiki contains a lot of pages. For this reason, the default behavior for the Auto Watch feature has been set to not automatically follow any page. Nevertheless, users and administrators can still decide to change their own settings.

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.

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...

User Picker Velocity Macro Changes

The #userPicker Velocity macro has been modified to have a compact display. There is no toggle to switch between local and global suggestions as the picker retrieves suggestions from both the current wiki and the main wiki depending on the current wiki's user scope. You can overwrite this if you want using the data-userScope parameter.

#set ($userPickerParameters = {
  'id': 'wikiOwner',
  'name': 'owner',
  'value': $descriptor.ownerId,
  'data-userScope': 'GLOBAL_ONLY'
#set ($multipleSelection = false)
#userPicker($multipleSelection $userPickerParameters)

The JavaScript library used to fetch the suggestions and to display them has been replaced, causing modifications to the HTML structure of the user picker. This means that you may have to update your code in case you did customizations on top of the old library. The new library we use is selectize.js.

Translation fallback

It's now possible to pass a list of keys to test one by one until one is found. See Scripting for more details.

Navigation Panel Configuration

The top level application pages are now excluded by default from the Navigation Panel. You can still access the corresponding applications from the Applications Panel. This allows the Navigation Panel to focus more on your own content pages. However, you can disable this filter (if you wish to see all the pages) or configure other page excludes from the Wiki Administration.

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).

Default Notifications

In the global settings, administrators can select which applications and/or event types should be enabled by default for all users. The user can then override the default settings, but if he/she doesn't set anything, the preferences of the wiki where he/she belongs to are applied.

The inheritance is "Main Wiki preferences < Current Wiki preferences < User preferences".

Jobs improvements

  • A framework has been introduced to make easier to write jobs UI with question/answer support. You can see more details in the Job Module documentation.
  • AbstractJobStatus now implement CancellableJobStatus interface which allow generic code to control jobs that can be canceled
  • it's now possible to get the time left before a job question timeout using newJobStatus#getQuestionTimeLeft method

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.

Language Picker

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

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.

See your own activity in notifications

It's now possible to see your own activity in the notifications (either in the "alert" menu or in the emails). By default, your activity is hidden, but you have the ability to disable this filter in the "advanced filtering options" section of your notification settings.

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.

Visible Save

The save buttons bar is now always visible which makes it simpler to see the buttons, even for long pages (some users used to not find the buttons).

Ability to set the default auto watch mode in the administration

It is now possible, for administrators, to set the default auto watch page behavior.

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.

The Notifications Macro now includes a RSS view

Improved Multi-Term Search Relevancy

This is commonly referred to as sloppy phrase matching and allows for more "Googleish" query strings. The implementation allows for partial multi-term matching so that searching for long phrases won’t “hide” documents with a subset of shorter multi-term matches.

For those interested in the more technical aspects:

  • The query string is split into groups of multi-term contiguous sequences (word shingles), ignoring stopwords where appropriate.
  • The higher the number of terms in close proximity the more relevant the document will appear.
  • While the order of the terms in the query string is important for forming word shingles, the order in which the terms appear in the document doesn’t affect the score.
  • Stemming is still used so that all forms of each word are considered matches even in multi-term relevancy calculations.
  • Exact matches are still returned when terms are encased in quotes.

New HQL safe select columns

Some new allowed query select columns have been added:

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

Disable notifications emails

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

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. 

Hints for class properties

It is now possible, for developers, to add an hint in a class property. Then this hint is displayed in the object editor.

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.

Improved Navigation Panel Administration

The Navigation Panel administration section has been improved with support for drag & drop. You can now drag pages from the navigation tree to exclude them and back to the tree to include them. See the Navigation Panel documentation for more information.

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.

Set the default level of details for the notification emails

The administrator can decide what is the default value when the users don't touch their settings. The following screen is available in the "Notifications" section in the Administration.

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.

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.

The name of the wiki is now displayed in the notifications

When a notification concerns a page that is not in the current wiki, the name of the wiki is now displayed in the notification.

The notifications macro can now handle tags

The "tags" parameters can be used to filter events that concern pages marked with some given tags. In a multi-wikis environment, it works only on the current wiki.

Hiding notifications that are read

Since the introduction of the Notifications Application in XWiki, it was possible to mark some notifications as "read". They were displayed differently, and not counted in the red circle above the bell, but they were still there.

Now, it is possible to decide not to show them anymore thanks to an option in the user's notification settings.

Date filter in Livetables

You can now filter by date in the livetable.

Prevent users from deleting/moving/renaming pages containing used XClass

Users are now warned when they make refactoring operations (delete, move or rename) in pages that contain used XClass. Simple users are forbidden to realize those operations, whereas advanced users get an UI to allow them selecting the pages to refactor. 

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.

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.

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.

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

Date Script Services

A new script service called $ is now available. It currently implements the "time ago" displays (such as "12 minutes ago") and it support a lot of locales. See: Date Script Service.

Compact User Picker

The List of Users and List of Groups class properties have a new compact display that shows in view mode the user / group avatar followed by the user / group name. In edit mode the selected users / groups are shown in-line. Suggestions are retrieved from both the current wiki and the main wiki, depending on the current wiki's user scope (there's no toggle to switch between local and global users anymore). See the Data Model documentation for more information. This is the same user picker that has been already integrated in the Live Table user filter.

The compact user picker has been integrated in other places such as Administration, App Within Minutes, Wiki Application, Message Sender, Solr Search user facet and Share Page.

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.

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.

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.

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.

The "network" tab is back in the user profile

The "network" tab disappeared in XWiki 10.3 for technical reasons. Thanks to the new Notifications Macro, it comes back in XWiki 10.4. It's also better than before since it now allows dismissing events.

The goal of this tab is to display all the events performed by the users you are following.

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.

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.

Auto-suggestion of pages

The auto-suggestion of pages feature has been implemented in new places:

  • Administration Descriptor section
  • Template Provider Sheet

Document Tree Exclusions

The Document Tree macro has a new parameter named "exclusions" that allows you to exclude a list of nodes from the tree. For instance, in order to exclude the "XWiki" top level node you can use:

{{documentTree exclusions="document:xwiki:XWiki.WebHome" /}}

Check the documentation for more information.

Image Attachment Preview

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

Filter users in notifications

You now have the ability to black list some users in the notifications you receive (by default you follow everyone).

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.

Live Table User Filter

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

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.

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.

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.

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.

Confirmation before clearing notifications

Now a confirmation is asked before clearing all notifications.

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.

Edit protection

As with delete and rename operations, if a user tries to modify a page belonging to an Extension, a warning will be displayed to explain that it's very risky and it should be avoided.

10.4 will introduce configuration that helps the user have more control on this behavior (disable edit completely without even a warning, allow a user to hide this warning, etc.).

Notifications Email Renderer

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

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.

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.

Improvement of the icon API

It is now possible to manually pull icon theme resources and get a metadata map of an icon to customize the display.

See the Icon Theme Application extension for documentation.

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.

XWiki on WildFly

XWiki now deploys fine out of the box on WildFly 14.x.

Improved Users Administration Section

The Users section from the Wiki Administration has been improved:

  • Shows the user avatar
  • Shows the user scope (Global vs. Local) when you are on a subwiki
  • Has nicer modal popups for creating, editing and deleting the users

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.

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.

Improved Groups Administration Section

The Groups section from the Wiki Administration has been improved:

  • Shows the group avatar
  • Shows the member type (User vs. Group) when listing the members of a group
  • Shows the group scope (Global vs. Local) when you are on a subwiki
  • Has nicer modal popups for creating, editing and deleting the groups

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.

Group manager

A new and corresponding script service are now available.

See more details on User Module.

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.

Distribution Wizard configuration

It's now possible to control from the file if the Distribution Wizard should be automated or interactive and which Flavor to install/upgrade on main or sub wikis. See DistributionWizard for more details.

Layout Macro Category

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

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)

Multilists are filterable

We can now filter multiselect lists.

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.

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.

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.

It is possible to create custom Notification Filters

see the documentation.

New Export "excludes" parameter for XAR/HTML

The new excludes parameter now allows the API users to craft more expressive request, such as "export all this space except those pages". This new parameter is supported for both XAR Export and HTML Export.

Notifications sent by emails now contains a diff for each event

Previously only a link was displayed.

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

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.

Argument to specify the wait time in the script

You can now specify, in the script, the number of seconds to wait for the XWiki lock to be released before exiting. For instance " -wt 10" will make the script wait 10 second. The default wait time is now 30sec.

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

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

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

Minor Job API improvement

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

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.

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.

Metadata are rendered in Annotated XHTML

Metadata provided in the page structure (XDOM) are now output when using the Annotated XHTML renderer.

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).

Customize message for denied access

It is now possible to customize the content displayed to the user when a denied access occurs, without modifying the skin, hence facilitating the upgrades. This customization can be brought by creating a page at XWiki.AccessDenied. It works in the same way as XWiki.DocumentDoesNotExist, XWiki.WikiDoesNotExist and XWiki.AttachmentDoesNotExist. See also the related documentation paragraph "Customizing error pages" that was added to the XWiki configuration guide.

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.

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:

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

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.

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

Replace attachment with Attachment Selector

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

Edit Section Styling Improvement

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

The content of 'doc.location' in Livetables is automatically set to HTML

The content of the 'doc.location' column in livetables is now automatically set to HTML, there is no need to add 'doc.location':{'html':true} to the $columnProperties of the livetable anymore.

Document index can be sorted by title

The main document index (and also the children/siblings of a page) can now be filtered and sorted by title. In previous versions this was not the case, because filtering and searching happens on the values stored in the database, which can be different from the displayed title.

While this obstacle has not been overcome now pages which have a displayed title which is different from the title stored in the database are now marked with the symbol "1". If these pages are found in the result set, a note is displayed explaining why filtering and sorting might not work as expected for these pages. 

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.

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

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.

Execute JavaScript Inside Editing Area

The CKEditor has a new configuration option to enable the loading of the JavaScript Skin Extensions inside the editing area. This can improve the way macros are displayed inside the editor, if they require JavaScript, but it has some downsides. Check the CKEditor Integration documentation for more information.

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

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.

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.

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

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"/}}

You can now disable the WatchList Application without uninstalling it thanks to a new option.

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

Injected extension repositories can now be associated with a priority

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.

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

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

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.

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

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).

New Syntax#valueOf(String) API

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

Export menu extension point

It's now possible to inject a new button in the export menu. Checkout the documentation for more details.

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.

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.

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.

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. 

No longer committing XML document date fields

Our maven XAR plugin's xar:verify goal will now fail the build if the XAR module contains XML pages with date fields in them. To clear them automatically, just use xar:format which was also updated to remove such fields. This behavior can be skipped for individual files or for the entire project. See the documentation for more details.

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).

Script API to access the macro descriptor

The rendering script service has been extended with APIs to resolve a macro id and to access the macro descriptor:

#set ($macroId = $services.rendering.resolveMacroId('info/xwiki/2.1'))
#set ($macroDescriptor = $services.rendering.getMacroDescriptor($macroId))

Check the Rendering Module documentation for more information.

Notifications for comments

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

Mail resending at startup

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

Display extension id

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

Response implementations can now be marked as redirectable

A Response implementation can now implement the decorator RedirectResponse in order to be marked as "redirectable" (being able to send HTTP redirections to the client).

For more informations, please check out the Container Module documentation.

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".

XWiki Syntax 1.0 Removed

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

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.

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.

Checksum policy for Maven repositories

It's now possible to control in file the behavior of each Maven repository handler regarding failing checksum validation. The default is warn.

Updated attachments modal

The attachments pop-up that is displayed for deleting an attachment is now a bootstrap modal, having the same functionality as before.

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.

Sheet priority

The sheet query string parameter now has priority over anything else. It used to be skipped in various use cases.

A new xwiki-commons-collection module has been introduced to share base collection related API

Notifications are loaded on demand

To speed up page rendering, we load the content of the notifications only when the user opens the notifications menu (lazy-loading).

During the load of the content, the user will see a spinning whee as on the following picture.

In addition, we now display 10 notifications instead of 5.

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

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.

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.

Navigation in the changes view

Arrows have been added to easily navigate between changes of a document.

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.

Menu is now available in Administration

The Menu application is now available through the Administration under the Look & Feel category. By default, the application is now hidden from the panels of applications.

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.

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.

Extension Manager improvements

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

FigureBlock & FigureCaptionBlock

New Rendering Blocks were added: FigureBlock and FigureCaptionBlock. For example those blocks are generated by the Figure Macro.

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.

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.

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

Notifications can be disabled with a property in

Mark the scripts that are safe to be executed inside the WYSIWYG editor

The WYSIWYG editor doesn't execute the JavaScript code inside the editing area by default. If you need this then you need to:

  • Enable the loading of the JavaScript Skin Extensions from the WYSIWYG editor administration section
  • Mark the scripts that are safe to be loaded inside the editing area:
    #set ($discard = $xwiki.jsx.use('Path.To.MyMacro', {'wysiwyg': true}))

Check the CKEditor Integration documentation for more information.

Improved default look and feel of PDF export

The look and feel of the default PDF export was slightly improved: sans serif font is now used by default and some graphic elements were added to better separate the regions of the page (header, footer, etc.).

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) =

Ratings Stars Improvement

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

WYSIWYG Editor Paste Filter

The WYSIWYG content editor has a more strict paste filter that removes non-semantic styles (e.g. font size, text color). This means that the content you paste into the editing area will inherit the styles of your wiki, leading to a more consistent look & feel. The PDF export also benefits from this change because some of the filtered styles were causing problems.

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

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.

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.

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.

Filter group members by their full name

You can now filter the group members by their full name from the live table displayed on the group page or when editing a group from the administration, as long as the members are from the same wiki as the group itself. The members that are from a different wiki than the group can still be filtered by their reference (e.g. by user alias).

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

Breadcrumbs in the notifications email

The notification emails now display breadcrumbs for each page-related change, providing a better understanding of the locations of these pages in the wiki.

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"}}

Inject extension features

It's possible to dynamically inject additional features to an extension when downloaded from a repository or a core extension. See Virtual extensions for more details.

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

Messages in Notifications

When the Message Stream Application is enabled (which is not the case by default), you can now see your messages in the notifications.

With this feature in place, the Notifications application is now able to fully replace the Activity Stream one (which will happen in the following versions of XWiki).

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.

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).

The component NamespaceContextExecutor has been introduced to be able to execute some code in the context of a different namespace (e.g. in a different wiki).

New Tip

New tip about x+x+x+a and x+x+x+h key combos.

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.

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.

Notifications settings are now available as macros

New macros have been created, so you can include your notification settings in many pages (such as the dashboard). These macros are:

  • {{notificationsEmailPreferences /}}
  • {{notificationsApplicationsPreferences /}}
  • {{notificationsFiltersPreferences /}}

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.

Created by Vincent Massol on 2016/09/23

Get Connected