<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Nutrient Web Releases</title>
        <link>https://www.nutrient.io/guides/web/</link>
        <description>Release notes for Nutrient Web SDK</description>
        <lastBuildDate>Fri, 15 May 2026 00:00:00 GMT</lastBuildDate>
    <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en-US</language>
        <atom:link href="https://www.nutrient.io/guides/web/release-notes/feed.xml" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[2024.8 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2024-8/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2024-8/</guid>
            <pubDate>Thu, 01 Aug 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Nutrient Web SDK 2024.8 release notes. New features, API changes, performance improvements, and bug fixes in this version.]]></description>
            <content:encoded><![CDATA[This release includes updates to the Web SDK’s user interface, with the following UI sections migrated:

- Ink annotation toolbar
- Text and Callout annotation toolbar
- Annotations sidebar
- Outline sidebar

Most customizations will continue to work as before, but if you notice anything unexpected and you were using CSS classes or CSS variables for customization, our Baseline UI migration guide offers helpful tips and guidance.

[bui-migration]: /guides/web/migration-guides/baseline-ui-migration-guide/

Nutrient Web SDK 2024.8 release notes. New features, API changes, performance improvements, and bug fixes in this version.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2024.7 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2024-7/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2024-7/</guid>
            <pubDate>Mon, 01 Jul 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Nutrient Web SDK 2024.7 release notes. New features, API changes, performance improvements, and bug fixes in this version.]]></description>
            <content:encoded><![CDATA[Nutrient Web SDK 2024.7 release notes. New features, API changes, performance improvements, and bug fixes in this version.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2024.5 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2024-5/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2024-5/</guid>
            <pubDate>Wed, 01 May 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Nutrient Web SDK 2024.5 release notes. New features, API changes, performance improvements, and bug fixes in this version.]]></description>
            <content:encoded><![CDATA[Nutrient Web SDK 2024.5 release notes. New features, API changes, performance improvements, and bug fixes in this version.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2024.4 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2024-4/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2024-4/</guid>
            <pubDate>Mon, 01 Apr 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Nutrient Web SDK 2024.4 release notes. New features, API changes, performance improvements, and bug fixes in this version.]]></description>
            <content:encoded><![CDATA[Nutrient Web SDK 2024.4 release notes. New features, API changes, performance improvements, and bug fixes in this version.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2024.3 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2024-3/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2024-3/</guid>
            <pubDate>Fri, 01 Mar 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Discover the latest updates in Nutrient Web SDK 2024.3, including browser support changes and essential implementation guidelines for users.]]></description>
            <content:encoded><![CDATA[Discover the latest updates in Nutrient Web SDK 2024.3, including browser support changes and essential implementation guidelines for users.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2024.2 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2024-2/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2024-2/</guid>
            <pubDate>Thu, 01 Feb 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Discover the breaking changes in Nutrient Web SDK 2024.2, including the new clipboard annotation API. Ensure your implementation is up to date.]]></description>
            <content:encoded><![CDATA[Discover the breaking changes in Nutrient Web SDK 2024.2, including the new clipboard annotation API. Ensure your implementation is up to date.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2024.1 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2024-1/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2024-1/</guid>
            <pubDate>Mon, 01 Jan 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Learn key updates and API changes in Nutrient Web SDK 2024.1. Ensure a smooth migration with our comprehensive guide to new features.]]></description>
            <content:encoded><![CDATA[Learn key updates and API changes in Nutrient Web SDK 2024.1. Ensure a smooth migration with our comprehensive guide to new features.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2023.5 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2023-5/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2023-5/</guid>
            <pubDate>Mon, 01 May 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore key updates in the PSPDFKit for Web 2023.5 migration, including new features, bug fixes, and implementation advice.]]></description>
            <content:encoded><![CDATA[Explore key updates in the PSPDFKit for Web 2023.5 migration, including new features, bug fixes, and implementation advice.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2023.4 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2023-4/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2023-4/</guid>
            <pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Learn about the new APIs, bug fixes, and important migration steps in PSPDFKit for Web 2023.4.]]></description>
            <content:encoded><![CDATA[Learn about the new APIs, bug fixes, and important migration steps in PSPDFKit for Web 2023.4.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2023.3 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2023-3/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2023-3/</guid>
            <pubDate>Wed, 01 Mar 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore key API changes and bug fixes in the PSPDFKit for Web 2023.3 migration guide. Update your implementation for improved performance.]]></description>
            <content:encoded><![CDATA[Explore key API changes and bug fixes in the PSPDFKit for Web 2023.3 migration guide. Update your implementation for improved performance.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2023.2 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2023-2/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2023-2/</guid>
            <pubDate>Wed, 01 Feb 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore key changes in PSPDFKit for Web 2023.2, including API updates and migration steps to optimize your implementation.]]></description>
            <content:encoded><![CDATA[Explore key changes in PSPDFKit for Web 2023.2, including API updates and migration steps to optimize your implementation.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2023.1 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2023-1/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2023-1/</guid>
            <pubDate>Sun, 01 Jan 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Learn about the new features, bug fixes, and changes in PSPDFKit for Web 2023.1 migration guide to enhance your implementation and usage.]]></description>
            <content:encoded><![CDATA[Learn about the new features, bug fixes, and changes in PSPDFKit for Web 2023.1 migration guide to enhance your implementation and usage.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2022.5 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2022-5/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2022-5/</guid>
            <pubDate>Sun, 01 May 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore new APIs and fixes in PSPDFKit for Web 2022.5, including IE11 support removal and improved text selection capabilities.]]></description>
            <content:encoded><![CDATA[Explore new APIs and fixes in PSPDFKit for Web 2022.5, including IE11 support removal and improved text selection capabilities.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2022.4 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2022-4/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2022-4/</guid>
            <pubDate>Fri, 01 Apr 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[Learn about PSPDFKit for Web 2022.4 features, bug fixes, and the shift away from Internet Explorer 11 support. Migrate your server with confidence!]]></description>
            <content:encoded><![CDATA[Learn about PSPDFKit for Web 2022.4 features, bug fixes, and the shift away from Internet Explorer 11 support. Migrate your server with confidence!]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2022.3 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2022-3/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2022-3/</guid>
            <pubDate>Tue, 01 Mar 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[Learn about the updates in PSPDFKit for Web 2022.3, including persistent icon behavior and crucial bug fixes. Ensure your implementation is up to date!]]></description>
            <content:encoded><![CDATA[Learn about the updates in PSPDFKit for Web 2022.3, including persistent icon behavior and crucial bug fixes. Ensure your implementation is up to date!]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2022.2 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2022-2/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2022-2/</guid>
            <pubDate>Tue, 01 Feb 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[Discover new features and fixes in PSPDFKit for Web 2022.2, including text selection improvements for rotated documents.]]></description>
            <content:encoded><![CDATA[Discover new features and fixes in PSPDFKit for Web 2022.2, including text selection improvements for rotated documents.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2022.1 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2022-1/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2022-1/</guid>
            <pubDate>Sat, 01 Jan 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore the latest API updates in PSPDFKit 2022.1.1 and ensure a smooth transition for your implementation.]]></description>
            <content:encoded><![CDATA[Version 2022.1.0 contains a bug that was immediately fixed in the next version, 2022.1.1. Use version 2022.1.1 instead of 2022.1.0.
{% /alert %}

PSPDFKit for Web 2022.1 introduces several API changes. We recommend verifying your implementation to check if it needs updating.

Explore the latest API updates in PSPDFKit 2022.1.1 and ensure a smooth transition for your implementation.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2021.6 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2021-6/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2021-6/</guid>
            <pubDate>Tue, 01 Jun 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[Learn about the API changes and migration steps for PSPDFKit for Web 2021.6, including updates to annotation, bookmark, and form field methods.]]></description>
            <content:encoded><![CDATA[- Removes `Instance#createAnnotation`, `Instance#createBookmark`, and `Instance#createFormField` in favor of `Instance#create`.
- Removes `Instance#saveAnnotations`, `Instance#saveBookmarks`, `Instance#saveComments`, `Instance#saveFormFields`, and `Instance#saveFormFieldValues` in favor of [`save`].
- Removes `Instance#updateAnnotation`, `Instance#updateBookmark`, and `Instance#updateFormField` in favor of `Instance#update`.
- Removes `Instance#deleteAnnotations`, `Instance#deletebookmark`, and `Instance#deleteFormField` in favor of `Instance#delete`.
- Removes `Instance#ensureAnnotationSaved`, `Instance#ensureBookmarkSaved`, and `Instance#ensureFormFieldSaved` in favor of `Instance#ensureChangesSaved`.
- Removes `Instance#hasUnsavedAnnotations`, `Instance#hasUnsavedBookmarks`, `Instance#hasUnsavedComments`, `Instance#hasUnsavedFormFieldValues`, and `Instance#hasUnsavedFormFields` in favor of `Instance#hasUnsavedChanges`.

Note that some of these deprecated APIs returned a single result, but the new API will always return an array. Make sure any of your code that relied on this behavior accesses the first element in the array.

Below is an example of how to use the new `Instance#update` API with a single annotation:

```js
instance.update([annotation]).then((annotations) => {
  const savedAnnotation = annotations[0];
});
```

If you used to call `Instance#createAnnotation` to create a widget, and then attached it to a form
using `Instance#createFormField`, you’ll now need to create the form field first.

You’ll also need to generate and set the widget’s ID using `PSPDFKit#generateInstantId` so that you can reference the widget from the form field before it’s added to the document.

Here’s an example of how you can do this using the new `Instance.html#create` API:

```js
const annotation = new NutrientViewer.Annotations.WidgetAnnotation({
  id: NutrientViewer.generateInstantId(),
  pageIndex: 0,
  formFieldName: "name",
  boundingBox: new NutrientViewer.Geometry.Rect({
    left: 10,
    top: 20,
    width: 60,
    height: 40
  })
});

const form = new NutrientViewer.FormFields.TextFormField({
  name: "name",
  annotationIds: NutrientViewer.Immutable.List([annotation.id]),
  label: "A label"
});

instance.create([annotation, form]);
```

By default, this makes signatures respect their aspect ratio when being resized by their corner handles. To opt out of this and go back to the old behavior, you can use the new `onAnnotationResizeStart` callback option:

```js
NutrientViewer.load({
  onAnnotationResizeStart: (event) => {
    if (event.annotation.isSignature && !event.isShiftPressed) {
      return {
        maintainAspectRatio: false
      };
    }

    return undefined;
  }
});
```

For a full list of changes, check out the changelog.

Learn about the API changes and migration steps for PSPDFKit for Web 2021.6, including updates to annotation, bookmark, and form field methods.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2021.5 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2021-5/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2021-5/</guid>
            <pubDate>Sat, 01 May 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore the new AP stream rendering in PSPDFKit 2021.5 and understand important migration steps for improved performance in older browsers.]]></description>
            <content:encoded><![CDATA[Performance of initial AP stream rendering in Server mode has been improved as well, except for in some older browsers — namely old Safari versions and IE11.

{% alert type="warning" line="multi-line" %}
Internet Explorer 11 is no longer supported in our Web SDK as of version 2022.5. Edge 18 is no longer supported in our Web SDK as of version 2023.2.
{% /alert %}

In those cases, annotation rendering in Server mode may appear slower, especially if AP stream rendering wasn’t enabled before.

As a workaround, disabling AP stream rendering for those browsers in the configuration is the recommended approach:

```js
// `isIE11` and `isOldSafari` are placeholders for browser detection flags.
NutrientViewer.load({
  isAPStreamRendered: () => !isIE11 && !isOldSafari
});
```

For a full list of changes, check out the changelog.

Explore the new AP stream rendering in PSPDFKit 2021.5 and understand important migration steps for improved performance in older browsers.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2021.4 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2021-4/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2021-4/</guid>
            <pubDate>Thu, 01 Apr 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore the new features of PSPDFKit 2021.4, including default JavaScript actions and improved TypeScript declarations for better integration and accuracy.]]></description>
            <content:encoded><![CDATA[If this setting affects your integration, you can restore the previous behavior by setting the option to `false` before calling `NutrientViewer.load()`:

```js
NutrientViewer.Options.PDF_JAVASCRIPT = false;
NutrientViewer.load(configuration);
```

We completely changed the way we generate TypeScript declarations to make them more powerful and accurate. The internal API declarations are no longer exported, so if you were using those, it might lead to errors during the build step. This shouldn’t affect you if you weren’t using the types of internal APIs. If you still want to use internal types, most of them can be formed using the combination of `typeof` and utility types.

Before:

```js
import Instance from "pspdfkit/dist/types/typescript/Instance";
```

After:

```js
type Instance = InstanceType<typeof NutrientViewer.Instance>;
```

Some of the frequently used types are:

```js
type Instance = InstanceType<typeof NutrientViewer.Instance>;
type Rect = InstanceType<typeof NutrientViewer.Geometry.Rect>;
type Color = InstanceType<typeof NutrientViewer.Color>;
type Annotation = InstanceType<typeof NutrientViewer.Annotations.Annotation>;
type TextSelection = InstanceType<typeof NutrientViewer.TextSelection>;
type ToolbarItems = InstanceType<typeof NutrientViewer.Instance>["toolbarItems"];
type List = ReturnType<typeof NutrientViewer.Immutable.List>;

type Awaited<T> = T extends PromiseLike<infer U> ? Awaited<U> : T;
type AnnotationsList = Awaited<ReturnType<Instance["getAnnotations"]>>;
```

We’re exploring ways to make this experience better in our upcoming releases.

For a full list of changes, check out the changelog.

Explore the new features of PSPDFKit 2021.4, including default JavaScript actions and improved TypeScript declarations for better integration and accuracy.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2021.3 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2021-3/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2021-3/</guid>
            <pubDate>Mon, 01 Mar 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[Discover the latest PSPDFKit 2021.3 update with API renaming from ink signatures to stored signatures, enhancing clarity and usability.]]></description>
            <content:encoded><![CDATA[- The `NutrientViewer.Configuration#populateInkSignatures` option was renamed to `NutrientViewer.Configuration#populateStoredSignatures`.
- The `NutrientViewer.Instance#getInkSignatures` method was renamed to `NutrientViewer.Instance#getStoredSignatures`.
- The `NutrientViewer.Instance#setInkSignatures` method was renamed to `NutrientViewer.Instance#setStoredSignatures`.
- The `NutrientViewer.InteractionMode.INK_SIGNATURE` value was renamed to `NutrientViewer.InteractionMode.SIGNATURE`.
- The `inkSignatures.create`, `inkSignatures.update`, `inkSignatures.delete`, and `inkSignatures.change` events were renamed to `storedSignatures.create`, `storedSignatures.update`, `storedSignatures.delete`, and `storedSignatures.change`.
- The `ink-signature` toolbar item, which was part of `NutrientViewer.defaultToolbarItems`, was renamed to `signature`.

All of the former APIs will keep working as expected, but a warning will be logged into the console when used. Migrate to the new names since the deprecated ones will be removed as part of the next major release.

Signature APIs that previously only supported ink annotations now also support image annotations:

- `NutrientViewer.Configuration#populateStoredSignatures` and `NutrientViewer.Instance#setStoredSignatures` now also support using `NutrientViewer.Annotation.ImageAnnotation` instances, along with `NutrientViewer.Annotation.InkAnnotation` ones. They’ll also be presented on the signature picking UI.
- `NutrientViewer.Instance#getStoredSignatures` can return `NutrientViewer.Annotation.ImageAnnotation` instances in addition to `NutrientViewer.Annotation.InkAnnotation` ones.
- The `storedSignatures.create`, `storedSignatures.update`, and `storedSignatures.delete` events can return `NutrientViewer.Annotation.ImageAnnotation`instances in addition to `NutrientViewer.Annotation.InkAnnotation` ones.

For a full list of changes, check out the changelog.

Discover the latest PSPDFKit 2021.3 update with API renaming from ink signatures to stored signatures, enhancing clarity and usability.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Web 2021.2 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2021-2/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2021-2/</guid>
            <pubDate>Mon, 01 Feb 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore the new PDF Generation feature and migration tips in PSPDFKit for Web 2021.2. Discover all updates in the latest changelog.]]></description>
            <content:encoded><![CDATA[For a full list of changes, check out the changelog.

Explore the new PDF Generation feature and migration tips in PSPDFKit for Web 2021.2. Discover all updates in the latest changelog.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2021.1 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2021-1/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2021-1/</guid>
            <pubDate>Fri, 01 Jan 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[Navigate changes in PSPDFKit for Web 2021.1 and optimize your configuration for new features like the Export PDF button. Update your migration strategy now!]]></description>
            <content:encoded><![CDATA[### Notable changes

- (#25320) This release removes the `NutrientViewer.Configuration#disableIndexedDBCaching` option. The reason for this is browsers dropped plans to ship this caching strategy, and instead, the caching of WebAssembly modules will follow regular HTTP cache rules.

  Now, there’s no longer a way to enable IndexedDB caching, so `disableIndexedDBCaching` isn’t necessary and doesn’t have any effect.

  This flag will be entirely removed in a future release of PSPDFKit for Web, so it’s recommended to remove it from the `NutrientViewer.Configuration` object when creating a PSPDFKit instance.

  For more information about WebAssembly modules caching, refer to the MDN page, this Mozilla bug entry, and this WebAssembly spec issue.

- (#26594) This release ships with a new toolbar button, Export PDF. If you don’t want to use it, remove the `export-pdf` button type from the default toolbar items when loading PSPDFKit:

  ```js
  const toolbarItems = NutrientViewer.defaultToolbarItems.filter(it => {
    return it.type !== "export-pdf";
  });
  
  NutrientViewer.load({ ...configuration, toolbarItems });
  ```

- (#25309) This release slightly changes the behavior of specifying a range of pages to search within when using the `NutrientViewer.Instance#search()` API. Previously, specifying both `startPageIndex` and `endPageIndex` made search results include matches from the start page index up until the end page index, without including those from the last page. Now, search results also include those from the end page index that’s specified.

To keep the previous behavior, you’ll instead need to call `NutrientViewer.Instance#search`, passing `endPageIndex - 1` as the `endPageIndex` property value.

- (#27856) You’ll no longer be allowed to change the `rootId` of a comment once it has been created. If you were updating the `rootId` before, make sure you create a new comment instead.
- (#27443) This release prevents setting `NutrientViewer.ViewState#interactionMode` to a value that enables annotation creation with the UI when in read-only mode (`NutrientViewer.ViewState#readOnly` is `true`). The new interaction mode set via `Instance#setViewState` is set as `null` in this case, and a warning is emitted to the console.

If you use PSPDFKit Server, make sure you read the 2021.1 server migration guide.

For a full list of changes, check out the changelog.

[pspdfkit for web 2021.1]: /blog/pspdfkit-web-2021-1-collaboration-permissions/
[mdn page]: https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API
[mozilla bug]: https://bugzilla.mozilla.org/show_bug.cgi?id=1469395
[wasm issue]: https://github.com/WebAssembly/spec/issues/821
[`nutrientviewer.instance#search()`]: /api/web/classes/NutrientViewer.Instance.html#search
[2021.1 server migration guide]: /guides/product-archives-and-deprecated-solutions/
[changelog]: /guides/web/changelog/#2021.1
[web sdk 2020.6 release notes]: /guides/web/release-notes/2020-6/

Navigate changes in PSPDFKit for Web 2021.1 and optimize your configuration for new features like the Export PDF button. Update your migration strategy now!]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2020.6 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2020-6/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2020-6/</guid>
            <pubDate>Mon, 01 Jun 2020 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore the key updates in PSPDFKit Web 2020.6, including a new default blue and migration tips for annotations and color presets.]]></description>
            <content:encoded><![CDATA[### Notable changes

- This release introduces a new blue color: `rgb(34, 147, 251)`. This new blue color will be used in the color picker instead of the old one, and it’ll be used as the default ink color (it affects ink annotations and shape annotations like rectangle and ellipse annotations, both of which are configurable).

  If you wish to see the old blue color in the color picker, you can amend the `NutrientViewer.Options.COLOR_PRESETS` object before `NutrientViewer.load()`:

  ```js
  const blue = {
    color: new NutrientViewer.Color({ r: 36, g: 131, b: 199 }),
    localization: {
      id: "customBlue",
      defaultMessage: "Custom blue",
      description: "custom blue"
    }
  };
  NutrientViewer.Options.COLOR_PRESETS = NutrientViewer.Options.COLOR_PRESETS.concat([
    blue
  ]);
  ```

  And here’s how to configure the old blue as the default ink color using the annotation presets:

  ```js
  const annotationPresets = NutrientViewer.defaultAnnotationPresets
  annotationPresets.ink = {
    ...annotationPresets.ink,
    strokeColor: NutrientViewer.Color.DARK_BLUE,
  }
  
  NutrientViewer.load({annotationPreset, ...})
  ```

- This release changes the way in which you can move an annotation using the UI. By default, annotations can only be moved inside page boundaries. If you want to disable this behavior and enable the previous behavior, use the following configuration option:

  ```js
  NutrientViewer.load({
    restrictAnnotationToPageBounds: false
  });
  ```

For a full list of changes, check out the changelog.

If you use PSPDFKit Server, make sure you read the 2020.6 server migration guide.

[pspdfkit for web 2020.6]: /blog/pspdfkit-for-web-adds-annotation-notes/
[2020.6 server migration guide]: /guides/product-archives-and-deprecated-solutions/
[changelog]: /guides/web/changelog/#2020.6.0
[`nutrientviewer.options.color_presets`]: /api/web/variables/NutrientViewer.Options.COLOR_PRESETS.html
[annotation presets]: /api/web/interfaces/Configuration.html#annotationpresets
[web sdk 2020.5 release notes]: /guides/web/release-notes/2020-5/

Explore the key updates in PSPDFKit Web 2020.6, including a new default blue and migration tips for annotations and color presets.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2020.5 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2020-5/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2020-5/</guid>
            <pubDate>Fri, 01 May 2020 00:00:00 GMT</pubDate>
            <description><![CDATA[Easily migrate to the unified CRUD API in PSPDFKit 2020.5 with improved batch updates and streamlined object management for annotations and comments.]]></description>
            <content:encoded><![CDATA[### Notable changes

#### Unified CRUD API

- This release introduces a unified API for creating, updating, deleting, and saving objects:
  - `Instance#create`
  - `Instance#update`
  - `Instance#delete`
  - `Instance#ensureChangesSaved`

  These methods support a single change or an array of changes allowing batched updates. Each of them resolves with an array of resolved changes (created/updated/deleted/saved). Operations are performed even if some batched changes can’t be executed. In this case, the methods reject with an array containing the resolved changes or errors for failed changes.

  Supported change types are: annotations, bookmarks, form fields, form field values, and comments.

- Most existing `Instance` methods for performing modifications and saving objects have been deprecated:

| Deprecated Method                                                     | Replacement                       |
| --------------------------------------------------------------------- | --------------------------------- |
| `createAnnotation/FormField/Bookmark`                                 | `Instance#create`             |
| `updateAnnotation/FormField/Bookmark`                                 | `Instance#update`             |
| `deleteAnnotation/FormField/Bookmark`                                 | `Instance#delete`             |
| `hasUnsavedAnnotations/FormFields/FormFieldValues/Bookmarks/Comments` | `Instance#hasUnsavedChanges`  |
| `ensureAnnotation/FormField/BookmarkSaved`                            | `Instance#ensureChangesSaved` |
| `saveAnnotations/FormFields/FormFieldValues/Bookmarks/Comments`       | `Instance#save`               |

To migrate your existing use of CRUD-related methods, update the method name. If you’re using the result value, make sure to update this too since the new unified CRUD methods return an array of changes instead of a single change. For example:

```js
// Deprecated code:
const createdAnnotation = await instance.createAnnotation(newAnnotation);
console.log(`Created annotation with ID ${createdAnnotation.id}`);

// Should be replaced with:
const [createdAnnotation] = await instance.create(newAnnotation);
console.log(`Created annotation with ID ${createdAnnotation.id}`);
```

- `Instance#save` and `Instance#ensureChangesSaved` now report errors for some changes when a save fails.
- In contrast to the now-deprecated `Instance#createAnnotation`, `Instance#create` fails when creating a widget annotation without its associated form field. Make sure to create both in the same `create` method call:

  ```js
  const widget = new NutrientViewer.Annotations.WidgetAnnotation({
    id: NutrientViewer.generateInstantId(),
    pageIndex: 0,
    formFieldName: "MyFormField",
    boundingBox: new NutrientViewer.Geometry.Rect({
      left: 100,
      top: 75,
      width: 200,
      height: 80
    })
  });
  const formField = new NutrientViewer.FormFields.TextFormField({
    name: "MyFormField",
    annotationIds: NutrientViewer.Immutable.List([widget.id]),
    value: "Text shown in the form field"
  });
  
  instance.create([widget, formField]);
  ```

{% alert type="neutral-gray" line="single-line" %}
A created form field requires the widget annotation ID before the annotation is created. This means you must assign a unique UID for your widget annotation when using this new API. You can generate a proper UID via the newly introduced `PSPDFKit#generateInstantId`.
{% /alert %}

If you use PSPDFKit Server, make sure you read the 2020.5 server migration guide.

For a full list of changes, check out the changelog.

[2020.5 server migration guide]: /guides/product-archives-and-deprecated-solutions/
[changelog]: /guides/web/changelog/#2020.5
[2020.4 migration guide]: /guides/product-archives-and-deprecated-solutions/
[`instance#createannotation`]: /api/web/classes/NutrientViewer.Instance.html#createannotation
[`pspdfkit#generateinstantid`]: /api/web/functions/NutrientViewer.generateInstantId.html
[pspdfkit for web 2020.5]: /blog/pspdfkit-for-web-introduces-new-crud-api/
[web sdk 2020.4 release notes]: /guides/web/release-notes/2020-4/
[`instance#create`]: /api/web/classes/NutrientViewer.Instance.html#create
[`instance#update`]: /api/web/classes/NutrientViewer.Instance.html#update
[`instance#delete`]: /api/web/classes/NutrientViewer.Instance.html#delete
[`instance#ensurechangessaved`]: /api/web/classes/NutrientViewer.Instance.html#ensurechangessaved
[`instance#hasunsavedchanges`]: /api/web/classes/NutrientViewer.Instance.html#hasunsavedchanges
[`instance#save`]: /api/web/classes/NutrientViewer.Instance.html#save

Easily migrate to the unified CRUD API in PSPDFKit 2020.5 with improved batch updates and streamlined object management for annotations and comments.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2020.4 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2020-4/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2020-4/</guid>
            <pubDate>Wed, 01 Apr 2020 00:00:00 GMT</pubDate>
            <description><![CDATA[Learn about the 2020.4 migration guide for PSPDFKit Web and Server. No web-related migration needed for 2020.4.]]></description>
            <content:encoded><![CDATA[If you use PSPDFKit Server, make sure you read the 2020.4 server migration guide.

[2020.4 server migration guide]: /guides/product-archives-and-deprecated-solutions/
[web sdk 2020.3 release notes]: /guides/web/release-notes/2020-3/

Learn about the 2020.4 migration guide for PSPDFKit Web and Server. No web-related migration needed for 2020.4.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2020.3 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2020-3/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2020-3/</guid>
            <pubDate>Sun, 01 Mar 2020 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore the PSPDFKit Web 2020.3 migration guide with key updates and changes for a smooth integration experience.]]></description>
            <content:encoded><![CDATA[### Notable changes

- If you have a Digital Signatures license, signature widgets for digitally signed form fields will now be rendered using the appearance streams of their associated widgets, and they will not be interactive. This means you won’t be able to open the ink signature dialog by clicking on a widget. If you want to restore the old behavior and bring up the ink signature dialog when a widget is pressed, even if the form field is digitally signed, you will have to implement it manually by handling the `annotations.press` event and setting the `interactionMode` to `NutrientViewer.InteractionMode.INK_SIGNATURE`:

  ```javascript
  instance.addEventListener("annotations.press", () => {
    instance.setViewState(s =>
      s.set("interactionMode", NutrientViewer.InteractionMode.INK_SIGNATURE)
    );
  });
  ```

If you use PSPDFKit Server, make sure you read the 2020.3 migration guide.

For a full list of changes, check out the changelog.

[pspdfkit for web 2020.3]: /blog/pspdfkit-adds-redaction-and-improved-digital-signatures-to-web/
[changelog]: /guides/web/changelog/#2020.3
[2020.3 migration guide]: /guides/product-archives-and-deprecated-solutions/
[web sdk 2020.2 release notes]: /guides/web/release-notes/2020-2/

Explore the PSPDFKit Web 2020.3 migration guide with key updates and changes for a smooth integration experience.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2020.2 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2020-2/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2020-2/</guid>
            <pubDate>Sat, 01 Feb 2020 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore essential migration tips and deprecated options in PSPDFKit for Web 2020.2 for a smooth upgrade experience.]]></description>
            <content:encoded><![CDATA[### Notable changes

- The `Configuration#pdf` configuration option for PSPDFKit for Web Standalone is deprecated.

With the introduction of Image Documents, the web Standalone `Configuration#pdf` option has been deprecated in favor of `Configuration#document`. As we are simply renaming the option, the behavior for PDFs remains the same, and no additional changes are required. The old option will be removed in 2020.3.

See the API documentation for more details.

- Properties deprecated in `2020.1` have been removed:
  - `NutrientViewer.I18n#localeData` — This property stopped working in `2020.1`, and a deprecation warning was shown when used. The warning will no longer be shown, and the property is removed, so it will just return `undefined` if accessed. Refer to the 2020.1 migration guide for details on how to migrate from this property.
  - `NutrientViewer.Annotations.RectangleAnnotation#cloudyBorderInsetRect` and `NutrientViewer.Annotations.EllipseAnnotation#cloudyBorderInsetRect` could still be used after `2020.1` with a warning. These properties will no longer work, they will return `undefined` if accessed, and no warning will be shown. Refer to the 2020.1 migration guide and the API documentation on `NutrientViewer.Annotations.RectangleAnnotation#cloudyBorderInset` and `NutrientViewer.Annotations.EllipseAnnotation#cloudyBorderInset` for details on how to migrate from these properties.

If you use PSPDFKit Server, make sure you read the 2020.2 migration guide.

For a full list of changes, check out the changelog.

[pspdfkit for web 2020.2]: /blog/pspdfkit-web-2020-2/
[more details]: /api/web/interfaces/Configuration.html#document
[changelog]: /guides/web/changelog/#2020.2
[2020.2 migration guide]: /guides/product-archives-and-deprecated-solutions/
[2020.1 migration guide]: /guides/web/migration-guides/2020-1-migration-guide/
[`nutrientviewer.annotations.rectangleannotation#cloudyborderinset`]: /api/web/classes/NutrientViewer.Annotations.RectangleAnnotation.html#cloudyborderinset
[`nutrientviewer.annotations.ellipseannotation#cloudyborderinset`]: /api/web/classes/NutrientViewer.Annotations.EllipseAnnotation.html#cloudyborderinset
[web sdk 2020.1 release notes]: /guides/web/release-notes/2020-1/

Explore essential migration tips and deprecated options in PSPDFKit for Web 2020.2 for a smooth upgrade experience.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2020.1 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2020-1/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2020-1/</guid>
            <pubDate>Wed, 01 Jan 2020 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore the significant updates in PSPDFKit Web 2020.1, including localization changes and deprecated features for seamless migration.]]></description>
            <content:encoded><![CDATA[### Notable changes

- `NutrientViewer.I18n#localeData` has been deprecated because we have adopted React Intl version `3.x.x` changes. This version has dropped support for providing custom localization data in favor of using the standard `Intl` Web API for pluralization and other localization rules, which means that you no longer need to provide these rules if you want to support additional locales.

  This also means you will no longer be able to provide localization rules for locales not supported by the browser, but considering the large number of locales supported by modern browsers, this should not pose a problem.

  Browsers that do not support the `Intl` API (like IE11 and Safari < 13) will include a polyfill for `Intl.PluralRules`, as well as an individual polyfill for each of the supported locales. If you want to continue supporting these browsers when providing additional locales, you can do so by including the corresponding locale polyfill:

  ```js
  // Add the locale to the locales list (Wolof language).
  NutrientViewer.I18n.locales.push("wo");
  // Is this browser using the `Intl.PluralRules` polyfill?
  if (Intl.PluralRules.polyfilled) {
    // Then include the plural rules locale data polyfill.
    await import("@formatjs/intl-pluralrules/dist/locale-data/wo");
  }
  // Add Wolof translations for messages.
  NutrientViewer.I18n.messages["wo"] = wolofMessages;
  // Change current language to Wolof
  instance.setLocale("wo");
  ```

{% alert type="warning" line="multi-line" %}
Internet Explorer 11 is no longer supported in our Web SDK as of version 2022.5. Edge 18 is no longer supported in our Web SDK as of version 2023.2.
{% /alert %}

Add the locale data polyfills to your local `node_modules` folder by installing them using either `npm` or `yarn`:

{% tabs variant="underline-accent" %}
{% tabitem label="YARN" %}
```yarn
  yarn add @formatjs/intl-pluralrules
```
{% /tabitem %}

{% tabitem label="NPM" %}
```npm
  npm i @formatjs/intl-pluralrules
```
{% /tabitem %}
{% /tabs %}

- We reworked the font sizing for the entire application, and this might result in some UI differences. In particular, if you use custom CSS for your UI, check your application to ensure the new setup doesn’t affect your integration negatively.
- `NutrientViewer.Annotations.RectangleAnnotation#cloudyBorderInsetRect` and `NutrientViewer.Annotations.EllipseAnnotation#cloudyBorderInsetRect` are now deprecated, and they have been replaced by the new `NutrientViewer.Annotations.RectangleAnnotation#cloudyBorderInset` and `NutrientViewer.Annotations.EllipseAnnotation#cloudyBorderInset` properties, which use a new `NutrientViewer.Geometry.Inset` type instead of `NutrientViewer.Geometry.Rect`. Thanks to this change, you will not need to update the annotation whenever the bounding box changes, as was the case with the now deprecated `cloudyBorderInsetRect` property.

  It will still be possible to use `NutrientViewer.Annotations.RectangleAnnotation#cloudyBorderInsetRect` in the constructor, where it will be transformed into a `NutrientViewer.Geometry.Inset` and used to set `NutrientViewer.Annotations.RectangleAnnotation#cloudyBorderInset` instead. `cloudyBorderInsetRect` can still be read too, in which case a snapshot value will be returned, which is the result of adding the inset values from `cloudyBorderInset` to the current bounding box.

A deprecation warning will be shown each time `cloudyBorderInsetRect` is used. In the next major version, `cloudyBorderInsetRect` will finally be removed.

If you use the `cloudyBorderInsetRect` property in your code, you will have to update it so it does not break once the property is removed in the next major version.

Also, when you create a new rectangle or ellipse annotation with the `cloudyBorderIntensity` property set and there is no `cloudyBorderInset` or `cloudyBorderInsetRect` defined, a default `cloudyBorderInset` will be applied with values following this formula:

```js
const inset = 4.5 * cloudyBorderIntensity + strokeWidth / 2;
```

This default `cloudyBorderInset` value ensures that the cloudy border is not cropped and that it’s just wide enough for the cloudy border to fit in it. If you wish to set a `cloudyBorderInset` with `0` values, do it explicitly instead, using the following:

```js
const inset = new NutrientViewer.Geometry.Inset({
  left: 0,
  top: 0,
  right: 0,
  bottom: 0
});
```

Or, to make it less verbose, use the utility static class method `NutrientViewer.Geometry.Inset#fromValue`:

```js
const inset = NutrientViewer.Geometry.Inset.fromValue(0);
```

- `event.formField` has been removed from the documentation of `NutrientViewer.AnnotationsFocusEvent` and `NutrientViewer.AnnotationsBlurEvent`. It has never been part of the event payload, and this change only affects the aforementioned documentation, so it cannot break your implementation in any way. However, if you were relying on this, you may need to review your event listener logic in case the absence of this `event.formField` object may have been affecting its behavior. If you think you still need this object, you can easily get the `formField` associated with a particular annotation by using the following code:

  ```javascript
  instance.addEventListener("annotations.blur", event => {
    instance.getFormFields().then(formFields => {
      const formField = formFields.find(
        formField => formField.name === event.annotation.formFieldName
      );
      console.log(formField);
    });
  });
  ```

  If you are using `event.formField`, here is the change you need to make:

  **Before**

  ```javascript
  instance.addEventListener("annotations.focus", event => {
    console.log(event.formField);
  });
  
  instance.addEventListener("annotations.blur", event => {
    console.log(event.formField);
  });
  ```

  **After**

  ```javascript
  instance.addEventListener("annotations.focus", event => {
    instance.getFormFields().then(formFields => {
      const formField = formFields.find(
        formField => formField.name === event.annotation.formFieldName
      );
      console.log(formField);
    });
  });
  
  instance.addEventListener("annotations.blur", event => {
    instance.getFormFields().then(formFields => {
      const formField = formFields.find(
        formField => formField.name === event.annotation.formFieldName
      );
      console.log(formField);
    });
  });
  ```

- When the Digital Signatures component is included in the license, `NutrientViewer.Instance#exportPDF` will export signed documents as incrementally saved by default so as to prevent modifying signed data, which would invalidate the document’s digital signatures. However, setting the `incremental` flag to `false` will override this behavior.

  If the Digital Signatures component is not included in the license, the former behavior will be followed and signed documents will be exported as fully saved by default. In order to prevent signed data corruption in this case, the `incremental` flag should be explicitly set:

  ```js
  instance.exportPDF({ incremental: true });
  ```

- Previously, the object returned by `NutrientViewer.ViewState#viewportPadding` had the `vertical` value under the `horizontal` property and vice versa. This has been now fixed. If you were relying on the previous returned value, you will need to adjust your implementation accordingly.
- The order in which annotations are rendered has been modified. In previous versions, annotations of the same type would be rendered in the same layer, in the following order from back to front:
  - Text markup
  - Link
  - Text
  - Widget
  - Stamp
  - Image
  - Ink
  - Shape
  - Note

  Beginning with the current release, annotations will be rendered in the same order they are in the document, regardless of their type. New annotations will always be rendered on top of the last one that has been added.

  If your implementation relies on the former annotation rendering order, you may need to rearrange the order in which annotations are created so as to continue obtaining the same result.

  You would need to first create the annotations that you want to be rendered in the background, followed by the ones that you want to be rendered in the foreground. For example: First create text annotations, then stamp annotations, then ink and shape annotations, in that order. This way, your annotations will keep rendering in the order they had with the former behavior.

  If your annotations never overlap, this change will probably not affect your implementation at all.

- The note annotation icon in the main toolbar has been updated.

If you use PSPDFKit Server, make sure you read the 2020.1 migration guide.

For a full list of changes, check out the changelog.

[pspdfkit for web 2020.1]: /blog/pspdfkit-web-2020-1/
[`nutrientviewer.annotations.rectangleannotation#cloudyborderinsetrect`]: /api/web/classes/NutrientViewer.Annotations.RectangleAnnotation.html#cloudyborderinsetrect
[`nutrientviewer.annotations.rectangleannotation#cloudyborderinset`]: /api/web/classes/NutrientViewer.Annotations.RectangleAnnotation.html#cloudyborderinset
[`nutrientviewer.annotations.ellipseannotation#cloudyborderinsetrect`]: /api/web/classes/NutrientViewer.Annotations.EllipseAnnotation.html#cloudyborderinsetrect
[`nutrientviewer.annotations.ellipseannotation#cloudyborderinset`]: /api/web/classes/NutrientViewer.Annotations.EllipseAnnotation.html#cloudyborderinset
[`nutrientviewer.geometry.inset`]: /api/web/classes/NutrientViewer.Geometry.Inset.html
[`nutrientviewer.geometry.rect`]: /api/web/classes/NutrientViewer.Geometry.Rect.html
[`nutrientviewer.geometry.inset#fromvalue`]: /api/web/classes/NutrientViewer.Geometry.Inset.html#fromvalue
[`nutrientviewer.instance#exportpdf`]: /api/web/classes/NutrientViewer.Instance.html#exportpdf
[`nutrientviewer.viewstate#viewportpadding`]: /api/web/classes/NutrientViewer.ViewState.html#viewportpadding
[changelog]: /guides/web/changelog/#2020.1
[2020.1 migration guide]: /guides/product-archives-and-deprecated-solutions/
[react intl]: https://github.com/formatjs/react-intl
[standard `intl` web api]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl
[web sdk 2019.5 release notes]: /guides/web/release-notes/2019-5/

Explore the significant updates in PSPDFKit Web 2020.1, including localization changes and deprecated features for seamless migration.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2019.5 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2019-5/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2019-5/</guid>
            <pubDate>Wed, 01 May 2019 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore the 2019.5 migration guide for PSPDFKit for Web. No web migration needed, check changelog and server guide for updates.]]></description>
            <content:encoded><![CDATA[If you use PSPDFKit Server, make sure you read the 2019.5 server migration guide.

For a full list of changes, check out the changelog.

[pspdfkit for web 2019.5]: /blog/pspdfkit-web-2019-5/
[2019.5 server migration guide]: /guides/product-archives-and-deprecated-solutions/
[changelog]: /guides/web/changelog/#2019.5
[web sdk 2019.4 release notes]: /guides/web/release-notes/2019-4/

Explore the 2019.5 migration guide for PSPDFKit for Web. No web migration needed, check changelog and server guide for updates.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2019.4 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2019-4/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2019-4/</guid>
            <pubDate>Mon, 01 Apr 2019 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore key enhancements in PSPDFKit for Web 2019.4, including UI changes, a new Document Editor, and migration tips for seamless adaptation.]]></description>
            <content:encoded><![CDATA[### Notable changes

- We have changed our default UI to use a bright toolbar by default. Some changes might be necessary if you have used custom CSS that depended upon the dark toolbar, which is available by selecting `NutrientViewer.Theme.DARK` in `NutrientViewer.Configuration#theme`.
- A new Document Editor component has been implemented. If your license includes the document editing component, a new toolbar button that gives you access to this UI feature will be available in the main toolbar. You may need to update your toolbar items handling if your implementation depends on the toolbar items’ default configuration (see `NutrientViewer.defaultToolbarItems`).
- We updated the naming schema of our additional chunks delivered via the `pspdfkit-lib/` folder. The new names will now have prefixes you can use to preload specific parts of the app if necessary. Some examples include:
  - `pspdfkit-lib/chunk-locale-<locale>-*.js` files are used for internationalization files, e.g. `pspdfkit-lib/chunk-locale-de-*.js` for the German localization.
  - `chunk-standalone-*.js` is for all Standalone-specific artifacts.
  - `chunk-server-*.js` is for all Server-specific artifacts.

Note that the last part of the file name is still a hash of its content. This ensures we don’t run into caching issues when artifacts are updated.

- The icons in the toolbar were changed in order to shrink the toolbar height. Additionally, the icon size changed from 18x18&nbsp;px to 24x24&nbsp;px.
- The WebAssembly and asm.js artifacts now have a content hash as part of the file name. This allows you to configure a long-term caching strategy and make use of advanced features like WASM code caching. The affected files are:
  - `pspdfkit-lib/pspdfkit.wasm` ➡️ `pspdfkit-lib/pspdfkit-<hash>.wasm`
  - `pspdfkit-lib/pspdfkit.wasm.js` ➡️ `pspdfkit-lib/pspdfkit-<hash>.wasm.js`
  - `pspdfkit-lib/pspdfkit.asm.js` ➡️ `pspdfkit-lib/pspdfkit-<hash>.asm.js`
  - `pspdfkit-lib/pspdfkit.asm.js.mem` ➡️ `pspdfkit-lib/pspdfkit-<hash>.asm.js.mem`
- The thumbnail sidebar now comes with a changed layout. All public CSS classes can still be used to customize the styling:
  - `.PSPDFKit-Sidebar-Thumbnails-Page`
  - `.PSPDFKit-Sidebar-Thumbnails-Page-Image`
  - `.PSPDFKit-Sidebar-Thumbnails-Page-Label`
  - `.PSPDFKit-Sidebar-Thumbnails-Page-Selected`

If you use PSPDFKit Server, make sure you read the 2019.4 server migration guide.

For a full list of changes, check out the changelog.

[pspdfkit for web 2019.4]: /blog/pspdfkit-web-2019-4/
[wasm code caching]: https://v8.dev/blog/wasm-code-caching
[changelog]: /guides/web/changelog/#2019.4
[2019.4 server migration guide]: /guides/product-archives-and-deprecated-solutions/
[`nutrientviewer.defaulttoolbaritems`]: /api/web/variables/NutrientViewer.defaultToolbarItems.html
[`nutrientviewer.configuration#theme`]: /api/web/interfaces/Configuration.html#theme
[web sdk 2019.3 release notes]: /guides/web/release-notes/2019-3/

Explore key enhancements in PSPDFKit for Web 2019.4, including UI changes, a new Document Editor, and migration tips for seamless adaptation.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2019.3 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2019-3/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2019-3/</guid>
            <pubDate>Fri, 01 Mar 2019 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore the key updates in PSPDFKit for Web 2019.3, including annotation changes and migration tips for seamless integration.]]></description>
            <content:encoded><![CDATA[### Notable changes

- The default minimum ink and shape annotations sizes, `NutrientViewer.Options.MIN_INK_ANNOTATION_SIZE` and `NutrientViewer.Options.MIN_SHAPE_ANNOTATION_SIZE`, have been reduced from `128` to `16`. The former value was too big for several use cases. If your code relies on the former value, you can set it before the first `NutrientViewer.load()` call: `NutrientViewer.Options.MIN_INK_ANNOTATION_SIZE = 128` and `NutrientViewer.Options.MIN_SHAPE_ANNOTATION_SIZE = 128`.
- While creating an ink annotation with the UI, new lines may be split into a new annotation if the new line starting point is too distant from the rest of the annotation points, and/or some time has passed since the last point was drawn, especially if the annotation already contains more than a certain amount of lines (over 50).
- The popover’s HTML structure has changed. Now the arrow element and the popover content are sibling elements. These elements are wrapped with the specific popover class name to enable targeted overrides, e.g. `.PSPDFKit-Popover-Annotation-Tooltip .PSPDFKit-Popover {}` and `.PSPDFKit-Popover-Annotation-Tooltip .PSPDFKit-Popover-Arrow {}`.
- In Server mode, the minimum search query length is now configurable on the server with the environment variable `MIN_SEARCH_QUERY_LENGTH` (default: `3`). This value is passed to the client at load time, and the client will use it to check against the length of the term provided to `NutrientViewer.Instance#search`, `NutrientViewer.Instance#startUISearch`, or the UI search form. If the query to `NutrientViewer.Instance#search` is shorter than this value, the search request will throw an error. To prevent this, it’s recommended to check the minimum query length value from `NutrientViewer.SearchState#minSearchQueryLength` before performing the search. In the case of the UI search form or `NutrientViewer.Instance#startUISearch`, there won’t be an error and the search will just not be performed until the search field value is long enough. In Standalone mode, the default value for this property is `1` and it’s not configurable.

If you use PSPDFKit Server, make sure you read the 2019.3 server migration guide.

For a full list of changes, check out the changelog.

[pspdfkit for web 2019.3]: /blog/pspdfkit-web-2019-3/
[changelog]: /guides/web/changelog/#2019.3
[2019.3 server migration guide]: /guides/product-archives-and-deprecated-solutions/
[web sdk 2019.2 release notes]: /guides/web/release-notes/2019-2/

Explore the key updates in PSPDFKit for Web 2019.3, including annotation changes and migration tips for seamless integration.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2019.2 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2019-2/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2019-2/</guid>
            <pubDate>Fri, 01 Feb 2019 00:00:00 GMT</pubDate>
            <description><![CDATA[Learn about the API changes and migration steps for PSPDFKit for Web 2019.2, including updates to annotation, bookmark, and form field methods.]]></description>
            <content:encoded><![CDATA[### Notable changes

- We renamed all `*.onPress` events to `*.press` to improve consistency with our event naming schema. The old names are now deprecated and will be removed in a future version. The name changes are as follows:
  - `annotations.onPress` to `annotations.press`
  - `textLine.onPress` to `textLine.press`
  - `page.onPress` to `page.press`
- Shape annotations had their stroke width scaled when resized with the UI. As a result, the different annotations’ stroke widths could vary if resized. This behavior has been changed, so now a shape annotations’ stroke width is kept when resizing.
- The default minimum stamp annotation size, `NutrientViewer.Options.MIN_STAMP_ANNOTATION_SIZE`, has been increased from `10` to `15`. The former value was so small that stamp annotations resized that small would have their text clipped in a way that the stamp text wouldn’t fit (#2977). If your code relies on the former value, you can set it before the first `NutrientViewer.load()` call: `NutrientViewer.Options.MIN_STAMP_ANNOTATION_SIZE = 15`.
- In a recent version, we accidentally disabled an optimization that reduces the number of points an ink annotation creates while drawing. This release restores the previous behavior. You can opt out this behavior by setting `NutrientViewer.Options.INK_EPSILON_RANGE_OPTIMIZATION = 0`.
- We renamed `FormField#annotationPdfObjectIds` to `FormField#annotationIds`.
- When in continuous scroll mode, we now remove custom overlay items from the DOM if you scroll a certain number of pages below the page they items are rendered on. If you previously depended on custom overlay items being persisted in the DOM (e.g. wanted to maintain its state), you will now have to handle this explicitly with the `CustomOverlayItem#onDisappear` method.

  For example, if you’re using a `<video>` tag and want to maintain its current position, you could:

  - Query the current position in `onDisappear` and apply it again with `onAppear`, or
  - Move (`appendChild`) the `<video>` node to another place in the DOM (e.g. an invisible div outside the viewport) and append it back to the custom overlay item `onAppear`. This will keep most of the state around.
- We moved the public CSS classes for shape annotations and ink annotations from their `svg` element to their container (parent).

If you use PSPDFKit Server, make sure you read the 2019.2 server migration guide.

For a full list of changes, check out the changelog.

[pspdfkit for web 2019.2]: /blog/pspdfkit-web-2019-2/
[most of the state]: https://github.com/reactjs/rfcs/pull/34#issuecomment-372493498
[changelog]: /guides/web/changelog/#2019.2
[2019.2 server migration guide]: /guides/product-archives-and-deprecated-solutions/
[web sdk 2019.1 release notes]: /guides/web/release-notes/2019-1/

Learn about the API changes and migration steps for PSPDFKit for Web 2019.2, including updates to annotation, bookmark, and form field methods.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2019.1 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2019-1/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2019-1/</guid>
            <pubDate>Tue, 01 Jan 2019 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore notable improvements in PSPDFKit for Web 2019.1, including font changes and updated annotation models for seamless integration.]]></description>
            <content:encoded><![CDATA[### Notable changes

- We changed the default font families of the viewer to include more system fonts. If you’ve overridden the default font stack, we recommend you check your integration to make sure this change doesn’t overrule yours.
- We added a default padding to the annotation tooltip items. The padding is added to every `ToolItem` except the ones that define a `node` property.
- We added a cloudy border intensity field to polygon, rectangle, and ellipse annotation models.
- We renamed `TextFormField`’s `doNotSpellcheck` field to `doNotSpellCheck`.
- We exposed the default values of annotation models to `NutrientViewer.defaultAnnotationPresets`. Default annotation presets, including variant presets, will now be prefilled with the default values of an annotation type. If you were relying on the default annotation presets being empty at load time, check if you need to update your code to account for this change.
- When creating an ink annotation, any change made to the ink annotation properties will result in a new ink annotation being created. This means that if you are creating an ink annotation using the UI and you change any of its properties — for example, its `color` — then PSPDFKit will store the current annotation and create a new one with only the new properties. This will happen each time a property is changed while creating an ink annotation — even if the settings are changed back to the original — so it can result in the creation of multiple annotations.
- A new default annotation preset variant for ink signature annotations has been added. If you were relying on the preset positions in the `defaultAnnotationPresets` array, check if you need to update your code to account for this change. The new annotation preset ID is named `ink-signature`.

If you use PSPDFKit Server, make sure you read the [2019.1 server migration guide].

For a full list of changes, check out the changelog.

[pspdfkit for web 2019.1]: /blog/pspdfkit-web-2019-1/
[changelog]: /guides/web/changelog/#2019.1
[2019.1 server migration guide]: /guides/product-archives-and-deprecated-solutions/
[web sdk 2018.7 release notes]: /guides/web/release-notes/2018-7/

Explore notable improvements in PSPDFKit for Web 2019.1, including font changes and updated annotation models for seamless integration.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2018.7 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2018-7/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2018-7/</guid>
            <pubDate>Sun, 01 Jul 2018 00:00:00 GMT</pubDate>
            <description><![CDATA[Learn about customizable tooltips, enhanced DOM support, and other important features in PSPDFKit for Web 2018.7.]]></description>
            <content:encoded><![CDATA[If you’re maintaining a Server installation, be sure to check out the 2018.7 server migration guide.

### Notable changes

- We upgraded some icons for the color picker part of the annotation toolbar. If you have been relying on element IDs of icons, verify that these IDs still work for you. What we changed:
  - `#ToolbarButton-color` is now `#ToolbarButton-stroke-color`, `#ToolbarButton-fill-color`, or `#ToolbarButton-font-color`, depending on the annotation type
- Toolbar buttons in dropdown items need to be styled with `.PSPDFKit-Input-Dropdown-Item[-state] > .PSPDFKit-Toolbar-Button`.
- We added a `rotation` property to annotations. This change shouldn’t affect current annotations. However, when using Server deployment, some documents might need to be uploaded again if the rotation is off.

For a full list of changes, check out the changelog.

[pspdfkit for web 2018.7]: /blog/pspdfkit-web-2018-7/
[changelog]: /guides/web/changelog/#2018.7
[2018.7 server migration guide]: /guides/product-archives-and-deprecated-solutions/
[web sdk 2018.6 release notes]: /guides/web/release-notes/2018-6/

Learn about customizable tooltips, enhanced DOM support, and other important features in PSPDFKit for Web 2018.7.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2018.6 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2018-6/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2018-6/</guid>
            <pubDate>Fri, 01 Jun 2018 00:00:00 GMT</pubDate>
            <description><![CDATA[Learn about the latest features in PSPDFKit for Web 2018.6, including stamp annotations and a bookmarks sidebar for improved navigation.]]></description>
            <content:encoded><![CDATA[If you’re maintaining a Server installation, be sure to check out the 2018.6 server migration guide.

### Notable changes

- Adds two toolbar items to `NutrientViewer.defaultToolbarItems`:
  - `sidebar-bookmarks` for the bookmarks sidebar. It is part of the `sidebar` `dropdownGroup`.
  - `stamp` for stamp annotations.
- The `stamp` and `image` toolbar items are now grouped in a `dropdownGroup` called `image`.
- `dropdownGroup`s with only one item are now rendered as flat buttons instead of dropdowns.
- Prior to this release, custom toolbar item icons with data URIs appeared shifted to the left. This is now fixed, and previous workarounds to this issue are no longer needed. But just in case you need additional CSS rules to style custom toolbar icons, you can use the `.PSPDFKit-Toolbar-Button-Icon` CSS selector.
- API: Changes annotation APIs to not throw synchronously but rather reject with an error instead.

For a full list of changes, check out the changelog.

[pspdfkit for web 2018.6]: /blog/pspdfkit-web-2018-6/
[changelog]: /guides/web/changelog/#2018.6
[defaulttoolbaritems]: /api/web/variables/NutrientViewer.defaultToolbarItems.html
[2018.6 server migration guide]: /guides/product-archives-and-deprecated-solutions/
[web sdk 2018.5 release notes]: /guides/web/release-notes/2018-5/

Learn about the latest features in PSPDFKit for Web 2018.6, including stamp annotations and a bookmarks sidebar for improved navigation.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2018.5 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2018-5/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2018-5/</guid>
            <pubDate>Tue, 01 May 2018 00:00:00 GMT</pubDate>
            <description><![CDATA[Learn about the latest updates in PSPDFKit 2018.5, featuring image annotations and enhanced annotation tools for PDFs.]]></description>
            <content:encoded><![CDATA[If you’re maintaining a Server installation, be sure to check out the 2018.5 server migration guide.

### API changes

- Adds `Configuration#enableServiceWorkerSupport` to not bypass service workers when loading stylesheets inside PSPDFKit for Web.
- Adds `defaultAnnotationPresets` for annotation presets. You can read more about customizing annotation presets in our Customizing the Toolbar guide.
- Removes `InteractionMode.LAYOUT_CONFIGURATION`. The state of the layout configurator will be no longer be exposed.

### Notable changes

- The order of `defaultToolbarItems` was changed.
- New toolbar items for document outline, document annotation sidebar, the `highlighter` variant, and the `arrow` variant were added to the `defaultToolbarItems`.
- We fixed an issue with exported and imported XFDF files on rotated pages.
- The placement logic of dropdowns has changed, and CSS rules that rely on the HTML structure of the dropdowns might need to be updated.

For a full list of changes, check out the changelog.

[pspdfkit for web 2018.5]: /blog/pspdfkit-web-2018-5/
[changelog]: /guides/web/changelog/#2018.5
[cover endpoint]: /guides/web/server-backed/document-api/#load-a-cover-photo-of-a-document-65facf
[`defaulttoolbaritems`]: /api/web/variables/NutrientViewer.defaultToolbarItems.html
[`defaultannotationpresets`]: /api/web/variables/NutrientViewer.defaultAnnotationPresets.html
[2018.5 server migration guide]: /guides/product-archives-and-deprecated-solutions/
[customizing the toolbar]: /guides/web/customizing-the-interface/customizing-the-toolbar/#annotation-variant-buttons
[web sdk 2018.4 release notes]: /guides/web/release-notes/2018-4/

Learn about the latest updates in PSPDFKit 2018.5, featuring image annotations and enhanced annotation tools for PDFs.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2018.4 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2018-4/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2018-4/</guid>
            <pubDate>Sun, 01 Apr 2018 00:00:00 GMT</pubDate>
            <description><![CDATA[Discover key enhancements in PSPDFKit for Web 2018.4, including shape annotations and API updates for better document management.]]></description>
            <content:encoded><![CDATA[If you’re maintaining a Server installation, be sure to check out the 2018.4 server migration guide.

### API changes

- This version removes the `Instance#renderCover` API method in favor of `Instance#renderPageAsArrayBuffer`. We deprecated this API in PSPDFKit 2018.2.

### Notable changes

- All covers will now contain annotations as well.
- The following classes are now used for dropdowns instead of sliders:
  - `.PSPDFKit-Ink-Annotation-Toolbar-Opacity`
  - `.PSPDFKit-Ink-Annotation-Toolbar-Line-Width`
  - `.PSPDFKit-Text-Annotation-Toolbar-Opacity`
  - `.PSPDFKit-Text-Markup-Annotation-Toolbar-Opacity`
- The `.ColorSet` class was replaced by `.PSPDFKit-Input-Color-Dropdown`.
  The color dropdowns are now separated into foreground and background color for each annotation.
  The combinations for the annotations are:
  - Text: `.PSPDFKit-Text-Annotation-Toolbar-Font-Color` / `.PSPDFKit-Text-Annotation-Toolbar-Background-Color`
  - Ink: `.PSPDFKit-Ink-Annotation-Toolbar-Stroke-Color` / `.PSPDFKit-Ink-Annotation-Toolbar-Background-Color`
- The order of `defaultToolbarItems` was changed.
- A new toolbar item for shape annotations was added to the `defaultToolbarItems`.
- We fixed an issue with PDFs that didn’t have permissions to modify annotations and forms. These PDFs did not render any forms before.

For a full list of changes, check out the changelog.

[pspdfkit for web 2018.4]: /blog/pspdfkit-web-2018-4/
[changelog]: /guides/web/changelog/#2018.4
[cover endpoint]: /api/reference/document-engine/client/#tag/Documents/operation/render-cover
[`defaulttoolbaritems`]: /api/web/variables/NutrientViewer.defaultToolbarItems.html
[2018.4 server migration guide]: /guides/product-archives-and-deprecated-solutions/
[2018.2 web migration guide]: /guides/web/migration-guides/2018-2-migration-guide/#render-bitmaps-732135
[`instance#renderpageasarraybuffer`]: /api/web/classes/NutrientViewer.Instance.html#renderpageasarraybuffer
[web sdk 2018.3 release notes]: /guides/web/release-notes/2018-3/

Discover key enhancements in PSPDFKit for Web 2018.4, including shape annotations and API updates for better document management.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2018.3 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2018-3/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2018-3/</guid>
            <pubDate>Thu, 01 Mar 2018 00:00:00 GMT</pubDate>
            <description><![CDATA[Learn about the latest updates in PSPDFKit for Web 2018.3, including ink signatures, password protection, and a simplified deployment structure.]]></description>
            <content:encoded><![CDATA[If you’re maintaining a Server installation, make sure to check out the 2018.3 server migration guide.

### Updated package structure

In this release, we introduce a new and simpler package structure. This might require changes on your end if you’re using our standalone deployment option.

With the exception of the main `pspdfkit.js` bundle, all of the library files are now located in the `pspdfkit-lib` subfolder. This new structure makes it easier to copy PSPDFKit’s artifacts and allows us to introduce new ones over time without requiring you to update your setup.

Before, it was necessary to copy the individual files like so:

```sh
cp ./node_modules/pspdfkit/dist/pspdfkit.css \
  ./node_modules/pspdfkit/dist/pspdfkit.wasm \
  ./node_modules/pspdfkit/dist/pspdfkit.wasm.js \
  ./node_modules/pspdfkit/dist/pspdfkit.asm.js \
  ./node_modules/pspdfkit/dist/pspdfkit.asm.js.mem \
  ./dist
```

You could also have done this via a build tool.

Beginning with PSPDFKit for Web 2018.3, all you need to do is copy a single folder:

```sh
cp -R ./node_modules/pspdfkit/dist/pspdfkit-lib dist
```

Our guides and example applications were updated to reflect this change.

### Annotation events

One important bug fix of this release changes the `annotations.create` event. This event previously fired when loading annotations in _some_ cases. These cases are:

- When using a server-backed deployment with `instant` set to `false`.
- When using a standalone deployment.

If your code was relying on this behavior, you will need to listen for the newly added `annotations.load` event. This will now fire in any case where annotations are loaded from the document. This might happen once for all annotations, or it might be scoped to the pages in the viewport.

### Connecting self-hosted assets with PSPDFKit Server

If you previously used the server-backed flavor of PSPDFKit and hosted the JavaScript files on your own server, you had to use the `baseUrl` option to tell PSPDFKit to connect to the correct server. Since this option was also used as the load path for other JavaScript resources, we’ve created a dedicated option to connect PSPDFKit Server — the `serverUrl`:

```diff
NutrientViewer.load({
-  baseUrl: "https://example.com",
+  serverUrl: "https://example.com",
});
```

For a full list of changes, check out the changelog.

[pspdfkit for web 2018.3]: /blog/pspdfkit-web-2018-3/
[changelog]: /guides/web/changelog/#2018.3
[`annotations.load`]: /api/web/types/Events.AnnotationsLoadEvent.html
[2018.3 server migration guide]: /guides/product-archives-and-deprecated-solutions/
[`baseurl`]: /api/web/interfaces/Configuration.html#baseurl
[`serverurl`]: /api/web/interfaces/Configuration.html#serverurl
[web sdk 2018.2 release notes]: /guides/web/release-notes/2018-2/

Learn about the latest updates in PSPDFKit for Web 2018.3, including ink signatures, password protection, and a simplified deployment structure.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2018.2 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2018-2/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2018-2/</guid>
            <pubDate>Thu, 01 Feb 2018 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore the features of PSPDFKit for Web 2018.2 including Electron support and API updates.]]></description>
            <content:encoded><![CDATA[If you’re maintaining a Server installation, make sure to check out the 2018.2 server migration guide.

### Render bitmaps

This version deprecates the `Instance#renderCover` API method in favor of `Instance#renderPageAsArrayBuffer`, which now works on server deployments too.

In contrast to `renderCover`, the new method expects a mandatory `pageIndex` as its second argument.

To migrate, replace any occurrence of `renderCover` with `Instance#renderPageAsArrayBuffer`, and make sure to pass `0` as the `pageIndex` in the place where you were previously omitting the second argument:

{% tabs variant="underline-accent" %}
{% tabitem label="ES6+" %}
```js
const buffer = await instance.renderCover({ width: 400 });
// becomes
const buffer = await instance.renderPageAsArrayBuffer({ width: 400 }, 0);
```
{% /tabitem %}

{% tabitem label="JAVASCRIPT" %}
```js
instance.renderCover({ width: 400 }).then(function(buffer) {
  console.log(buffer);
});
// becomes
instance.renderPageAsArrayBuffer({ width: 400 }, 0).then(function(buffer) {
  console.log(buffer);
});
```
{% /tabitem %}
{% /tabs %}

{% tabs variant="underline-accent" %}
{% tabitem label="ES6+" %}
```js
const buffer = await instance.renderCover({ width: 400 }, 2);
// becomes
const buffer = await instance.renderPageAsArrayBuffer({ width: 400 }, 2);
```
{% /tabitem %}

{% tabitem label="JAVASCRIPT" %}
```js
instance.renderCover({ width: 400 }, 2).then(function(buffer) {
  console.log(buffer);
});
// becomes
instance.renderPageAsArrayBuffer({ width: 400 }, 2).then(function(buffer) {
  console.log(buffer);
});
```
{% /tabitem %}
{% /tabs %}

PSPDFKit for Web 2018.2 also introduces `Instance#renderPageAsImageURL`, which renders a page and returns a URL to the generated image. This method works on standalone and server-based deployments.

For a full list of changes, check out the changelog.

[pspdfkit for web 2018.2]: /blog/pspdfkit-web-2018-2/
[`instance#rendercover`]: /api/web/classes/NutrientViewer.Instance.html#rendercover
[`instance#renderpageasarraybuffer`]: /api/web/classes/NutrientViewer.Instance.html#renderpageasarraybuffer
[`instance#renderpageasimageurl`]: /api/web/classes/NutrientViewer.Instance.html#renderpageasimageurl
[2018.2 server migration guide]: /guides/product-archives-and-deprecated-solutions/
[changelog]: /guides/web/changelog/#2018.2
[web sdk 2018.1 release notes]: /guides/web/release-notes/2018-1/

Explore the features of PSPDFKit for Web 2018.2 including Electron support and API updates.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2018.1 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2018-1/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2018-1/</guid>
            <pubDate>Mon, 01 Jan 2018 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore the enhancements in PSPDFKit 2018.1, including new toolbar items, XFDF support, and improved WebAssembly initialization.]]></description>
            <content:encoded><![CDATA[If you’re maintaining a Server installation, make sure to check out the 2018.1 server migration guide.

### Notable changes

- A new toolbar item was added to the `defaultToolbarItems` to show/hide the thumbnail sidebar, `sidebar-thumbnails`. When it is clicked, it will update the `ViewState`.
- The `ViewState` has new properties:
  - `ViewState#sidebarMode` to toggle the visibility of the sidebar.
  - `ViewState#pagesRotation` to control the rotation of all pages. The value must be a multiple of 90 degrees. The helper methods `ViewState#rotateLeft()` and `ViewState#rotateLeft()` were added to quickly rotate by 90 degrees in one direction.
- The existing `Instance#exportInstantJSON()` API is now also available on server deployments.
- A new API was added to export XFDF: `Instance#exportXFDF()`.
- A new, standalone-exclusive API was added to import XFDF when loading a PDF (`Configuration#XFDF` and `Configuration#XFDFKeepCurrentAnnotations`). For server setups, this is part of the Server API.
- When loading a WebAssembly instance, support for IndexedDB caching and streaming instantiation will now be detected. If the browser supports any of these techniques, we’ll use it to improve WebAssembly initialization time.
- The new WebAssembly streaming instantiation will require a specific MIME type for the `pspdfkit.wasm` artifact. This needs to be configured by your web server if you’re not using PSPDFKit Server. Make sure that the response header for the WebAssembly request returns `Content-Type=application/wasm`.

For a full list of changes, check out the changelog.

[pspdfkit for web 2018.1]: /blog/pspdfkit-web-2018-1/
[2018.1 server migration guide]: /guides/product-archives-and-deprecated-solutions/
[changelog]: /guides/web/changelog/#2018.1
[`defaulttoolbaritems`]: /api/web/variables/NutrientViewer.defaultToolbarItems.html
[`viewstate#sidebarmode`]: /api/web/classes/NutrientViewer.ViewState.html#sidebarmode
[`viewstate#pagesrotation`]: /api/web/classes/NutrientViewer.ViewState.html#pagesrotation
[`instance#exportinstantjson()`]: /api/web/classes/NutrientViewer.Instance.html#exportinstantjson
[`instance#exportxfdf()`]: /api/web/classes/NutrientViewer.Instance.html#exportxfdf
[xfdf import server]: /guides/product-archives-and-deprecated-solutions/
[`configuration#xfdf`]: /api/web/interfaces/Configuration.html#xfdf
[`configuration#xfdfkeepcurrentannotations`]: /api/web/interfaces/Configuration.html#xfdfkeepcurrentannotations
[streaming instantiation]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiateStreaming
[indexeddb caching]: https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API
[web sdk 2017.9 release notes]: /guides/web/release-notes/2017-9/
[`viewstate`]: /api/web/classes/NutrientViewer.ViewState.html

Explore the enhancements in PSPDFKit 2018.1, including new toolbar items, XFDF support, and improved WebAssembly initialization.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2017.9 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2017-9/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2017-9/</guid>
            <pubDate>Fri, 01 Sep 2017 00:00:00 GMT</pubDate>
            <description><![CDATA[Learn about the new form support, responsive toolbar, and headless mode in PSPDFKit for Web 2017.9. Check migration and annotation guides for details!]]></description>
            <content:encoded><![CDATA[If you’re maintaining a Server installation, make sure to check out the server migration guides.

### Notable changes

- All annotation APIs will now also return `WidgetAnnotation`s. This special type of annotation is required to render form widgets in a PDF and cannot be modified. Calling any of the modifying APIs (create, update, or delete) will cause an error when a `WidgetAnnotation` is used.
- A comprehensive guide for forms in PDFs can be found in our form guides.
- A new default toolbar item was added: `annotate`. This item will show the annotation button on small screens. To remove one specific annotation tool, it’s still sufficient to remove the individual type from the toolbar items list. An example can be found in our toolbar customization guide.
- Since migrating `Instance#destroy()` in 2017.7, the method is now no longer available. Refer to the 2017.7 migration guide for information on how to upgrade.

For a full list of changes, check out the changelog.

[pspdfkit for web 2017.9]: /blog/pspdfkit-web-2017-9/
[form guides]: ../../forms/introduction-to-forms/
[`widgetannotation`]: /api/web/classes/NutrientViewer.Annotations.WidgetAnnotation.html
[annotation guides]: ../../annotations/introduction-to-annotations/
[server migration guides]: /guides/product-archives-and-deprecated-solutions/
[changelog]: /guides/web/changelog/#2017.9
[toolbar customization guide]: ../../customizing-the-interface/customizing-the-toolbar/
[web sdk 2017.8 release notes]: /guides/web/release-notes/2017-8/
[2017.7 migration guide]: /guides/web/release-notes/2017-7/

Learn about the new form support, responsive toolbar, and headless mode in PSPDFKit for Web 2017.9. Check migration and annotation guides for details!]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2017.8 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2017-8/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2017-8/</guid>
            <pubDate>Tue, 01 Aug 2017 00:00:00 GMT</pubDate>
            <description><![CDATA[Learn to seamlessly upgrade annotation IDs in PSPDFKit Web 2017.8 with our comprehensive migration guide.]]></description>
            <content:encoded><![CDATA[This requires that all clients (iOS, Android, and Web), along with the server, are updated to the latest version at the same time. If you’re maintaining an Instant setup, make sure to check out the server migration guides.

### Annotation API changes

- All `Annotation` subclasses now have a string value for the `id` field. This ID will still be generated automatically whenever `Instance#createAnnotation` is called.
- The concept of local ID and global ID is gone completely. The Web client can now generate a unique string ID, which is also used to reference the annotation when it is saved to Instant or Instant JSON.
- `Instance#resolveLocalId` was removed and is now available as `Instance#ensureAnnotationSaved`. This method still accepts an annotation and will resolve the promise when the annotation is persisted. The `id` property of the annotation will now stay stable and will no longer be updated when the promise resolves.
- The document format of Instant JSON no longer requires the `lastAnnotationId` property. Importing the previous version of Instant JSON (with number values for annotation IDs) using the [`Config#instantJSON`] option is still supported. When [`Instance#exportInstantJSON`] is called the next time, the format will automatically be upgraded. The IDs of existing annotations will simply be cast to string (so `-1` will become `"-1"`).

For more details, check out our updated annotation and [Instant JSON] guides.

For a full list of changes, check out the changelog.

[`id`]: /api/web/classes/NutrientViewer.Annotations.Annotation.html#id
[`instance#createannotation`]: /api/web/classes/NutrientViewer.Instance.html#createannotation
[`annotation`]: /api/web/classes/NutrientViewer.Annotations.Annotation.html
[`instance#ensureannotationsaved`]: /api/web/classes/NutrientViewer.Instance.html#ensurechangessaved
[instant json]: ../../importing-exporting/instant-json/
[`config#instantjson`]: /api/web/interfaces/Configuration.html#instantjson
[`instance#exportinstantjson`]: /api/web/classes/NutrientViewer.Instance.html#exportinstantjson
[annotation guides]: ../../annotations/introduction-to-annotations/
[server migration guides]: /guides/product-archives-and-deprecated-solutions/
[changelog]: /guides/web/changelog/#2017.8
[web sdk 2017.7 release notes]: /guides/web/release-notes/2017-7/

Learn to seamlessly upgrade annotation IDs in PSPDFKit Web 2017.8 with our comprehensive migration guide.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2017.7 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2017-7/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2017-7/</guid>
            <pubDate>Sat, 01 Jul 2017 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore the new features of PSPDFKit for Web 2017.7, including API changes and improved printing capabilities.]]></description>
            <content:encoded><![CDATA[This release requires changes to the server as well. Check out our server migration guides to learn more.

Explore the new features of PSPDFKit for Web 2017.7, including API changes and improved printing capabilities.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2017.6 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2017-6/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2017-6/</guid>
            <pubDate>Thu, 01 Jun 2017 00:00:00 GMT</pubDate>
            <description><![CDATA[Discover the new features in PSPDFKit 2017.6, including note annotations, improved zoom modes, and real-time collaboration for seamless document editing.]]></description>
            <content:encoded><![CDATA[- `ViewState#viewMode` is deprecated in favor of the newly added `ViewState#viewMode` and `ViewState#scrollMode` options, and will be removed in version 2017.7.
- `ViewState#pageSpacing` is now used to determine the spacing between pages when in double-page mode. The default value has therefore been changed to zero. For the previous behavior, use `ViewState#spreadSpacing` instead.
- Zoom modes have been renamed to better reflect their behavior in regard to spreads. The deprecated options will be removed in version 2017.7.
  - Instead of `ZoomMode.PAGE_FIT`, use `ZoomMode.FIT_TO_VIEWPORT`.
  - Instead of `ZoomMode.PAGE_WIDTH`, use `ZoomMode.FIT_TO_WIDTH`.

With this release, we also added support for deleting imported documents from PSPDFKit Server’s database. See our API documentation for further information.

For a full list of changes, check out the changelog.

[pspdfkit for web 2017.6]: /blog/pspdfkit-web-2017-6/
[api documentation]: /guides/product-archives-and-deprecated-solutions/
[changelog]: /guides/web/changelog/#2017.6
[web sdk 2017.3 release notes]: /guides/web/release-notes/2017-3/
[`viewstate#viewmode`]: /api/web/classes/NutrientViewer.ViewState.html#viewmode
[`viewstate#scrollmode`]: /api/web/classes/NutrientViewer.ViewState.html#scrollmode
[`viewstate#pagespacing`]: /api/web/classes/NutrientViewer.ViewState.html#pagespacing
[`viewstate#spreadspacing`]: /api/web/classes/NutrientViewer.ViewState.html#spreadspacing
[`zoommode.page_fit`]: /api/web/enums/NutrientViewer.ZoomMode.html
[`zoommode.fit_to_viewport`]: /api/web/enums/NutrientViewer.ZoomMode.html
[`zoommode.page_width`]: /api/web/enums/NutrientViewer.ZoomMode.html
[`zoommode.fit_to_width`]: /api/web/enums/NutrientViewer.ZoomMode.html

Discover the new features in PSPDFKit 2017.6, including note annotations, improved zoom modes, and real-time collaboration for seamless document editing.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2017.3 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/2017-3/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/2017-3/</guid>
            <pubDate>Wed, 01 Mar 2017 00:00:00 GMT</pubDate>
            <description><![CDATA[Latest updates and release notes for Nutrient Web SDK, including new features, improvements, and bug fixes.]]></description>
            <content:encoded><![CDATA[However, we noticed an issue that would come up repeatedly in support requests: Customers don’t want to have to mirror their access control to PSPDFKit Server, preferring to rely on signed JSON Web Tokens (JWTs) instead. That’s why we’re officially deprecating this functionality.

To do this, we updated the JWT payload format and removed the option to authenticate using a `"user_id"`. The related backend APIs for assigning users to documents have been removed as well — namely `/api/change_users` and `/api/set_users`.

If you were relying on user IDs to authenticate your documents, you will need to update the JWT payload to a finer-grained `"permissions"` list. For example, this:

```json
{
  "document_id": "abc",
  "user_id": "test_user"
}
```

becomes this:

```json
{
  "document_id": "abc",
  "permissions": ["read-document", "edit-annotations"]
}
```

Read on to find out more about the newly introduced concept of permissions.

Latest updates and release notes for Nutrient Web SDK, including new features, improvements, and bug fixes.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[1.15 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/1-15/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/1-15/</guid>
            <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Lists important changes for Nutrient Web SDK 1.15]]></description>
            <content:encoded><![CDATA[### 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 which patterns you’d like to see expanded next.

### Cancelable load and conversion operations

`NutrientViewer.load()`, `convertToPDF()`, `convertToOffice()`, and `populateDocumentTemplate()` now accept an `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` 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`, 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.

{% alert line="single-line" %}
`SearchType.WORD_BASED` is available in standalone mode immediately. Server-backed mode requires Document Engine 1.16.x.
{% /alert %}

### 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.

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.*`.

{% alert line="single-line" %}
Minimum Document Engine version required: 1.5.6
{% /alert %}

For a complete list of changes, bug fixes, and improvements, refer to the changelog. For previous release notes, refer to the Web SDK 1.14 release notes. We appreciate your feedback and contributions as we continue to enhance Nutrient Web SDK.

[changelog]: /guides/web/changelog/#1.15.0
[web sdk 1.14 release notes]: /guides/web/release-notes/1-14/
[1.5.6]: /guides/document-engine/changelog/#1.5.6
[searchtype-api]: /api/web/enums/NutrientViewer.SearchType.html
[abortsignal]: https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal
[ui-loader-api]: /api/web/interfaces/UI.Configuration.html#loader
[support-form]: https://support.nutrient.io/hc/en-us/requests/new

Lists important changes for Nutrient Web SDK 1.15]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[1.14 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/1-14/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/1-14/</guid>
            <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Lists important changes for Nutrient Web SDK 1.14]]></description>
            <content:encoded><![CDATA[### Linearized PDF loading enabled by default

Starting with 1.14, linearized PDF downloading works without any extra configuration when your server supports range requests. Existing integrations no longer need to pass `allowLinearizedLoading: true` in `NutrientViewer.load()`.

If you need to opt out, set `allowLinearizedLoading: false`. For setup details and server requirements, refer to the linearized downloads guide.

### UI customization slots

This release introduces a slot-based UI customization system that gives fine-grained control over every part of the viewer interface. Components are organized by feature domain (tools, annotations, content editor, signatures, stamps, measurements, document comparison, form creator, and sidebar). Each slot supports subslot customization (header, body, footer) for partial replacement without overriding the entire component.

To get started quickly, use the new `minimal` preset to hide all UIs and selectively restore only the components you need:

```js
await NutrientViewer.load({
  // ...your existing configuration
  ui: { preset: "minimal" },
});
```

For full control, configure individual slots to replace, extend, or hide specific components. See the UI configuration API reference for the complete list of available slots. This is a significant new system and we’re excited to get it in front of real integrations. We’d love to hear your feedback on what works, what doesn’t, and which slots you’d like to see extended in future releases — share it with us through our support form.

### Accessibility and keyboard support

This release adds keyboard support for creating widget annotations in form designer mode and for selecting multiple annotations via rectangular area selection. Combined with the Content Editor shortcuts for bold (Control/Command-B) and italics (Control/Command-I), keyboard-driven workflows continue to improve across the SDK.

### Temporary storage for PDF downloads

When loading a PDF from a URL in standalone mode, Nutrient can now use the browser’s origin private file system (OPFS) as temporary storage for the downloaded document data instead of keeping it entirely in browser memory. This reduces peak RAM usage for larger documents.

This behavior is automatic by default. Use the new `tempStorage` configuration option to control it. Set `"memory"` to keep the previous behavior, or `"opfs"` to prefer OPFS regardless of file size. Refer to the temporary storage guide for details.

### Programmatic OCG layer creation

A new `instance.createLayer()` API lets you create optional content group (OCG) layers programmatically, and `flattenAnnotations` now accepts a `targetLayerId` option. Together, these enable exporting PDFs with per-user togglable annotation layers.

### Rich stamp annotations

Stamp annotations now support multiline text with custom font styling and embedded images. New properties include `multiline`, `font`, `fontSize`, `fontColor`, `isBold`, `isItalic`, `imageAttachmentId`, `imageContentType`, and `imagePosition` for controlling image placement within the stamp text flow.

{% alert line="single-line" %}
Server-backed rendering of rich stamp properties currently requires a nightly build of Document Engine (the 1.16+ line is not publicly released yet). On publicly available Document Engine versions (up to 1.15.1), the new properties are ignored and stamps fall back to basic rendering. Standalone/Web-only mode supports rich stamps immediately.
{% /alert %}

### Strict Content Security Policy support

For environments with strict Content Security Policy rules that require nonce-based `style-src` and `script-src` directives, a new `nonce` configuration option lets you pass a nonce value that Nutrient applies to its injected styles and scripts.

### Performance and stability

- Content Editor text block movement is noticeably faster for complex documents.
- PDF redaction stability improves for documents with nested shared forms, reducing memory spikes and incomplete redactions.
- Rendering performance improves for PDFs with large content streams.
- A progressive memory leak when repeatedly loading and unloading documents is fixed.
- Several race conditions around document loading and unloading are resolved, including a standalone deadlock when `load()` is called twice in quick succession.

{% alert line="single-line" %}
Minimum Document Engine version required: 1.5.6
{% /alert %}

For a complete list of changes, bug fixes, and improvements, refer to the changelog. For previous release notes, refer to the Web SDK 1.13 release notes. We appreciate your feedback and contributions as we continue to enhance Nutrient Web SDK.

[changelog]: /guides/web/changelog/#1.14.0
[web sdk 1.13 release notes]: /guides/web/release-notes/1-13/
[1.5.6]: /guides/document-engine/changelog/#1.5.6
[linearized downloads]: /guides/web/viewer/linearized-downloads/
[ui-preset-example]: /api/web/modules/UI.html#example-3
[ui-configuration-api]: /api/web/interfaces/UI.Configuration.html
[opfs]: https://developer.mozilla.org/en-US/docs/Web/API/File_System_API/Origin_private_file_system
[temp-storage-guide]: /guides/web/open-a-document/temp-storage/
[tempstorage-api]: /api/web/interfaces/Configuration.html#tempstorage
[nonce-api]: /api/web/interfaces/Configuration.html#nonce
[createlayer-api]: /api/web/classes/NutrientViewer.Instance.html#createlayer
[support-form]: https://support.nutrient.io/hc/en-us/requests/new

Lists important changes for Nutrient Web SDK 1.14]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[1.13.1 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/1-13-1/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/1-13-1/</guid>
            <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Nutrient Web SDK 1.13.1 release notes — security patch for high-severity libpng CVEs.]]></description>
            <content:encoded><![CDATA[### Security

This release resolves the following vulnerabilities in libpng:

- **CVE-2026-33416** (CVSS 7.5) — A denial-of-service vulnerability in libpng 1.6.55.
- **CVE-2026-33636** (CVSS 7.6) — A potentially exploitable vulnerability in libpng 1.6.55.

Both are resolved by updating to libpng 1.6.56. No API changes or migration steps are required.

[changelog]: /guides/web/release-notes/changelog/#1.13.1

Nutrient Web SDK 1.13.1 release notes — security patch for high-severity libpng CVEs.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[1.13 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/1-13/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/1-13/</guid>
            <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Lists important changes for Nutrient Web SDK 1.13]]></description>
            <content:encoded><![CDATA[### Canvas rendering and performance

This release adds a next-generation page rendering architecture that improves page loading and zooming responsiveness. The feature is currently in beta and can be enabled via the `pageRendering` configuration:

```js
await NutrientViewer.load({
  // ...your existing configuration
  pageRendering: "next",
});
```

In our benchmarks, time to first page render is 10 percent quicker and zooming is 60 percent faster. The new architecture has gone through a lot of internal testing already, and we’re excited to get it in the hands of users for real-world testing and feedback. We recommend trying it out with your documents and sharing any feedback or issues you encounter.

### Fonts and text fidelity

Page rendering now supports both dynamic fonts and font substitutions:

- Use dynamic font loading to fetch missing fonts on demand (see the default fonts bundle).
- Use custom fonts when you want fonts loaded up front.
- Use font substitution to map source fonts (for example, `Times*`) to preferred alternatives during rendering.

With 1.13, dynamic font loading now applies to page rendering. You can start with the default fonts bundle or generate your own with the nutrient-font-tool. If a required font is missing and available in your configured bundle, the SDK downloads it before rendering the page. This improves fidelity for documents with non-embedded fonts while avoiding unnecessary upfront downloads.

This release also extends font substitution to page rendering. Font substitution now works together with dynamic font loading: Substitutions are applied during rendering, and missing target fonts can be resolved from your configured dynamic font bundle. You can define substitution rules (for example, mapping `Times*` to your preferred serif font) and have them applied consistently across rendered page content.

### Keyboard accessibility and WCAG compliance

This release makes major strides in accessibility. Content Editor now supports Control/Command-C, Control/Command-X, and Control/Command-V shortcuts for copying, cutting, and pasting entire text blocks, while line, shape, text, and callout annotations can now be created entirely with the keyboard. For WCAG compliance, toolbar button touch targets meet the minimum of 24×24 px, and the search UI announces minimum character requirements to screen readers. This release also fixes several focus management issues, including focus restoration when closing the search panel, focus loss after drag-and-drop reorder in the Document Editor, and annotation selection interfering with other focusable elements.

### Content editing and document templates

New APIs allow programmatic management of content editing sessions, and `populateDocumentTemplate()` now supports image substitution. On the stability side, this release fixes a content editing crash caused by embedded fonts with empty or null font spans, and it ensures tagged PDF text placement is preserved in the correct content stream graphics state.

### Performance and stability

Rendering performance sees notable improvements: First-page rendering for linearized PDFs is faster thanks to parallel byte range prefetching, and text comparison with the `wordLevel` option is significantly more responsive for large diffs through virtualization. This release also resolves multiple race conditions, including stale widget appearance streams after rapid form field updates, container reuse errors when switching documents, and AI Assistant MCP tools disappearing during quick document switches. For server-backed deployments, JSON Web Token (JWT) refresh is now supported via `onAuthFailed` and `setSession`.

### PDF processing and export fixes

Several PDF processing edge cases are addressed in this release. XFDF export no longer truncates annotations containing Latin-1 encoded text with embedded null bytes, and document merging now handles malformed `StructTreeRoot` entries, along with document-level JavaScript that modifies form fields. Full-text search returns results for queries containing special characters like `&`, `/`, `:`, or `+`. Rendering fixes include corrected ink highlighter export with multiply blend mode backgrounds and more consistent rich-text annotation wrapping across export and reimport.

{% alert line="single-line" %}
Minimum Document Engine version required: 1.5.6
{% /alert %}

For a complete list of changes, bug fixes, and improvements, refer to the changelog. For previous release notes, refer to the Web SDK 1.12 release notes. We appreciate your feedback and contributions as we continue to enhance Nutrient Web SDK.

[changelog]: /guides/web/release-notes/changelog/#1.13.0
[web sdk 1.12 release notes]: /guides/web/release-notes/1-12/
[1.5.6]: /guides/document-engine/release-notes/changelog/#1.5.6
[dynamic font loading]: /guides/web/viewer/fonts/dynamic-fonts/
[nutrient-font-tool]: https://github.com/PSPDFKit/nutrient-font-tool
[custom fonts]: /guides/web/features/custom-fonts/
[font substitution]: /guides/web/viewer/fonts/substitution/
[page-rendering-api]: /api/web/interfaces/Configuration.html#pagerendering
[default-fonts-bundle]: /guides/web/viewer/fonts/dynamic-fonts/#default-fonts-bundle
[support]: /support/request/

Lists important changes for Nutrient Web SDK 1.13]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[1.12 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/1-12/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/1-12/</guid>
            <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Lists important changes for Nutrient Web SDK 1.12]]></description>
            <content:encoded><![CDATA[### Document Editor and UI reliability

Document Editor Save and Cancel actions now stay visible in constrained layouts, and the bottom UI cutoff on iPad in landscape orientation is fixed. Page navigation cursor feedback is clearer for per-spread pagination, and link popovers now expose distinct view and edit class names for easier theming.

### Commenting and annotation editing

Comment links without a protocol now open as external links instead of relative URLs. Draft comments no longer override each other, and typing focus stays in the active thread when multiple drafts are open. Plain text annotations are more stable during editing, with font size persistence and bounding box sizing fixes.

### Viewer interaction and accessibility

`setViewState` no longer steals focus from external elements in iframe mode, and toolbar focus no longer jumps to the last item when reentering via Tab. Additionally, screen reader arrow navigation regressions in JAWS/NVDA are fixed.

### Document processing and PDF fidelity

Brotli-compressed PDFs are now supported, and PDF JavaScript actions (`OpenAction` and `pageNum`) now execute reliably. Text extraction handles typographic ligatures more accurately. Redactions and markup remain aligned after margin changes, and multipage TIFFs respect per-page orientation.

For a complete list of changes, bug fixes, and improvements, refer to the changelog. For previous release notes, refer to the Web SDK 1.11 release notes. We appreciate your feedback and contributions as we continue to enhance Nutrient Web SDK.

[changelog]: /guides/web/changelog/#1.12.0
[web sdk 1.11 release notes]: /guides/web/release-notes/1-11/

Lists important changes for Nutrient Web SDK 1.12]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[1.11 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/1-11/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/1-11/</guid>
            <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Lists important changes for Nutrient Web SDK 1.11]]></description>
            <content:encoded><![CDATA[### Commenting and annotation UI fixes

This release improves the commenting experience, including fixing deletion from the annotations sidebar in constrained layouts and preventing duplicate `@` symbols when editing comments containing user mentions.

We also addressed several user interface (UI) issues, including signature image previews in iframe mode, dialog positioning in scrolled/offset containers, and annotation interactions in RTL mode with the sidebar open.

### Accessibility and permission improvements

We fixed keyboard navigation regressions for screen readers (JAWS/NVDA) and improved keyboard access in the search UI by making the clear button focusable.

We also fixed an issue where users without permission could open the signature dialog using the keyboard, and prevented locked/read-only note annotations from being moved via keyboard and mouse wheel interactions.

### Printing and conversion

Form field values are now correctly updated before print preview in situations where a field hasn’t been blurred. We also fixed `convertToPdf()` failing when a document is passed as an object URL.

### Instant JSON and PDF fidelity fixes

Instant JSON import/export now preserves form field IDs more consistently, which helps keep subsequent exports stable after importing.

This release also includes multiple PDF fidelity fixes, including improvements to highlight geometry in tight line heights, correct handling of ligatures during text selection and highlight export, and improved automatic link extraction.

For a complete list of changes, bug fixes, and improvements, refer to the changelog. For previous release notes, refer to the Web SDK 1.10 release notes. We appreciate your feedback and contributions as we continue to enhance Nutrient Web SDK.

[changelog]: /guides/web/changelog/#1.11.0
[web sdk 1.10 release notes]: /guides/web/release-notes/1-10/

Lists important changes for Nutrient Web SDK 1.11]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[1.10 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/1-10/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/1-10/</guid>
            <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Release notes for Nutrient Web SDK 1.10 outlining key improvements, fixes, API updates, and upgrade steps for existing integrations.]]></description>
            <content:encoded><![CDATA[### Performance improvements for large documents

This release includes performance enhancements when working with documents containing many pages. The thumbnails sidebar and document editor thumbnails now load much faster and more efficiently, making large documents easier to navigate.

Additionally, we removed the smooth scrolling animation when the thumbnail sidebar opens, ensuring it immediately displays the thumbnail of the page currently in the viewport. This eliminates the waiting time users previously experienced when opening the sidebar with documents containing hundreds of pages.

### Annotation color and styling improvements

This release includes fixes for annotation color handling when using custom color presets. When you configure `annotationToolbarColorPresets`, programmatically created annotations now correctly respect the colors you specify.

We also fixed an issue with text annotations with transparent backgrounds when using custom color presets. Annotation presets also now correctly maintain font styles (bold, italic, underline), ensuring that saved presets maintain their intended formatting when restored.

### Print preview improvements

Print preview functionality has been improved in DOM mode. Additionally, we fixed some iOS Safari-specific issues in print preview.

### UI and accessibility enhancements

This release includes improvements to the user interface and accessibility. Tooltips and aria-labels in the annotations sidebar and comment threads have been enhanced to provide clearer guidance and better screen reader support. We also made improvements in the scrolling behavior for modals.

### Annotation behavior fixes

This release resolves several annotation-related issues. We made some fixes in link annotations to improve the clicking behavior. The rendering of text annotations has been improved for rotated pages. We also made some Android-specific improvements to text annotations to prevent data loss during editing. Text and callout annotations have also been improved to prevent overflow beyond page boundaries when editing.

### Document Editor improvements

We fixed some issues in custom Document Editor toolbar items with icons.

### Form field and document processing improvements

This release enhances form field handling. We fixed some issues in form fields with additional actions. Radio and checkbox options are improved to work even when PDFs have inconsistent option lists.

### Document loading improvements

File type detection has been enhanced to correctly handle Content-Type headers that include charset or boundary parameters, improving compatibility with various server configurations.

{% alert line="single-line" %}
Minimum Document Engine version required: 1.5.6
{% /alert %}

For a complete list of changes, bug fixes, and performance improvements, refer to the changelog. For previous release notes, refer to the Web SDK 1.9 release notes. We appreciate your feedback and contributions as we continue to enhance Nutrient Web SDK.

[changelog]: /guides/web/changelog/#1.10.0
[web sdk 1.9 release notes]: /guides/web/release-notes/1-9/
[1.5.6]: /guides/document-engine/changelog/#1.5.6

Release notes for Nutrient Web SDK 1.10 outlining key improvements, fixes, API updates, and upgrade steps for existing integrations.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[1.9 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/1-9/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/1-9/</guid>
            <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Nutrient Web SDK 1.9 release notes summarizing feature updates, bug fixes, viewer enhancements, and guidance for smooth upgrades.]]></description>
            <content:encoded><![CDATA[### Content editor

The content editor now enables you to reuse fonts from the document itself. This means if your PDF has embedded fonts, when you edit text, the new text will look exactly like the surrounding text.

{% alert line="single-line" %}
Some embedded fonts (“subset fonts”) only have a limited amount of characters included, in which case, the content editor will fall back to a different font. The fallback font can be adjusted using the `contentEditingFontMatcher` callback.
{% /alert %}

The content editor now also supports preserving accessibility tags when editing text, ensuring documents remain accessible after modifications.

### Simplified deployment with CDN-hosted assets

Starting with this release, the previous behavior for `baseUrl` when it isn’t set is deprecated and will result in a warning. Web SDK will transition to use CDN-hosted assets by default in the future, but you can opt in to using them right now by setting `useCDN: true` in your configuration. This update simplifies setup by removing the need to manually copy or manage assets locally. For organizations that prefer to self-host assets, this option remains available and can be configured as described in the self-host assets guide.

### Password-protected PDFs in AI Assistant

Starting with this release, AI Assistant can now process password-protected PDFs. This enhancement expands the range of documents that can be analyzed securely and doesn’t require any additional setup. AI Assistant automatically uses the same password configuration already provided when opening a document, ensuring a seamless and secure experience.

### Update UI customization configuration at runtime

Starting with this release, Web SDK introduces the `Instance.setUI` method for updating user interface (UI) configuration slots at runtime, enabling a more dynamic user experience. For detailed instructions and examples, refer to the set UI customization configuration guide.

### New supported file type

Nutrient Web SDK 1.9 adds support for converting and opening text files (`.txt`) with the corresponding license component. This enhancement broadens the range of document types that can be viewed and edited within the SDK.

### Performance and stability improvements

This release includes numerous fixes and enhancements aimed at improving performance and stability across the SDK.

{% alert line="single-line" %}
Minimum Document Engine version required: 1.5.6
{% /alert %}

For a complete list of changes, bug fixes, and performance improvements, refer to the changelog. For previous release notes, refer to the Web SDK 1.8 release notes. We appreciate your feedback and contributions as we continue to enhance Nutrient Web SDK.

[changelog]: /guides/web/changelog/#1.9.1
[web sdk 1.8 release notes]: /guides/web/release-notes/1-8/
[`contenteditingfontmatcher`]: /api/web/interfaces/Configuration.html#contenteditingfontmatcher
[1.5.6]: /guides/document-engine/changelog/#1.5.6
[self host guide]: /guides/web/self-host-assets/
[setui guide]: /guides/web/user-interface/ui-customization/set-ui/
[txt format]: /guides/web/conversion/text-to-pdf/

Nutrient Web SDK 1.9 release notes summarizing feature updates, bug fixes, viewer enhancements, and guidance for smooth upgrades.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[1.8 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/1-8/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/1-8/</guid>
            <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Review Nutrient Web SDK 1.8 changes with new APIs, stability fixes, performance improvements, and recommendations for upgrading projects.]]></description>
            <content:encoded><![CDATA[### Accessibility improvements

This release brings significant improvements to accessibility across the SDK, ensuring a more inclusive experience for all users. Measurement tools and the measurement annotation toolbar are now more accessible and customizable, making it easier for users to interact with documents. Widget annotations in Form Creator and Form Designer modes now offer enhanced keyboard accessibility, enabling smoother navigation and interaction without relying on a mouse.

Additionally, the SDK now preserves accessibility information when adding or flattening annotations in documents that already support PDF/UA standards. By automatically inserting the necessary tags, we ensure that assistive technologies can properly interpret document content, helping maintain PDF/UA compliance, and improving compatibility for users with disabilities.

### AI document helpers

We’ve added several new features to make working with AI-powered document functionality more straightforward. The SDK now exposes `NutrientViewer.isAIDocumentComparisonResult` and `NutrientViewer.isAIDocumentAnalysisResult`, along with `NutrientViewer.AIComparisonPhase`. They let you check the type of AI document results and verify the status of AI text comparison operations. These additions give developers more control and insight when integrating AI-driven features into their workflows, making it easier to handle AI-generated insights and comparisons reliably.

### Performance and stability improvements

This release includes numerous fixes and enhancements aimed at improving performance and stability across the SDK. We’ve addressed memory leaks when using custom fonts in standalone mode and fixed issues with text selection in multicolumn documents. Various rendering and annotation issues have been resolved, including correct handling of RTL text, Arabic fonts, and dynamic font loading.

Other improvements include enhanced support for search functionality, proper rendering of comments and annotations, prevention of crashes when repairing PDFs with missing structures, and better handling of bookmark relocation and outline editing. These changes result in a more robust, reliable experience for developers and end users alike.

{% alert line="single-line" %}
Minimum Document Engine version required: 1.5.6
{% /alert %}

For a complete list of changes, bug fixes, and performance improvements, refer to the changelog. For previous release notes, refer to the Web SDK 1.7 release notes. We appreciate your feedback and contributions as we continue to enhance Nutrient Web SDK.

[changelog]: /guides/web/changelog/#1.8.0
[web sdk 1.7 release notes]: /guides/web/release-notes/1-7/
[1.5.6]: /guides/document-engine/changelog/#1.5.6
[isaidocumentcomparisonresult]: /api/web/functions/NutrientViewer.isAIDocumentComparisonResult.html
[isaidocumentanalysisresult]: /api/web/functions/NutrientViewer.isAIDocumentAnalysisResult.html
[aicomparisonphase]: /api/web/enums/NutrientViewer.AIComparisonPhase.html

Review Nutrient Web SDK 1.8 changes with new APIs, stability fixes, performance improvements, and recommendations for upgrading projects.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[1.7 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/1-7/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/1-7/</guid>
            <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Nutrient Web SDK 1.7 release notes covering new features, bug fixes, UI polish, and upgrade guidance for production deployments.]]></description>
            <content:encoded><![CDATA[### UI customization with slots

This release includes some improvements to the UI customization API introduced in version 1.6:

- Support for new UI customization slots in comments and comment threads.
- Support for building custom sidebars.

You can learn more about UI customization slots in our UI slots customization guide.

### UI and interaction improvements

This release includes several refinements to the user interface and user experience, outlined below.

#### Toolbar interaction enhancements

We improved interaction handling for custom input elements in the toolbar, ensuring custom components integrate seamlessly with the existing toolbar functionality and provide consistent behavior across different input types.

#### Annotation behavior fixes

We made several annotation-related improvements:

- Note annotations now properly disable dragging in read-only mode, preventing unintended modifications when documents are in read-only state.
- Overriding the `onPress` handler for annotation toolbar items will now work for components using popovers (such as select and combo box elements).

#### Dialog and interface improvements

- The stored signatures dialog now takes up the full width of its container, providing better visual consistency and improved usability.
- Document MIME type detection has been improved to improve format identification during the loading process.
- The edit bookmark button now functions correctly when clicked, resolving an issue where the button appeared inactive.

### Document events and state tracking

This release includes a couple of important fixes and improvements to enhance developer experience when working with documents.

- The `applyRedactions` operation is now correctly passed in the `document.change` event, ensuring all document modifications are properly tracked and reported through the event system.
- The `document.saveStateChange` listener is now also called after creating invalid annotations (such as empty text-valued text annotations), ensuring consistent state tracking across annotation creation scenarios.

### Nightly builds on NPM

Testing Nutrient Web SDK’s nightly builds for upcoming features or fixes has now been made even easier, thanks to the new @nightly tag available for the @nutrient-sdk/viewer npm package. This tag points to today’s build. Moreover, older nightly builds will be permanently available from now on. Here’s how to install:

```
npm install @nutrient-sdk/viewer@nightly
```

### Bug fixes and stability improvements

This release addresses numerous issues that improve overall SDK stability and user experience.

{% alert line="single-line" %}
Minimum Document Engine version required: 1.5.6
{% /alert %}

For a complete list of changes, bug fixes, and performance improvements, refer to the changelog. For previous release notes, refer to the Web SDK 1.6 release notes. We appreciate your feedback and contributions as we continue to enhance Nutrient Web SDK.

[changelog]: /guides/web/changelog/#1.7.0
[web sdk 1.6 release notes]: /guides/web/release-notes/1-6/
[1.5.6]: /guides/document-engine/changelog/#1.5.6
[ui-customization]: /guides/web/user-interface/ui-customization/introduction/#slots

Nutrient Web SDK 1.7 release notes covering new features, bug fixes, UI polish, and upgrade guidance for production deployments.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[1.6 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/1-6/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/1-6/</guid>
            <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Discover Nutrient Web SDK 1.6 updates, including API improvements, annotation fixes, performance gains, and migration notes for upgrades.]]></description>
            <content:encoded><![CDATA[### New API for UI customization

This release introduces a new API for customization. Currently, this support is added only for comment threads and will be extended to other user interface (UI) elements in future releases. Refer to the UI customization guide to get started.

### Improved rich text paste functionality

We’ve enhanced the rich text paste experience with support for unformatted paste using `Cmd+Shift+V` (or `Ctrl+Shift+V` on Windows/Linux). This feature enables users to paste content from external sources while stripping all formatting, ensuring consistent text appearance within annotations. The improved paste functionality also resolves issues where annotation values weren’t properly synced after copy/paste operations from different sources, ensuring data consistency across all rich text annotations.

### Font matching and embedding improvements

A new `Configuration#contentEditingFontMatcher` configuration option has been added, allowing developers to customize how fonts are matched during content editing operations. This enhancement provides greater control over font selection and ensures consistent typography across different document workflows.

We’ve also improved font embedding when working with PDF standard fonts, resulting in better compatibility when documents are viewed in external PDF viewers. This improvement ensures documents maintain their intended appearance across different platforms and applications.

### Enhanced form capabilities

Radio buttons and checkboxes now support solid and dashed border styles.

### Document handling and performance improvements

Version 1.6 brings several enhancements to core document processing capabilities, improving both functionality and performance.

#### Improved document rendering stability

Rendering and document stability have been further enhanced in this release, resulting in a smoother experience when working with large and complex documents:

- Rendering performance has been optimized for documents with more than 100 pages, ensuring smooth navigation and interaction even at scale.
- Comment threads now display more intuitively, maintaining clear visibility of page content without overlap.
- Page-ordering operations in Document Editor are now more reliable, especially when moving multiple selected pages at once.
- Annotation selection in `PER_SPREAD` pagination mode is now handled more seamlessly, providing a more consistent editing workflow.

#### Comment display improvements

A new `ViewState#commentDisplay` property has been added to provide developers with greater control over how comments are displayed in the UI. This enables you to control whether comments are displayed as a popover or as a sidebar.

#### Consistent events

We’ve improved the behavior of callout annotations to match text annotation behavior — events now fire only on blur with non-empty content, providing a more consistent user experience across different annotation types. Text annotation create events have also been refined to prevent firing on toolbar property changes for empty annotations.

#### Search and accessibility improvements

The search input has been improved to prevent text clipping on smaller screens, ensuring better usability across different device sizes. We’ve also resolved issues where comments wouldn’t be visible on certain pages when `Configuration#isEditableComment` returned `true`.

### Security and certificate handling

Version 1.6 includes improvements to digital signature handling and certificate management:

- Enhanced certificate chain information in the `pspdfkit/signature-info` Instant JSON type, providing more comprehensive signature verification data.
- Improved handling of elliptic curve keys (ECDSA) during document signing operations, resolving compatibility issues with certain cryptographic implementations.

### Bug fixes and stability improvements

This release addresses numerous issues that improve overall SDK stability and user experience.

{% alert line="single-line" %}
Minimum Document Engine version required: 1.5.6
{% /alert %}

For a complete list of changes, bug fixes, and performance improvements, refer to the changelog. For previous release notes, refer to the Web SDK 1.5 release notes. We appreciate your feedback and contributions as we continue to enhance Nutrient Web SDK.

[changelog]: /guides/web/changelog/#1.6.0
[web sdk 1.5 release notes]: /guides/web/release-notes/1-5/
[1.5.6]: /guides/document-engine/changelog/#1.5.6
[`viewstate#commentdisplay`]: /api/web/classes/NutrientViewer.ViewState.html#commentdisplay
[`configuration#contenteditingfontmatcher`]: /api/web/interfaces/Configuration.html#contenteditingfontmatcher
[ui customization]: /guides/web/user-interface/ui-customization/introduction/

Discover Nutrient Web SDK 1.6 updates, including API improvements, annotation fixes, performance gains, and migration notes for upgrades.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[1.5 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/1-5/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/1-5/</guid>
            <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Release notes for Nutrient Web SDK 1.5 highlighting new capabilities, API refinements, viewer/UI updates, and upgrade guidance.]]></description>
            <content:encoded><![CDATA[### UI updates

This release brings exciting improvements to the Web SDK’s user interface and theming system, making it more flexible and consistent. The following UI sections have been migrated in 1.5:

- Multi-select toolbar
- Signatures sidebar
- Print dialog
- Form Creator popover
- Loading screen

Most customizations will continue to work as before, but if you notice anything unexpected and you were using CSS classes or CSS variables for customization, our Baseline UI migration guide offers helpful tips and guidance.

### RTL layout and advanced theming

This release introduces RTL (Arabic/Hebrew) layout support. This feature represents an important step in our internationalization support. Reach out to us with feedback to help shape the future development of this feature.

Version 1.5 also delivers a major enhancement to theming with support for granular theme customization. Developers now have unprecedented control over the visual appearance of the SDK, allowing for more seamless integration with existing applications and brand identities. For example, you can now customize specific UI elements independently, creating a more cohesive look and feel that matches your application’s design language.

Additionally, we’ve added support for light and dark high contrast themes, significantly improving accessibility for users with visual impairments. These specialized themes enhance visibility and readability for users who require higher contrast ratios, ensuring the SDK is usable by a wider audience.

### Accessibility enhancements

Nutrient Web SDK 1.5 brings substantial improvements to accessibility. Accessibility labels and translations for toolbars have been enhanced, providing a better experience for screen reader users. We’ve also fixed several issues that affected keyboard navigation and screen reader compatibility:

- Resolved an issue where elements referenced in `aria-labelledby` and `aria-describedby` attributes weren’t present in the DOM. This improvement enhances compatibility with automated testing tools and improves the experience for screen reader users. List items in the annotation sidebar now correctly reference existing DOM elements.
- Fixed pagination buttons that lost aria attributes while using keyboard navigation. The “Previous Page” and “Next Page” buttons in the viewer toolbar now maintain their `role` and `aria-label` attributes when users navigate with the <kbd>Tab</kbd> key, ensuring consistent accessibility across interaction methods.

### Enhanced annotation capabilities

Version 1.5 brings significant refinements to the annotation experience, with a focus on color handling, mobile usability, and user interface consistency.

#### Improved color handling

The text color palette in annotations has been improved with a streamlined color selection interface. The transparent swatch option has been removed, creating a more intuitive color selection experience with only functional color options available. This refinement ensures that all available color choices behave consistently and predictably.

Additionally, we’ve enhanced the 'None' color selection functionality for font and background colors when working with multiple text selections. The 'None' option can now be selected even if it’s currently active, and color selections are consistently applied across all selected text, ensuring uniform behavior across all annotation types.

#### Enhanced mobile experience

We’ve fixed an issue where the comment drawer didn’t open properly on mobile devices. This fix ensures comments are now accessible across all device types and screen sizes, allowing users to seamlessly interact with comment marker annotations in mobile view.

#### User interface refinements

We’ve fixed an issue where layout configuration icons didn’t update when custom icons were passed via API. This fix allows developers to maintain a consistent visual language throughout their applications by ensuring custom icons are properly displayed.

We’ve also fixed an issue where users were able to submit blank typed signatures: The “Done” button is now disabled until at least one visible character is entered, ensuring signatures contain meaningful content and preventing potential errors.

Additionally, we’ve addressed a problem where the Document Editor image gallery didn’t auto-scroll during drag operations. This fix restores the ability to drag pages beyond the visible viewport during page reordering. For example, when reordering pages in a multipage document, the editor now automatically scrolls when a dragged page reaches the edge of the visible area.

### Core functionality and document handling

This release delivers substantial improvements to the core functionality of the SDK, with a focus on comments, document comparison, security, and rendering accuracy.

#### Comments UI

Previously, comments threads were always displayed in a floating sidebar to the side of the page, which wasn’t convenient as soon as the page was zoomed in and there wasn’t enough space left to show the comments without having to scroll the viewport. In this release, the comments sidebar is now only shown when there’s enough space to display it without scrolling. If there isn’t enough space, the comments are shown in a popover instead, which can be opened by clicking on the comment marker. This popover dialog was previously visible only in `FIT_TO_WIDTH` zoom mode.

We understand that this change may not be ideal for all use cases, so we now provide an extension to the `NutrientViewer.ViewState` API that makes it possible to customize this behavior at any time by setting `NutrientViewer.ViewState#commentDisplay`:

- `NutrientViewer.CommentDisplay.FITTING` — The default value; will show comments in a floating sidebar by the page side when there’s enough space to do so, and in a popover when there isn’t, and the marker annotation is selected.
- `NutrientViewer.CommentDisplay.FLOATING` — Will always show comments in a floating sidebar by the page side.
- `NutrientViewer.CommentDisplay.POPOVER` — Will always show comments in a popover when the marker annotation is selected.

As an example of how it’s used, here’s how to set the `commentDisplay` so the comments UI behaves like in previous versions, always showing comments in a floating sidebar unless in `FIT_TO_WIDTH` zoom mode:

```js
const instance = await NutrientViewer.load(config);

instance.setViewState((viewState) =>
  viewState.set("commentDisplay", NutrientViewer.CommentDisplay.FLOATING),
);

instance.addEventListener(
  "viewState.change",
  function (viewState, previousViewState) {
    const zoom =
      typeof viewState.zoom === "object"
        ? viewState.zoom.zoomMode
        : viewState.zoom;
    const previousZoom =
      typeof previousViewState.zoom === "object"
        ? previousViewState.zoom.zoomMode
        : previousViewState.zoom;

    if (
      previousZoom === zoom &&
      viewState.commentDisplay === previousViewState.commentDisplay
    ) {
      return;
    }

    if (
      zoom === NutrientViewer.ZoomMode.FIT_TO_WIDTH &&
      viewState.commentDisplay !== NutrientViewer.CommentDisplay.POPOVER
    ) {
      instance.setViewState((viewState) =>
        viewState.set("commentDisplay", NutrientViewer.CommentDisplay.POPOVER),
      );
    } else if (
      viewState.commentDisplay !== NutrientViewer.CommentDisplay.FLOATING
    ) {
      instance.setViewState((viewState) =>
        viewState.set("commentDisplay", NutrientViewer.CommentDisplay.FLOATING),
      );
    }
  },
);
```

#### Enhanced document comparison and XFDF support

Word-level text comparison has been added, providing more granular document comparison capabilities that allow users to identify changes with greater precision. Previously, all comparisons were done at the character level, which could result in unintuitive highlighting of changes. For example, changing “January” to “February” would show as a deletion of “Jan,” addition of “Febr,” and “uary” as unchanged. With word-level comparison, the entire word is highlighted as changed, creating a more intuitive and readable comparison.

Configuration options for rich text when working with XFDF files have also been added, expanding the SDK’s flexibility when working with this format and ensuring consistent rich text handling across different document workflows. This enhancement allows for better propagation of rich text configuration from the Web SDK to Core and Document Engine backends when performing XFDF operations.

#### Security and performance improvements

The Content Security Policy (CSP) HTTP header required `unsafe-eval` to be set in recent versions. You may now use `wasm-unsafe-eval` instead.

We’ve also updated GdPicture to version 14.3.9, bringing the latest improvements from this underlying technology to our SDK.

#### Rendering and UI consistency

Several rendering issues have been addressed to ensure accurate display of annotations and content:

- Fixed an issue where text markup annotations were rendered with the wrong proportions when zoomed, and in the wrong direction on rotated pages. This fix ensures markup annotations like squiggly, strikethrough, and underline now maintain appropriate proportions regardless of zoom level, page rotation, or text size, improving overall readability.
- Fixed an issue where moving a stamp annotation rotated at 45 degrees would resize it. This fix ensures stable dimensions for rotated stamps throughout all user interactions, preventing unwanted size changes during movement.
- Fixed an issue where comment threads would appear clipped in narrow screen widths. This fix ensures comment boxes now remain fully visible and accessible, even when the viewport is narrow or when using high zoom levels.
- Fixed an issue where the comments sidebar and popover were simultaneously visible in `FIT_TO_WIDTH` view mode. This fix creates a more consistent and less cluttered user interface.

#### Form handling and stability

- Fixed an issue where it wasn’t possible to correctly set the time in some time form fields. This fix ensures users can now properly set time values across all platforms, with consistent validation behavior and support for proper time formats on both desktop and mobile devices.
- Fixed an issue where using some Form Creator and Measurements dropdowns would throw an error. This fix resolves problems with Shadow DOM compatibility, ensuring consistent behavior when creating and managing form fields and annotations.
- Fixed an issue where the first new comment text field wouldn’t be focused when creating a comment, improving workflow efficiency. Additionally, we’ve fixed a crash that could occur when creating a text parser for a page with verbose logging enabled, ensuring consistent performance, even with complex document structures.

{% alert line="single-line" %}
Minimum Document Engine version required: 1.5.6
{% /alert %}

For a complete list of changes, bug fixes, and performance improvements, refer to the changelog. For previous release notes, refer to the Web SDK 1.4 release notes. We appreciate your feedback and contributions as we continue to enhance Nutrient Web SDK.

[changelog]: /changelog/web/#1.5.0
[web sdk 1.4 release notes]: /guides/web/release-notes/1-4/
[1.5.6]: /guides/document-engine/changelog/#1.5.6
[bui-migration]: /guides/web/migration-guides/baseline-ui-migration-guide/

Release notes for Nutrient Web SDK 1.5 highlighting new capabilities, API refinements, viewer/UI updates, and upgrade guidance.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[1.4 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/1-4/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/1-4/</guid>
            <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Nutrient Web SDK 1.4 release notes with feature additions, bug fixes, performance boosts, and deprecations to address when upgrading.]]></description>
            <content:encoded><![CDATA[### UI and accessibility improvements

This release enhances keyboard accessibility with support for creating and editing note annotations using keyboard controls. Focus management and keyboard navigation of the annotation inline toolbar have also been improved, making the SDK more accessible to all users.

A notable correction addresses an issue where scrolling to a mouse position would change the zoom level, even when the mouse was outside the viewer. This fix provides a more predictable and controlled zooming experience.

### Enhanced annotation capabilities

Version 1.4 introduces several improvements to annotation functionality:

- A new configuration option, `TEXT_ANNOTATION_AUTOFIT_ON_BOTTOM_KNOB_RESIZE`, enables you to control whether font size should automatically adjust when resizing text annotations with the bottom-right handle.
- The functionality to resize text annotations by dragging the bottom-right handle has been improved, and it now supports rich text annotations with multiple font sizes.
- Text annotation presets now properly handle font size, font family, and font underline property selections between annotation creations.
- An issue where pasted annotations retained the same name as the original annotation has been fixed.

### Document rendering and text handling improvements

Font embedding behavior has been enhanced, resulting in fonts being embedded more often, and providing a better experience when documents are viewed in external viewers.

Line height calculation for plain text annotations has been improved, and carriage line breaks are now properly respected during import and export of text annotations.

The text comparison feature has been refined to correctly highlight changes involving multiple lines and to catch changes that might have been missed in previous versions.

### Additional enhancements

- A new configuration option for the attachment sidebar allows disabling attachment preview.
- A content editing API has been added, expanding the SDK’s capabilities.
- Thumbnail behavior has been improved to properly adjust size and position when the sidebar width changes.
- Various issues with form fields, linearized documents, and CA certificate recognition have been addressed.

{% alert line="single-line" %}
Minimum Document Engine version required: 1.5.6
{% /alert %}

For a complete list of changes, bug fixes, and performance improvements, refer to the changelog. For previous release notes, refer to the Web SDK 1.3 release notes. We appreciate your feedback and contributions as we continue to enhance Nutrient Web SDK.

[changelog]: /changelog/web/#1.4.0
[web sdk 1.3 release notes]: /guides/web/release-notes/1-3/
[1.5.6]: /guides/document-engine/changelog/#1.5.6

Nutrient Web SDK 1.4 release notes with feature additions, bug fixes, performance boosts, and deprecations to address when upgrading.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[1.3 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/1-3/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/1-3/</guid>
            <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore Nutrient Web SDK 1.3 changes, including new APIs, stability fixes, rendering improvements, and steps for upgrading existing apps.]]></description>
            <content:encoded><![CDATA[### AI text comparison

This release introduces AI-powered text comparison, a major enhancement to the SDK’s existing comparison capabilities. By leveraging artificial intelligence, the new feature summarizes document differences, categorizes changes, and enables users to filter by high-level concepts like formatting, rewording, or content additions. Developers can enable AI comparison through a simple configuration using the AI Assistant service. For setup instructions and usage details, refer to the AI text comparison guide.

### Smarter annotation tools and UI enhancements

Version 1.3 brings more control over how annotations behave and appear across devices. Developers can now define a custom breakpoint for the annotation toolbar, tailoring the UI to different screen sizes and use cases. Callout annotations are more predictable and stable when zooming, thanks to a unified scaling system that keeps arrow placement consistent.

The text editing experience has also been refined. Font size and font family selections are now correctly saved when editing presets, and underline is now supported as part of the text style configuration. Manual entry of font sizes in Content Editor has also been improved to handle focus behavior more predictably.

We’ve resolved issues that could cause text annotations to become unresponsive when switching between them while in edit mode, and we fixed edge cases where line breaks in multiline callout annotations were removed, causing content to shift or disappear after saving. Additionally, annotations with special characters like angle brackets (<>) now render as expected, and annotation tool states (e.g. selected or disabled) reflect correctly in the UI.

### Improved accessibility and metadata handling

Nutrient Web SDK 1.3 brings better support for preserving accessibility-related metadata. `PDF/UA` tags are now retained when documents are edited, ensuring compliance with accessibility standards. The primary document language is also preserved, allowing assistive technologies to accurately interpret and present content. Alert and confirm dialogs are now properly centered, and focus is automatically directed to dialog buttons, improving keyboard accessibility.

### Expanded rendering and scripting capabilities

This release adds support for several advanced features in the PDF JavaScript API, including `AFTime_KeystrokeEx`, the JavaScript `global` object, and page-level open and close actions. These additions enable more dynamic, form-driven documents with behavior that closely matches native PDF viewers.

When converting Excel documents, developers can now specify maximum spreadsheet dimensions, and tile size is configurable for rendering optimization. We’ve also introduced a more resilient rendering path for callout and free text annotations to ensure appearance streams fit within annotation bounds.

Loading speeds for Office documents have been improved, and launching Content Editor on pages with dense vector graphics (such as architectural plans) is now more responsive.

### Behavioral changes

The `GoToAction` behavior has changed: It now sets destinations based on page references instead of page indexes. This means links will remain accurate, even if pages are moved or removed in the document editor.

{% alert line="single-line" %}
Minimum Document Engine version required: 1.5.6
{% /alert %}

### Breaking changes

**PDF ID encoding correction**

This release includes a fix to how PDF trailer IDs are encoded in the `pdfId` field of Instant JSON. Previously, the encoding was incorrectly truncated, resulting in shorter `pdfId` values. The corrected behavior now properly encodes the complete PDF ID.

**Impact:** If you have existing Instant JSON files created with SDK versions prior to 1.3.0, they’ll contain `pdfId` values that won’t match when loading the same PDF in version 1.3.0 or later. This will result in a “Permanent PDF ID mismatch“ error.

**Migration options**

1. **Remove pdfId validation** (recommended for most cases) — Strip the `pdfId` property from existing Instant JSON:
   ```javascript
   const { pdfId, ...jsonWithoutPdfId } = existingInstantJSON;
   
   NutrientViewer.load({
     instantJSON: jsonWithoutPdfId,
   });
   ```
2. **Update existing Instant JSON** — Reexport your Instant JSON files using version 1.3.0 or later to generate corrected `pdfId` values.

{% alert line="single-line" %}
Removing `pdfId` is safe if your application ensures the correct PDF is loaded with its corresponding Instant JSON.
{% /alert %}

For a complete list of changes, bug fixes, and performance improvements, refer to the changelog. For previous release notes, refer to the Web SDK 1.2 release notes. We appreciate your feedback and contributions as we continue to enhance Nutrient Web SDK.

[changelog]: /guides/web/changelog/#1.3.0
[web sdk 1.2 release notes]: /guides/web/release-notes/1-2/
[ai text comparison guide]: /guides/web/comparison/compare-text-ai/
[1.5.6]: /guides/document-engine/changelog/#1.5.6

Explore Nutrient Web SDK 1.3 changes, including new APIs, stability fixes, rendering improvements, and steps for upgrading existing apps.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[1.2 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/1-2/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/1-2/</guid>
            <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Nutrient Web SDK 1.2 release notes detailing new features, annotation and UI updates, performance tuning, and migration considerations.]]></description>
            <content:encoded><![CDATA[### DWS Viewer API support

This version of Nutrient Web SDK ships with support for opening documents from DWS Viewer API.

DWS Viewer API is a cloud-based deployment option that allows you to render PDFs, Office files, and images securely in the browser with all the benefits of backend processing that were previously only possible with an on-premises Document Engine deployment.

DWS Viewer API is now in public preview and ready for you to build with today. Start for free by signing up on the DWS Viewer API dashboard.

### Breaking API changes

The `NutrientViewer.ViewState#enableAlwaysScrollToZoom` property is being deleted in favor of the more flexible `ViewState.zoom` API. This change improves control over zoom behavior and aligns with our modern API design principles.

With this version, the property is removed completely and any code using it will stop working.

Before:

```js
instance.setViewState((viewState) =>
  viewState.set("enableAlwaysScrollToZoom", true)
);
```

After:

```js
// Always zoom on scroll wheel without requiring the Control key to be pressed.
instance.setViewState(
  new NutrientViewer.ViewState({
    zoom: {
      // Configure scroll wheel zoom behavior.
      wheelZoomMode: NutrientViewer.WheelZoomMode.ALWAYS
      // ... other zoom options
    }
  })
);
```

### Rich text annotations: Major enhancements

This release delivers significant improvements to rich text annotations, making them more reliable, consistent, and user-friendly.

Key enhancements

- Adds support for applying font size and font family to individual text segments, enabling more precise text styling.
- Standardizes behavior between background color and font color selections, ensuring consistent functionality across all color options.
- Synchronizes rich text properties with underlying annotation metadata when all text is selected, ensuring consistent display.
- Improves text formatting (bold, italic, underline) to work reliably during typing without disrupting line breaks or causing text to become hidden.
- Enhances color management to maintain focus when changing colors, with proper updating of color swatches and consistent color application.
- Preserves formatting and prevents data loss in multi-line text annotations during editing, deletion, and focus changes.
- Maintains styling and formatting when pasting rich text content, with proper placement of pasted text.
- Ensures consistent resizing behavior across all handles while preserving an annotation’s size, formatting, and alignment.
- Improves keyboard focus management and restoration in the toolbar for consistent behavior across browsers.
- Enhances AP stream generation with proper preservation of newlines and text formatting for improved document compatibility.

Nutrient Web SDK 1.2 release notes detailing new features, annotation and UI updates, performance tuning, and migration considerations.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[1.1 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/1-1/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/1-1/</guid>
            <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[See what’s new in Nutrient Web SDK 1.1 with API enhancements, bug fixes, viewer improvements, and notes to help you upgrade safely.]]></description>
            <content:encoded><![CDATA[### New API: NutrientViewer.build()

`NutrientViewer.build()` performs processing via the Nutrient backend Build API.

Example usage:

```js
NutrientViewer.build(
  // Authorize request.
  { jwt: authPayload.jwt },
  // Instructions for the processing request.
  {
    parts: [
      // Use first input as the first part of the final document.
      { file: "document" },
      // Use a sample DOCX document served from a URL as the second part of the final document.
      {
        file: {
          url:
            "https://www.nutrient.io/api/assets/downloads/samples/docx/document.docx"
        }
      }
    ]
  },
  // Inputs required by the request. These will be uploaded with the request. The remote file served from URL does not need to be uploaded.
  [{ name: "document", content: document }]
);
```

### Performance and UX improvements

- Enhanced memory efficiency when decoding large documents, enabling better handling of resource-intensive PDFs.
- Improved UX when selecting text from right to left, particularly with sentence-ending words.
- Callout annotation text overflow, bounding box, and arrow positioning improvements.
- Updated key dependencies: React (18.3.1) and react-intl (7.1.6).

{% alert line="single-line" %}
Minimum Document Engine version required: 1.5.6
{% /alert %}

For a complete list of changes, bug fixes, and performance improvements, refer to the changelog. For previous release notes, refer to the Web SDK 1.0 release notes. We appreciate your feedback and contributions as we continue to enhance Nutrient Web SDK.

[changelog]: /changelog/web/#1.1.0
[`nutrientviewer.build()`]: /api/web/functions/NutrientViewer.build.html
[build api]: /api/reference/public/#tag/Build-API
[web sdk 1.0 release notes]: /guides/web/release-notes/1-0/
[1.5.6]: /guides/document-engine/changelog/#1.5.6

See what’s new in Nutrient Web SDK 1.1 with API enhancements, bug fixes, viewer improvements, and notes to help you upgrade safely.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[1.0 release notes]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/1-0/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/1-0/</guid>
            <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Release notes for Nutrient Web SDK 1.0 covering the rebrand, new npm package, API changes, performance fixes, and upgrade guidance.]]></description>
            <content:encoded><![CDATA[The legacy `pspdfkit` NPM package is now deprecated. Switch to the new `@nutrient-sdk/viewer` package by updating your application’s `package.json` file:

```bash
npm uninstall pspdfkit
npm install @nutrient-sdk/viewer
```

Beyond the renaming, 1.0.0 ships with numerous fixes, performance enhancements, and UI improvements. Refer to the changelog for full details.

Below, we highlight important changes you may need to address when upgrading, including several API updates and deprecations.

### Breaking API changes

The `NutrientViewer.ViewState#enableAlwaysScrollToZoom` property is deprecated in favor of the more flexible `ViewState.zoom API`. This improves zoom behavior control and aligns with our modern API design.

#### Current behavior

Existing implementations using `enableAlwaysScrollToZoom` will continue to work in 1.0.0 but will log warnings in the console.

#### Future behavior

In 2.0.0, `enableAlwaysScrollToZoom` will be removed entirely. Any code referencing it must be updated to use the new zoom API.

Before:

```js
instance.setViewState((viewState) =>
  viewState.set("enableAlwaysScrollToZoom", true),
);
```

After:

```js
instance.setViewState((viewState) =>
  viewState.set("zoom", {
    // Configure scroll wheel zoom behavior.
    wheelZoomMode: NutrientViewer.WheelZoomMode.ALWAYS,
    // ... other zoom options.
  }),
);
```

### UI updates

This release introduces a major update to the Web SDK’s user interface, with the following UI sections migrated:

- Link annotation toolbar
- Image and signature annotation (image) toolbar
- Stamp annotation toolbar
- Text highlight and markup annotation toolbar
- Content editor toolbar
- Form creator toolbar
- Ink eraser toolbar
- Note annotation toolbar
- Redaction toolbar
- Shape annotation toolbars
- Document crop toolbar

Most customizations will continue to work as before, but if you notice anything unexpected and you were using CSS classes or CSS variables for customization, our Baseline UI migration guide offers helpful tips and guidance.

### Toolbars UI migration

Annotation toolbars have undergone a significant overhaul to improve accessibility and customization capabilities, leveraging our in-house Baseline UI design system. These changes bring them in line with the updated look of other UI components, such as the sidebar and main toolbar, while also enhancing support for users’ accessibility requirements.

### Text Comparison API changes

Several updates have been made to the Text Comparison API to ensure consistency with documentation and to unify data handling.

1. `TextBlock.rects` renamed to `TextBlock.rect`

   **Previous behavior:** `TextBlock.rects` was documented, but no rects were returned.
   **Impact:** Use `TextBlock.rect` instead of `TextBlock.rects`.

2. `TextBlock.rect` coordinates format updated

   **Previous behavior:** Coordinates were returned using a PDF coordinate system.
   **Impact:** If your application relied on PDF-style coordinates, update your logic to accommodate the new `x`, `y`, `width`, `height` format.

3. `Operation.originalTextBlocks` and `Operation.changedTextBlocks` return arrays

   **Previous behavior:** Only one `TextBlock` object was documented to be returned.
   **Impact:** These now return an array of `TextBlock` objects. Make sure your code handles multiple items.

4. `PageComparisonResult.originalPageIndex` and `PageComparisonResult.changedPageIndex` are optional

   **Previous behavior:** These properties were always present.
   **Impact:** Your code should now handle the possibility that these values may be undefined — particularly when comparing documents with differing page counts.

### Signing document hashes via DWS Processor API and Document Engine

This release adds a new signing API, which enables direct hash signing with Document Engine and DWS Processor API when Web SDK operates client-side in the browser. An access token just needs to be passed to the `signDocument` method. Learn more in our guides on how to sign via DWS Processor API and how to sign via Document Engine.

### Attachments sidebar and preview

A new attachments sidebar has been added. It displays a list of all files embedded in a PDF, and users can preview these files directly in the viewer or download them if the file format is unsupported. Previewing files is unavailable when using Document Engine — in this case, files can only be downloaded.

{% alert line="single-line" %}
Minimum Document Engine version required: 1.5.6
{% /alert %}

For a complete list of changes, bug fixes, and performance improvements, refer to the changelog. For the previous release notes, see Web SDK 2024.7 release notes. We appreciate your feedback and contributions as we continue to enhance Nutrient Web SDK.

[changelog]: /changelog/web/#1.0.0
[`nutrientviewer.viewstate#enablealwaysscrolltozoom`]: /api/web/classes/NutrientViewer.Instance.html#enablealwaysscrolltozoom
[`viewstate.zoom api`]: /api/web/classes/NutrientViewer.ViewState.html#zoom
[web sdk 2024.7 release notes]: /guides/web/release-notes/2024-7/
[dws sign]: /guides/web/signatures/digital-signatures/signature-lifecycle/sign-a-pdf-document-dws/
[de sign]: /guides/web/signatures/digital-signatures/signature-lifecycle/sign-a-pdf-document-document-engine/
[1.5.6]: /guides/document-engine/changelog/#1.5.6
[bui-migration]: /guides/web/migration-guides/baseline-ui-migration-guide/

Release notes for Nutrient Web SDK 1.0 covering the rebrand, new npm package, API changes, performance fixes, and upgrade guidance.]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Upgrading Nutrient Web SDK]]></title>
            <link>https://www.nutrient.io/guides/web/release-notes/upgrading/</link>
            <guid isPermaLink="false">https://www.nutrient.io/guides/web/release-notes/upgrading/</guid>
            <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Find upgrade guidance for Nutrient Web SDK releases, including links to versioned notes, Document Engine changes, and operational modes.]]></description>
            <content:encoded><![CDATA[Web SDK can be used together with Document Engine, which allows offloading document operations from the browser. Refer to the Document Engine changelog for more information.

Learn more about the available operational modes.

[document engine]: /guides/document-engine/
[document engine changelog]: /guides/document-engine/about/changelog/
[operational modes]: /guides/web/about/operational-modes/

Find upgrade guidance for Nutrient Web SDK releases, including links to versioned notes, Document Engine changes, and operational modes.]]></content:encoded>
        </item>
    </channel>
</rss>