releases.shpreview
Home/Sanity
Sanity

Sanity

Sanity Studio v5.30.0

This release includes various improvements and bug fixes.

For the complete changelog with all details, please visit: www.sanity.io/changelog/studio-NS4yOS4w

Install or upgrade Sanity Studio

To upgrade to this version, run:

npm install sanity@latest

To initiate a new Sanity Studio project or learn more about upgrading, please refer to our comprehensive guide on Installing and Upgrading Sanity Studio.

📓 Full changelog

AuthorMessageCommit
@bjoergefix(authStore): resolve dual-mode SSO login loop (#12933)2ae1370ae1c13e1d001ef01f38860bf3ee243571
@bjoergefeat: add vercel routing configuration for auth-test-studio (#12929)cf5baeb268a835fd22b452ce2e6b76ef5218800e
squiggler-app[bot]fix(deps): update dependency @sanity/cli to ^6.7.1 (#12928)df8fc74d2d3843dbee3d76beaa3c0c544acd82ef
Sanity Changelog · v5.30.0

This release fixes an authentication loop that could trap users on the login screen and missing getWorkspace in @sanity/cli.

If you experience a login loop and are unable to upgrade to this version, clear your browser's site data for the Studio (or run localStorage.removeItem('__studio_auth_token_<projectId>') in the devtools console) and reload.

🐛 Notable bugfixes and improvements

  • Fixes an authentication loop that could in certain cases trap users on the login screen.
  • Adds missing changeset for @sanity/cli-core.
  • Fixes an issue causing “getWorkspace is not a function” when running sanity schema extract.

Sanity Studio v5.29.0

This release includes various improvements and bug fixes.

For the complete changelog with all details, please visit: www.sanity.io/changelog/studio-NS4yOC4w

Install or upgrade Sanity Studio

To upgrade to this version, run:

npm install sanity@latest

To initiate a new Sanity Studio project or learn more about upgrading, please refer to our comprehensive guide on Installing and Upgrading Sanity Studio.

📓 Full changelog

AuthorMessageCommit
squiggler-app[bot]fix(deps): update dependency @sanity/cli to ^6.7.0 (#12924)3fa8dc5bf17f17fc8779d16567817712be7dccf1
@bjoergefix(core): respect parent array field initialValue over member fields (#12914)46f9caa2b9b3699fca7b8e228eab50c7fdecc346
@pedrobonaminfix(structure): memoize incoming refs filter (#12919)30f89d5b82a25fdb820d7f64668bbba06bf38c15
sieve-sanity[bot]fix(sanity): surface error when no uploader matches the file (#12870) (#12905)054950f5ec4acde34fb6c0886b72a7c1eb8fb76d
@pedrobonaminchore(e2e): add variants e2e tests and readme (#12866)3a2fc8b579756e5b25a3cb3c245b7b9efdb7e0bf
@juice49fix(sanity): incorrect form auto-focus (#12878)8df5ed31a220bdb5ad4987132b17a283e323be8a
squiggler-app[bot]chore(deps): dedupe pnpm-lock.yaml (#12874)00aa75387971615db3d11a8674ec2b7863ae0498
@pedrobonaminchore(core): add variants conditions autocomplete (#12858)07d4dd910ea1f15a0bf97d2e424c5dad1aae7f50
@pedrobonaminchore(core): update variants operation store to use system actions (#12915)472c314f72a5546a4d9e0ecdf47d4a5a63530a05
@pedrobonaminfeat(core): add variant definition edit form (#12855)21c65307522826982488aff04139dbac6ef359b5
squiggler-app[bot]chore(deps): update dependency @sanity/pkg-utils to ^10.5.1 (#12900)daf6c35123ea7999be614aee74feb31787356c52
@bjoergefix(form): revert dataset aclMode check for plain asset previews (#12913)34982cf0e18c959ecaa7d1de3631baf571b58437
squiggler-app[bot]chore(deps): update dependency @sanity/blueprints to ^0.19.1 (#12889)4c3064b1513bd6d6b74a57182e7a3164e5dea45b
squiggler-app[bot]chore(deps): update playwright monorepo to v1.60.0 (#12912)2273ad6c4b2869f62041e110e2234fa6d42f8424
@juice49fix(sanity): restore document form open path from URL (#12873)07cda46ce9d790f17a348192b27d45eb6da3ebe5
@geballchore: fix typo (#12906)65872fe88f35e0477655c5b53987a2dc62a8d30f
Sanity Changelog · v5.29.0

This release improves the Sanity init setup process, adds a page-builder template, enhances dataset export and authentication features, and fixes several bugs including array field initialization, document scrolling, reference input loading, and media preview permissions.

Add best practice skills during init

sanity init will now prompt to configure Sanity MCP and install the sanity-best-practices agent skill for detected AI editors in a single step during sanity init. Add --no-skills to opt out.

🐛 Notable bugfixes and improvements

  • CLI: adds page-builder template using @​sanity/presets.
  • CLI: adds the no-strict-asset-verification flag to datasets export.
  • CLI: MCP can now use oauth for claude code config.
  • CLI: Allow ctrl-c to cancel browser login.
  • Fixed a bug where an array field with an initialValue set on both the parent field and a child field within defineArrayMember would incorrectly use the child field’s value. The parent’s initialValue now takes precedence, consistent with object fields and the documented behavior; the child’s initialValue still fills any keys the parent omits.
  • Fixes incoming references input flashing loading state.
  • Fixes an issue causing the document editor to unexpectedly scroll to the top in certain circumstances after entering Studio using a deep-link.
  • Fixed a regression in v5.26.0 where editors with a custom role lacking the Project datasets read permission saw a permissions error toast and broken media previews. Previews now load normally for these roles.
  • Fixes intermittent issue preventing navigating by URL to Portable Text Editor deep-links.
  • Fixes a bug where an array field with an initialValue set on both the parent field and a child field within defineArrayMember would incorrectly use the child field’s value. The parent’s initialValue now takes precedence, consistent with object fields and the documented behavior; the child’s initialValue still fills any keys the parent omits.
  • Fixes a bug where the incoming references input loading state would flash.
  • Fixes an issue causing the document editor to unexpectedly scroll to the top in certain circumstances after entering Studio using a deep-link.
  • Fixes a regression in v5.26.0 where editors with a custom role lacking the Project datasets read permission saw a permissions error toast and broken media previews. Previews now load normally for these roles.
  • Fixes an intermittent issue preventing navigating by URL to Portable Text Editor deep-links.

In addition to all the product updates from across Sanity, the documentation surface continues to grow with updated Next.js articles, a new guide for search, and additional guidance on organizing your blueprints. The platform also received a variety of fixes, along with some exciting personalizing and search improvements.

New and updated docs

Next.js updates

next-sanity 13 was released, and with it comes updates to many of the Sanity + Next.js articles. There’s a new guide on how to use Sanity Live with cache components.

GROQ search patterns

We’ve added a new guide on the different ways to implement search with GROQ. This includes patterns for both traditional search using BM25 (the industry standard ranking algorithm) as well as embeddings-based semantic similarity searching.

Everyday Content Agent prompts and workflows

Our content operations team put together an operator-focused guide filled with practical tips and prompts for making the most of Content Agent.

Managing Blueprints and Functions in a monorepo

The new Project layout and monorepos guide takes you through different ways to add Blueprints and Functions to your project, along with our recommended organization patterns. If you haven’t tried Blueprints yet, this is a great time to start.

Platform improvements

Better search

Sanity Learn now shows up in docs search. The Cmd-K palette gained a dedicated Learn group that surfaces public Learn courses and lessons alongside your regular docs results. It’s powered by a live GROQ full-text search (BM25 ranking plus semantic similarity), so conceptual or slightly-misspelled queries still find the right course.

Personalized content

Logged-in Sanity users now have the ability to see dynamic code snippets with their own customizable project and dataset details. Any time you see a PROJECT_ID or DATASET_NAME placeholder, click to populate with your own values.

Better for AI agents

Changelog history is now part of the Markdown and LLM output. When an agent or LLM fetches a doc’s .md twin (for example /docs/ai/mcp-server.md), it now gets a Related changelog entries section listing the versioned changes that reference that document, matching the live changelog tab one-to-one. This works for articles and HTTP/OpenAPI reference pages, while the raw JSON and YAML spec output stays clean.

The API reference site is now discoverable by agents. sanity.io/llms.txt now links out to reference.sanity.io/llms.txt. Compliant agents (Cursor, Claude Code, Aider, Continue, and others) follow that link to reach the per-package descriptions and Markdown twins on the reference site. This closes a gap where agents searching for SDK hooks bounced off /docs and never found the canonical reference.

Platform and dependencies

The docs app moved to Next.js 16.2.6, React 19.2.6, and the latest next-sanity (cache-components line), alongside routine Sanity client and dependency bumps.

Fixes
  • Search results for headings whose IDs start with a number now land on the correct anchor instead of jumping to the top of the page.
  • Deep links to a heading inside a non-default tab now activate that tab and scroll to the heading, instead of silently doing nothing.
  • The Astro, Nuxt, and React Router quickstart cards on the docs homepage navigate reliably again after hydration, now guarded by a regression test.

Sanity Studio v5.28.0

This release includes various improvements and bug fixes.

For the complete changelog with all details, please visit: www.sanity.io/changelog/studio-NS4yNy4w

Install or upgrade Sanity Studio

To upgrade to this version, run:

npm install sanity@latest

To initiate a new Sanity Studio project or learn more about upgrading, please refer to our comprehensive guide on Installing and Upgrading Sanity Studio.

📓 Full changelog

AuthorMessageCommit
@stipsanfix(presentation): handle null client.fetch results in PostMessageSchema (#12904)4397d7b95e9fe160103642dfd9d6104c605abb58
@stipsanfix(presentation): avoid iframe reload on perspective switch (#12885)1b76d8b65599baf226c0074eabe9c0495025734b
@stipsanfix(presentation): handle agent bundle perspectives correctly (#12903)a91bdc29202dd0e310554e4fb394fc2c81340e4f
squiggler-app[bot]fix(deps): update dependency @sanity/insert-menu to v3.0.7 (#12897)9dea35af2b16a7f5142b537ade7b4535d6f65212
squiggler-app[bot]chore(deps): update dependency @sanity/visual-editing-csm to ^3.0.8 (#12895)5c460ed40ba3b3b142641fc2a373641992eb3338
squiggler-app[bot]fix(deps): update dependency @sanity/preview-url-secret to ^4.0.6 (#12898)931641aebdd6975f4f23fdcf8b86e23b92f4fb5e
squiggler-app[bot]fix(deps): Update dev-non-major (#12888)632282c9557a8d1ae11b781bc630e3351cfde2d6
@jordanl17refactor(telemetry): replace PTE fullscreen events with Editor Opened/Closed + properties (#12883)6195111fadd331db580f58f396bbd01647b255ea
squiggler-app[bot]fix(deps): update dependency @sanity/presentation-comlink to ^2.1.0 (#12881)e604c3e6df85361968ff9179e0e3e073f5111575
squiggler-app[bot]fix(deps): update dependency @sanity/client to ^7.22.0 (#12880)8a5b3ae4ca7a6435b39a070486816983b79cf9a5
@jordanl17refactor(telemetry): rename Canvas Opened from studio event to Canvas Opened (#12884)e16ba9528d911f5c29c33949a58dd59ccec0df28
squiggler-app[bot]chore(deps): update dev-non-major (#12579)c4b5b4d5872c71e3802ecaf307b709b44bed2c1a
@pedrobonaminfeat(core): add view-as navbar for variant selection (#12862)4b5e4bb96a2e45861a9c83675cefea477dfad9ef
Sanity Changelog · v5.28.0

This release fixes critical bugs in Visual Editing including null reference errors when resolving paths, unnecessary page reloads when switching perspectives in the Presentation tool, and incorrect preview content when using agent bundles.

🐛 Notable bugfixes and improvements

  • Fixes a regression in the Visual Editing schema union-type resolver that could throw TypeError: Cannot read properties of null when resolving paths on documents that don’t exist on the active perspective.
  • Fixes a regression where switching the perspective in the Presentation tool caused the preview iframe to do a full page reload. Mainly visible to next-sanity@13 users with visual editing enabled. Users on next-sanity@12 or earlier, integrations built on @sanity/react-loader or @sanity/core-loader, and next-sanity@13 setups using the usePresentationQuery hook were not affected. Affected users on next-sanity@13 should also bump to next-sanity@^13.0.5 or later to pick up the matching client-side fix.
  • Fixes Presentation previews when an agent bundle (e.g., Content Agent’s “Proposed changes”) is selected. Previously the preview iframe always received the drafts perspective regardless of the active agent bundle, so iframes rendered draft content instead of the bundle’s content. Iframes now receive the agent bundle’s full perspective stack, and combining an agent bundle with a scheduled draft chip continues to work as before. No API or behavior change for non-agent perspectives.

Sanity Studio v5.27.0

This release includes various improvements and bug fixes.

For the complete changelog with all details, please visit: www.sanity.io/changelog/studio-NS4yNi4w

Install or upgrade Sanity Studio

To upgrade to this version, run:

npm install sanity@latest

To initiate a new Sanity Studio project or learn more about upgrading, please refer to our comprehensive guide on Installing and Upgrading Sanity Studio.

📓 Full changelog

AuthorMessageCommit
squiggler-app[bot]chore(deps): dedupe pnpm-lock.yaml (#12846)205756017da97c2c86959d0c3d3eb35f7279cc47
@juice49fix(sanity): add SanityImageSource to permitted media preview types (#12863)ecf8f39527fb4af7b6360c33bce4665e3423f4ef
@juice49fix(sanity): set correct dimensions for PTE block image preview (#12863)44bc72ce59fc9905ed376c658f50021129ecc8e9
@pedrobonaminfeat(actions): adds sieve (#12864)5742d890ef9704a553a3fea5348549051ae131be
@bjoergechore(ci): add node 26 to test matrix (#12860)ca41e8fb344f39f0d542a9d8c428158449cce803
@juice49fix(sanity): full-screen PTE popover boundaries (#12857)c78ec3778667013bd69e778ba61a4a0c7ea66a12
@pedrobonaminfeat(core): add variant definition delete action (#12848)e296b6ce594771fb6407967404e092a8cf6b558f
@pedrobonaminfeat(core): initial implementation for variants creation form (#12847)9178fe2449c1bdd156794ae15390c7bbf30d8bd2
@pedrobonaminfeat(core): Setting up variants tool (#12840)ee6c1493080eaac267bf2e96c0650bddcd514792
@pedrobonaminfix(i18n): mark stable resources for translation (#12861)36a8b11edb638c54b76e634bbc75d7f763b8b126
@bjoergechore(ci): bring back build metadata for prereleases (#12856)24283461256a3fbcd58e2d426a10b9dab80d27a2
@hermanwiknerfix(comments): hide empty field wrapper when field component is hidden (#12773)320f744b8019a82ffb9a052549cc42ac52cc9785
@bjoergechore: upgrade react-i18next & i18next (#12845)de77cf73ad7f15f2184e0250b63851f1fa799593
@EoinFalconerfix(e2e): stabilize flaky delete and restore document-action tests (#12714)e356ae3e676ee451469569f420aa0034082756a9
Sanity Changelog · v5.27.0

This release improves image preview display in the Portable Text editor and fixes toolbar menu rendering issues.

🐛 Notable bugfixes and improvements

  • Improves Portable Text editor block image previews: images are now displayed in the correct aspect ratio, preventing cropping and zooming.
  • Fixes an issue preventing Portable Text toolbar menus from rendering correctly.
  • Fixed an issue where the comments field wrapper displayed an empty element when the field component was hidden.
Sanity Changelog · v2.12.0

Releases support

The document store now includes release actions, and a new useAllReleases hook makes it easier to fetch releases from your application.

You can now work with Content Releases from your application. The document store exposes release actions for creating, scheduling, and publishing releases, and the new useAllReleases hook returns all releases in your project. Use it to build release pickers, dashboards, or scheduling UI.

import {useAllReleases} from '@sanity/sdk-react'

function ReleaseList() {
  const releases = useAllReleases()
  // ...
}
Sanity Changelog · v13.0.0

next-sanity v13 ships first-class support for Next.js Cache Components (cacheComponents: true), cleans up long-deprecated APIs, and adds new escape hatches for error handling and connection lifecycle events.

Cache Components support

You can now pass cacheComponents: true to defineLive to opt in to Next.js Cache Components. This unlocks full 'use cache' support for sanityFetch, giving you fine-grained, tag-based cache invalidation that integrates directly with Sanity Live.

We've been running this in production for the past couple of months. sanity.io runs with cacheComponents: true, and sanity.io/docs runs with cacheComponents: false. Both have been solid.

The fastest way to adopt Cache Components is with the sanity-live-cache-components skill, which drives the migration with an AI agent. For best results, set up AGENTS.md first, then run:

npx skills add https://github.com/sanity-io/next-sanity --skill sanity-live-cache-components

Suggested prompt for your agent:

Use the /sanity-live-cache-components skill to migrate this app to use Cache Components. When verifying with `next dev`, test both draft mode enabled and draft mode disabled because each mode has different rendering rules. `next build --debug-prerender` is not sufficient to verify that draft mode works correctly.

Breaking changes

See the v12 to v13 migration guide for full details and code snippets. The key changes are:

  • The default cache-invalidation behavior changed. revalidateSyncTags on <SanityLive> is replaced by action; sanityFetch no longer caches the internal sync-tag lookup when cacheComponents: false.
  • Removed the <SanityLive> props that were on by default: refreshOnFocus, refreshOnReconnect.
  • Removed the opt-in <SanityLive> / defineLive props: refreshOnMount, intervalOnGoAway, fetchOptions, stega; onGoAway signature changed (no longer receives interval).
  • Removed deprecated hooks: useDraftModePerspective, useIsLivePreview, useDraftModeEnvironment.
  • Removed deprecated tag option on sanityFetch and tag prop on <SanityLive>. Use requestTag instead.
  • Renamed next-sanity/live type exports: DefinedSanityFetchTypeDefinedFetchType, DefinedSanityLivePropsDefinedLiveProps, DefineSanityLiveOptionsDefineLiveOptions.

What else is new

Customize or silence the welcome message with onWelcome

By default, <SanityLive> logs a welcome message to the console when the live event stream connects. Pass a custom onWelcome handler to replace it with your own logic, or pass onWelcome={false} to disable it entirely.

"use client";

import type { SanityLiveOnWelcome } from "next-sanity/live";

export const onWelcome: SanityLiveOnWelcome = (
  event,
  { includeDrafts, waitFor }
) => {
  console.info(
    `<SanityLive${
      includeDrafts ? " includeDrafts" : ""
    }> is connected and listening for live events to ${
      includeDrafts
        ? "all content including drafts and version documents in content releases"
        : "published content"
    }.${
      waitFor === "function"
        ? " Events will be delayed until after a Sanity Function has processed them."
        : ""
    }`
  );
};
import { onWelcome } from "./client-functions";
import { SanityLive } from "@/sanity/lib/live";

export default function Layout({ children }: { children: React.ReactNode }) {
  return (
    <>
      {children}
      <SanityLive onWelcome={onWelcome} />
    </>
  );
}
Error boundaries with retry via onError="throw"

The default behavior still logs errors with console.error (CORS errors use console.warn). Pass onError="throw" to throw errors during render so they can be caught by the Next.js unstable_catchError API, which supports unstable_retry for retrying the render. This lets you build rich error UIs. For example, a toast that offers a retry button when Sanity Live can't connect.

"use client";

import { isCorsOriginError } from "next-sanity/live";
import { unstable_catchError, type ErrorInfo } from "next/error";
import { useEffect } from "react";
import { toast } from "sonner";

function SanityLiveErrorBoundary(
  _props: {},
  { error, unstable_retry }: ErrorInfo
) {
  useEffect(() => {
    let toastId: string | number | undefined;
    if (isCorsOriginError(error)) {
      const { addOriginUrl } = error;
      toastId = toast.warning(`Sanity Live couldn't connect`, {
        description: `${new URL(window.origin).host} is blocked by CORS policy`,
        richColors: true,
        duration: Infinity,
        action: addOriginUrl
          ? { label: "Manage", onClick: (e) => { e.preventDefault(); window.open(addOriginUrl.toString(), "_blank"); } }
          : { label: "Retry", onClick: () => unstable_retry() },
        cancel: addOriginUrl
          ? { label: "Retry", onClick: () => unstable_retry() }
          : undefined,
      });
    } else if (error instanceof Error) {
      console.error(error);
      toastId = toast.error(error.message, {
        richColors: true,
        duration: Infinity,
        action: { label: "Retry", onClick: () => unstable_retry() },
      });
    } else {
      console.error(error);
      toastId = toast.error("Unknown error", {
        description: "Check the console for more details",
        richColors: true,
        duration: Infinity,
        action: { label: "Retry", onClick: () => unstable_retry() },
      });
    }
    return () => { toast.dismiss(toastId); };
  }, [error, unstable_retry]);

  return null;
}

export default unstable_catchError(SanityLiveErrorBoundary);
import SanityLiveErrorBoundary from "./SanityLiveErrorBoundary";
import { SanityLive } from "@/sanity/lib/live";

export default function Layout({ children }: { children: React.ReactNode }) {
  return (
    <>
      {children}
      <SanityLiveErrorBoundary>
        <SanityLive onError="throw" />
      </SanityLiveErrorBoundary>
    </>
  );
}
Strict mode for staged Cache Components migrations

Enable strict: true in defineLive to split your Cache Components migration across two PRs: first update all sanityFetch and <SanityLive> call sites to satisfy the new requirements, then flip cacheComponents: true in next.config.ts and add 'use cache' to functions that call sanityFetch.

Other additions
  • usePresentationQuery, useIsPresentationTool, and useVisualEditingEnvironment no longer require both <SanityLive> and <VisualEditing> to be rendered in layout.tsx. Rendering <VisualEditing> alone is now enough
  • onRestart prop on <SanityLive>: calls router.refresh() by default; pass onRestart={false} to disable
  • onReconnect prop on <SanityLive>: logs to console by default; pass onReconnect={false} to disable
  • includeDrafts prop on <SanityLive>: override the automatic draft-mode detection when a browserToken is set
  • resolvePerspectiveFromCookies utility: exposes the same perspective resolution sanityFetch uses internally, useful for custom toolbars and cacheComponents: true boundaries
  • stega: true now works on the published perspective, enabling Visual Editing overlays on published content (useful for Vercel Content Link)

Sanity Studio v5.26.0

This release includes various improvements and bug fixes.

For the complete changelog with all details, please visit: www.sanity.io/changelog/studio-NS4yNS4x

Install or upgrade Sanity Studio

To upgrade to this version, run:

npm install sanity@latest

To initiate a new Sanity Studio project or learn more about upgrading, please refer to our comprehensive guide on Installing and Upgrading Sanity Studio.

📓 Full changelog

AuthorMessageCommit
@bjoergechore(ci): add permissions for typedoc workflow job (#12851)50a689295ab96a6c08b3878c72c59c3ed3168564
squiggler-app[bot]chore(release): publish v5.26.0 (#12829)cf3038bd24b85ef226c46e5ce2dda2267443aa04
@bjoergerevert: "chore(release): publish v5.26.0" (#12849)70545b8d5421f875a171145fe5312742c0c4f959
@skogsmaskinfix: respect options.disableNew for asset menus (#12842)2de7a16ec7962f1d3bd922a8ef25c56425e0d547
@jordanl17chore(test-studio): replicate missing DocumentDivergencesContext error (#12833)6437b4d876aea4dc6106125e20a2cac2b9f45015
@jordanl17fix(sanity): allow FormBuilder to render without parent DocumentDivergencesContext (#12833)ff9d414de142fd95def6555167cd8fde18fc49cf
squiggler-app[bot]fix(deps): update dependency @sanity/cli to ^6.6.0 (#12804)d2a3286608aa5e940dcfd1dc6960f393074ac070
@jordanl17feat(core): route studio root to first visible workspace (#12826)30be2341a18314aa0dc7755273221c9bdf316a6e
@bjoergefix: add back groq prerelease to trustPolicyExclude (#12841)204ff5cc575788f7c3d9c031a2f5e60d92984d0e
squiggler-app[bot]chore(tests): generate dts tests 🤖 ✨ (#12838)2282f9d39731b51c995d4ace964d7324f99650d7
@annezfeat(telemetry): add Studio Tool Mount Time Measured event (#12708)cd5c734c3404974a7e1afad8ce264f923b2a8e03
@RitaDiasfix(form): surface errors across the form to validation especially focused on date inputs (#12815)a27126590f6bd46f9bab4e4d1089d917b127c5b5
squiggler-app[bot]chore(tests): generate dts tests 🤖 ✨ (#12836)f27521f9864dd8437cb558214092cd03c2125a39
@pedrobonaminfix(core): arrays previews to include the first item (#12837)3f22835c60b83a64b49567e4de25c7edd78d09ff
@pedrobonaminfeat(core): initial setup for variants store (#12809)c99e3cafeb82a0a20e291f9614a3615675603283
@bjoergechore(deps): exclude groq@5.24.0 from trust policy (#12832)b3cda5812122c16adaa786260a8ca7986135a143
squiggler-app[bot]chore(deps): update pnpm to v11.1.2 (#12831)543417ee9e45f348de8963178c3c5e2d46fa85ac
@bjoergeci(workflows): add zizmor audit and harden workflows (#12830)3d842be99273373edbe7c5776968cbb705558625
@jordanl17fix(form): load crop image via authed blob URL for private assets (#12820)c6abef062ed0a79305197fcfb83898b07dfd565c
Sanity Changelog · v5.26.0

This release improves studio navigation and user experience by automatically routing to the first visible workspace, enabling proper upload field restrictions, resolving validation error visibility for date fields, correcting preview data handling for arrays, and fixing authentication issues with image cropping in private datasets.

🐛 Notable bugfixes and improvements

  • Studio now routes to the first workspace the user can see, fixing the case where the configured default is hidden from them.
  • Fixes an issue where you could still upload to fields where the schema type has had upload disabled with options.disableNew.
  • Fixes “useDocumentDivergences must be used within a DocumentDivergencesContext” error in third-party code that renders the FormBuilder component.
  • Custom validation rules on date/datetime fields no longer hide behind “Required” when the user’s input doesn’t match dateFormat. The field-level tooltip and the global validation panel now surface the parser error directly (e.g., Invalid date. Must be on the format "YYYY-MM-DD"), making the format requirement actionable without any schema changes.
  • Document / list previews that use preview.select with arrays of primitives and dotted paths (e.g., names.0, names.length) now receive the correct values instead of dropping the first element or misshaping the array.
  • The crop dialog now authenticates private-dataset image requests directly, fixing a 403 that surfaced in Firefox and on deployed studios.
  • CLI: The CLI now supports login with the --with-token flag. Use it to pass standard input to the command to bypass the interactive login. For example: npx sanity login --with-token < token.txt.

Sanity Studio v5.25.1

This release includes various improvements and bug fixes.

For the complete changelog with all details, please visit: www.sanity.io/changelog/studio-NS4yNS4w

Install or upgrade Sanity Studio

To upgrade to this version, run:

npm install sanity@latest

To initiate a new Sanity Studio project or learn more about upgrading, please refer to our comprehensive guide on Installing and Upgrading Sanity Studio.

📓 Full changelog

AuthorMessageCommit
@bjoergefix: show login screen instead of error when session expires (#12827)69cce1a4282de2cc84ceafd437fee3d63b456d6b
@pedrobonaminfix(core): remove static css import from sanity and vision (#12825)c147d00461c03b07a17bacfd2b029b297248176b
@bjoergefix(structure): truncate long document titles in pane header (#12823)e916a32924c6520c49e4afc0d741b622841977f8
Sanity Changelog · v5.25.1

This release fixes CSS file handling errors and improves the Studio pane layout by truncating long document titles instead of allowing them to overflow.

🐛 Notable bugfixes and improvements

  • Fixes an issue that caused the Error: Unknown file extension &quot;.css&quot; error.
  • Long document titles in the Studio pane header now truncate with an ellipsis instead of overflowing into adjacent panes (e.g. when the Comments pane is open).
  • fix: show login screen instead of error when session expires
Sanity Changelog · v2.11.1

Fixed an issue where the authentication subscription would stop after a failed user fetch. This could cause apps to hang indefinitely when the Sanity Dashboard issued a new token after expiry, since the SDK wouldn't pick up the refreshed session. The subscription now stays active through fetch errors, ensuring token refreshes work as expected.

Last Checked
20m ago
Domain
sanity.io
Tracking since Feb 20, 2025