Server

Nuxeo Server LTS 2025 Release Notes

Updated: April 20, 2026

This page relates to the release notes of Nuxeo Server and related addons for LTS 2025 cycle. It will list the improvements and features that are successively shipped with the 2025.x releases.

Upgrade Notes
This page mentions what's new. Refer to the upgrade notes to transition to this version.

What's New in LTS 2025.18 / LTS 2025-HF18

Nuxeo Mail Amazon SES Addon - Support for SES V2 API

Nuxeo Mail Amazon SES Addon now uses SES v2 API.

Fix Content-Disposition Header Not Using RFC 5987 Encoding

The filename attribute encoding in the Content-Disposition header has been fixed to comply with RFC 6266

The Content-Disposition header encoding has been fixed to comply with RFC 6266. Previously, certain characters such as curly braces {}, spaces, and non-ASCII characters (accented letters, CJK characters) were not properly percent-encoded in the filename* parameter, which could cause download failures or garbled filenames in some browsers.

The encoding now uses a strict RFC 2231 attr-char allowlist, always emitting both a filename fallback (for older clients) and a filename*=UTF-8''<encoded> parameter when encoding is needed.

Additionally, the legacy MSIE 6/7 user-agent sniffing has been removed. The previous RFC2231.encodeContentDisposition(String, String, Boolean) three-argument method and RFC2231.percentEscape(String, String) method are deprecated.

Extend Benchmark Navigation Simulation to Use More Enrichers

More enrichers are benchmarked when fetching documents.

Propose a Copy-From Another Descriptor Mechanism

The Descriptor API has been improved to allow Copy another descriptor feature.

Such mechanism already existed on Kafka contribution, let see an example:

<component name="org.nuxeo.kafka.defaultConfig">
  <extension point="kafkaConfig" target="org.nuxeo.runtime.stream.kafka.service">
    <kafkaConfig name="default">
      <producer>
        <property name="bootstrap.servers">${kafka.bootstrap.servers}</property>
        ...
      </producer>
      <consumer>
        <property name="bootstrap.servers">${kafka.bootstrap.servers}</property>
        <property name="max.poll.interval.ms">${kafka.max.poll.interval.ms}</property>
        <property name="max.poll.records">${kafka.max.poll.records}</property>
        ...
      </consumer>
    </kafkaConfig>
    <kafkaConfig name="slowConsumer" copy="default">
      <consumer>
        <property name="max.poll.interval.ms">${slowConsumer.kafka.max.poll.interval.ms}</property>
        <property name="max.poll.records">1</property>
      </consumer>
    </kafkaConfig>
  </extension>
</component>

The slowConsumer inherits everything from default contribution and override some max.poll.* consumer properties.

In order to benefit from this feature, your descriptor needs to implement the Descriptor#getCopyId() method. During descriptor retrieval, the method will be called and will perform the copy if a value is returned. The copy mechanism is driven by the Descriptor#copy(Descriptor) method, which by default will perform a merge of the one to copy (ie: the default kafka config) and the requested descriptor (ie: the slowConsumer kafka config), in pseudo code it would be the result of default.merge(slowConsumer).

Note: In order for the default implementation to work correctly, your merge logic should also merge the descriptor id.

This feature has been added to the following extension points:

  • org.nuxeo.runtime.stream.kafka.service/kafkaConfig with the copy attribute on the kafkaConfig object
  • org.nuxeo.audit.service.AuditComponent/routes with the copy attribute on the route object
  • org.nuxeo.ecm.core.cache.CacheService/caches with the copy attribute on the cache object

Fix Retention Rule Behavior With retainUntil Date in Past

It is now possible to set a retention expiry date in the past at platform level. Such past retention date won't be applied to cloud storage providers (AWS S3, Google & Azure Storage).

Propose a DurationUtils.format API

Format your Duration as Human Readable text.

The DurationUtils#format(Duration) API is now available to format Duration as: _d_h_m_s_ms.

Restrict Bulk Download Operation Result ( ZIP) to Initiator Only

Automation async adapter endpoints (status/result/abort) access is restricted to the initiating user.

Handle Empty Old Proof Keys in WOPI Discovery

Make Nuxeo Office Online Integration work without old proof key - fresh on-premise Office Online Server for instance.

Upgrade Notes
Refer to the LTS 2025 upgrade notes to transition to this version.

LTS 2025 Release Notes summary