Changes Report

Last modified by Vincent Massol on 2026/09/02 19:04

start_xwiki.bat refresh

The Windows version of the start scripts used in the XWiki Jetty package have been updated to benefit from the same features as the .sh ones, including ##-h## which give the new documentation.

Docker External Solr

The XWiki docker images now support correctly setting up an external Solr instance.

Repository improvements

  • the concept of project was added to the Repository application, see Repository Application for more details
  • the update of extension with a lot of versions is now much faster (only missing version are added, it assumes existing one are correct)

Macros can be inserted/edited through the formatting toolbar

When selecting a range of text in the BlockNote editor, the formatting toolbar will now show a macro icon which opens the macro editor.

When selecting an existing macro block, the formatting toolbar will now show an edition icon. Clicking on it will open the macro editor.

UI elements for editors can be disabled based on the document's syntax

Features can now be enabled/disabled automatically based on the syntax: When editing a document within the BlockNote editor (or any future editor), all unsupported syntax elements will be automatically disabled in the UI.

Relevant types are defined in the @xwiki/platform-syntaxes-config package.

BlockNote Syntax

A new JSON-based rendering syntax, called BlockNote, is available. It provides both a parser and a renderer, and it is currently used only by the BlockNote WYSIWYG editor.

New link insertion/edition UI for BlockNote

In BlockNote, links insertion and edition now use the new UI, which adapts automatically to the design system. This new UI also exposes new options, such as creating links to email addresses.

Reproducible builds

XWiki's Maven build is now configured to produce reproducible artifacts by setting project.build.outputTimestamp to the time of the release. This means that for most release artifacts, it should be possible now to obtain byte-identical versions by rebuilding the sources. This also affects all extensions with a parent version of at least 18.7.0. Extensions can explicitly set their own timestamp to override the fixed timestamp of the parent when desired, or set it to a value like "X" to explicitly disable reproducible builds if it should cause any issues. We have also fixed several modules that were not reproducible before. We're aware that some class files in many legacy modules (those are included in the released WAR) still contain absolute paths of the build environment, and the WAR, XIP and Debian packaging as well as the pre-installed demo distribution are also not reproducible for additional reasons. You can track XWIKI-24698 for the progress towards a fully reproducible build.

LiveTable New Row Naming Strategy

When creating a new row for a Live Data using a livetable source, the XWiki instance needs to create a new document. Naming this new document automatically requires a naming strategy, which can be customized by implementing a new LiveTableNewRowNamingStrategy.

Design System CSS Variables

The Flamingo Design System now declares the CSS variables of the Abstract Design System, deriving them from the style variables of the skin. Code styled with them follows the Color Theme, and stays portable to the other implementations of the Design System.

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

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

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 =
    this.urlTemporaryResourceReferenceSerializer.serialize(temporaryResourceReference).serialize();

Ratings on Extensions Repository home page

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

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.

Global Color Themes

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

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.

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  https://jira.xwiki.org) and VelocityContext is now close to internal detail. This allows for example defining a variable in Velocity and accessing it from a Groovy script:

{{velocity}}
## Setting some script binding in Velocity
#set($myvar = "toto")
{{/velocity}}

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

More details

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

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.

Get Connected