This HTML page is not optimized for LLM or AI agent consumption. Fetch the Markdown version instead: /guides/web/user-interface/ui-customization/supported-slots.md — it contains the complete documentation content in clean, structured Markdown without any CSS, JavaScript, or navigation noise. UI customization supported slots | Nutrient Web SDK

Nutrient Web SDK provides slot-based UI customization for every major component. Slots are organized by feature domain; you configure them under the ui property when loading the SDK or at runtime via instance.setUI().

This page is the slot reference. For practical code examples, see the slot examples guide. To build a fully custom document UI from scratch, see building headless document UIs.

Every slot accepts one of two forms:

  • Full replacement — A function (getInstance, id) => { render, onMount?, onUnmount? } that returns your own DOM. getInstance() returns the live SDK instance (or null for preload slots); see accessing the SDK instance from a slot.
  • Sub-slot customization — An object { header?, body?, footer? } where each region is its own callback. Omitted regions keep their default rendering. A region only renders when the underlying default UI has that region wired up, e.g. aiAssistant.footer is mechanically valid but won’t render if the default panel has no footer container.

To hide any slot, return null from render:

ui: {
search: (getInstance, id) => ({ render: () => null }),
}

Slot inventory

Slots are grouped by the component they customize. Each subsection lists the available slot keys, what they cover, and any sub-slots they expose.

Tools

The tools group exposes two surfaces: primary tools that are always visible and contextual tools tied to specific modes. The names describe when the tools are visible, not how they are laid out, so the SDK can change the visual presentation without breaking the API:

ui: {
tools: {
main: ..., // Always-visible tools (zoom, page nav, modes, print, export).
contextual: ..., // Mode-specific tools (annotation properties, content editor bar, form designer, etc.).
},
}
SlotKey pathDescription
Main toolstools.mainAlways-visible, zoom, page navigation, mode switching, layout, undo/redo, print, export.
Contextual toolstools.contextualAppears when entering an annotation mode, content editor, form creator, measurement, or document crop. Shows annotation properties (color, opacity, border) when an annotation is selected.

Annotations

Slots for viewing, selecting, and managing annotations:

ui: {
annotations: {
actions: ..., // Actions for selected annotations.
status: ..., // Read-only/locked indicator on hover.
textMarkupInline: ..., // Inline toolbar for text selection markup.
deleteConfirm: ..., // Delete confirmation dialog.
link: ..., // Link annotation editor.
note: ..., // Note annotation text popup.
},
}
SlotKey pathTriggerDescription
Annotation actionsannotations.actionsAnnotation selectedAction buttons (delete, duplicate, custom) for the selected annotation. Replaces customization previously done via annotationTooltipCallback. Call getInstance() and use instance.getSelectedAnnotations() to access selected annotations.
Status indicatorannotations.statusHover on locked/read-only annotationStatus label showing “Locked” or “Read only” flags.
Text markup inlineannotations.textMarkupInlineText selected with markup toolsInline toolbar for creating highlights, underlines, strikeouts, squiggles.
Delete confirmationannotations.deleteConfirmDelete triggeredConfirmation dialog before permanently deleting an annotation. Return null from render to skip the confirmation.
Link editorannotations.linkLink annotation interactionEditor for the link annotation URL or action.
Note popupannotations.noteNote annotation expandedPopup showing the note’s text content. This is the reader-rendered popup (not the note icon on the canvas).

Content editor

Confirmations and warnings during content editing sessions. Use instance.saveContentEditingSession() and instance.discardContentEditingSession() to control content editing programmatically:

ui: {
contentEditor: {
exitConfirm: ..., // Exit with unsaved changes confirmation.
downloadConfirm: ..., // Download during editing confirmation.
cannotSavePrompt: ..., // Cannot save changes prompt.
fontMismatch: ..., // Font mismatch warning.
subsetFont: ..., // Subset font warning.
},
}
SlotKey pathDescription
Exit confirmationcontentEditor.exitConfirmShown when leaving the content editor with unsaved changes.
Download confirmationcontentEditor.downloadConfirmShown when downloading a document during content editing.
Cannot save promptcontentEditor.cannotSavePromptShown when the content editor cannot persist changes.
Font mismatchcontentEditor.fontMismatchWarning when a font used in the document is not available.
Subset fontcontentEditor.subsetFontWarning when a font is only partially embedded in the document.

Signatures

Electronic signature creation/selection and digital signature verification. These are two distinct features:

  • Electronic signatures (create, list): Hand-drawn or typed signatures applied as annotations. Use instance.getStoredSignatures() to access saved signatures.
  • Digital signatures (digitalSigning, digitalStatus): Cryptographic signatures with certificates for document integrity. Use instance.getSignaturesInfo() to access validation data.
ui: {
signatures: {
create: ..., // Electronic signature creation (draw, type, upload).
list: ..., // Saved electronic signatures picker.
digitalSigning: ..., // Digital signing flow (certificate-based).
digitalStatus: ..., // Digital signature validation status.
},
}
SlotKey pathDescription
Signature creationsignatures.createElectronic signature creation view, draw, type, or upload a new signature.
Signatures listsignatures.listSaved electronic signatures picker, select from previously stored signatures.
Digital signingsignatures.digitalSigningDigital signing flow with cryptographic certificates.
Digital statussignatures.digitalStatusDigital signature validation status, certificate chain, integrity, timestamp info.

Stamps

Stamp creation and template selection:

ui: {
stamps: {
create: ..., // Custom stamp creation.
list: ..., // Stamp template picker.
},
}
SlotKey pathDescription
Stamp creationstamps.createCustom stamp creation view.
Stamp liststamps.listStamp template picker showing available stamps.

Measurements

Scale calibration and measurement display settings:

ui: {
measurements: {
calibration: ..., // Scale calibration.
settings: ..., // Display settings (precision, unit).
},
}
SlotKey pathDescription
Calibrationmeasurements.calibrationScale calibration, set a reference distance for accurate measurements.
Settingsmeasurements.settingsMeasurement display settings, precision, unit, snapping options.

Document comparison

Controls and diff view for comparing documents:

ui: {
documentComparison: {
controls: ..., // Comparison controls (tabs, toggles, exit).
view: ..., // Comparison diff view.
},
}
SlotKey pathDescription
ControlsdocumentComparison.controlsComparison controls, source tabs, diff mode toggles, exit button.
ViewdocumentComparison.viewComparison diff view showing document differences.

Form creator

Form field design tools:

ui: {
formCreator: {
propertyEditor: ..., // Form field property editor.
},
}
SlotKey pathDescription
Property editorformCreator.propertyEditorForm field property editor, shown when a form field is selected in form designer mode. Configure field name, type, validation, and appearance.

The sidebar group contains the sidebar container slot and supports dynamic custom sidebar panels:

ui: {
sidebar: {
container: ..., // The sidebar container itself.
myCustomPanel: ..., // Any custom sidebar panel (dynamic key).
},
}
SlotKey pathDescription
Containersidebar.containerThe sidebar container, thumbnails, outline, annotations, bookmarks, signatures, attachments, layers. Hide to remove the entire sidebar.
Custom panelssidebar.[yourId]Dynamic custom sidebar panels. See the custom sidebars guide.

Comment thread

The comment thread is a standalone slot with rich sub-slot support:

ui: {
commentThread: ..., // Full replacement or sub-slots.
}
SlotKey pathSub-slotsDescription
Comment threadcommentThreadheader, footer, editor, commentThe entire comment thread component.
CommentcommentThread.commentheader, body, footerIndividual comment within a thread.

For detailed comment thread examples, see the comment thread example guide.

Standalone slots

These are single-feature components at the root level of the ui configuration:

ui: {
documentEditor: ..., // Page management (reorder, rotate, delete, add).
search: ..., // Document text search with result navigation.
loader: ..., // Document loading UI.
attachmentPreview: ..., // Embedded file attachment preview.
passwordPrompt: ..., // Password prompt for protected documents.
reloadConfirm: ..., // Reload document confirmation.
aiAssistant: ..., // AI assistant panel.
}
SlotKey pathSub-slotsDescription
Document editordocumentEditorheader, body, footerPage management UI, reorder, rotate, delete, duplicate, add pages.
Searchsearchheader, body, footerDocument text search with result navigation. Use instance.startUISearch(term) for programmatic search.
LoaderloaderLoading UI shown before the document finishes loading. Supports built-in { type: "progress" } and { type: "skeleton" } modes, or a custom slot callback.
Attachment previewattachmentPreviewheader, body, footerPreview for embedded file attachments.
Password promptpasswordPromptheader, body, footerPassword input for protected documents.
Reload confirmationreloadConfirmheader, body, footerConfirmation dialog when the document needs to be reloaded.
AI assistantaiAssistantheader, body, footerAI assistant panel for document queries and actions.

Preset

The preset key applies a baseline configuration. Currently supported:

  • 'minimal' — Hides all UI, leaving only the bare page canvas. Individual slot overrides take precedence, allowing selective restoration.
// Canvas-only:
NutrientViewer.load({
ui: { preset: 'minimal' },
});
// Canvas + custom search only:
NutrientViewer.load({
ui: {
preset: 'minimal',
search: (getInstance, id) => ({
render: () => {
const div = document.createElement("div");
div.textContent = "Custom search";
return div;
},
}),
},
});
// Reset to full UI at runtime:
instance.setUI({});

Quick reference

Full slot key paths at a glance.

GroupSlot keys
Toolstools.main, tools.contextual
Annotationsannotations.actions, annotations.status, annotations.textMarkupInline, annotations.deleteConfirm, annotations.link, annotations.note
Content editorcontentEditor.exitConfirm, contentEditor.downloadConfirm, contentEditor.cannotSavePrompt, contentEditor.fontMismatch, contentEditor.subsetFont
Signaturessignatures.create, signatures.list, signatures.digitalSigning, signatures.digitalStatus
Stampsstamps.create, stamps.list
Measurementsmeasurements.calibration, measurements.settings
Document comparisondocumentComparison.controls, documentComparison.view
Form creatorformCreator.propertyEditor
Sidebarsidebar.container, sidebar.[customId]
StandalonecommentThread, documentEditor, search, loader, attachmentPreview, passwordPrompt, reloadConfirm, aiAssistant