Smart typography in the Portable Text Editor, and minor bugfixes
Published: December 15, 2025
v4.22.0
Sanity Studio
Smart typography in the Portable Text Editor
Sanity Studio’s Portable Text Editor includes the @portabletext/plugin-typography plugin. This transforms common characters into their nicer equivalents: double hyphens(--) into em dashes (—), "straight quotes" becomes “smart quotes,” and more. You can enable smart typography globally by enabling it in sanity.config.ts, or field-by-field basis.
export default defineConfig({
// ... rest of config,
form: {
components: {
portableText: {
plugins: (props) => {
return props.renderDefault({
...props,
plugins: {
...props.plugins,
typography: {
enabled: true
}
}
})
}
},
},
}
})For the full list of behaviors and configuration options, go to the Portable Text Editor for Sanity Studio documentation.
Notable bugfixes
- Fixes unique key errors when deleting and reverting objects in the middle of an array.
- Fixes resolution of
@sanity/visionin pnpm projects withenableGlobalVirtualStoreset totrue(thanks RJWadley for the fix!) - Fixes toolbar style selection states (like strikethrough) not displaying when the Portable Text Toolbar is collapsed into a dropdown menu
- Fixes backward text selection breaking across blocks in fullscreen Portable Text inputs
sanityno longer show a warning ifdeployment.appIdis missing fromsanity.cli.ts- Fixes
--replaceand--missingflags forsanity dataset importto correctly handle release system documents. Previously, these flags only affected regular documents, causing “there is already a release with that ID” errors even when--replacewas specified. - Restores the delete document action to draft documents. This action deletes all versions of the document, including published and draft.
- Fixes an issue where studios with no plugins incorrectly redirecting to the content releases or scheduled drafts screens.
- Fixes studios embedded in Next.js throwing errors like this:
Package jsdom can't be external The request jsdom matches serverExternalPackages (or the default list). The package resolves to a different version when requested from the project directory (26.1.0) compared to the package requested from the importing module (27.1.0). Make sure to install the same version of the package in both locations.