Sanity Studio v6.5.0: Bug fixes for forms and document editing, plus new deploy and undeploy JSON and dry-run flags

This release fixes several critical bugs affecting form interactions, document editing stability, and read-only state issues, while adding deployment improvements like dry-run and JSON output flags for better visibility and control.

New flags for deploy and undeploy

sanity deploy --json (and undeploy) emits the deploy result, or with --dry-run the deploy plan, as machine-readable JSON: the resolved target (id, title, and dashboard/studio URL), framework version, files, and any blocking problems.

It's built from the same source as the human report so the two can't drift, and core apps now print their dashboard URL in the plan and success output like studios already did.

🐛 Notable bugfixes and improvements

Fixed a regression where custom item/input form components rendering their own UI (such as a custom "Create new" button) next to reference inputs inside arrays could not be interacted with while the reference item was empty. Clicks within the same array item no longer clear the empty reference item; clicking elsewhere in the document still does.

Fixes a bug where deleting a scheduled draft while viewing it left stale release UI visible in the document pane. The pane now returns to the draft perspective automatically after deletion.

Fixed custom document actions being incorrectly disabled for Canvas-linked documents that are editable in Studio.

Fixes an issue that could sometimes set the document editor to read only while waiting for changes to be saved on slow connections.

Fixes an issue where the document form could briefly turn read-only right after publishing (or another commit).

Fixes an issue where auto-updating studios would offer "Reload to update" for a major version the Studio can't auto-update to, causing the prompt to reappear indefinitely.

The saved queries side panel in Vision is now scrollable when the list exceeds the available height.

CLI: In the init command, gate MCP setup on unattended mode rather than --yes alone, so a non-interactive init (including --json) configures MCP with defaults instead of blocking on its prompt.

CLI: name a new application or studio with deploy --title (or app.title config for apps), enabling non-interactive app creation.

CLI: add unstable_bundledDev opt-in for Vite's experimental bundled dev mode. Set unstable_bundledDev: true in sanity.cli.ts to make sanity dev serve a bundled module graph (Vite's experimental.bundledDev) instead of individual ES modules. This can significantly speed up dev-server startup and full page reloads for large studios, while HMR stays instant. The regular unbundled dev server remains the default and is unchanged when the option is absent.Requires vite@^8.1.3 — earlier 8.1.x releases ship a Rolldown codegen bug that crashes the bundled studio on startup. The option is unstable and may change or be removed while the underlying Vite feature is experimental.