Sanity Release Notes

Follow

30 release notes curated from 22 sources by the Releasebot Team. Last updated: Aug 10, 2026

Get this feed:
  • Aug 6, 2026
    • Date parsed from source:
      Aug 6, 2026
    • First seen by Releasebot:
      Aug 10, 2026
    Sanity logo

    Sanity

    Fixes media library video CORS error and validation fixes

    Sanity fixes critical field validation bugs and improves media and image handling, resolving CORS errors in media library video fields, correcting crop preview rendering, and restoring reliable Portable Text inline comments.

    This release fixes critical issues with field validation on multiple field types, resolves CORS errors with media library video fields, and corrects image crop preview rendering.

    Notable bugfixes and improvements

    • Fixes an issue where the inline comment button in Portable Text inputs would intermittently not appear on the first text selection when the editor was not already focused.
    • Fixes a CORS error when using media library video fields in your schema.
    • Fixes a crash where url, number, and array fields became unusable, showing "An error occurred" instead of an input, when their validation used the two-argument form that receives the validation context.
    • Fixes a regression where the crop and hotspot previews in the image input rendered a horizontally squashed image that did not match the configured crop.
    • Fixed an issue where the inline comment button in Portable Text inputs would intermittently not appear on the first text selection when the editor was not already focused.
    Original source
  • Aug 6, 2026
    • Date parsed from source:
      Aug 6, 2026
    • First seen by Releasebot:
      Aug 10, 2026
    Sanity logo

    Sanity

    Faster asset grid, and key media library bugfixes

    Sanity speeds up the asset grid for large libraries and fixes several Studio issues, including the In use dialog and array aspects in the edit form. Scrolling stays smooth while referencing documents and sidebar rows now display correctly.

    This release makes the asset grid dramatically faster in large libraries, plus fixes for the "In use" dialog and array aspects in the edit form.

    Faster asset grid

    The asset grid now renders only the assets in the viewport, plus a small buffer. Previously every loaded asset stayed in the page as you scrolled, so libraries with more than a few thousand assets became progressively slower. Scrolling, selection, and loading behave exactly as before there’s just far less work happening behind the scenes.

    🐛 Notable bugfixes

    • The "In use" dialog no longer shows a React error for every referencing document when a document's title is stored as an internationalized array. Localized titles now display their actual value rather than falling back to a generic label

    • The "In use" dialog no longer hangs on skeleton loaders forever when opened from the Media Library plugin inside Studio. Referencing documents now load and display, showing the document title, type, and perspective

    • Array-of-objects aspects with more than around ten items no longer render blank or misplaced rows in the edit sidebar. Scrolling now updates the list correctly, and items added through the "Add item" dialog appear where you expect them, both in the sidebar and in the plugin's edit dialog

    Original source
  • All of your release notes in one feed

    Join Releasebot and get updates from Sanity and hundreds of other software products.

    Create account
  • Aug 6, 2026
    • Date parsed from source:
      Aug 6, 2026
    • First seen by Releasebot:
      Aug 10, 2026
    Sanity logo

    Sanity

    v6.9.1

    Sanity releases Studio v6.9.1 with improvements and bug fixes across comments, core, form, and media library workflows, plus a redesign of variant overview, detail, and releases detail pages.

    Sanity Studio v6.9.1

    This release includes various improvements and bug fixes.

    For the complete changelog with all details, please visit:

    www.sanity.io/changelog/studio-Ni45LjA

    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

    Author

    Message

    Commit

    @christianhg

    fix(comments): drop the teardown mutation of a reset editor instance (#13887)

    b8fcd61

    squiggler-app[bot]

    chore(deps): dedupe pnpm-lock.yaml (#13891)

    d5b748d

    squiggler-app[bot]

    fix(deps): update dependency @sanity/cli to ^7.18.0 (#13890)

    38e1996

    @christianhg

    fix(comments): clear the blur guard on mouse press inside the editor (#13882)

    52c2ead

    @stipsan

    chore(lint): ban forwardRef and migrate to props.ref (#13869)

    9eb6b09

    @skogsmaskin

    fix(core): use project api host for media library video asset queries (#13883)

    1c9ab5e

    @pedrobonamin

    fix(form): resolve context-aware validation rules in inputs (#13878)

    9ad5a19

    @pedrobonamin

    fix(form): opt hotspot preview images out of the global img reset (#13877)

    8558aff

    squiggler-app[bot]

    chore(deps): dedupe pnpm-lock.yaml (#13873)

    6ae1efb

    @jordanl17

    refactor(core): consolidate nested object navigation telemetry events (#13773)

    e95f84a

    squiggler-app[bot]

    fix(deps): update dependency get-it to ^8.8.3 (#13866)

    6712f2d

    @tpc-faheem

    chore(core): Variant overview, Detail and Releases Detail Page Redesign (#13798)

    32636b9

    Original source
  • Aug 4, 2026
    • Date parsed from source:
      Aug 4, 2026
    • First seen by Releasebot:
      Aug 10, 2026
    Sanity logo

    Sanity

    Run Sanity CLI commands and safer document patching

    Sanity adds MCP server improvements with a new run_sanity_cli tool, better patch_documents behavior for draft creation and rollback safety, plus fixes for empty CLI responses and malformed document IDs.

    New Features

    • run_sanity_cli tool: Run a limited set of Sanity CLI commands through MCP without access to a local shell.

    Improvements

    • patch_documents tool: Now reports when editing a published document creates a new draft, including the published revision it came from. Creation is pinned to that revision, and all requested patches are applied in the same transaction so an action failure rolls back the entire operation.

    Fixes

    • run_sanity_cli tool: Fixed some commands returning an empty response instead of a table of returned data.
    • patch_documents tool: Fixed one malformed document ID failing an entire call. Bad IDs are now rejected up front with a clear error naming the offending ID, and a single bad ID no longer discards the other edits in the same call.

    Related documentation

    Sanity MCP server

    Original source
  • Aug 4, 2026
    • Date parsed from source:
      Aug 4, 2026
    • First seen by Releasebot:
      Aug 10, 2026
    Sanity logo

    Sanity

    Improve structure tool stability, CLI behavior, and TypeScript schema typings

    Sanity fixes a Structure tool crash and improves TypeScript schema helpers, while also refining CLI deploy, programmatic table output, and init templates for smoother studio workflows.

    This release fixes a crash in the structure tool's incoming references inspector, and enhances TypeScript schema helpers to better preserve optional properties.

    🐛 Notable bugfixes and improvements

    • Fixed a crash that could take down the whole structure tool when the Incoming references inspector was open. Inspector panels now show a recoverable error inside the panel instead of unmounting the tool, and the incoming references list links to the referencing document when the exact field path cannot be determined.
    • CLI deploy: build and deploy now keeps a studio’s installed package versions rather than silently ignoring deployment.autoUpdates, reports the existing app id when its slug is already taken, and applies the app's visibility.
    • CLI: Show table output when commands are run programmatically. Commands that render tables, such as sanity users list, produced no output when invoked programmatically instead of from a terminal. sanity users list now also reports when a project has no members rather than printing an empty table.
    • CLI init: Use @sanity/icons v5 de-barrelled imports in templates.
    • TypeScript: Schema define helpers now preserve explicitly supplied optional properties on their return types. For example, a preview, options, validation, or components property declared inline through defineType, defineField, or defineArrayMember can be read from the returned value without unnecessary non-null assertions.
    Original source
  • Similar to Sanity with recent updates:

  • Aug 4, 2026
    • Date parsed from source:
      Aug 4, 2026
    • First seen by Releasebot:
      Aug 10, 2026
    Sanity logo

    Sanity

    v6.9.0

    Sanity ships Studio v6.9.0 with broad improvements and bug fixes, including better document querying in selected variants, unclaimed project intake nudges, sturdier inspector behavior, and performance upgrades across the Studio experience.

    Sanity Studio v6.9.0

    This release includes various improvements and bug fixes.

    For the complete changelog with all details, please visit:

    www.sanity.io/changelog/studio-Ni44LjA

    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

    Author

    Message

    Commit

    @stipsan

    refactor(ui): migrate Stack and Button space prop to gap (#13867)

    8343de2

    @pedrobonamin

    feat(core): query documents in the selected variant alongside the perspective stack (#13791)

    8989fe7

    @shapirodaniel

    feat(core): unclaimed project claim intake and nudge (#13705)

    41dd4bf

    @pedrobonamin

    chore(structure): render doc badges even if the doc is missing (#13743)

    f03b8af

    @pedrobonamin

    test(e2e): add tasks e2e tests for create, release scoping and resolve (#13754)

    de8fb79

    @stipsan

    fix(core): avoid native useEffectEvent in forwardRef and memo (#13821)

    8f84cf4

    @jordanl17

    fix(core): stop permission loading-flag churn on every document change (#13771)

    96f5819

    @jordanl17

    refactor(core): consolidate array list object telemetry events (#13772)

    1a9dffc

    @stipsan

    chore(lint): prefer function components via oxlint rule (#13826)

    a6b0627

    @stipsan

    chore(structure): drop redundant incoming references comments (#13852)

    1542aa0

    @stipsan

    fix(dev): migrate profiling minify options from esbuild to vite (#13859)

    d25a51c

    @stipsan

    chore(test-dts-exports): remove ui-poc styles.css TS2882 workaround (#13863)

    623e18f

    squiggler-app[bot]

    fix(deps): update dependency get-it to ^8.8.2 (#13865)

    7ea95c3

    squiggler-app[bot]

    chore(deps): dedupe pnpm-lock.yaml (#13864)

    5d36c67

    @jordanl17

    perf(sanity): batch connector geometry updates with rAF and bail on unchanged connectors (#13763)

    24a033e

    squiggler-app[bot]

    fix(deps): update playwright monorepo to v1.62.1 (#13855)

    40c0ab5

    squiggler-app[bot]

    chore(deps): update dependency oxlint to ^1.76.0 (#13844)

    9eb219e

    squiggler-app[bot]

    fix(deps): update dependency @sanity/cli to ^7.16.0 (#13858)

    1c690fd

    @stipsan

    chore(test-studio): add vitejs devtools integration packages (#13850)

    027245f

    squiggler-app[bot]

    fix(deps): update dependency @sanity/client to ^7.26.0 (#13848)

    8458e48

    squiggler-app[bot]

    chore(deps): dedupe pnpm-lock.yaml (#13853)

    be95af4

    squiggler-app[bot]

    chore(deps): update dependency @sanity/tsdown-config to ^0.21.3 (#13862)

    f7d1c45

    squiggler-app[bot]

    chore(lint): fix linter issues 🤖 ✨ (#13860)

    32c9c66

    squiggler-app[bot]

    fix(deps): update portabletext (#13842)

    9320439

    squiggler-app[bot]

    fix(deps): update dev-non-major (#13834)

    cfd0b3b

    squiggler-app[bot]

    fix(deps): update dependency motion to ^12.43.0 (#13849)

    64f1aa1

    squiggler-app[bot]

    chore(deps): update dependency knip to ^6.31.0 (#13843)

    853e4a1

    squiggler-app[bot]

    fix(deps): update dependency get-it to ^8.8.1 (#13841)

    a4d8244

    squiggler-app[bot]

    fix(deps): update react monorepo (#13856)

    cdd01d3

    squiggler-app[bot]

    chore(deps): update dependency oxfmt to ^0.62.0 (#13857)

    e386003

    squiggler-app[bot]

    chore(deps): update dependency @sanity/ui to ^3.5.1 (#13818)

    ed699ed

    squiggler-app[bot]

    chore(deps): update dependency @vanilla-extract/css to ^1.21.2 (#13854)

    41d79dd

    squiggler-app[bot]

    chore(deps): update dependency vite to ^8.2.0 (#13846)

    f88be20

    squiggler-app[bot]

    chore(deps): update dependency @vitejs/plugin-react to ^6.0.5 (#13840)

    204dc7d

    @pedrobonamin

    fix(structure): incoming references shouldn't self refer (#13851)

    367be3f

    @stipsan

    fix(structure): keep inspector crashes inside the inspector panel (#13845)

    cba5181

    @stipsan

    perf(sanity): defer non-controlled useObservable subscriptions (#13799)

    2958d75

    @stipsan

    chore(deps): bump react-rx to v5 and adopt useSyncObservable (#13814)

    d66f505

    @stipsan

    refactor(sanity): adopt useObservablePromise for data loading states (#13828)

    2d7be6a

    squiggler-app[bot]

    chore(tests): generate dts tests 🤖 ✨ (#13839)

    01339c4

    @codythatsme

    fix(types): preserve supplied schema helper properties (#13237)

    38002e4

    @stipsan

    chore(lint): migrate eslint-plugin-boundaries config to v7 (#13710)

    f8fa390

    @pedrobonamin

    fix(core): allow creating draft variants from published variant sibling (#13741)

    cf5a7da

    @pedrobonamin

    fix(core): update copying variants to different releases from context menu. (#13800)

    3086936

    @stipsan

    docs(agents): adopt useful patterns from plugins AGENTS.md (#13764)

    4794716

    @pedrobonamin

    chore(structure): useDocumentTitle, use document pane provider value (#13742)

    6f46b8d

    @joshuaellis

    feat(workbench): export AssetSource types from sanity/workbench (#13827)

    458ca4a

    @stipsan

    chore(oxlint): add typescript/no-deprecated rule (#13829)

    bd7b4b1

    claude[bot]

    fix(ci): wait for published packages to be installable before post-publish steps (#13823)

    5307277

    @stipsan

    refactor(sanity): replace useState useEffect observable subscriptions with useObservable (#13788)

    ae2fb78

    @laurenashpole

    chore(core): updates @sanity-labs/ui-poc to 0.0.1-alpha.25 (#13832)

    30ec805

    @pedrobonamin

    chore(core): versions context menu use documentGroupId and versionId (#13820)

    950c5a5

    Original source
  • Aug 3, 2026
    • Date parsed from source:
      Aug 3, 2026
    • First seen by Releasebot:
      Aug 10, 2026
    Sanity logo

    Sanity

    Presence now works in both directions

    Sanity adds app presence for Studio collaboration, with document- and field-level reporting, single-document reads, and seamless interoperability with Studio navbar and field indicators. Presence now survives disconnects and stale participants are cleaned up.

    Report presence from your app

    Until this release, an app could see other people in a document but never appeared to them, so a Studio user editing alongside your app saw nobody. Your app can now announce its own users, read presence for a single document rather than the whole dataset, and interoperate with the Studio's navbar and field indicators. Presence also survives network interruptions, and participants who disappear no longer linger.

    Both @sanity/sdk-core and @sanity/sdk-react are published at 2.19.0. There are no breaking changes: existing usePresence callers keep working, and they don't start announcing on upgrade.

    useReportPresence is the new write side. Reporting is opt-in per call site, so nothing announces unless you ask it to.

    import { useReportPresence } from '@sanity/sdk-react'
    // Document level: "I am in this document"
    useReportPresence({ documentId, documentType })
    // Field level: "I am in the title field"
    useReportPresence({ documentId, documentType, path: ['title']})
    

    path accepts keyed and numeric segments, so you can address array items and Portable Text spans. Pass selection to report a Portable Text caret. You can report carets today, but there's no hook yet for turning remote selections into rendered ones. That arrives with a Portable Text plugin built on this release.

    Read presence for a single document

    usePresenceForDocument returns only the participants in one document:

    const { presence } = usePresenceForDocument({ documentId, documentType })
    const inTitle = usePresenceForDocument({ documentId, documentType, path: ['title']})
    

    Each participant is {user, sessionId, documentId, path, lastActiveAt, selection?}.

    By default, a draft, its published document, and any release versions count as the same document, which is what a document list wants. Pass excludeVersions: true to compare ids exactly, which is what a field indicator wants.

    Studio interoperability

    Your app and the Studio share the same presence room and wire format, so both directions work without configuration. Your app's users appear in the Studio's navbar and field indicators, and Studio users appear in your app.

    Field-level interoperability depends on the perspective, because the Studio's field indicators compare the exact document id its form is on. Pass the plain document id and let the perspective decide, either from ResourceProvider or on the handle:

    // Reports the draft, which is what the Studio edits by default
    useReportPresence({ documentId, documentType })
    // Reports a release version
    useReportPresence({ documentId, documentType, perspective: { releaseName: 'autumn' }})
    

    Things to know

    • Presence is scoped to a project and dataset, not to your organization. It answers who else is in this Document, not who is online at your company.
    • Participants are counted by session. One person in two tabs appears twice, with two sessionId values and the same user.id. Group by user.id for one avatar per person.
    • lastActiveAt comes from the sender's clock, so use it for display only. Expiry is handled for you, and a skewed clock will report the wrong time.

    New exports

    • @sanity/sdk-react: useReportPresence, UseReportPresenceOptions, usePresenceForDocument, and UsePresenceForDocumentOptions.

    Notable bugfixes and improvements

    • Presence survives a dropped connection. Reconnects use exponential backoff, and the inbound subscription is rebuilt with the socket instead of leaving an empty participant list behind.
    • Participants who vanish are cleaned up. Sessions expire after 90 seconds without a heartbeat, and the local user disconnects explicitly on beforeunload and pagehide, which covers iOS Safari and the back/forward cache.
    Original source
  • Jul 30, 2026
    • Date parsed from source:
      Jul 30, 2026
    • First seen by Releasebot:
      Aug 10, 2026
    Sanity logo

    Sanity

    A new look for the Media Library asset grid

    Sanity improves the asset grid with cleaner previews, aligned titles, consistent card designs, and clearer hover, focus, and selection states. It also adds video scrubbing, better sidebar previews, transparent-image checkerboards, keyboard Escape handling, and a fix for blank screens during resize.

    The asset grid has a new look, with consistent previews and neatly aligned titles, and video thumbnails now show a progress bar as you scrub them. The sidebar preview also makes better use of its space, showing more of your asset without crowding the fields beneath it.

    Assets, folders, and collections now share the same card design, so they all look and behave consistently. Previews are a uniform size, titles line up neatly across each row, and the grid no longer shifts around while thumbnails load. Every format gets the same treatment, including Rive and Lottie animations, which display at their true aspect ratio. Cards now respond as you move around them: hovering highlights a card, keyboard focus marks it more strongly, and selection is clearer still.

    Long file names truncate in the middle so the end stays visible, and hovering a shortened title shows the full name. Full titles remain available to screen readers.

    You can see an asset's status at a glance: a dot marks drafts, a chip marks shortcuts, and avatars show who else is viewing the asset. Clicking any of these still selects the card, including with Shift and Cmd/Ctrl for multi-select.

    Transparent images sit on the same light checkerboard in both light and dark themes, so the transparent areas are easy to spot and your artwork looks the same whichever theme you use.

    Hovering a video thumbnail scrubs through the video, and a thin progress bar now shows where you are. The bar only appears while your cursor is over the preview itself.

    When you are navigating the grid with the keyboard, Escape now steps back one level at a time: first clearing your selection, then focus. Open dialogs, menus, and text inputs still respond to Escape first, so nothing closes unexpectedly.

    The sidebar preview now adapts to your window, so a smaller screen gets a smaller preview and more room for the fields beneath it. Wide and square assets display at a similar size.

    🐛 Notable bugfixes

    • Resizing your browser while previewing an asset no longer leaves you on a blank screen.
    Original source
  • Jul 30, 2026
    • Date parsed from source:
      Jul 30, 2026
    • First seen by Releasebot:
      Aug 10, 2026
    Sanity logo

    Sanity

    Structure Tool list virtualization fix and other bugfixes

    Sanity fixes key Studio bugs, improving Structure Tool list visibility, CLI authentication handling, release view rate limits, and WebSocket stability after asset downloads.

    This release prevents Structure Tool list items from being erroneously hidden after expanding a collapsed pane, improves CLI authentication handling, fixes release view rate-limit issues, and resolves WebSocket connection errors.

    🐛 Notable bugfixes and improvements

    • Fixes a bug in which Structure Tool list items would erroneously be hidden after expanding a collapsed list pane.
    • Fixes occasional rate-limit errors when opening large published or archived Content Releases in Studio by spacing history API requests the same way active releases already do.
    • Fixes a memory leak in Studio's RxJS↔React bridging by upgrading react-rx to 4.2.5.
    • Fixes an issue causing WebSocket is already in CLOSING or CLOSED state. error to occur after downloading an asset.
    Original source
  • Jul 30, 2026
    • Date parsed from source:
      Jul 30, 2026
    • First seen by Releasebot:
      Aug 10, 2026
    Sanity logo

    Sanity

    v6.8.0

    Sanity ships Studio v6.8.0 with broad improvements and bug fixes, including better variant handling, clearer core actions, performance tweaks, and updated telemetry and document workflows.

    Sanity Studio v6.8.0

    This release includes various improvements and bug fixes.

    For the complete changelog with all details, please visit:

    www.sanity.io/changelog/studio-Ni43LjA

    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

    Author

    Message

    Commit

    @pedrobonamin

    fix(core): enable clear button when perspective is the non default one (#13819)

    1938e37

    @pedrobonamin

    fix(core): copy to drafts using transaction, prepare for variants (#13815)

    f283b1e

    @pedrobonamin

    chore(structure): useCopyToDrafts changes (#13806)

    e65a38a

    squiggler-app[bot]

    chore(deps): update dependency @sanity/workbench to v0.1.0-alpha.36 (#13808)

    ebc1904

    squiggler-app[bot]

    fix(deps): update dependency @sanity/cli to ^7.15.1 (#13813)

    f57fff2

    squiggler-app[bot]

    chore(deps): update dependency @sentry/react to ^10.68.0 (#13812)

    391db94

    squiggler-app[bot]

    chore(deps): update dependency turbo to ^2.10.7 (#13809)

    b341cd1

    squiggler-app[bot]

    fix(deps): update dev-non-major (#13810)

    bd9cee7

    squiggler-app[bot]

    chore(deps): update dependency @sanity/ailf to ^7.33.0 (#13811)

    4c72095

    squiggler-app[bot]

    chore(deps): update dependency @sanity/vanilla-extract-vite-plugin to ^0.2.8 (#13807)

    733f618

    @stipsan

    chore(oxlint): allow side-effect css imports without suppressions (#13796)

    ef50a8f

    @stipsan

    fix(releases): throttle published archived history batches (#13805)

    afb3074

    @stipsan

    chore(deps): upgrade to typescript 7 (#13759)

    fe0cd99

    @stipsan

    fix(deps): bump react-rx to 4.2.5 (#13797)

    d820ba1

    @juice49

    fix(sanity): virtualised item dimensions in hidden CommandList (#13792)

    2052523

    squiggler-app[bot]

    chore(deps): dedupe pnpm-lock.yaml (#13766)

    015f924

    squiggler-app[bot]

    chore(tests): generate dts tests 🤖 ✨ (#13801)

    6ab5f7d

    @colepeters

    feat(sanity): install ui-poc for Studio, migrate 2 Boxes (#13776)

    e157f63

    @jordanl17

    chore(codeowners): assign presentation tool to studio team (#13769)

    cad24ea

    @pedrobonamin

    fix(structure): allow creating variant documents with no base doc (#13789)

    d1db5e9

    squiggler-app[bot]

    fix(deps): update dependency @sanity/cli to ^7.14.0 (#13777)

    8cb42ad

    @jordanl17

    docs(telemetry): define standard location, position and path property value sets (#13770)

    258e6b0

    @juice49

    chore(sanity): move Delay component to core (#13690)

    da8f541

    @juice49

    chore(sanity): return SingleActionResult from createVariantDocument (#13690)

    aec0ddf

    @juice49

    refactor(sanity): expand createVariantScopedDocument to explicitly handle baseId or document source (#13690)

    633dbd1

    @juice49

    chore(sanity): variant creation in document group inventory (#13690)

    c15ea83

    @jordanl17

    fix(test-config): pin locale to en-US for deterministic test runs (#13779)

    8dc3d96

    @jordanl17

    perf(presentation): cache container rect during panel resize drags (#13762)

    640cbb9

    @jordanl17

    perf(core): memoize document presence observable in useDocumentPresence (#13761)

    9479332

    @jordanl17

    refactor(structure): rename document pane telemetry events to active voice (#13774)

    8546b73

    @jordanl17

    perf(core): defer global search results rendering (#13554)

    6e51b5c

    @juice49

    fix(sanity): download asset in new browsing context (#13768)

    851b049

    sieve-sanity[bot]

    fix(sanity): set referrerPolicy on grid thumbnail in image select dialog (#13664) (#13665)

    3051e64

    @jordanl17

    feat(core): add telemetry events for scheduled drafts (#13689)

    6ae94fd

    @pedrobonamin

    fix(variants): wire ifPublishedVariantRevisionId on variant publish (#13765)

    d370b25

    Original source
  • Jul 29, 2026
    • Date parsed from source:
      Jul 29, 2026
    • First seen by Releasebot:
      Aug 10, 2026
    Sanity logo

    Sanity

    Define custom roles using a visual builder

    Sanity adds a visual builder for content resources in custom roles, automatically generating GROQ filters from deployed schemas and helping Enterprise users target document access with flexible conditions.

    This is a paid feature

    This feature is available on certain Enterprise plans. Talk to sales to learn more.

    Content Resources define the set of documents a custom role grants access to. Now when defining a content resource, a visual builder will autogenerate the necessary GROQ filter based on your deployed schema.

    The visual builder takes you through three steps:

    1. Set the name and description for this resource
    2. Select which document types to match
    3. Create filter conditions to match specific documents

    When creating a filter, each condition can compare the value of different document fields. Select User attribute —> document field to build a filter that dynamically matches documents based on the attributes of users who get assigned this role.

    Protip

    If you don’t see the document type you’re looking for (or you’re not given the option to select any document types), then you need to deploy your studio schema first.

    Related documentation

    Roles

    Original source
  • Jul 28, 2026
    • Date parsed from source:
      Jul 28, 2026
    • First seen by Releasebot:
      Aug 10, 2026
    Sanity logo

    Sanity

    Fixes for task creation in content releases, Portable Text annotation popovers, URI validation, and more

    Sanity fixes task creation in content releases, keeps document menus working with annotation editors open, improves custom URI validation, restores asset selectors for custom roles, and smooths release menus in narrow panes.

    This release fixes several key issues including task creation in content releases, document menu functionality when annotation editors are open, URI validation for custom schemes, asset selector access for custom roles, and menu layout problems in narrow panes.

    Notable bugfixes and improvements

    • Fixes an issue where Tasks could not be created or edited while a content release or a variant was selected in the studio. Creating a task in a release now links it with the release document, following the same behaviour as comments.
    • Fixes the document pane ellipsis menu (History, Duplicate, Inspect, Compare versions, etc.) closing itself when opened while a Portable Text annotation editor is on screen. The menu now stays open and its items work.
    • Rule.uri({ scheme }) now respects the custom scheme when combined with other rules in a validation array, so schemes such as mailto: and tel: are no longer wrongly rejected.
    • Fixes an error that prevented users on custom roles with attribute-based grants from loading the default image and file asset selector.
    • Fixes the "Copy version to" sub-menu inside the release version-chip context menu overlaying "Discard version" (and other parent menu items) when the document pane is narrow. The sub-menu now always opens side-to-side, never downwards.
    Original source
  • Jul 28, 2026
    • Date parsed from source:
      Jul 28, 2026
    • First seen by Releasebot:
      Aug 10, 2026
    Sanity logo

    Sanity

    Import Shopify Metafields Into Sanity

    Sanity adds Shopify metafield syncing to Sanity Connect, bringing product and collection custom data into synced documents as queryable store.metafields. It supports namespace-level import, deserialized values, and independent two-way metafield setup, with imported fields kept read-only in Sanity.

    Sanity Connect can now bring your Shopify metafields across to Sanity. Product and collection metafields arrive on the synced documents as a store.metafields array, so custom data you already keep in Shopify — care instructions, specifications, size charts, or an external ID for updating Shopify resources — is queryable in GROQ alongside the rest of the product.

    Each entry is keyed by namespace.key and carries the namespace, key, Shopify type, and value.

    Values are deserialized, so structured types come through as real arrays, objects, and numbers instead of JSON-encoded strings:

    {
      "store": {
        "metafields": [
          {
            "_key": "custom.care_instructions",
            "namespace": "custom",
            "key": "care_instructions",
            "type": "multi_line_text_field",
            "value": "Hand wash only"
          },
          {
            "_key": "specs.dimensions",
            "namespace": "specs",
            "key": "dimensions",
            "type": "dimension",
            "value": {
              "value": 24.5,
              "unit": "CENTIMETERS"
            }
          }
        ]
      }
    }
    

    You choose what comes across in the Metafields tab, at the namespace level. Selecting a namespace imports every metafield in it; clearing your selection turns import off. Changes apply to each document as it next syncs — run a Resync to apply them everywhere at once, whether you are adding metafields or removing them.

    The same tab also configures syncing Sanity content out to Shopify as metafields — the two directions are set up independently.

    Imported metafields are owned by Shopify and read-only in Sanity. Each sync overwrites them, and your Sanity-authored fields stay separate and untouched.

    Variant metafields and metaobjects are not included in the import yet.

    Original source
  • Jul 28, 2026
    • Date parsed from source:
      Jul 28, 2026
    • First seen by Releasebot:
      Aug 10, 2026
    Sanity logo

    Sanity

    v6.7.0

    Sanity ships Studio v6.7.0 with general improvements and bug fixes, including support for task variants and releases, better document group inventory controls, and fixes for form menus, validation, and variant creation.

    Sanity Studio v6.7.0

    This release includes various improvements and bug fixes.

    For the complete changelog with all details, please visit:

    www.sanity.io/changelog/studio-Ni42LjA

    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

    Author

    Message

    Commit

    squiggler-app[bot]

    chore(deps): update dependency @sanity/tsdown-config to ^0.21.2 (#13758)

    ce22ab9

    @stipsan

    chore(test-studio): add themer tool plugin (#13756)

    c60e30d

    @pedrobonamin

    fix(core): tasks now support variants and releases (#13731)

    6411830

    squiggler-app[bot]

    chore(deps): dedupe pnpm-lock.yaml (#13752)

    f2ba625

    squiggler-app[bot]

    chore(deps): update dependency vercel to v57 (#13751)

    0975daa

    @stipsan

    fix(deps): update playwright monorepo to v1.62.0 (#13757)

    5171fc7

    squiggler-app[bot]

    chore(deps): update dependency oxfmt to ^0.61.0 (#13749)

    56b2840

    squiggler-app[bot]

    chore(deps): update dependency es-toolkit to ^1.50.0 (#13748)

    d80c147

    squiggler-app[bot]

    chore(deps): update dependency @sanity/ailf to ^7.32.0 (#13747)

    ffa5b1d

    squiggler-app[bot]

    chore(deps): update dependency turbo to ^2.10.6 (#13746)

    39c8e51

    squiggler-app[bot]

    chore(deps): update dependency react-i18next to ^17.0.11 (#13735)

    2a02dcd

    squiggler-app[bot]

    chore(deps): update dependency @sanity/blueprints to ^0.23.1 (#13744)

    c363611

    squiggler-app[bot]

    chore(deps): update dependency color2k to ^2.0.4 (#13745)

    fe0ab94

    squiggler-app[bot]

    chore(deps): update dependency @vitejs/plugin-react to ^6.0.4 (#13734)

    f41dac3

    squiggler-app[bot]

    chore(deps): update dependency @sanity/workbench to v0.1.0-alpha.30 (#13733)

    17d9b30

    squiggler-app[bot]

    fix(deps): update dev-non-major (#13736)

    c96f8fc

    @stipsan

    refactor(sanity): debarrel the repo (#13737)

    a4d4cf6

    @juice49

    chore(sanity): add close icon to document group inventory (#13740)

    3d160da

    @juice49

    chore(sanity): dull tone of document group inventory text button (#13740)

    e5bc01c

    @juice49

    chore(sanity): switch document group inventory feedback button to use icon only (#13740)

    90981e4

    @juice49

    chore(sanity): add requestClose prop to DocumentGroupInventory (#13739)

    505724f

    @juice49

    chore(sanity): add "cancel" action to document group inventory (#13739)

    3219a04

    squiggler-app[bot]

    chore(deps): dedupe pnpm-lock.yaml (#13732)

    f932f9d

    squiggler-app[bot]

    chore(deps): update dependency @sanity/ui to ^3.5.0 (#13730)

    c48534d

    @jordanl17

    fix(form): keep menus open over PTE annotation popover (#13671)

    3bf01e6

    @jordanl17

    fix(validation): respect Rule.uri scheme in array validation (#13670)

    5500e82

    @jordanl17

    fix(core): remove stale hardcoded client api version pins (#13691)

    f4f059a

    @stipsan

    chore(deps): bump knip to 6.29.0 and remove unused type re-exports (#13728)

    f11b2d0

    squiggler-app[bot]

    chore(deps): dedupe pnpm-lock.yaml (#13729)

    e67b332

    squiggler-app[bot]

    chore(deps): dedupe pnpm-lock.yaml (#13727)

    07f05b6

    squiggler-app[bot]

    chore(deps): update pnpm to v11.17.0 (#13726)

    bae53fe

    squiggler-app[bot]

    chore(deps): update dependency sanity-plugin-internationalized-array to ^5.1.24 (#13724)

    4ff3c02

    squiggler-app[bot]

    chore(deps): update dependency @tanstack/react-virtual to ^3.14.8 (#13723)

    954fdc6

    squiggler-app[bot]

    chore(deps): update dependency @sanity/migrate to ^8.0.1 (#13722)

    dd4cd61

    squiggler-app[bot]

    chore(deps): update dependency @mux/mux-player-react to ^3.13.2 (#13721)

    1968724

    squiggler-app[bot]

    fix(deps): update typescript-tooling (#13720)

    6fc4977

    @pedrobonamin

    fix(structure): resolve base document for variant creation (#13711)

    dce5f27

    squiggler-app[bot]

    fix(deps): update dependency @sanity/client to ^7.25.0 (#13719)

    3ba0834

    squiggler-app[bot]

    chore(deps): dedupe pnpm-lock.yaml (#13712)

    f25c6da

    squiggler-app[bot]

    fix(deps): update dev-non-major (#13717)

    b42ed85

    squiggler-app[bot]

    fix(deps): update react monorepo to ^19.2.8 (#13718)

    eb158d8

    squiggler-app[bot]

    chore(deps): update dependency @sanity/visual-editing-csm to ^3.0.13 (#13715)

    7c90c14

    squiggler-app[bot]

    chore(deps): update dependency @sanity/ui to ^3.4.5 (#13714)

    e7fbad7

    squiggler-app[bot]

    fix(deps): update dependency @sanity/preview-url-secret to ^4.1.2 (#13716)

    95a1884

    squiggler-app[bot]

    fix(deps): update dependency @sanity/cli to ^7.13.0 (#13709)

    67f7a2d

    @binoy14

    chore: move sdk deps to devDeps (#13713)

    0e23b57

    squiggler-app[bot]

    fix(deps): update portabletext (#13708)

    0d58f8d

    squiggler-app[bot]

    chore(deps): update dependency oxfmt to ^0.60.0 (#13699)

    05974cd

    squiggler-app[bot]

    fix(deps): update dev-non-major (#13707)

    54328dc

    squiggler-app[bot]

    chore(deps): update dependency @sanity/vanilla-extract-vite-plugin to ^0.2.7 (#13695)

    a05ea20

    squiggler-app[bot]

    chore(deps): update dependency @sanity/logos to ^2.2.5 (#13694)

    cec3256

    squiggler-app[bot]

    chore(deps): update dependency @sanity/color to ^3.0.8 (#13692)

    7d24222

    squiggler-app[bot]

    chore(deps): dedupe pnpm-lock.yaml (#13706)

    7f455da

    @stipsan

    chore(types): migrate type checking from tsgo to oxlint (#13700)

    c33a0c0

    @pedrobonamin

    fix(core): disable schedule for publish actions while a variant is selected (#13704)

    865e527

    squiggler-app[bot]

    chore(deps): update dependency @tanstack/react-virtual to ^3.14.7 (#13696)

    e8c12f5

    squiggler-app[bot]

    chore(deps): dedupe pnpm-lock.yaml (#13702)

    1bbec9c

    squiggler-app[bot]

    chore(deps): update dependency @sanity/message-protocol to ^0.24.0 (#13697)

    647c5f5

    squiggler-app[bot]

    fix(deps): update dependency @portabletext/react to v7 (#13701)

    b1c5b3e

    squiggler-app[bot]

    chore(deps): update dependency @sanity/google-maps-input to ^6.1.9 (#13693)

    5568a04

    squiggler-app[bot]

    chore(deps): dedupe pnpm-lock.yaml (#13688)

    c8813c5

    squiggler-app[bot]

    fix(deps): update portabletext (#13687)

    efd9014

    squiggler-app[bot]

    fix(deps): update dev-non-major (#13686)

    cdc3753

    @jordanl17

    fix(release-notes): stop extraction at horizontal rule to exclude tool-appended content (#13672)

    24ffb11

    squiggler-app[bot]

    fix(deps): update dependency @sanity/preview-url-secret to ^4.1.1 (#13685)

    30caae1

    squiggler-app[bot]

    fix(deps): update dependency @sanity/icons to ^5.2.1 (#13684)

    ad2634f

    squiggler-app[bot]

    chore(deps): update dependency @sanity/visual-editing-csm to ^3.0.12 (#13683)

    b1e02a6

    squiggler-app[bot]

    chore(deps): update dependency @sanity/ui to ^3.4.3 (#13681)

    6ed9a41

    @stipsan

    chore(dev): enable unstable bundledDev and drop warmup workarounds (#13573)

    5366f76

    @stipsan

    chore(deps): upgrade web-vitals to v6 (#13682)

    ffdf253

    squiggler-app[bot]

    chore(deps): dedupe pnpm-lock.yaml (#13680)

    45aed77

    @stipsan

    refactor(test-studio): extract presentation preview into preview-iframe app (#13678)

    e590fc3

    squiggler-app[bot]

    fix(deps): update linters (#13660)

    669fc7d

    squiggler-app[bot]

    chore(deps): update dependency @sentry/react to ^10.67.0 (#13659)

    1c9a407

    squiggler-app[bot]

    chore(deps): update dependency oxlint-tsgolint to v7 (#13661)

    fe2793f

    squiggler-app[bot]

    fix(deps): update dependency groq-js to v2 (#13677)

    7ac6d86

    @stipsan

    chore(deps): update dependency path-to-regexp to v8 (#13588)

    5dda1f9

    @stipsan

    chore(build): migrate package builds from pkg-utils to tsdown (#13500)

    ee8fdb7

    @jordanl17

    fix(releases): keep copy-to sub-menu on the side at narrow widths (#13673)

    5487131

    @juice49

    chore(ailf): add require-field-validation ailf task (#13457)

    8f582ea

    @juice49

    chore(ailf): add add-slug-field ailf task (#13457)

    a86a0ee

    @juice49

    chore(ailf): add image-hotspot-alt-text ailf task (#13457)

    aa00baa

    @juice49

    chore(ailf): add conditional-field-visibility ailf task (#13457)

    257e7fd

    @juice49

    chore(ailf): add configure-list-preview ailf task (#13457)

    204a7c5

    @juice49

    chore(ailf): add add-sort-orders ailf task (#13457)

    6a1371d

    @juice49

    chore(ailf): add organize-fields-with-groups ailf task (#13457)

    f0ce84a

    @juice49

    chore(ailf): add add-reference-fields ailf task (#13457)

    77d9dfb

    @juice49

    chore(ailf): add set-initial-values ailf task (#13457)

    d0592d5

    @juice49

    chore(ailf): add create-singleton-settings ailf task (#13457)

    838bfaa

    @juice49

    chore(ailf): add restrict-portable-text ailf task (#13457)

    a96f6cd

    @juice49

    chore(ailf): add string-dropdown-options ailf task (#13457)

    c5a4770

    squiggler-app[bot]

    chore(deps): update renovatebot/github-action action to v46.1.19 (#13657)

    376f81d

    @christianhg

    test(core): pin validation markers and range decorations at container depth (#13628)

    90f00c5

    @pedrobonamin

    feat(variants): add priority field to variant definition dialogs (#13584)

    5f7206e

    @stipsan

    fix(test-studio): keep readable component names in profiling builds (#13674)

    dc25743

    @stipsan

    chore(deps): remove @sanity/styled-components override and restore styled-components (#13675)

    6ab06f5

    Original source
  • Jul 24, 2026
    • Date parsed from source:
      Jul 24, 2026
    • First seen by Releasebot:
      Aug 10, 2026
    Sanity logo

    Sanity

    Store original video files, refresh the PDF viewer, and unify copy URL behavior

    Sanity adds original video file storage, a rebuilt PDF viewer, and more consistent URL copy behavior across asset types. It also improves Media Library navigation and fixes thumbnail, filter, and Safari arrow-key bugs for a smoother asset workflow.

    This release adds storage of original video files, replaces the PDF preview with a new viewer, and brings consistent behavior to URL copy actions across all asset types.

    Original video files are now stored

    When you upload a video, the Media Library now keeps the raw original file alongside the streaming renditions. That means videos work like images and files: you can download the original from the asset menu, and copy a CDN URL that serves the file directly. Videos uploaded before this change don't have a stored original, so those options are disabled for them with a tooltip explaining why.

    A new PDF viewer

    PDF previews have been completely rebuilt using the same design system as the rest of the Media Library, rather than a themed third-party component, so the toolbar, search, and page list all look and behave like the app around them. Performance is improved too, the viewer ships a fraction of the JavaScript and pages render in a background thread so the app stays responsive with large documents. Everything you could do before is still here: search within the document, page thumbnails, zoom presets, fullscreen, text selection, and document info.

    Consistent disabled states for copy URL actions

    The context menu now handles unavailable URL options consistently. When you can't copy a URL, whether because an asset is private or a video has no original file, the menu item is disabled with a tooltip explaining why. Previously, some options would fail silently with an error toast, others showed tooltips, and some were hidden entirely. The behavior now matches how downloads already work: clear feedback about what's available and why.

    🐛 Notable bugfixes

    • Fixed arrow key navigation in the asset grid: pressing the down arrow could land diagonally instead of directly below at certain zoom levels, and in Safari arrow keys sometimes didn't respond after clicking an asset. Navigation now stays in-column and works whether you click or tab to focus.
    • Fixed video thumbnails shrinking by 1 pixel each time the preview area re-rendered, which could cause them to gradually disappear over time.
    • Fixed dimension and file size filters producing impossible queries when using "is not" or "are not" operators; these filters now correctly exclude assets matching the specified range.
    Original source
Releasebot

Curated by the Releasebot team

Releasebot is an aggregator of official release notes from hundreds of software vendors and thousands of sources.

Our editorial process involves the manual review and audit of release notes procured with the help of automated systems.