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

**Version:** v6.11.0

**Published:** August 25, 2026

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](https://oxc.rs/blog/2026-08-18-react-compiler-support). It runs the compiler in a single native pass with no Babel in the pipeline, delivering **2x–10x** [faster builds](https://github.com/sanity-io/sanity/pull/14199).

This is an experimental opt-in — the default `transform: 'babel'` is unchanged and existing configs work without modification. See the [React Compiler and Sanity](https://www.sanity.io/docs/help/react-compiler) help article for full setup details.

### Install `oxc-transform-react`

**npm**

```shell
npm install --save-dev oxc-transform-react 
```

**pnpm**

```shell
pnpm add --save-dev oxc-transform-react 
```

**yarn**

```shell
yarn add --dev oxc-transform-react 
```

**bun**

```shell
bun add --dev oxc-transform-react 
```

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

**sanity.cli.ts**

```typescript
import {defineCliConfig} from 'sanity/cli'

export default defineCliConfig({
  api: {
    projectId: 'YOUR_PROJECT_ID',
    dataset: 'production',
  },
  reactStrictMode: true,
  reactCompiler: {target: '19', transform: 'oxc'},
})
```

## 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:

```ts
// 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](https://github.com/ChrisNolan).
- 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.

