1.20.0 release notes
RSSNutrient 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.
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 guide.
For example, accept every pending insertion from one author inside a transaction:
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 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 guide.
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 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
finditem to a toolbar configuration to give users a button that toggles the Find interface.