1.24 release notes
RSSNutrient Web SDK 1.24 is a maintenance release. It narrows isEditableComment to the comments that already exist, so marking comments read-only no longer removes the reply editor. Document operations now save pending changes before they run, which keeps unsaved annotations when autoSaveMode is DISABLED. The note editor and the note and comment indicators get accessible names for screen readers. It also fixes custom fonts with multiword names, several text annotation editing issues, and undo and preset regressions. It fixes worker startup under a Trusted Types Content Security Policy as well. See the changelog for full details.
isEditableComment no longer governs replies
isEditableComment used to receive a temporary draft comment for every thread, and returning false for that draft removed the reply editor. The callback’s contract covers existing comments only, so drafts now skip it. A callback that returns false marks saved comments read-only, and the user can still reply:
NutrientViewer.load({ // Before 1.24, this also removed the reply editor from every thread. // It now only prevents editing and deleting existing comments. isEditableComment: () => false,});If you relied on the draft to block replies, that check no longer runs. A draft used to arrive with pageIndex set to null, so a callback that returned comment.pageIndex !== null stopped replies in every thread. In server-backed mode, collaboration permissions now govern reply rights through the reply action on the comments content type. In standalone mode, replace the editor area with the ui.commentThread.editor slot. The slot applies to every thread, so it also removes the editor for the first comment of a new thread. instance.setIsEditableComment() follows the same contract. For more information, refer to the comments and collaboration permissions guides.
Document operations save unsaved changes first
With autoSaveMode set to DISABLED, instance.applyOperations() deleted every unsaved annotation in the document, on every page, and hasUnsavedChanges() then reported false. The Document Editor uses the same path, so rotating, moving, duplicating, or removing a page in its UI and clicking Save lost the same annotations. The viewer now saves pending changes before it applies the operations, as printing already does. The operations then act on a document that contains them, so an annotation on a rotated or moved page moves with its page:
await instance.applyOperations([ { type: "rotatePages", pageIndexes: [1], rotateBy: 90 },]);
instance.hasUnsavedChanges(); // false: the pending changes were saved first.If the save fails, the returned promise rejects with a SaveError and the document isn’t changed. In server-backed mode, the save sends the pending changes to Document Engine before the page operation. The page operation itself already went to Document Engine at once in every mode. One case changes for code that relied on the old behavior. In server-backed mode, deleting annotations and then reimporting them with the same IDs through the applyInstantJson operation used to bring them back. This worked because the old behavior dropped the pending deletes. The deletes are now saved first, and Document Engine doesn’t recreate a deleted record ID, so a reimport needs new IDs. For more information, refer to the autosave guide.
Screen reader support for notes and comments
The note editor and the note and comment indicators have accessible names. Screen readers announce a selected note with its content and name its Close button. For more information, refer to the accessibility guide.
Trusted Types Content Security Policy
Workers now start under a Trusted Types Content Security Policy that allowlists the documented policies. The failure broke text selection highlights in PDFs and prevented Office documents from opening. The SDK now creates its Trusted Types policy once per bundle, so 'allow-duplicates' isn’t needed. For more information, refer to the Content Security Policy guide.
Document Engine 1.5.6 or later can run this release. In server-backed mode, using SearchType.WORD_BASED, removing password protection during PDF export, and removing annotation notes after an XFDF roundtrip require Document Engine 1.16.0 or later. Document-defined annotation tab order, Annotation.createdBy, overprintPreview, and blackRendering require Document Engine 1.18.0 or later. Compound measurements are standalone mode only and are ignored by Document Engine. See the Web SDK and Document Engine compatibility requirements.
For a complete list of changes, bug fixes, and improvements, refer to the changelog. For previous release notes, refer to the Web SDK 1.23 release notes. We appreciate your feedback and contributions as we continue to enhance Nutrient Web SDK.