Sanity Release Notes
72 release notes curated from 54 sources by the Releasebot Team. Last updated: Sep 12, 2026
- Sep 11, 2026
- Date parsed from source:Sep 11, 2026
- First seen by Releasebot:Sep 12, 2026
Fixes for content release reverts, validation, theming, and slug uniqueness
Sanity fixes content release reverting, form validation, theming, and slug uniqueness issues. The update improves restore behavior for complex releases, stops Safari spinner wobble, prevents a Studio crash from missing paths, and keeps theme colors aligned with Studio settings.
This release fixes a couple of issues with reverting a content release, form validation, theming consistency, and slug uniqueness checks.
Notable bugfixes and improvements
- Loading spinners in global search and document lists no longer wobble in Safari.
- Fixes reverting a Content Release with many documents, or documents with long or partly expired edit history, where some documents could be unpublished instead of restored. Reverting now restores every document to its pre-release revision, only unpublishes documents that did not exist before the release, and stops if any document's previous state cannot be determined (i.e. due to retention policies).
- Fixes validation for type aliases with option lists and date constraints. Ensures context-dependent validation and nested field rules receive the current document and field context.
- Fixes a crash that could occur in a custom input or plugin rendering FormField or FormFieldSet without a path prop, throwing "Path is not an array". Passing path is still required, but a missing one no longer crashes the Studio.
- Auto-updating Studios no longer let OS light/dark appearance override the Studio theme. Theme colors from @sanity/ui v5 light-dark() tokens stay tied to the Studio theme (via color-scheme), including when the OS is set to the opposite appearance.
- Fixes custom slug uniqueness checks being ignored on type aliases and inline fields.
- Sep 11, 2026
- Date parsed from source:Sep 11, 2026
- First seen by Releasebot:Sep 12, 2026
v6.13.2
Sanity releases Studio v6.13.2 with a round of improvements and bug fixes, including Safari spinner stability, better release revert handling, steadier validation, and form field gutter fixes.
Sanity Studio v6.13.2
This release includes various improvements and bug fixes.
For the complete changelog with all details, please visit:
www.sanity.io/changelog/studio-Ni4xMy4x
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
fix(studio): stabilize custom spinners in safari (#14702)
172b1a8
@bjoerge
fix(releases): resolve every document's revert target before reverting a release (#14715)
7ca649b
@shapirodaniel
fix(validation): keep inherited rules and runtime context consistent (#14703)
2cf1d4e
@bjoerge
fix(form): tolerate a missing path in the form field gutter (#14714)
5951f9b
squiggler-app[bot]
chore(deps): dedupe pnpm-lock.yaml (#14705)
a3410bb
@laurenashpole
chore: migrate grid in dev (#14688)
3094c74
@laurenashpole
chore: migrate flex in misc core/form (#14366)
c7df361
@stipsan
fix(deps): update dependency @sanity/cli to ^8.10.0 (#14707)
b23924d
@laurenashpole
chore: migrate grid in src (#14660)
942f58f
@laurenashpole
chore: migrate grid in core (#14592)
efb95c3
squiggler-app[bot]
fix(deps): update dev-non-major (#14698)
9222afc
squiggler-app[bot]
chore(deps): update dependency react-devtools-core to v8 (#14689)
f879827
@stipsan
fix(studio): preserve light-dark in auto-update bundle css (#14704)
299acbf
@shapirodaniel
fix(validation): honor custom slug uniqueness on type aliases (#14701)
97bae2a
squiggler-app[bot]
chore(deps): dedupe pnpm-lock.yaml (#14695)
24a0caa
squiggler-app[bot]
chore(deps): update dependency use-sync-external-store to ^1.7.0 (#14694)
2e457d2
squiggler-app[bot]
fix(deps): update dependency @sanity/icons to ^5.2.2 (#14697)
77313bb
squiggler-app[bot]
chore(deps): update dependency @sanity/ui to ^4.2.1 (#14696)
4abf97f
squiggler-app[bot]
chore(deps): update dependency @types/use-sync-external-store to ^1.7.0 (#14693)
69a83f9
squiggler-app[bot]
fix(deps): update dependency @sanity/mutate to ^0.18.2 (#14692)
8e1279f
squiggler-app[bot]
chore(deps): update dependency ui5 to v5.0.0-alpha.10 (#14691)
64f97f2
squiggler-app[bot]
chore(deps): update dependency @sanity/functions to ^1.7.2 (#14663)
310455d
squiggler-app[bot]
chore(deps): update renovatebot/github-action action to v46.2.6 (#14613)
01d2497
squiggler-app[bot]
chore(deps): update dependency sanity-plugin-internationalized-array to ^5.2.4 (#14604)
20ad5be
squiggler-app[bot]
chore(deps): update dependency i18next to ^26.4.2 (#14601)
972a62e
squiggler-app[bot]
chore(deps): update dependency @sanity/workbench to v0.1.0-alpha.48 (#14599)
f4ae0c6
squiggler-app[bot]
fix(deps): update react monorepo to ^19.3.0 (#14600)
5f48931
squiggler-app[bot]
chore(deps): update dependency pkg-pr-new to ^0.0.88 (#14603)
2433b9d
squiggler-app[bot]
chore(tests): generate dts tests 🤖 ✨ (#14679)
760af19
squiggler-app[bot]
chore(deps): update dependency npm-run-all2 to ^9.0.3 (#14602)
54095cc
@stipsan
fix(deps): update typescript-tooling and vite>rolldown to v1.2.8 (#14678)
ecc4fea
Original source All of your release notes in one feed
Join Releasebot and get updates from Sanity and hundreds of other software products.
- Sep 10, 2026
- Date parsed from source:Sep 10, 2026
- First seen by Releasebot:Sep 11, 2026
Schema handling and internal client improvements
Sanity fixes schema and document tools to handle deployed schemas, field reads, and docs backend timeouts more gracefully.
Fixes
- get_schema tool: Resolve the only deployed schema when workspaceName is omitted and no default workspace exists.
- Document reads: Allow reads of known document fields without first fetching a schema.
- search_docs and read_docs tools: Report documentation backend timeouts as temporary upstream issues worth retrying, instead of internal errors.
- Schema reads: Allow get_schema and document tools to read a deployed schema when its types can be parsed but the schema compiler rejects it.
- Sep 10, 2026
- Date parsed from source:Sep 10, 2026
- First seen by Releasebot:Sep 11, 2026
Signing key activity logs and smoother asset handling
Sanity adds Activity Log entries for signing key changes, improves folder-scoped asset deletion, and makes private image full-screen previews more reliable.
This release adds Activity Log entries for signing key changes, alongside improvements to folder-scoped asset deletion and full-screen previews for private images.
Signing key activity in the Activity Log
Media Library now records signing key creation and revocation in your organization’s Activity Log, including the person who initiated the change. This gives administrators a clear audit trail for keys used to generate authenticated asset URLs.
Notable bug fixes
- Deleting assets from folders now works smoothly for roles scoped to a root folder, and folder views refresh immediately to reflect the change.
- Private images now load reliably in full-screen preview, with clearer feedback if an image can’t be displayed.
- Sep 9, 2026
- Date parsed from source:Sep 9, 2026
- First seen by Releasebot:Sep 10, 2026
Fixes for documentation links, image fields, and schema deployment
Sanity fixes read_docs links, image tools, and schema deployment permissions.
Fixes
- read_docs tool: Fixed rejection of valid sanity.io documentation links, such as
sanity.io/changelog/...URLs. - generate_image and transform_image tools: Fixed "no writable, visible fields" errors when the targeted image field is itself named
asset, such ascover.asseton a custom object withassetandaltfields. - Schema deployment: Allow deployment with schema-only permissions while continuing to support Studio deployment permissions.
Similar to Sanity with recent updates:
- Smokeball release notes144 release notes · Latest Sep 4, 2026
- Cosmolex release notes20 release notes · Latest Jul 30, 2025
- PracticePanther release notes36 release notes · Latest Aug 11, 2026
- Salesforce release notes71 release notes · Latest Sep 1, 2026
- Microsoft release notes834 release notes · Latest Sep 11, 2026
- Zoom release notes210 release notes · Latest Aug 31, 2026
- Sep 9, 2026
- Date parsed from source:Sep 9, 2026
- First seen by Releasebot:Sep 10, 2026
Complete query results with a 64 KiB response limit
Sanity improves the query_documents tool with complete results up to 64 KiB and removes the separate limit parameter.
Improvements
- query_documents tool: Return complete query results up to a 64 KiB response limit. Larger responses return guidance to select fewer fields or paginate.
Removals
- query_documents tool: Removed the separate limit parameter. Use GROQ slices to limit results.
Related documentation
Sanity MCP server
Original source - Sep 9, 2026
- Date parsed from source:Sep 9, 2026
- First seen by Releasebot:Sep 9, 2026
v6.13.1
Sanity ships Studio v6.13.1 with improvements and bug fixes, including better document listener handling, smoother workspace menu rendering, reduced re-render fan-out, and dependency updates across the Studio stack.
Sanity Studio v6.13.1
This release includes various improvements and bug fixes.
For the complete changelog with all details, please visit:
www.sanity.io/changelog/studio-Ni4xMy4w
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
ci(bundle-stats): roll back to v1 to unbreak the job on every pr (#14676)
6270e12
@stipsan
fix(deps): update dependency @sanity/cli to ^8.9.1 (#14675)
5d97879
@stipsan
fix(deps): update portabletext (#14674)
289f65f
@bjoerge
fix: key client-capturing memo caches by credential (#14672)
02ff775
squiggler-app[bot]
chore(deps): dedupe pnpm-lock.yaml (#14658)
46a91f3
@bjoerge
fix(core): terminate document listener on 401 (#14680)
59c29f7
squiggler-app[bot]
fix(deps): update codemirror (#14605)
a991f45
@stipsan
fix(core): make styled-component style props transient so they do not leak to the dom (#14639)
1c51ca5
squiggler-app[bot]
fix(deps): update dependency motion to ^13.2.0 (#14610)
bae59a7
squiggler-app[bot]
chore(deps): update dependency oxfmt to ^0.67.0 (#14670)
ca8179e
squiggler-app[bot]
chore(deps): update dependency @sanity/id-utils to ^1.1.0 (#14669)
57a9032
squiggler-app[bot]
chore(deps): update dependency @sanity/ailf to ^7.37.0 (#14668)
8712a95
@stipsan
perf(structure): stop document action re-render fan-out on every keystroke (#14559)
c0b4699
squiggler-app[bot]
chore(deps): update dependency oxlint to ^1.82.0 (#14671)
2248b2d
squiggler-app[bot]
chore(deps): update dependency ui5 to v5.0.0-alpha.9 (#14666)
9dab0bc
squiggler-app[bot]
chore(deps): update dependency vite>rolldown to v1.2.7 (#14582)
5285f81
squiggler-app[bot]
chore(deps): update dependency @tanstack/react-virtual to ^3.14.11 (#14664)
24c03b7
squiggler-app[bot]
chore(deps): update dependency vitest-browser-react to ^2.3.0 (#14607)
26e0b71
squiggler-app[bot]
fix(deps): update dev-non-major (#14632)
72bd9e0
squiggler-app[bot]
fix(deps): update dependency get-it to ^9.5.4 (#14644)
9db2382
squiggler-app[bot]
chore(deps): update dependency oxc-transform-react to ^0.149.0 (#14659)
521af43
squiggler-app[bot]
fix(deps): update dependency @sanity/client to ^8.6.1 (#14647)
0cb729f
@stipsan
fix(core): render the workspace menu project name without a layout shift (#14560)
b992c0b
squiggler-app[bot]
chore(deps): update pnpm to v12 (#14657)
1e309b4
squiggler-app[bot]
chore(deps): update rexxars/bundle-stats action to v2 (#14584)
3fc237d
squiggler-app[bot]
chore(deps): update dependency @sanity/ui to ^4.2.0 (#14645)
234cb24
Original source - Sep 9, 2026
- Date parsed from source:Sep 9, 2026
- First seen by Releasebot:Sep 9, 2026
Improved session stability, accessibility, and Studio performance
Sanity fixes Studio session crashes, improves accessibility and performance, and removes redundant API requests. It also updates the bundled Sanity CLI dependency and resolves a sign-in issue that could log users out in multiple tabs.
This release fixes a session management issue that could cause an unexpected studio crash, improves accessibility in several components, and eliminates unnecessary API requests for better performance.
🐛 Notable bugfixes and improvements
- Updates the bundled Sanity CLI dependency to 8.9.1.
- Fixes an issue where signing in could immediately sign you out if multiple Studio tabs were open.
- Fixes an issue where an expired session could crash the Studio with an "EventSource connection failed" error.
- Fixes invalid DOM attributes (margins, ratio, open, isSelected, asset) from being rendered by a few internal styled components in the presence overlay, image tool input, file asset source list and the Details component. The file asset source list rows now report their real selection state through aria-selected.
- The workspace menu no longer shifts its header on first open. The studio also stops issuing a redundant /projects/ request each time the menu is first opened; the project name now comes from the request already made at boot.
- Sep 8, 2026
- Date parsed from source:Sep 8, 2026
- First seen by Releasebot:Sep 8, 2026
Portable TypeGen types, keepPanesOnCreate for Structure, and diagnostics upgrades
Sanity ships TypeGen query result types that work across every copy of @sanity/client, adds an opt-in keepPanesOnCreate option for the Structure tool, and expands Studio diagnostics with styled-components details. It also brings cancellation-aware headless validation and several Safari and UI fixes.
This release makes TypeGen query result types work across every copy of @sanity/client without workarounds, adds an opt-in keepPanesOnCreate option to the Structure tool, and reports styled-components details in Studio diagnostics. Headless validation gains cancellation and capability-aware results, and fixes land for Safari 17 cancellation errors, idle re-renders, and several UI quirks.
Keep panes when creating from a nested pane
The structure tool takes a new opt-in option, keepPanesOnCreate :
import { structureTool } from 'sanity/structure' export default defineConfig({ // ... plugins: [structureTool({structure, keepPanesOnCreate: true})], })With it enabled, creating a document from a pane's own "create" button keeps the navigation panes visible instead of replacing them with a single document editor. The new document opens as that pane's child, and the panes before it collapse when there is not enough room, the same behavior as opening an existing document from a list. This matters most for structures built as trees, where the pane path is the editor's only indication of where in the tree they are working.
It applies only to create actions offered by a pane that is currently open, matched on both the initial value template and its parameters. Deep links, reference links, and create actions for a type that no open pane offers are unaffected and still navigate to the matching location in the structure. The option defaults to off, so nothing changes unless you enable it.
Limitations: an edit intent that matches nothing in the structure still replaces the pane path; and with split panes open, panes that would otherwise close can remain in the path.
styled-components details in Studio diagnostics
The Studio diagnostics dialog (help menu → Diagnostics, and the copied JSON report) gains a styled-components card when styled-components is on the page: the versions in use, the number of
<style data-styled>sheets with a caution badge when there is more than one (a plugin shipping its own copy), and the number of CSS rules those sheets hold. The Studio card also reports whether the studio is auto-updating. In the JSON these appear asstyles.styledComponents(one{ruleCount, version}entry per sheet) andstudio.autoUpdates.TypeGen: query result types work across every copy of @sanity/client
sanity typegen generatenow registers each query's result type on a globalSanityQueriesinterface instead of augmenting the@sanity/clientmodule. The tail of the generated file changes from// Query TypeMap import "@sanity/client"; declare module "@sanity/client" { interface SanityQueries { '*[_type == "post"]': PostsQueryResult; } }to
// Query TypeMap declare global { interface SanityQueries { '*[_type == "post"]': PostsQueryResult; } } // Lets @sanity/client releases that predate the global registry read it too declare module "@sanity/client" { interface SanityQueries extends globalThis.SanityQueries {} }The global registry does not depend on module resolution, so typed
client.fetch(query)results from@sanity/client, and typedsanityFetch({query})results fromnext-sanity'sdefineLive, no longer require the generated file to resolve the exact same@sanity/client.d.tsas the rest of your code. In practice this means:- Monorepos and strict pnpm layouts: you no longer need
@sanity/clientas a direct dependency of the package that holds the generated types file, and you no longer needpnpm.overrides, Yarn resolutions, or npm overrides to force a single@sanity/clientcopy just to get typed fetches. next-sanity: the@sanity/clientcopy thatnext-sanitynests under itself reads the same registry as your app's copy, sosanityFetchis typed without workarounds. Shims like thesanity.next-sanity.d.tsfrom the Next.js personal website template (declare module 'next-sanity' { interface SanityQueries extends ClientSanityQueries {} }) can be deleted.@sanity/client/stega:ClientReturnStegaand stega-enabledclient.fetchcalls pick up the generated types as well, including on the 7.x line.
How to get it: upgrade
sanityand runsanity typegen generateagain. Nothing changes insanity-typegen.jsonor in how you call the command. To benefit across multiple client copies, make sure each installed@sanity/clientis 8.5.0+ or 7.27.0+ (for examplepnpm update -r @sanity/clientornpm update @sanity/client); a fresh lockfile picks these up automatically since they are in-range for^8and^7.26.Compatibility:
- Existing generated files that use the old
declare module '@sanity/client'form keep working unchanged. - Older
@sanity/clientreleases (6.21.0 and up) still work through the bridge line, but only for the one copy the generated file resolves, exactly as before. - This is about the types of query results. Passing a client instance created by one
@sanity/clientcopy into an API typed against another copy (for example handing a root@sanity/clientinstance todefineLivewhilenext-sanitynests its own client) is still aSanityClientclass mismatch; create that client withcreateClientfromnext-sanityinstead, as the official templates do. - The generated file no longer begins with a side-effect import
"@sanity/client". If@sanity/clientcannot be resolved from the generated file at all, a.tsoutput now reports TS2664 on the bridge line (previously TS2307 on the import undernoUncheckedSideEffectImports); pointing generates at a.d.tspath avoids the error, since TypeScript skips ambient augmentations of unresolvable modules, and the global registry still types the installed client. - The generated file still has to be part of your TypeScript program (covered by
includeintsconfig.json), as before.
Headless validation: cancellation and capability-aware results
Headless and workspace validation now accept
signal. Aborting rejects withsignal.reason(orAbortError) and cancels pending validation and network work.The headless
@sanity/validation.validateDocument()returns{status, markers, skipped}and accepts an optional client pluscustomValidation. Use{client: undefined, customValidation: false}for guaranteed no-network structural validation. ThevalidateDocumentexport from thesanitypackage is unchanged.🐛 Notable bugfixes and improvements
- Fixes document validation and other concurrency-limited client fetches failing on Safari 17.0–17.3 with
TypeError: AbortSignal.any is not a function. Cancellation now works on those Safari releases and continues to use the browser's nativeAbortSignal.anyeverywhere else. - Sanity Studio no longer re-renders parts of the UI while idle. Presence heartbeats from other collaborators and the periodic cross-dataset reference check previously caused continuous re-renders in every open studio tab, and typing in documents with advanced version control enabled recomputed divergence navigation state on every keystroke. No API changes.
- The Draft perspective chip in the document header now stays orange when the document is published and has no draft. Previously the badge inherited the published (green) color.
- Portable Text annotation edit popovers that contain a reference field now use the same ~640px width as the PTE column, and the reference search results list can show several documents at once instead of a single cramped row.
- Fixes a bug that could cause the "This reference has changed since you opened it." banner to flicker erroneously, especially when the client's connection is slow.
- Sep 8, 2026
- Date parsed from source:Sep 8, 2026
- First seen by Releasebot:Sep 8, 2026
v6.13.0
Sanity ships Studio v6.13.0 with a broad mix of improvements, bug fixes, and platform upgrades. Highlights include stronger variants and validation support, better diagnostics, smoother performance, and refinements across comments, structure, and testing.
Sanity Studio v6.13.0
This release includes various improvements and bug fixes.
For the complete changelog with all details, please visit:
www.sanity.io/changelog/studio-Ni4xMi4w
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
@juice49
chore: Revert "chore(core): add condition resolver for variants (#14500) (#14654)
46c80dc
squiggler-app[bot]
chore(deps): update dependency @chromatic-com/vitest to ^1.0.1 (#14536)
8ccfb7f
@bjoerge
fix(radar): make drift detection noise-aware (#14648)
dfa6bb2
@stipsan
fix(util): use get-it/any-signal so cancellation works on Safari 17 (#14641)
c7feba7
@pedrobonamin
fix(core): keep draft chip avatar orange when no draft exists (#14598)
c337ea3
@bjoerge
chore(radar): remove the one-off document id migration (#14640)
d949dab
@bjoerge
chore(radar): remove dots from doc ids, add skills (#14636)
c38b811
squiggler-app[bot]
chore(deps): dedupe pnpm-lock.yaml (#14635)
3db6359
squiggler-app[bot]
chore(deps): update dependency @sanity/ui to ^4.1.1 (#14638)
812a6cb
squiggler-app[bot]
chore(deps): update dependency @sanity/vanilla-extract-vite-plugin to ^0.2.18 (#14633)
f9c4b91
@jordanl17
fix(form): constrain pte annotation reference picker width and results height (#14362)
9f65aa6
squiggler-app[bot]
chore(deps): update dependency @sanity/ui to ^4.1.0 (#14634)
b25d8ba
squiggler-app[bot]
chore(deps): dedupe pnpm-lock.yaml (#14525)
e9705c2
@juice49
fix(sanity): false-positive appearance of ReferenceChangedBanner (#14518)
cf59363
@stipsan
fix(test-studio): count styled ui v5 components as both systems (#14629)
f4cf57a
@stipsan
chore(test): stop measuring vitest import durations (#14596)
8bdfc52
@stipsan
fix(test-studio): shorten style panel labels and use green and red ui colors (#14615)
11d2b0a
@pedrobonamin
feat(variants): gate definition delete on permission and explain server refusals (#14528)
5aa89fa
squiggler-app[bot]
fix(deps): update playwright monorepo to v1.63.0 (#14611)
6f941c3
@stipsan
chore(agents): add sanity-ui-migration-progress skill (#14542)
c0d99c0
squiggler-app[bot]
fix(deps): update dev-non-major (#14583)
e36a279
@pedrobonamin
chore(core): add condition resolver for variants (#14500)
d88516e
squiggler-app[bot]
fix(deps): update portabletext (#14573)
6830b9d
@bjoerge
chore(bench): settle mode and studio customization scenarios (#14438)
1b5e786
@stipsan
feat(diagnostics): report styled components css size (#14591)
9eaa196
@stipsan
feat(test-studio): split style migration metrics (#14590)
068f07f
@mikael-karlsson-weapp
feat(structure): keep panes when creating from a nested pane (#14580)
3f7137a
@juice49
refactor(sanity): move target scope selector to reusable React hook (#14578)
d87b459
@stipsan
feat(core): report styled-components sheets and auto-updates in studio diagnostics (#14562)
4d79e33
@stipsan
test(storybook): drop browser-test story re-exports and inline the shared harnesses (#14571)
b29dbc7
@bjoerge
refactor(bench): build historical studios from packed tarballs (#14513)
58ec8a6
@stipsan
fix(storybook): align storybook core to 10.6 with addon-vitest (#14577)
1da9535
squiggler-app[bot]
fix(deps): update dev-non-major (#14554)
5569634
squiggler-app[bot]
chore(deps): update dependency oxlint to ^1.81.0 (#14535)
37aaf28
squiggler-app[bot]
fix(deps): update dependency @sanity/client to ^8.5.0 (#14541)
0df8eb0
@laurenashpole
chore: migrate flex in misc structure directories (#14506)
3d34bed
squiggler-app[bot]
chore(tests): generate dts tests 🤖 ✨ (#14569)
66f8dae
@stipsan
chore(test-studio): make style outline panel opt-in (#14568)
6f66fcc
@stipsan
feat(test-studio): add style outline debug panel (#14563)
926de3c
@stipsan
fix(e2e): capture the studio request error dialog on failed attempts (#14558)
9c01a9d
squiggler-app[bot]
fix(deps): update sanity-sdk to ^3.1.0 (#14564)
0be9f4d
@rexxars
ci(renovate): group sdk dependencies (#14555)
d47c6a4
@stipsan
fix(e2e): write flake report outputs relative to the invoking directory (#14561)
e314e71
@stipsan
test(storybook): add ui5 flex sentinels for form input chrome (#14551)
5eb54b6
@stipsan
test(e2e): capture studio diagnostics on failed attempts and report flake causes (#14453)
28ff09f
@laurenashpole
chore: migrate flex in core/form/inputs (#14364)
52467e2
@laurenashpole
chore: ui migrations in core/comments (#14459)
37ed133
@pedrobonamin
test(e2e): harden reference publish gate and search results waits (#14529)
5670635
squiggler-app[bot]
chore(deps): update dependency oxfmt to ^0.66.0 (#14534)
f441e30
squiggler-app[bot]
chore(deps): update dependency knip to ^6.34.0 (#14533)
921ad99
@stipsan
fix(deps): pin rolldown under vite to 1.2.5 so bundled dev mode loads again (#14547)
2bb7574
squiggler-app[bot]
fix(deps): update dev-non-major (#14532)
88b9f1c
squiggler-app[bot]
chore(deps): update dependency @testing-library/user-event to ^14.6.7 (#14530)
a12c5a4
@stipsan
perf(sanity): fix idle and typing re-renders found via react devtools profiling (#14495)
a0e2c6b
@stipsan
feat(typegen): register query result types on a global SanityQueries interface (#14537)
b042601
cursor[bot]
test(storybook): add ui5 sentinels for comments-v2 dialogs and timeline (#14544)
39b2ff4
cursor[bot]
test(storybook): add ui5 box and flex sentinels for previews and banners (#14315)
6ecdfb1
cursor[bot]
test(storybook): add ui5 box sentinels for canvas and schedules (#14215)
2a5f5af
squiggler-app[bot]
chore(deps): update dependency @types/node to ^24.13.3 (#14531)
1837514
cursor[bot]
test(storybook): add ui5 sentinels for inspector search and detail (#14511)
18ea7e1
cursor[bot]
test(storybook): add ui5 sentinels for navbar auth and trial (#14484)
13f5380
cursor[bot]
test(storybook): add ui5 sentinels for alerts screens and request errors (#14448)
a807e74
cursor[bot]
test(storybook): add ui5 sentinels for upsell errors and empty states (#14433)
9a9d4de
cursor[bot]
test(storybook): add ui5 sentinels for cors schedules files and diffs (#14377)
1d25898
cursor[bot]
test(storybook): add ui5 box sentinels for studio screens and search (#14349)
8a4bfdf
cursor[bot]
test(storybook): add ui5 box sentinels for field diffs and releases (#14062)
cd17b00
cursor[bot]
test(storybook): add ui5 box sentinels for structure and tasks (#14056)
977fb58
@stipsan
feat(storybook): add visual coverage checker and skill (#14538)
4286a96
@pedrobonamin
test(e2e): decouple array file drop test from asset upload latency (#14517)
1793ee5
squiggler-app[bot]
fix(deps): update portabletext (#14526)
8c00bc0
@pedrobonamin
chore(comments-v2): migrate layout and text primitives to ui5 (#14527)
424de38
@rexxars
fix(deps): replace debug with obug (#14521)
9712c5f
squiggler-app[bot]
chore(deps): update dependency @sanity/visual-editing-csm to ^3.0.18 (#14510)
b452411
squiggler-app[bot]
chore(deps): update dependency react-rx to ^6.0.1 (#14522)
8919822
squiggler-app[bot]
chore(deps): update pnpm to v11.25.0 (#14499)
07eacd8
@pedrobonamin
chore(core): events store extract functions for tests (#14330)
e5cc92e
@pedrobonamin
fix(core): enforce uniqueness validation in variant definition dialogs (#14515)
505dba7
@jonahsnider
feat(validation): add cancellation support (#14307)
b528986
@jonahsnider
feat(validation): add capability-aware results (#14306)
7de17c2
@stipsan
perf(core): consolidate equality checks on dequal/lite and domain comparators (#14501)
fccc674
@laurenashpole
refactor: migrate flex in structure/panes (#14505)
9620989
@rubioz
feat(access-ui): surface SAML enforcement before the request form (#14357)
7d6d93b
@pedrobonamin
chore(core): adds support for live edit variants (#14394)
d888918
squiggler-app[bot]
chore(deps): update dependency zod to ^4.5.4 (#14498)
dfe48e2
@pedrobonamin
ci(e2e): add agent-friendly failure report (#14217)
404951e
@hermanwikner
feat(comments): add opt-in comments API plugin (#14451)
22811af
squiggler-app[bot]
chore(deps): update dependency es-toolkit to ^1.52.0 (#14497)
849c54b
squiggler-app[bot]
chore(deps): update chromaui/action action to v18.7.2 (#14502)
4530455
@pedrobonamin
chore(core): add variants support to CopyDocumentActions (#14421)
2c03ff5
@pedrobonamin
chore(core): adds siblings to useTargetDocumentState (#14393)
c968ee4
Original source - Sep 3, 2026
- Date parsed from source:Sep 3, 2026
- First seen by Releasebot:Sep 4, 2026
Improvements and fixes in documents, dataset, and identity tools
Sanity improves its AI and document tools with better account and ID validation, stronger timeout handling, clearer schema guidance, and fixes for content releases, search results, and patching array items and Portable Text annotations.
Improvements
- whoami tool: Include the active Sanity account in responses.
- query_documents tool: Removed an unused parameter.
- get_document tool: Validate provided document IDs.
- query_documents tool: Gracefully handle Content Lake query timeouts.
- Schema overviews: Improved guidance for retrieving exact field definitions.
- create_dataset tool: Validate provided dataset names.
Fixes
- Content Releases: Ensure document changes are saved to the intended release.
- search_docs tool: Fixed an error when no results were returned.
- patch_documents tool:
- Corrected the examples for targeting a single array item so they use valid JSON and no longer create selectors that match nothing.
- Documented that adding a Portable Text annotation requires updating both markDefs and the target span’s marks in the same request.
- Sep 3, 2026
- Date parsed from source:Sep 3, 2026
- First seen by Releasebot:Sep 3, 2026
Insights moves to the Context app, and the Studio plugin is deprecated
Sanity 2.0 brings Context fully into the Sanity Dashboard, moving Insights and new setup configuration to the Context app while keeping existing Studio documents editable during migration. It adds unified conversation storage, new classification handling, and simpler telemetry sharing options.
@sanity/context 2.0
completes the move to the Context app in the Sanity Dashboard: Insights and configuration for new setups now live there. Existing Sanity Context documents remain editable in Studio, and conversations you've already recorded have been migrated to your organization's Context store.
The plugin still registers the Sanity Context document type, so existing MCP context documents remain editable in Studio—now with a notice pointing at the migration guide. New setups create an MCP endpoint in the Context app instead. The plugin also works with both @sanity/ui v3 and v4, and no longer requires @sanity/icons, styled-components, @sanity/color, react-rx, or rxjs as peer dependencies.
Conversations are stored in your organization's Context store through client.context, and the Insights dashboard has moved from Studio to the Context app. Classification runs on your side with your own AI SDK model. classifyConversations handles fetching, batching, and error handling in one call. A new sharing option on the telemetry integration lets you opt in to sharing metrics or full transcripts with Sanity to help improve Context.
Breaking changes
- Requires @sanity/client ^8.4.0 as a peer dependency, which comes with sanity 6.12 or later.
- sanityInsightsIntegration now takes an organization-scoped client (context: {organizationId}) and tags conversations with metadata.mcpEndpoints instead of agentId.
- saveConversation and generateConversationId are removed — save transcripts with client.context.conversations.save.
- The conversation document type is no longer registered in Studio; conversations live in the Context store.
Migrating takes a few minutes: re-create your MCP configuration as an endpoint in the Context app, then point your agent at the new URL with an organization-level API token. The migration guide has the step-by-step instructions.
Original source - Sep 2, 2026
- Date parsed from source:Sep 2, 2026
- First seen by Releasebot:Sep 2, 2026
SAML attributes now become lists when your identity provider sends more than one value
Sanity improves SAML attribute handling by turning multi-value claims into lists instead of failing on type conflicts. It also warns admins to update Content Resource filters that compare user attributes to exact values so access rules keep working.
SAML does not have a way to say that a claim holds exactly one value. Every claim arrives as a list of values. Sanity looks at how many values it receives and infers the type of the attribute: one value becomes a single value, and two or more values become a list.
This means that a single-value attribute is a temporary state. It shows that no member has signed in with two values for that claim yet. It does not show that the claim can only hold one value.
Before this change, a member who signed in with two values for a claim got a type conflict, and the attribute did not update. Now Sanity changes the attribute to a list, and keeps the values of all other members. The change applies to the whole organization, because the attribute is shared by all of its members. The change to a list is permanent for that attribute. A later sign-in with one value does not change the attribute back to a single value.
What you must do
Look at your Content Resource filters that use
user::attributes(). If a filter compares a SAML attribute to an exact value, change it to test for list membership. Use this form:// Fragile: fails after the attribute becomes a list. user::attributes().department == "Engineering" // Recommended: works for a single value and for a list. "Engineering" in coalesce( user::attributes().department [], [user::attributes().department] )A filter that grants access can start to deny access if you do not update it. The values of your members do not change: only the shape of the values changes.
Original source - Sep 2, 2026
- Date parsed from source:Sep 2, 2026
- First seen by Releasebot:Sep 2, 2026
Dataset-aware asset usage and smoother video previews
Sanity adds dataset visibility to asset usage and smoother video previews, making it easier to track where assets live and scrub video from the first frame. It also fixes asset sync across datasets and lets delete toasts be dismissed.
This release brings dataset visibility to asset usage and smoother video previews.
Dataset column in asset usage
The usage table — both the "In use" dialog and the usage locations shown when you confirm a delete — now includes a Dataset column, so you can see which dataset each referencing document lives in without opening it. Two workspaces can point at the same asset from different datasets, and now you can tell them apart at a glance.
Video previews start on the first frame
Video thumbnails now rest on the first frame of the video instead of a frame from somewhere in the middle. Hovering to scrub picks up exactly where the thumbnail left off and runs to the last frame, so the preview reads as a natural progression rather than jumping backwards and forwards. The scrub position also applies immediately as your pointer enters a preview, instead of waiting for the next mouse move.
🐛 Notable bugfixes
- Syncing a new asset version across its usages only patched one location when a document with the same ID existed in two datasets of the same project. The sidebar then reported everything as up to date while the other dataset still referenced the old version. Each project and dataset combination is now treated as a distinct usage, so every location gets patched.
- Toasts shown when deleting assets can now be dismissed. Previously they had no close button, so deleting several assets in a row stacked up notifications that blocked the interface for five seconds each.
- Sep 1, 2026
- Date parsed from source:Sep 1, 2026
- First seen by Releasebot:Sep 5, 2026
Review your security posture in one place
Sanity adds a read-only Security tab in Manage for project and org views, surfacing access risks and review links.
Security-relevant settings for a project live across several pages in Manage. A new Security tab collects them into one view, available at both project and organization level.
The Security tab shows:
- Members and how many hold admin access
- Long-lived API tokens with no expiration set
- CORS configuration, including origins worth reviewing
- Which datasets are publicly readable
- SAML status, on plans that include it
Each recommendation links to the page where you can act on it. The tab is read-only and free for all users, with no configuration required.
Original source
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.