---
title: "1.15 release notes"
canonical_url: "https://www.nutrient.io/guides/web/release-notes/1-15/"
md_url: "https://www.nutrient.io/guides/web/release-notes/1-15.md"
last_updated: "2026-05-15T19:10:05.096Z"
description: "Lists important changes for Nutrient Web SDK 1.15"
---

Nutrient Web SDK 1.15 introduces a structured headless annotation API namespace, refines the UI customization slot system, and expands `instance.search()` with whitespace-tolerant matching for multiline phrases. See the [changelog](https://www.nutrient.io/guides/web/changelog.md#1.15.0) for full details.

### Headless annotation APIs

This release introduces an `annotations.*` namespace on `instance` for working with annotations programmatically, organized by annotation type. Each sub-namespace exposes type-specific operations and shares a common selection, note, and clipboard infrastructure — usable without mounting the full viewer UI:

- `annotations.ink`

- `annotations.link`

- `annotations.measurement`

- `annotations.redaction`

- `annotations.shape`

- `annotations.textMarkup`

- `annotations.text`

The shared infrastructure is extensible — additional annotation types can plug into the same primitives. This is the foundation for richer headless and automation workflows. Let us know through our [support form](https://support.nutrient.io/hc/en-us/requests/new) which patterns you’d like to see expanded next.

### Cancelable load and conversion operations

`NutrientViewer.load()`, `convertToPDF()`, `convertToOffice()`, and `populateDocumentTemplate()` now accept an [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to cancel in-flight operations. This is useful when users navigate away mid-load or you need to terminate a slow conversion:

```js

const controller = new AbortController();
const instance = await NutrientViewer.load({
  //...your existing configuration
  signal: controller.signal,
});

// Later, to cancel:
controller.abort();

```

### Configurable loader UI

A new [`ui.loader`](https://www.nutrient.io/api/web/interfaces/UI.Configuration.html#loader) option controls what users see while a document loads. Pick between the existing `progress` indicator, the new `skeleton` preview (a realistic placeholder of the viewer layout that reduces perceived load time), or supply a custom slot callback for full control:

```js

await NutrientViewer.load({
  //...your existing configuration
  ui: { loader: "skeleton" },
});

```

### Whitespace-tolerant search

A new opt-in, [`SearchType.WORD_BASED`](https://www.nutrient.io/api/web/enums/NutrientViewer.SearchType.html), makes `instance.search()` resilient to whitespace inconsistencies in extracted PDF text. The mode strips Unicode space variants (NBSP, em/en/thin spaces, ideographic space, etc.) plus tab/newline/CR from both the query and the document before matching, so multiline phrases that cross tables, columns, or line wraps with stray whitespace match cleanly. Annotation contents are matched with the same algorithm. Punctuation is preserved on both sides, and case-insensitive search (the default) now case-folds non-ASCII letters too — `"MÖCHTEN"` matches `"möchten"`.

```js

const results = await instance.search("Smith, John", {
  searchType: NutrientViewer.SearchType.WORD_BASED,
});

```

Default `instance.search()` behavior is unchanged. Additionally, the existing smart-search regex now tolerates a single space immediately before a line break, fixing cases where PDF text extraction inserts a trailing space at line wraps and a clean-newline query failed to match.

`SearchType.WORD_BASED` is available in standalone mode immediately. Server-backed mode requires Document Engine 1.16.x.

### Performance, fonts, and stability

- Dynamic font downloading and font substitution now work for linearized PDF loads, eliminating font-related fallbacks during progressive loading.

- A new API lets you control the visual rendering order of annotations on a page via a custom comparator function.

- Document Crop mode now supports keyboard input — arrow keys draw the crop region, Enter confirms, and Escape cancels.

- The standalone JWT signing service now forwards the `flatten` flag consistently from `prepareSign` to the `/sign_hash` request, producing valid signatures when `instance.signDocument()` is called with `flatten: true`.

- Fixes a regression introduced in 1.14.0 where cross-user updates to non-comment annotations could be rejected by Document Engine with `invalid_anonymity_update`, blocking collaborative editing of existing annotations.

- Additional fixes across RTL viewer trackpad scrolling and scrollbar visibility, IME composition in custom stamp text fields, content editor text drag-selection on Windows, ligature text selection, redaction font sizing, Arabic rich-text free text appearance streams, and several content editor and form creator edge cases.

### UI customization slot callbacks now receive getInstance()

The first argument to every `ui.*` slot callback changed from a captured `instance` reference to a `getInstance()` accessor. Call `getInstance()` at the point of use — typically inside `render` or an event handler — to read the latest viewer instance.

Before:

```js

NutrientViewer.load({
  ui: {
    tools: {
      main: (instance, id) => ({
        render: () => createToolbar(instance),
      }),
    },
  },
});

```

After:

```js

NutrientViewer.load({
  ui: {
    tools: {
      main: (getInstance, id) => ({
        render: () => createToolbar(getInstance()),
      }),
    },
  },
});

```

The previous signature handed slots a synchronous instance reference, which meant pre-load slots (`ui.loader` and `ui.passwordPrompt`) received `null` because the viewer hadn’t finished loading. With `getInstance()`, the same callback can read the live instance from any render call or event handler that fires after `NutrientViewer.load()` resolves — which is what unblocks the new [configurable loader UI](#configurable-loader-ui).

The change applies to every `ui.*` slot, including:

- Pre-load slots — `ui.loader`, `ui.passwordPrompt`.

- Post-load slots — `ui.tools.main`, `ui.tools.contextual`, `ui.annotations.*`, `ui.signatures.*`, `ui.search`, `ui.documentEditor`, `ui.commentThread`, `ui.sidebar.*`.

Minimum Document Engine version required: [1.5.6](https://www.nutrient.io/guides/document-engine/changelog.md#1.5.6)

For a complete list of changes, bug fixes, and improvements, refer to the [changelog](https://www.nutrient.io/guides/web/changelog.md#1.15.0). For previous release notes, refer to the [Web SDK 1.14 release notes](https://www.nutrient.io/guides/web/release-notes/1-14.md). We appreciate your feedback and contributions as we continue to enhance Nutrient Web SDK.
---

## Related pages

- [1 11](/guides/web/release-notes/1-11.md)
- [1 1](/guides/web/release-notes/1-1.md)
- [1 12](/guides/web/release-notes/1-12.md)
- [1 0](/guides/web/release-notes/1-0.md)
- [1 13 1](/guides/web/release-notes/1-13-1.md)
- [1 10](/guides/web/release-notes/1-10.md)
- [1 13](/guides/web/release-notes/1-13.md)
- [1 14](/guides/web/release-notes/1-14.md)
- [1 4](/guides/web/release-notes/1-4.md)
- [1 2](/guides/web/release-notes/1-2.md)
- [1 3](/guides/web/release-notes/1-3.md)
- [Update your PSPDFKit for Web to version 2017.7](/guides/web/release-notes/2017-7.md)
- [1 5](/guides/web/release-notes/1-5.md)
- [1 6](/guides/web/release-notes/1-6.md)
- [1 7](/guides/web/release-notes/1-7.md)
- [1 9](/guides/web/release-notes/1-9.md)
- [1 8](/guides/web/release-notes/1-8.md)
- [2017 6](/guides/web/release-notes/2017-6.md)
- [2017 3](/guides/web/release-notes/2017-3.md)
- [Upgrade annotations in PSPDFKit Web 2017.8](/guides/web/release-notes/2017-8.md)
- [Explore new features in PSPDFKit for Web 2017.9](/guides/web/release-notes/2017-9.md)
- [New features in the 2018.1 migration guide](/guides/web/release-notes/2018-1.md)
- [PSPDFKit for Web 2018.2 migration insights](/guides/web/release-notes/2018-2.md)
- [Explore PSPDFKit for Web 2018.4 features](/guides/web/release-notes/2018-4.md)
- [PSPDFKit Web and Server 2020.4 migration update](/guides/web/release-notes/2020-4.md)
- [Explore new features in PSPDFKit 2018.5](/guides/web/release-notes/2018-5.md)
- [PSPDFKit for Web 2019.3 migration highlights](/guides/web/release-notes/2019-3.md)
- [2019 2](/guides/web/release-notes/2019-2.md)
- [Explore PSPDFKit for Web 2018.6 enhancements](/guides/web/release-notes/2018-6.md)
- [Discover the new features in PSPDFKit for Web 2018.3](/guides/web/release-notes/2018-3.md)
- [PSPDFKit for Web 2019.5 migration insights](/guides/web/release-notes/2019-5.md)
- [Essential updates in PSPDFKit for Web 2019.4](/guides/web/release-notes/2019-4.md)
- [Seamless migration to PSPDFKit for Web 2020.2](/guides/web/release-notes/2020-2.md)
- [Key updates in PSPDFKit for Web 2019.1](/guides/web/release-notes/2019-1.md)
- [Key changes in PSPDFKit for Web 2020.1](/guides/web/release-notes/2020-1.md)
- [Upgrade to PSPDFKit Web 2020.3 seamlessly](/guides/web/release-notes/2020-3.md)
- [Explore the new features in PSPDFKit 2018.7](/guides/web/release-notes/2018-7.md)
- [Upgrade to PSPDFKit for Web 2021.1 with ease](/guides/web/release-notes/2021-1.md)
- [Unified CRUD API enhancements for easy migration](/guides/web/release-notes/2020-5.md)
- [PSPDFKit Web 2020.6 migration insights](/guides/web/release-notes/2020-6.md)
- [PSPDFKit 2021.4 migration guide for seamless updates](/guides/web/release-notes/2021-4.md)
- [2021 3](/guides/web/release-notes/2021-3.md)
- [PSPDFKit 2023.2 migration and updates](/guides/web/release-notes/2023-2.md)
- [2021 6](/guides/web/release-notes/2021-6.md)
- [Migration guide for PSPDFKit 2021.5](/guides/web/release-notes/2021-5.md)
- [Seamlessly migrate to PSPDFKit for Web 2021.2](/guides/web/release-notes/2021-2.md)
- [Enhancements in PSPDFKit for Web 2022.2](/guides/web/release-notes/2022-2.md)
- [Explore the new features of PSPDFKit for Web 2022.3](/guides/web/release-notes/2022-3.md)
- [Discover the key updates in PSPDFKit for Web 2023.1](/guides/web/release-notes/2023-1.md)
- [Key improvements in PSPDFKit for Web 2022.5](/guides/web/release-notes/2022-5.md)
- [PSPDFKit for Web 2022.4 migration overview](/guides/web/release-notes/2022-4.md)
- [PSPDFKit 2022.1.1 migration changes](/guides/web/release-notes/2022-1.md)
- [2024 3](/guides/web/release-notes/2024-3.md)
- [Explore key updates in PSPDFKit for Web 2023.4](/guides/web/release-notes/2023-4.md)
- [Key updates in PSPDFKit for Web 2023.5](/guides/web/release-notes/2023-5.md)
- [Essential Nutrient Web SDK 2024.1 migration tips](/guides/web/release-notes/2024-1.md)
- [Key updates in PSPDFKit for Web 2023.3](/guides/web/release-notes/2023-3.md)
- [2024 4](/guides/web/release-notes/2024-4.md)
- [2024 2](/guides/web/release-notes/2024-2.md)
- [2024 7](/guides/web/release-notes/2024-7.md)
- [2024 5](/guides/web/release-notes/2024-5.md)
- [2024 8](/guides/web/release-notes/2024-8.md)
- [Upgrading Nutrient Web SDK](/guides/web/release-notes/upgrading.md)

