---
title: "1.20.0 release notes"
canonical_url: "https://www.nutrient.io/guides/document-authoring/release-notes/1-20-0/"
md_url: "https://www.nutrient.io/guides/document-authoring/release-notes/1-20-0.md"
last_updated: "2026-09-02T00:00:00.000Z"
description: "Lists important changes for Nutrient Document Authoring SDK 1.20.0"
---

Nutrient Document Authoring SDK 1.20.0 adds programmatic revision management, transaction reports, review events, participant roles, tracked-change permissions, and a built-in Find toolbar item. It also changes how field content appears in the programmatic API and text extraction. For the complete list of fixes, refer to the [changelog](https://www.nutrient.io/guides/document-authoring/changelog.md#1.20.0).

### Breaking changes

This release changes how field content is represented in the programmatic API and text extraction.

#### Fields are now ordinary inline text

`TextView.inlines()` no longer returns `{ type: 'field' }` entries, and field values now appear as `InlineText` with their rendered formatting. Remove branches that inspect field markers and handle the value as ordinary inline text instead.

Text extraction now returns the displayed field value rather than a single space, so update parsers, snapshots, and assertions that relied on the old placeholder. The SDK upgrades existing DocJSON when it loads the document, so you don’t need to migrate files.

A field no longer occupies exactly one character, so text offsets at or after a field may differ from previous releases. Recheck stored or hard-coded offsets that can cross field content.

### New features

This release adds programmatic revision management, editor review events, and participant permissions for tracked changes.

#### Inspect and resolve revisions programmatically

The new `revisions()` collection lists tracked changes in document order. Host code can select revisions by ID, author, type, or text range before accepting or rejecting the selected set. Participants can withdraw individual revisions when they have permission. For selection, decisions, and withdrawal, refer to the [programmatic tracked changes](https://www.nutrient.io/guides/document-authoring/review-and-collaboration/programmatic-tracked-changes.md) guide.

For example, accept every pending insertion from one author inside a transaction:

```typescript

await document.transaction(async ({ draft }) => {
  const revisions = draft.revisions();
  const ids = revisions.all({ author, type: 'insertion' }).map(({ id }) => id);

  return {
    commit: true,
    result: revisions.accept({ ids }),
  };
});

```

Use `transactionWithReport()` when the host needs to verify what a transaction changed. It returns the callback result alongside canonical before and after document digests and a typed change list. For a complete Node.js digest verification example, refer to the [transaction reports](https://www.nutrient.io/guides/document-authoring/editing-content/transaction-reports.md) guide.

#### Track editor review activity

Browser and Node hosts can subscribe to tracked-change and comment events. Editor lifecycle events report attempted, completed, and denied review operations. Document events report committed changes from editor input and programmatic transactions. For event layers and payloads, refer to the [review events](https://www.nutrient.io/guides/document-authoring/review-and-collaboration/review-events.md) guide.

```typescript

editor.on('tracked-change.lifecycle', (event) => {
  console.log('Editor tracked change', event);
});

document.on('revision.accepted', (event) => {
  console.log('Committed revisions', event.ids, event.txId);
});

```

Tracked-change events cover create, accept, and reject operations. Comment events cover create, reply, edit, delete, resolve, and reopen operations. Completed events include stable revision or comment IDs where applicable.

#### Control tracked-change operations and participant roles

Pass `canPerformTrackedChange` when creating an editor to control editor-originated create, accept, and reject operations. The SDK calls this synchronous callback before applying the operation, and returning `false` leaves the document unchanged.

You can also assign each participant an author and an `owner`, `reviewer`, or `reader` role. Owners can edit and decide revisions, reviewers can propose tracked changes and withdraw their own revisions, and readers can’t change the document. The same role policy applies to programmatic transactions and editor input. For both permission layers, refer to the [review permissions](https://www.nutrient.io/guides/document-authoring/review-and-collaboration/permissions.md) guide.

### Other improvements and fixes

* Plain-text insertions in review mode now remain part of the active revision. Lifecycle completion events include the resulting revision ID.

* Increasing paragraph indentation now stops at the page or section content edge instead of pushing text beyond the right margin.

* Add the built-in `find` item to a toolbar configuration to give users a button that toggles the [Find interface](https://www.nutrient.io/guides/document-authoring/customize/find-interface.md).
---

## Related pages

- [1 15 0](/guides/document-authoring/release-notes/1-15-0.md)

