Sanity Release Notes
30 release notes curated from 22 sources by the Releasebot Team. Last updated: Aug 10, 2026
- Aug 6, 2026
- Date parsed from source:Aug 6, 2026
- First seen by Releasebot:Aug 10, 2026
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.
- Aug 6, 2026
- Date parsed from source:Aug 6, 2026
- First seen by Releasebot:Aug 10, 2026
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
All of your release notes in one feed
Join Releasebot and get updates from Sanity and hundreds of other software products.
- Aug 6, 2026
- Date parsed from source:Aug 6, 2026
- First seen by Releasebot:Aug 10, 2026
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@latestTo 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
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
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.
Similar to Sanity with recent updates:
- Smokeball release notes137 release notes · Latest Aug 4, 2026
- Cosmolex release notes20 release notes · Latest Jul 30, 2025
- PracticePanther release notes35 release notes · Latest Jul 7, 2026
- Salesforce release notes58 release notes · Latest Jul 1, 2026
- Microsoft release notes768 release notes · Latest Aug 5, 2026
- Zoom release notes205 release notes · Latest Jul 27, 2026
- Aug 4, 2026
- Date parsed from source:Aug 4, 2026
- First seen by Releasebot:Aug 10, 2026
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@latestTo 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
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.
- Jul 30, 2026
- Date parsed from source:Jul 30, 2026
- First seen by Releasebot:Aug 10, 2026
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.
- Jul 30, 2026
- Date parsed from source:Jul 30, 2026
- First seen by Releasebot:Aug 10, 2026
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.
- Jul 30, 2026
- Date parsed from source:Jul 30, 2026
- First seen by Releasebot:Aug 10, 2026
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@latestTo 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
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:
- Set the name and description for this resource
- Select which document types to match
- 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
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.
- Jul 28, 2026
- Date parsed from source:Jul 28, 2026
- First seen by Releasebot:Aug 10, 2026
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.metafieldsarray, 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.keyand 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
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@latestTo 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
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.
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.