Nuxeo Server

Nuxeo Server 9.2 Release Notes

Updated: October 13, 2017 Page Information Edit on GitHub

This page relates to the release notes of Nuxeo Server and related addons for the 9.10 cycle, a.k.a LTS 2017 cycle. It will list the improvements and features that are successively shipped with the 9.1, 9.2 and 9.3 releases, before a final update for the LTS 2017. Evolutions are grouped by components. You can also find detailed JIRA release notes:

We also provide instructions for upgrading to the latest release.

Nuxeo Server


Runtime Components Lifecycle Refactored

The runtime behavior has been refactored so as to provide a cleaner lifecycle to its components. This (big) change is pretty transparent for now but will allow to provide new features to the runtime in the next releases.

 More on JIRA ticket NXP-19326.

Graceful Shutdown in Tomcat

Runtime behavior has been cleaned up: when shutting down Tomcat it is now possible to make sure that all asynchronous work has been either processed or task has been persisted.

 More on JIRA ticket NXP-21969.

Backing Service

We added the infrastructure for plugging some initial checks on external services availability before starting the runtime. The first use case is to add a check for MongoDB or PostgreSQL availability, when the MongoDB or PostgreSQL template is used. In case it is not available, the nuxeo-launcher is interrupted.

 More on JIRA ticket NXP-21532.

Test @PartialDeploy Annotation

The new Test @PartialDeploy annotation allows you to select exactly which contributions you want to deploy from a component.

@PartialDeploy(bundle = "studio.extensions.YOUR_PROJECT_NAME", extensions = { TargetExtensions.Automation.class })

It makes it easier to test Nuxeo Studio features like Automation Scripting or event handlers.

Core Repository

Centralized Automated Versioning Policies

A new extension point has been added to define automated versioning policies. It allows to declare behaviors such as "Version documents each time the current contributor is different than the last one on the document". It also allows to control wether you want to version before or after the modification. All platform code that was triggering specifically hardcoded behaviors has been refactored so that the central policy is applied: Drive, File Manager (drag and drop behaviors), etc.). Only CMIS hasn't been impacted for now due to some difficulties with requirements regarding document checked in or checked out.

 More on JIRA ticket NXP-21588, the versioning developer documentation or the user documentation.

More Permissions Returned in the Permissions Enricher

All visible permissions and more core permissions are included by the Permissions enricher. Permission enricher can be used to know what permissions the authenticated user has on the document.

 More on JIRA ticket NXP-21408 and the Content Enricher documentation.

Orphan Versions Removal

In some cases, versions of some documents where not deleted even when the document itself was removed. The solution chosen to solve this issue has been to add a scheduled cleanup mechanism. The cleanup mechanism does periodic commits, every 1000 documents by default. This value can be changed using the configuration property org.nuxeo.orphanVersionsCleanup.commitSize.

 More on JIRA ticket NXP-14187.

Compatible with CloudFront for Caching Binaries

When using S3 it is possible to redirect signed CloudFront URLs instead of directly S3 ones, so as to benefit from AWS world wild content caching service.

 More on JIRA ticket NXP-20219.

Leverage Blob's XPath in Dispatching Rules

It is now possible to use the XPath of the binary that is being stored to determine where the binary should be stored. This typically allows to store thumbnails in a different backend than the main file. The DefaultBlobDispatcher can now match blob XPath using the syntax blob:xpath=my/xpath and a new glob operator ~ is available to allow matching things like blob:xpath~files/*/file.

 More on JIRA ticket NXP-21891.

Change Token for Optimistic Locking

New API:

  • DocumentModel.getChangeToken()

New behaviors:

  • Calling doc.putContextData(CoreSession.CHANGE_TOKEN, token) then CoreSession.saveDocument(doc) will check the change token and raise ConcurrentUpdateException in case of mismatch.
  • Calling doc.putContextData(CoreSession.USER_CHANGE, Boolean.TRUE) then CoreSession.saveDocument(doc) will flag the save as a "user change".

The change token returned to the user-level API DocumentModel.getChangeToken() is now a mix of a system-change token (updated at every change) and a user-change token (updated at every user change).

  • A "user change" is a change initiated by a user-level operation, which is defined as a document save that passes a previous change token using doc.putContextData(CoreSession.CHANGE_TOKEN, token), or that marks the save as an explicit user change using doc.putContextData(CoreSession.USER_CHANGE, Boolean.TRUE).
  • The system change token is such that every modification to a document (whether done by the system or by a user) now increments a system value called the "system change token".

 More on JIRA tickets NXP-19435 and NXP-22019 and NXP-22259.

Disable Delta Computation

By adding the new option in the nuxeo.conf file, the delta calculation used by the Nuxeo Quota addon can be skipped. This can improve the performance of mass import.

 More on JIRA ticket NXP-20892.

API for Permission Purge

An operation PermissionsPurge has been added for triggering a permission purge for a given principal. This allows you to do an integration with your identity management system so as to remove any permission to a user that would be leaving your organization in the same time you would disable his credentials.

 More on JIRA ticket NXP-20844.

Date Fields Export with Millisecond Precision

The XML Core IO format and the JSON serialization now include milliseconds information for all date properties.

 More on JIRA ticket NXP-21607.

User Existence Is Checked on Document.AddPermission Operation

A check on the existence of users an groups referenced with this operation is performed before doing the assignment. An exception is raised otherwise.

 More on JIRA ticket NXP-21559.

Attribute "perDocumentQuery" of Facet Definition Can Be Overridden

It is now possible to change the value of the attribute perDocumentQuery of a facet that has been contributed in the built-in distribution.

 More on JIRA ticket NXP-22603

New Document Properties Deprecation

A new extension point deprecation has been added to the Schema service to configure deprecated fields and their optional fall-back. A warning is logged when a deprecated field is used in the application, and if the fall-back is configured, values are set and gotten from that fall-back field.

<property schema="common" name="size" deprecated="true" />
<property schema="file" name="filename" fallback="content/name" />

 More on JIRA ticket NXP-21456

Core Storage

SSL Support for MarkLogic

When using the MarkLogic Connector for Nuxeo, connection is now secured with SSL.

 More on JIRA ticket NXP-21818.

Improved Performance on Scrolling API with MarkLogic

Scroll API (that allows to fetch many documents in a row) has been re-implemented on Marklogic connector. Elastiscsearch re-indexation rate has been increased from 642 documents/second to 2,418 documents/second, i.e + 375%.

 More on JIRA ticket NXP-21824.

New Oracle JDBC Driver (ojdbc7) Compatibility

The new Oracle JDBC Driver OJBC7 can be used with Oracle 12c.

 More on JIRA ticket NXP-19373.

Optimized Number of Read When Writing

The number of read requests required to create documents has been reduced to the strictly required using cache. As a consequence CPU is no longer the limiting factor of bulk-intensive import scenari.

 More on JIRA ticket NXP-20595.

Database-Level Integrity Constraints for PostgreSQL

When using PostgreSQL, stricter database-level checks are now enabled to prevent rare document name collisions due to concurrent writes. Behavior can be controlled in the repository configuration file using


 More on JIRA ticket NXP-22421.

Core Events

A new PubSubService is available, providing cross-instance publish/subscribe methods:

  • publish(topic, message) sends a message to the given topic
  • registerSubscriber(topic, subscriber) registers a subscriber

 More on JIRA ticket NXP-21800.


administrators Group Members Have Access to Protected Directories

Directories access protected by giving Read permission to group "Nobody" are now accessible by members of the group "administrators".

 More on JIRA ticket NXP-22609

New MongoDB Directory Implementation

Directory interface now has a MongoDB implementation included in the default distribution.

 More on JIRA ticket NXP-21582.

Generic Directories References

A new descriptor for references in directories has been added (their description used to be specific to the SQL implementation of directories). Example:

        <reference field="groups" directory="groupDirectory"
                   name="user2group" source="userId"
                   target="groupId" dataFile="user2group.csv"/>

This reference is generic and can be used with SQL and MongoDB implementations.

 More on JIRA ticket NXP-22411.


MongoDB Audit Backend

A MongoDB backend has been implemented with the purpose of being able to install the Nuxeo Platform without requiring an additional relation database.

 More on JIRA ticket NXP-21500.


Relax Mode

Some constraints of CMIS can be bypassed. To do so use the runtime property nuxeo.dontFollowCmisSpec=true. This way, for instance, multiple "contains" can be used in the CMISQL query while the standard forbids it.

 More on JIRA ticket NXP-19858.

Change Token

Change Token specified in CMIS 1.1 as optional has been implemented.

 More on JIRA ticket NXP-20665.

Proxies Are Visible by Default

org.nuxeo.cmis.proxies=true is now the default.

 More on JIRA ticket NXP-21828.

maxItems Parameter in CMIS Query Is Now Supported

When using the ES implementation of CMIS bridge, using the parameter maxItems allows you to get a certain amount of documents without loading the entire result set at once. Implementation over Core in case of DBS has also been improved consequently.

 More on JIRA ticket NXP-21877.


Search with Highlighted Results

It is now possible to configure a page provider so as to get highlighted search result, in order to display the paragraph wrapping a given full-text searched term, in the search result. The Search endpoint and PageProvider operation have been updated accordingly. Checkout the polymer sample that showcases this new capability of the API to know more about it. Since Nuxeo Platform 9.2, this is used by default in Nuxeo Web UI.

 More on JIRA ticket NXP-20507.


PDF Export of a Note

It is now possible to export a Note with its embedded images as a PDF.

 More on JIRA ticket NXP-16831.


Shield Support

Elasticsearch Shield support has been added since Nuxeo Platform 9.1. It is possible to configure authentication credentials in nuxeo.conf (elasticsearch.shield.enabled, elasticsearch.shield.username, elasticsearch.shield.password). It also includes support of SSL encryption of the traffic since Nuxeo Platform 9.2.

 More on JIRA ticket NXP-21208 and NXP-22042and the Elasticsearch Shield documentation for more information.

Elasticsearch PageProvider Limits Navigation to 10k Documents (Configurable)

The page provider navigation is now limited to the first 10k documents. This is the default maximum result window defined in Elasticsearch.

When there are more than 10k results there is no more button to go to the last page or to go to a next page above this range. The limit of 10k can be changed using the configuration service by contributing the property org.nuxeo.elasticsearch.provider.maxResultWindow to the Configuration service.

 More on JIRA ticket NXP-22063

Use Elasticsearch Tools with Embedded Deployment of ES

It is now possible to use Elasticsearch tools to inspect (like elasticsearch-head) and query (like mirage) on Nuxeo index when Elasticsearch is embedded.

 More on JIRA ticket NXP-21455.

User Manager

New Operations

New automation operations are available:

  • User.CreateOrUpdate
  • Group.CreateOrUpdate

Both operations have a "mode" parameter that can be set to "create" or "update" to force the operation to do only creates or only updates. Both operations can receive direct parameters or use a "properties" map to receive them.

The Services.Query operation has been renamed User.Query.

 More on JIRA tickets NXP-21627 and NXP-21962.


A new parameter allows to avoid overriding an existing folder.

 More on JIRA ticket NXP-21853.


Key Value Store

A new Key/Value store has been added to the Core API and implemented in the Redis addon. From the KeyValueService one can acquire a named KeyValueStore, whose API is currently:

  • put(key, value)
  • get(key)
  • compareAndSet(key, expected, value)

 More on JIRA ticket NXP-21870.


Nuxeo Platform as OAuth Provider

There was a first implementation of the OAuth flow to use Nuxeo as an OAuth provider. It has been deeply reviewed and completed to be closer to the specifications and to implement the best security practices. As a result, the Nuxeo Mobile application will now use the OAuth flow to access content stored in the Nuxeo repository.

 More on JIRA epic NXP-21721.

REST API Endpoints for OAuth Tokens and OAuth Providers Management

Endpoints to CRUD OAuth tokens and providers (in respect to permission) have been added:

  • GET oauth2/provider: Returns the list of registered OAuth2 service providers
  • POST oauth2/provider: Creates a new OAuth2 service provider
  • PUT oauth2/provider/<providerName>: Updates an OAuth2 service provider
  • DELETE oauth2/provider/<providerName>: Deletes an OAuth2 service provider
  • GET oauth2/token: Gets the list of all stored tokens for all users
  • GET oauth2/token/<providerName>/<nxLogin>: Retrieves a stored token
  • PUT oauth2/token/<providerName>/<nxLogin>: Updates a stored token
  • DELETE oauth2/token//<providerName>/<nxLogin>: Deletes a stored token

 More on JIRA ticket NXP-20884.


Static WAR Generation

Static WAR generation has been fixed and added back to continuous integration. Nuxeo static WAR can be deployed as a standard web application on a Tomcat server.

 More on JIRA ticket NXP-21659.

User workspace

More Robust User Workspace Name Definition

We now generate the user workspace name based on the user id with no possible collision. We use an escaping mechanism that escapes the few unwanted characters in paths and URLs (slash, backslash, ?, &, @, &) using a ~ and an hex code. This applies only to new user workspaces; If a user workspace was created previously, it will still be recognized and used.

 More on JIRA ticket NXP-21807.


Lambda Integration

A new addon has been implemented that allows to leverage Amazon Lambdas for efficient asynchronous computing. The initial use case is to offload the Picture Views generation (generating several renditions with different sizes of the same source image), but the module has been designed to be used for other kinds of processing.

 More on the readme and on the JIRA ticket NXP-21922.


Disabling Default Picture Conversions

Default picture conversions can now be disabled by using the enabled attribute on the PictureConversions extension point contributions.

 More on JIRA ticket NXP-21311.

Binary Metadata

Binary metadata allows to extract and write back metadata on binaries (ex: EXIF metadata). The module no more tries to update the binary when the content is managed externally, for instance when using Nuxeo Live Connect.

 More on JIRA ticket NXP-20282.

Nuxeo Drive

Root registrations are not copied when a document and its children are copied. In 9.1 and later, by default, we reset the synchronization root registrations on a copied document and its children. In LTS 2016 and earlier the previous behavior is kept.

 More on JIRA ticket NXP-21676.

Nuxeo Vision

Amazon Rekognition

Nuxeo Vision, the computer vision gateway, can now use Amazon Rekognition in addition to Google Vision. The automation operation VisionOp now includes a new parameter provider that allows to specifically call a given provider.

 More on JIRA ticket NXP-21851.

Live Connect

Dropbox API V2 Implementation

Nuxeo Live Connect now leverages the Dropbox API v2.

 More on JIRA ticket NXP-22384.

Nuxeo CSV Web UI Port

Nuxeo CSV can now be used from Web UI. The feature is available from the import pop-up, in a new "CSV" tab.

CSV import on Nuxeo Web UI
CSV import on Nuxeo Web UI

 More on JIRA ticket NXP-21484.

Nuxeo Template Rendering Web UI Port

The template Rendering plugin has been ported to Web UI. It has also been simplified. It is now designed to be used mostly in some situations where the Web UI has been tailored to your use cases. A user action looks up for matching templates and lets user choose one if there are several. If the template has some parameters, that action will asks the user those parameters, otherwise it will generate the rendition and fire a download. It is possible to easily override the template look up logic as well as the rendition chain that is used.

Nuxeo Template Rendering Samples on Nuxeo Web UI
Nuxeo Template Rendering Samples on Nuxeo Web UI

 More on JIRA ticket NXP-21486.

Nuxeo Platform Importer - English Dictionary for Random Import

Random English content can now be generated using the random importer.

 More on JIRA ticket NXP-21260.

Nuxeo Web UI

New List Item View with Search Results Highlight

A new search result view has been added on the main search. It displays items on the full width of the panel, in the same style as a web search engine such as Google, with searched terms highlighted in the context of the original text wrapping them.

Web UI 9.2 faceted search results hightlights

 More on JIRA ticket NXP-22567.

When doing a quick search in the suggestion box, Web UI now displays the matched terms and metadata so as to understand why the result item is returned.

Web UI 9.2 suggestion search results hightlights

 More on JIRA ticket NXP-22566.

Justified Thumbnails Grid

A new view for media search results has been added, with justified display of thumbnails that keep their original ratio and metadata displayed on hover. The goal is to improve user experience for users that spend a lot of time searching for visual media (images, video) in the repository.

Web UI 9.2 media justified grid

 More on JIRA ticket NXP-22474.

Improved Task View

Task view has been improved:

  • New task layout: More readable task details, preview on the right, flatter design
  • Task queue: Optimization of the information available to the user
  • Tasks Listing Dashboard: File name and path info have been added

Web UI 9.2 improved task view

 More on JIRA ticket NXP-22591.

Storyboard on Video Layout

The storyboard has been added to Web UI view of videos.

Web UI 9.2 video storyboard

 More on JIRA ticket ELEMENTS-358

Default Workflows independent from Nuxeo JSF UI

Default Workflows (serial and parallel reviews) have been added to Nuxeo Web UI and do not require Nuxeo SJF UI anymore.

 More on JIRA ticket NXP-21518.

Nuxeo JSF UI

Custom Mobile Banner

A Custom Banner has been added so as to let the user open the Nuxeo mobile application when browsing the JSF UI from an Android or iOS mobile device.

Nuxeo Mobile banner on login page

 More on JIRA ticket NXP-21679.

Dots in the breadcrumb allow to move to parent folder.

Breadcrumbs update for 9.1
Breadcrumbs update for 9.1

 More on JIRA ticket NXP-21068.

Integer Constraint Correctly Formatted in JSF UI

When a property is of type Integer and the constraint check is enabled, message on the widget is: "'abc' is not a number. Example: 99".


Official Docker Image is Compatible with OpenShift

The script to build the official Docker image has been improved so that the image can be launched from Open Shift, which imposes some specific security constraints.

 More on JIRA ticket NXP-21880.

CentOS Specific Image Build

The script to build the official Docker image now also allows to build specifically an image on top of CentOS.

 More on JIRA ticket NXP-21995.


Nuxeo Forum

Deprecated for LTS 2016, Nuxeo Forum has been removed.

 More on JIRA ticket NXP-21448.


Deprecated for LTS 2016, Box API has been removed.

 More on JIRA ticket NXP_22041.

9 days ago manonlumeau NXDOC-1346-FT review screenshot
History: Created by manonlumeau