Redesigned document status icons, Portable Text Editor v8, React Compiler on oxc, and Studio reliability fixes

Published: August 25, 2026

v6.11.0

This release redesigns document status icons in lists and ships Portable Text Editor v8. It also fixes popover visibility, text styling in multi-block selections, document pane performance, and WebSocket connection warnings, and makes more menus respect document action filters.

React Compiler on Rust

Studio 6.11.0 introduces an opt-in Rust-based transform for the React Compiler via oxc-transform-react, powered by the OXC toolchain. It runs the compiler in a single native pass with no Babel in the pipeline, delivering 2x–10x faster builds.

This is an experimental opt-in — the default transform: 'babel' is unchanged and existing configs work without modification. See the React Compiler and Sanity help article for full setup details.

Install oxc-transform-react

To enable the transform, add transform: 'oxc' to the reactCompiler config in sanity.cli.ts.

Clearer document status icons

Document status icons in lists have been redesigned to make a document's state clearer at a glance. Hovering an icon lists every version of the document, including drafts and versions in releases, and when each was last published or edited.

Studio now ships @portabletext/editor v8

Studio moves to @portabletext/editor v8 and the matching plugin majors. Two behaviour changes affect custom editor integrations.

  • onEditorChange no longer receives loading or error from the editor. Those members stay on the EditorChange type, so existing switches keep compiling.
  • The editor no longer writes or parses a built-in text/markdown clipboard entry. Copy and paste between Portable Text editors is unchanged (application/x-portable-text). HTML paste is still owned by Studio.

Diagnostics panel

Added a "Diagnostics" option to the "Help and resources" menu

Make the useFormValue path optional

useFormValue can now be called without a path to get the whole document:

// before
const document = useFormValue([])

// now
const document = useFormValue()

Passing an explicit path — including [] — behaves exactly as before, so this is purely additive.

🐛 Notable bugfixes and improvements

  • Version chip, document inventory, release detail table and Scheduled drafts overview menus now respect document.actions filters, so actions removed from config such as Discard version, Delete schedule, Publish now and Unpublish no longer appear.
  • Output from sanity debug now includes the source of the auth token (env, config file, etc).
  • Removes the react-dom dependency form the CLI by loading it from the local Studio project instead.
  • Fixes animated popovers that could intermittently open with no visible content (empty card, or nothing at all). Comments, document group inventory, and other popover UIs should now stay visible after rapid open/close.
  • Fixes a glitch in the Portable Text Editor where adding or editing an annotation briefly flashed the annotation toolbar popover and the "Add comment" button before the annotation editor opened. Also fixed document status tooltips (in reference pickers, document lists and search results) staying frozen on screen when the list was scrolled while the tooltip was open; they now close as soon as scrolling starts.
  • The document status tooltip no longer lists agent bundle versions (Proposed changes / Agent changes). Published, draft, and release versions are unchanged.
  • Fixes a render loop that could make the Studio sluggish (and document panes slow to open) when a custom preview component or plugin calls useDocumentValues with an inline paths array.
  • Fixes a bug where applying a text style to a selection spanning multiple blocks in the Portable Text editor could silently do nothing when one of the selected blocks already had the chosen style.
  • useClient is no longer shown as deprecated on import. Only calling useClient() without {apiVersion} is deprecated; pass an API version, e.g., useClient({apiVersion: '2025-02-07'}). Thanks Chris Nolan.
  • Fixes document panes that could stall while receiving sustained presence updates from other collaborators in the same document.
  • Fixes a visual glitch where document-list search controls could overlap a neighboring pane after collapsing the list.
  • Published packages that previously omitted engines.node (@sanity/schema, @sanity/mutator, @sanity/types, @sanity/vision) now declare Node >=22.12, the same floor as sanity. Installers on older Node may see an engines warning. This is not a change to the supported runtime.
  • Fixes the WebSocket is closed before the connection is established browser console warning that appeared on every Studio load, by upgrading the Studio's realtime messaging client (@sanity/bifur-client) to v2. The realtime (presence) WebSocket is no longer torn down while its handshake is still in progress, and no longer reconnects during Studio startup. It connects once and stays connected. Presence subscriptions are no longer deferred on mount.
  • Fixes a CLI issue that issue stoped documents from validating due to a worker cloning error.
Loading...