Changes Report

Last modified by Vincent Massol on 2026/09/10 13:54

Mail Resender Scheduler Job

It's now possible to run a Scheduler Job to resend automatically emails that were prepared successfully but that were not sent (for example if the XWiki JVM crashed before they could be sent).

Forms styling handle HTML5 inputs

HTML5 inputs (color, date, datetime-local, email, number, search, tel and time) are now consistent with older input types (text and password) in the Flamingo Skin. They are all compatible with the Vertical Forms Guidelines.

Improved Jump to Page

The Jump to Page modal (Ctrl+G) has been updated to use the new page picker which fixes the keyboard navigation and improves the display of page suggestions (page title and location are now shown).

Synchronous mail resending

There's now an API to resend emails synchronously (we only had an asynchronous API before). This is useful when resending large amounts of emails which would require a lot of memory since all emails would be loaded from disk and put in the resending memory queue. 

Syntax Variants

A Rendering Syntax Type can now have "variants" which represent variations of the base syntax. For example markdown+github is the GitHub-Flavored Markdown Syntax, markdown+commonmark is the CommonMark Markdown Syntax, etc. It used to be a best practice to use the + character to separate variants. It's now official and part of the API with some constructors and getters. For example:

SyntaxType syntaxType = new SyntaxType("id", Arrays.asList("variant1", "variant2"), "name");
assertThat(syntaxType.getVariants(), contains("variant1", "variant2"));

Notifications Redesign

The start of a Notifications re-architecture has been started in order to improve performances. The current implementation is computing changes for a given user on the fly, when asked. This has the advantage of being very light to save new events but the computation is cost when displaying notifications (even though there's a cache). It doesn't scale well when there are a lot of events and users. Thus we've started a redesign where we compute and store the notifications for each user, when a new event is triggered.

To enable the new feature, edit your xwiki.properties file and set the notifications.eventPreFilteringEnabled property to true.

This feature is currently EXPERIMENTAL and should not be tried in production.

#-# [Since 12.1] [Experimental]
#-# Enabling this option will make user notifications be filtered and stored when the event is generated
#-# instead of filtered each time they are displayed.
#-#
#-# The default is :
# notifications.eventPreFilteringEnabled = false

More consistent menu icons

Updated class and object edit menu icons to make them more consistent with other places like the document tree viewer. The missing Annotations menu icon was also added.

SuperAdmin sees hidden pages

The Super Admin user now sees hidden pages.

Remove User's default_language xproperty

Remove the default_language xproperty that could be set in XWikiUsers xobjects since it was not working (since a very long time ago, possibly 1.1M3) and it was not a very useful and used xproperty.

Allow to inject Javascript/CSS in Notification displayers

It is now possible to use the Skin Extension Plugin in the custom Notification displayers: this might allow to use custom javascript for the notifications.

Allow to unregister components in Extension Mojo

If you use some XWiki Maven Build Tools such as the Extension Plugin or the Packager Plugin, we introduced a new parameter disabledComponents in those mojos to allow to unregister some components during their execution.

A typical usage of such parameter can be to prevent the execution of a MandatoryDocumentInitializer, for example:

<configuration>
  <disabledComponents>
    <disabledComponent>
      <type>com.xpn.xwiki.doc.MandatoryDocumentInitializer</type>
      <role>XWiki.XWikiServerXwiki</role>
    </disabledComponent>
  </disabledComponents>
</configuration>

Solr multi-core

It's now possible to "reserve" a dedicated Solr core for the specific storage needs of an extension. See Solr Search Application for more details.

SuperAdmin and Guest configuration

The configuration properties for the Guest and SuperaAdmin virtual users can now be overridden. This is achieved by modifying the xwiki.properties file.

For example:

user.preferences.superadmin.editor = Wysiwyg
user.preferences.guest.editor = Text
user.preferences.guest.displayHiddenDocuments = 1

On MySQL, the character set utf8mb4 is now set on the main database for new instances installed via our debian packages.

VFS content type

It's now possible to explicitly indicate the Content-Type to return with the HTTP response containing the file. See VFS API for more details.

Support targeting groups in Notifications

Using a TargetableEvent in the Notification API now allows to target also Groups and not only Users anymore.

Exclude Heading in Include/Display Macros

It's now possible to exclude the heading from an included page for both Include and Display macros, if the first element of that page is a heading.

Ability to hide macro parameters in WYSIWYG

Thanks to the introduction of a new @ProperyDisplayHidden annotation that can be placed on Macro parameter classes, it's now possible to hide the parameter inside the WYSIWYG's Macro editor. This is useful to hide complex parameters that should only be used in wiki edit mode for example.

Example:

public class IncludeMacroParameters
{
...
    /**
     * @param type the type of the reference
     * @since 3.4M1
     */
    @PropertyDescription("the type of the reference")
    @PropertyGroup("stringReference")
    @PropertyAdvanced
    // Marking it as Display Hidden because it's complex and we don't want to confuse our users.
    @PropertyDisplayHidden
    public void setType(EntityType type)
    {
        this.type = type;
    }

    /**
     * @param page the reference of the page to include
     * @since 10.6RC1
     */
    @PropertyDescription("The reference of the page to include")
    @PropertyDisplayType(PageReference.class)
    @PropertyFeature("reference")
    // Display hidden because we don't want to confuse our users by proposing two ways to enter the reference to
    // include and ATM we don't have a picker for PageReference types and we do have a picker for EntityReference string
    // one so we choose to keep the other one visible and hide this one. We're keeping the property so that we don't
    // break backward compatibility when using the macro in wiki edit mode.
    @PropertyDisplayHidden
    public void setPage(String page)
    {
        this.reference = page;
        this.type = EntityType.PAGE;
    }
}

Mail Obfuscation APIs

There are now 2 new APIs related to Email Address Obfuscation:

Deprecated Mail Script Services

The $services.mailsender and $services.mailstorage Script Service entry points have been deprecated in favor of $services.mail.sender and $services.mail.storage.

Get Connected