| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| README.md | 2026-09-29 | 12.7 kB | |
| v6.17.0 source code.tar.gz | 2026-09-29 | 7.7 MB | |
| v6.17.0 source code.zip | 2026-09-29 | 11.0 MB | |
| Totals: 3 Items | 18.6 MB | 1 | |
Sanity Studio v6.17.0
This release includes various improvements and bug fixes.
For the complete changelog with all details, please visit: www.sanity.io/changelog/studio-Ni4xNi4w
Install or upgrade Sanity Studio
To upgrade to this version, run:
:::bash
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/logos to ^2.2.6 (#15073) | [1ff510] |
| squiggler-app[bot] | chore(lint): fix linter issues 🤖 ✨ (#15094) | [6ab2ad] |
| cursor[bot] | test(config): cover flattenConfig plugin order and deprecation (#14776) | [c6c745] |
| squiggler-app[bot] | fix(deps): update sanity-sdk to ^3.6.0 (#15091) | [aac614] |
| cursor[bot] | test(store): cover listenQuery welcome refetch and error paths (#15008) | [21663c] |
| @stipsan | perf(form): create presence cursor components via a compiler-friendly factory (#15069) | [090696] |
| squiggler-app[bot] | fix(deps): update dev-non-major (#15076) | [c23a16] |
| squiggler-app[bot] | chore(deps): update dependency prettier to ^3.9.9 (#15084) | [d60808] |
| squiggler-app[bot] | chore(deps): update renovatebot/github-action action to v46.3.5 (#14870) | [4d4d6f] |
| squiggler-app[bot] | chore(deps): update dependency @sanity/vanilla-extract-vite-plugin to ^0.2.20 (#15075) | [9c6242] |
| squiggler-app[bot] | chore(deps): update dependency @sanity/color to ^3.0.9 (#15072) | [e2688f] |
| squiggler-app[bot] | chore(deps): update dependency @sanity/tsdown-config to ^0.28.2 (#15074) | [dfd10d] |
| @juice49 | feat(sanity): first-class singletons API (#12810) | [02890f] |
| @juice49 | feat(sanity): singleton document badge (#14443) | [c21d52] |
| @juice49 | test(ailf): add literacy tasks for the first-class singleton API (#15017) | [858860] |
| @juice49 | refactor(test-studio): migrate singleton examples to first-class singletons API (#14442) | [89aa94] |
| @laurenashpole | chore: stack migration final pass (#15032) | [b80155] |
| squiggler-app[bot] | chore(tests): generate dts tests 🤖 ✨ (#15065) | [6b7460] |
| @stipsan | chore(deps): upgrade vite to 8.3.1 and repin bundled dev rolldown to 1.2.9 (#15055) | [eb9aba] |
| @stipsan | ci(chromatic): gate pull request runs behind the trigger:chromatic label (#15062) | [0add91] |
| @bjoerge | ci(fuzz): add a single Fuzz Status job to require for merge (#15057) | [f43d04] |
| @stipsan | fix(structure): suppress deprecated selectedVariantName lint error in useListPaneCounts (#15061) | [30dcbd] |
| @stipsan | feat(core): add beta.reactActivityMode to keep recent tools mounted (#14901) | [f5821c] |
| @bjoerge | chore(radar): track total CSS weight + style tag CSS per scenario (#15049) | [668524] |
| @jordanl17 | feat(structure): add opt-in live document count badges to document type list items (#14163) | [23ee1d] |
| squiggler-app[bot] | chore(tests): generate dts tests 🤖 ✨ (#15050) | [9c26a6] |
| @stipsan | fix(studio): collapse navbar tools into the overflow menu when the studio is narrower than the viewport (#15030) | [adbe05] |
| @stipsan | fix(presentation): handle review feedback on the open preview link (#15020) | [a6f6a9] |
| @stipsan | chore(deps): enable trustPolicyExcludePrune (#14892) | [eef4e1] |
| squiggler-app[bot] | chore(deps): update dependency @uiw/react-codemirror to ^4.25.12 (#15045) | [b1b41a] |
| squiggler-app[bot] | chore(deps): dedupe pnpm-lock.yaml (#15044) | [af3ecc] |
| squiggler-app[bot] | fix(deps): update sanity-sdk to ^3.5.0 (#14891) | [a4c50e] |
| squiggler-app[bot] | chore(deps): update dependency oxlint-tsgolint to ^7.0.2003 (#14999) | [797f64] |
| squiggler-app[bot] | fix(deps): update portabletext (#14982) | [06b0b0] |
| squiggler-app[bot] | chore(deps): update dependency @sanity/ailf to ^7.38.1 (#14983) | [0af0a3] |
| squiggler-app[bot] | fix(deps): update dependency @sanity/cli to ^8.13.0 (#15012) | [d0bc97] |
| squiggler-app[bot] | fix(deps): update dependency get-it to ^9.6.0 (#15013) | [a3e153] |
| @laurenashpole | chore: container migration final pass (#15036) | [30f153] |
| squiggler-app[bot] | chore(deps): update dependency @sanity/themer to ^0.8.0 (#15043) | [485ae5] |
| squiggler-app[bot] | chore(deps): update dependency chromatic to ^18.9.5 (#14947) | [d2668e] |
| squiggler-app[bot] | chore(deps): update dependency @sanity/ui to ^4.2.6 (#15024) | [651dcd] |
| squiggler-app[bot] | fix(deps): update dependency motion to ^13.4.4 (#14977) | [be2e1a] |
| squiggler-app[bot] | chore(deps): update dependency sanity-plugin-internationalized-array to ^5.3.1 (#15041) | [b2a7e2] |
| squiggler-app[bot] | fix(deps): update dev-non-major (#15040) | [2adc86] |
| @stipsan | chore(deps): enable pnpm autoDedupe (#14930) | [661933] |
| @stipsan | fix(form): keep a grown portable text editor from scrolling to top on focus (#14954) | [56113a] |
| squiggler-app[bot] | chore(tests): generate dts tests 🤖 ✨ (#15028) | [7ab39a] |
| squiggler-app[bot] | chore(deps): dedupe pnpm-lock.yaml (#15027) | [532741] |
| @bjoerge | test(portable-text): add sync conformance fuzzer (#14981) | [d32d34] |
| squiggler-app[bot] | fix(deps): update dev-non-major (#15025) | [e80674] |
| squiggler-app[bot] | chore(deps): update dependency @sanity/media-library-types to ^1.7.1 (#14973) | [de1b3b] |
| @pedrobonamin | feat(core): render one variant menu per type and update variant creation form (#14884) | [45e733] |
| @stipsan | feat(core): add sanity/_dangerously_use_private_internals_that_do_not_follow_semver entry (additive) (#14837) | [d0e825] |
| @laurenashpole | chore: migrate container in core (#15006) | [85f52d] |
| @laurenashpole | chore: migrate stack in core components (#15004) | [fe56a8] |
| @laurenashpole | chore: migrate stack in dev (#15003) | [6c7ea7] |
| @stipsan | fix(presentation): enable preview mode when opening preview (#14936) | [8ef1e7] |
| @juice49 | refactor(sanity): add reusable structure node id validator (#15010) | [d85a6b] |
| squiggler-app[bot] | chore(deps): update dependency knip to ^6.38.0 (#14978) | [bd63ef] |
| @stipsan | chore: install sanity-tsdown-config agent skill (#14956) | [f66b1a] |
| squiggler-app[bot] | chore(tests): generate dts tests 🤖 ✨ (#15009) | [4138fe] |
| @stipsan | fix(core): let a container block config add portable text toolbar actions (#14961) | [4cebde] |
| @pedrobonamin | chore(core): add condition resolver for variants (#14857) | [f2a7cf] |
| @pedrobonamin | fix(core): treat empty variant conditions as an error (#14586) | [0c10e6] |
| @pedrobonamin | feat(core): configure variant conditions under types (#14883) | [b3e7ef] |
| @pedrobonamin | feat(core): read every selected variant from perspective (#14918) | [b15b55] |
| squiggler-app[bot] | chore(deps): update dependency @sanity/themer to ^0.5.0 (#15001) | [f5a99e] |
| @stipsan | chore(deps): enable catalogMode prefer (#14929) | [af20ef] |
| squiggler-app[bot] | chore(deps): dedupe pnpm-lock.yaml (#14971) | [25bdb5] |
| squiggler-app[bot] | chore(tests): generate dts tests 🤖 ✨ (#14998) | [becc23] |
| squiggler-app[bot] | fix(deps): update codemirror (#14976) | [abe61b] |
| squiggler-app[bot] | chore(deps): update dependency @sanity/ui to ^4.2.4 (#14974) | [ac6a8b] |
| @stipsan | fix(e2e): exit playwright webServer after the suite (#14988) | [3fbbb6] |
| @stipsan | fix(ui): prevent resizable layout props leaking to DOM (#14937) | [907d65] |
| squiggler-app[bot] | fix(deps): update dev-non-major (#14984) | [68e609] |
| @stipsan | fix(structure): remove the pane layout observer on unsubscribe (#14980) | [455bd4] |
| squiggler-app[bot] | chore(deps): update dependency ui5 to v5.0.0-alpha.11 (#14950) | [fcc68e] |
| @laurenashpole | chore: migrate stack in structure (#14943) | [88778c] |
| @stipsan | fix(structure): forward pane widths from the document type list input (#14968) | [632128] |
| squiggler-app[bot] | chore(deps): update dependency react-i18next to ^17.0.15 (#14948) | [9ff12d] |
| squiggler-app[bot] | chore(deps): update dependency @sentry/react to ^10.75.3 (#14920) | [4b21f1] |
| squiggler-app[bot] | fix(deps): update dependency get-it to ^9.5.8 (#14951) | [37abe7] |
| squiggler-app[bot] | chore(deps): update dependency react-rx to ^7.0.1 (#14949) | [17755c] |
| squiggler-app[bot] | fix(deps): update dependency @sanity/client to ^8.7.0 (#14953) | [ed409c] |
| squiggler-app[bot] | chore(deps): update dependency sanity-plugin-internationalized-array to ^5.3.1 (#14889) | [c82ed2] |
| squiggler-app[bot] | chore(deps): lock file maintenance (#14962) | [5c997f] |
| @rexxars | fix(schema): inline object-inspect parts (#14902) | [3efc39] |
| @webpro | fix(structure): keep pane widths when releasing a resize divider (#14964) | [c97d0e] |
| @webpro | feat(structure): support list pane widths (#14967) | [b12fb3] |
| @webpro | perf(structure): keep pane router context stable while resizing panes (#14966) | [3b92c5] |
| @stipsan | fix(core): move middleware Suspense fallbacks to the render sites (#14687) | [873794] |
| squiggler-app[bot] | chore(deps): update dependency @conventional-changelog/git-client to v3 (#14829) | [f2d489] |
| squiggler-app[bot] | chore(deps): update chromaui/action action to v18.9.5 (#14946) | [a08998] |
| @stipsan | docs(skills): point the sharded chromatic capture recipe at .vitest/blob (#14960) | [ad9864] |
| @stipsan | chore(deps): upgrade to vitest 5 (#14881) | [baf7aa] |
| @hermanwikner | fix(comments-v2): exclude pathless comments from field queries (#14860) | [9f3680] |
| squiggler-app[bot] | chore(deps): update actions/github-script action to v9 (#14828) | [5b704c] |
| squiggler-app[bot] | chore(deps): update pnpm to v12.6.0 (#14952) | [070a9b] |
| @stipsan | feat(test-studio): throw the style migrations widget between viewport corners (#14945) | [970237] |
| @laurenashpole | chore: migrate stack in core/perspective to core/variants (#14940) | [e7f74b] |
| squiggler-app[bot] | fix(deps): update dependency get-it to ^9.5.7 (#14921) | [455717] |
| @bjoerge | chore(radar): declarative INP steps with scroll and press kinds (#14924) | [700c3c] |
| @bjoerge | chore(radar): load scenarios for login, tool and editable milestones (#14931) | [c091e2] |
| @stipsan | refactor(comments): migrate comments v2 reactions, popovers and inspector header to vanilla-extract (#14909) | [59cbce] |
| @stipsan | refactor(core): migrate navbar search filter and result wrappers to vanilla-extract (#14910) | [322d17] |
| @stipsan | refactor(form): migrate asset input chrome and simple input wrappers to vanilla-extract (#14911) | [30d7b1] |
| @stipsan | refactor(form): migrate form field status, reference previews and small editor wrappers to vanilla-extract (#14912) | [c23856] |
| @stipsan | refactor(tasks): migrate task sidebar, list and activity wrappers to vanilla-extract (#14913) | [7ae880] |
| @stipsan | refactor(sanity): migrate presentation panels and release activity wrappers to vanilla-extract (#14914) | [eed01c] |
| cursor[bot] | test(field): cover path helper edge cases (#14777) | [69cb82] |
| cursor[bot] | test(form): cover patch application edge cases (#14772) | [096983] |
| @stipsan | refactor(structure): migrate dialog, diff view and pane content styles to vanilla-extract (#14908) | [b649f1] |
| cursor[bot] | test(config): cover config property reducer edge cases (#14789) | [ee7eee] |
| @jordanl17 | feat(telemetry): report portable text editor and app sdk versions (#14922) | [b69907] |
| @stipsan | fix(search): close vstack tags in SearchChromeStory (#14927) | [4e3733] |
| @jordanl17 | fix(releases): detect scheduled draft edits when deleting a schedule (#14787) | [a28d84] |
| @jordanl17 | feat(form): collapse long arrays behind a show all items toggle (#13870) | [83a9f8] |
| @stipsan | test(storybook): add chromatic sentinels for studio navbar drawer menus, search no-results and dev server stopped screen (#14900) | [e63936] |
| squiggler-app[bot] | fix(deps): update portabletext (#14890) | [b2f1c7] |
| @stipsan | refactor(sanity): migrate shared ui primitives and trivial styled wrappers to vanilla-extract (#14905) | [859b35] |
| @stipsan | refactor(field): migrate static field preview and diff wrapper styles to vanilla-extract (#14906) | [724b84] |
| @stipsan | refactor(structure): migrate document pane inspector and timeline styles to vanilla-extract (#14907) | [458ab0] |
| @pedrobonamin | fix(studio): show draft indicator for draft-only documents (#14859) | [581386] |
| @stipsan | ci(e2e): install chromium in every playwright shard when the browser cache misses (#14916) | [3e2f28] |
| @laurenashpole | chore: migrate stack in core/studio/components (#14898) | [cee91b] |
| @laurenashpole | chore: migrate stack in misc form directories (#14886) | [d8c86b] |
| @laurenashpole | chore: migrate stack in misc core/studio directories (#14896) | [90b3b6] |
| @laurenashpole | chore: migrate stack in form/inputs (#14744) | [e99e4c] |