Install or upgrade Sanity Studio
To initiate a new Sanity Studio project or upgrade an existing one, please refer to our comprehensive guide on Installing and Upgrading Sanity Studio.
If you are updating from a version earlier than 3.37.0, you should also check out this article to ensure your dependencies are up to date.
✨ Highlights
Presence cursors in the Portable Text Editor
Sanity Studio has always supported real-time collaboration, but you have yet to be able to see where others are working within the Portable Text Editor. By upgrading, you'll get a similar experience to Google Docs when editing block content.
This release also includes bug fixes for the Portable Text Editor:
- The Portable Text Editor will now remove the invisible Stega-encoded characters if you copy-paste from a preview using Visual Editing
- The cursor will not move out of viewpoint when deleting a character in PTE.
- Creating an annotation at the bottom of a PTE will no longer scroll you to the top.
- Fixes an issue where changing positions of items of an array within PTE would launch a cryptic error
Comments and Tasks are now out of beta
Comments and Tasks are now officially out of beta; hence, we have updated the configuration APIs. Both comments and tasks are enabled by default and for all document types.
Comments configuration migration
Configuration during beta:
// ./sanity.config.ts|js
export default defineConfig({
// ... rest of config
document: {
unstable_comments: {
enabled: false,
},
},
});
New configuration (remove unstable_
):
// ./sanity.config.ts|js
export default defineConfig({
// ... rest of config
document: {
- unstable_comments: {
+ comments: {
enabled: false,
},
},
});
Tasks configuration migration
Configuration during beta:
// ./sanity.config.ts|js
export default defineConfig({
// ... rest of config
unstable_tasks: { enabled: false },
})
New configuration (remove unstable_
):
// ./sanity.config.ts|js
export default defineConfig({
// ... rest of config
- unstable_tasks: { enabled: false },
+ tasks: { enabled: false },
})
Sanity TypeGen improvements
Thanks for all the feedback about Sanity TypeGen so far! This release ships several improvements and bug fixes:
- Sanity Typegen now supports
count
in GROQ projections - TypeGen code (
sanity.types.ts
) is now formatted when a project has a Prettier configuration - The TypeGen search path now includes
src
,app
, andsanity
folders by default - Various bug fixes for type generation
- Fixes an issue where
typegen
command would fail on relative imports - Fixes a bug where we could not extract or validate schema when the
sanity-plugin-mux-input
plugin was installed.
Do continue to give us feedback in #typescript in the community!
🐛 Notable bugfixes
- Fixes ambiguous aria-labels on some Status buttons
- Fixes issue with inline text comments that would include an inline object.
- Fixes toast message for document duplicate action
📓 Full changelog
Author | Message | Commit |
---|---|---|
ecospark[bot] | chore(deps): dedupe pnpm-lock.yaml (#6463) | a2faad2 |
renovate[bot] | chore(deps): update dependency @sanity/pkg-utils to v6.8.4 (#6460) | 34a1ae6 |
Sindre Gulseth | fix(cli): mock matchMedia window function (#6472) | ea715e8 |
Bjørge Næss | chore: add perf runner to workspace (#6427) | 9af065a |
Sindre Gulseth | fix(typegen): fixes a bug where we imported the wrong relative path (#6457) | e1bd1f0 |
renovate[bot] | chore(deps): update dependency @sanity/tsdoc to v1.0.39 (#6464) | f6af636 |
Sindre Gulseth | feat(typegen): also search for queries in app and sanity folders (#6475) | 03cbb12 |
Sindre Gulseth | chore: upgrade groq-js (#6474) | 68bb282 |
ecospark[bot] | chore(deps): dedupe pnpm-lock.yaml (#6476) | 076b2fc |
renovate[bot] | chore(deps): update dependency @sanity/visual-editing to v1.8.15 (#6465) | 2f7674c |
renovate[bot] | chore(lockfile): update dependency @sanity/react-loader to v1.9.14 (#6466) | 9887e7c |
renovate[bot] | chore(lockfile): update dependency date-fns-tz to v2.0.1 (#6467) | 14b4365 |
renovate[bot] | chore(lockfile): update dependency i18next to v23.11.2 (#6468) | 3fcfa42 |
renovate[bot] | chore(lockfile): update dependency zod to v3.23.4 (#6470) | bef170b |
renovate[bot] | chore(lockfile): update dependency next to v14.2.2 (#6469) | cb957a6 |
renovate[bot] | chore(lockfile): update dependency react-focus-lock to v2.12.1 (#6471) | 05a019a |
renovate[bot] | chore(deps): update dependency @sanity/pkg-utils to v6.8.6 (#6482) | c903cde |
renovate[bot] | chore(deps): update react monorepo (#6484) | 3c8a329 |
renovate[bot] | chore(deps): update dependency @sanity/tsdoc to v1.0.40 (#6483) | 0163210 |
renovate[bot] | fix(deps): update dependency @sanity/presentation to v1.12.8 (#6485) | 05aad5c |
renovate[bot] | chore(deps): update react monorepo to ^18.3.0 (#6490) | 144bb21 |
renovate[bot] | chore(lockfile): update dependency @types/react-is to v18.3.0 (#6491) | 2225589 |
Cody Olsen | chore: setup next test that embeds the test studio (#6487) | edefb66 |
Bjørge Næss | fix(test): remove hydrateroot warning test (#6494) | d50a0f1 |
ecospark[bot] | chore(deps): dedupe pnpm-lock.yaml (#6493) | c1f9071 |
Rostislav Melkumyan | feat: set print width to 40 (#6068) | 2e24fcd |
renovate[bot] | chore(deps): update dependency @sanity/pkg-utils to v6.8.7 (#6496) | 2b840ba |
renovate[bot] | chore(deps): update dependency turbo to ^1.13.3 (#6497) | fc80d2b |
renovate[bot] | chore(lockfile): update dependency @sanity/logos to v2.1.11 (#6498) | 69b3c64 |
renovate[bot] | chore(lockfile): update dependency @sanity/react-loader to v1.9.15 (#6499) | c8b1d5e |
renovate[bot] | chore(deps): update dependency @sanity/visual-editing to v1.8.16 (#6500) | 2dff2bd |
renovate[bot] | fix(deps): update dependency @sanity/presentation to v1.12.10 (#6501) | 06ef31d |
Herman Wikner | feat(core): implement presence cursors (#6081) | 1522806 |
renovate[bot] | fix(deps): Update react monorepo (#6502) | fa9d145 |
Espen Hovlandsdal | chore(lint): add certain unicorn eslint rules (#6352) | ba83971 |
Espen Hovlandsdal | test: increase timeout for cross-dataset reference test | afea9cf |
Espen Hovlandsdal | chore: fix incorrect path used in workshop story | 61daf0c |
ecospark[bot] | chore(deps): dedupe pnpm-lock.yaml (#6506) | 6486e34 |
RitaDias | fix(structure): uncaught error while swapping images in array in PTE (#6399) | c9bfc31 |
renovate[bot] | chore(deps): update dependency @types/react to v18.3.1 (#6507) | 311d722 |
Nina Andal Aarvik | fix(core): change scrollintoview block to be nearest (#6328) | 509757c |
Nina Andal Aarvik | fix(core): set scroll boundary to nearest (#6310) | 0dae0da |
RitaDias | fix(@sanity): issue where hidden unicode characters were bloating document in PTE (#6440) | ffa68ec |
Per-Kristian Nordnes | chore: add codeowners to block-tools | 479e71f |
ecospark[bot] | chore(deps): dedupe pnpm-lock.yaml (#6508) | ff26edd |
renovate[bot] | chore(deps): update dependency @sanity/pkg-utils to v6.8.8 (#6509) | 4bb667d |
cngonzalez | feat: use prefersLatestPublished parameter in DocumentPaneProvider (#6486) | 3da55ae |
cngonzalez | fix: prevent looping requests to keyvalue in recent searches (#6480) | 232385e |
Binoy Patel | feat(singletons): add a singleton package exports | 884fca1 |
Binoy Patel | feat(singletons): add eslint rule for boundaries | bfd9a30 |
Binoy Patel | refactor(core): move ConnectorContext to singletons | 3008a1c |
Binoy Patel | refactor(core): move PreviewCardContext to singletons | 30cc592 |
Binoy Patel | refactor(core): move scrollContext to singletons | 5ca1b00 |
Binoy Patel | refactor(core): move ZIndexContext to singletons | d1a1d40 |
Binoy Patel | refactor(core): move DiffContext to singletons | ef08d0a |
Binoy Patel | refactor(core): move DocumentChangeContext to singletons | 0509e58 |
Binoy Patel | refactor(core): move FormBuilderContext to singletons | 0f9cf43 |
Binoy Patel | refactor(core): move DocumentIdContext to singletons | 79343e4 |
Binoy Patel | refactor(core): move FormValueContext to singletons | 2b46b43 |
Binoy Patel | refactor(core): move GetFormValueContext to singletons | 3dc7e62 |
Binoy Patel | refactor(core): move HoveredFieldContext to singletons | dbedca6 |
Binoy Patel | refactor(core): move FieldActionsContext to singletons | c7374f7 |
Binoy Patel | refactor(core): move VirtualizerScrollInstanceContext to singletons | 372774e |
Binoy Patel | refactor(core): move SortableItemIdContext to singletons | ffea136 |
Binoy Patel | refactor(core): move PortableTextMarkersContext to singletons | ed8f318 |
Binoy Patel | refactor(core): move PortableTextMemberItemsContext to singletons | 6325629 |
Binoy Patel | refactor(core): move ReferenceItemRefContext to singletons | a25a30b |
Binoy Patel | refactor(core): move DocumentFieldActionsContext to singletons | 6f08a7d |
Binoy Patel | refactor(core): move FormCallbacksContext to singletons | 2518910 |
Binoy Patel | refactor(core): move PresenceContext to singletons | 6a02f80 |
Binoy Patel | refactor(core): move ReferenceInputOptionsContext to singletons | 19311e4 |
Binoy Patel | refactor(core): move ValidationContext to singletons | cab8131 |
Binoy Patel | refactor(core): move ReviewChangesContext to singletons | 79e4bfa |
Binoy Patel | refactor(core): move LocaleContext to singletons | d614474 |
Binoy Patel | refactor(core): move FormFieldPresenceContext to singletons | 16d87a1 |
Binoy Patel | refactor(core): move ResourceCacheContext to singletons | b64d789 |
Binoy Patel | refactor(core): move ColorSchemeValueContext to singletons | 23e50fb |
Binoy Patel | refactor(core): move ColorSchemeSetValueContext to singletons | 5db6f24 |
Binoy Patel | refactor(core): move SourceContext to singletons | 896ed1e |
Binoy Patel | refactor(core): move WorkspaceContext to singletons | 96e1bb7 |
Binoy Patel | refactor(core): move NavbarContext to singletons | 2601315 |
Binoy Patel | refactor(core): move ActiveWorkspaceMatcherContext to singletons | 2ac5f1b |
Binoy Patel | refactor(core): move AddonDatasetContext to singletons | b1e2f60 |
Binoy Patel | refactor(core): move FreeTrialContext to singletons | fd7dca3 |
Binoy Patel | refactor(core): move CalendarContext to singletons | 0f0d13f |
Binoy Patel | refactor(core): move SearchContext to singletons | b4a8f3b |
Binoy Patel | refactor(core): move RouterHistoryContext to singletons | dbf67a8 |
Binoy Patel | refactor(singletons): revert exporting free trial types on sanity | 198df70 |
Binoy Patel | refactor(core): move WorkspacesContext to singletons | 7e3775d |
Binoy Patel | refactor(core): move UserColorManagerContext to singletons | 548952e |
Binoy Patel | fix(singletons): fix build issues and move CalendarContext interface back | b3de008 |
Binoy Patel | refactor(router): move RouterContext to singletons | 56dd5be |
Binoy Patel | refactor(structure): move StructureToolContext to singletons | d385839 |
Binoy Patel | refactor(structure): move PaneContext to singletons | bef2ba2 |
Binoy Patel | refactor(structure): move DocumentPaneContext to singletons | 73cbcd1 |
Binoy Patel | fix(singletons): use relative path for StructureToolContextValue type | 30204c7 |
Binoy Patel | refactor(structure): move CommentInputContext to singletons | 6247093 |
Binoy Patel | refactor(structure): move CommentsAuthoringPathContext to singletons | 6555ffc |
Binoy Patel | refactor(structure): move CommentsContext to singletons | 94950b7 |
Binoy Patel | refactor(structure): move CommentsEnabledContext to singeltons | 8780274 |
Binoy Patel | refactor(structure): move comments contexts to singletons | fd327ee |
Binoy Patel | refactor(structure): move PaneLayoutContext to singletons | 569c0f9 |
Binoy Patel | refactor(structure): move PaneRouterContext to singletons | e765a47 |
Binoy Patel | fix(structure): expose PaneRouterContext from structure | ab835d9 |
Binoy Patel | refactor(tasks): move TasksEnabledContext to singletons | 453d260 |
Binoy Patel | refactor(tasks): move MentionUserContext to singletons | 924f5b0 |
Binoy Patel | refactor(tasks): move TasksNavigationContext to singletons | 2bb6668 |
Binoy Patel | refactor(tasks): move TasksContext to singletons | 9a8ed79 |
Binoy Patel | fix: build after pkg-utils@5 upgrade | c3b756b |
Binoy Patel | refactor(tasks): move TasksUpsellContext to singletons | b422fab |
Binoy Patel | chore(lint): only allow relative type imports in singeltons | 8e3dc30 |
Binoy Patel | chore(lint): update eslint to be specific about imports | 932f459 |
Binoy Patel | refactor(singletons): use relative type imports | a57e70c |
Binoy Patel | refactor(singletons): move core context to core folder | f62078c |
Binoy Patel | fix(core): export AddonDataSetContext from singletons | 970cf7d |
Binoy Patel | chore(core): remove AddonDatasetContext exports | f29d0dd |
Binoy Patel | fix(build): add missing legacy exports and types information | 2053b1f |
Binoy Patel | fix: fix linting and type errors after rebase | c093246 |
Binoy Patel | refactor(singletons): move tasks to core | bfcdc44 |
Binoy Patel | fix(router): expose RouterContext from sanity/router | 7eeda3b |
Binoy Patel | refactor(tasks): move isLastPane context to singletons | 968ae85 |
Binoy Patel | chore: add _singletons to tsconfig paths | 684bb8a |
Binoy Patel | refactor(schedule-publishing): move DocumentActionPropsContext to singletons | dab96b5 |
Binoy Patel | refactor(scheduled-publishing): move ScheduledPublishingEnabledContext to singletons | 00fc838 |
Binoy Patel | refactor(scheduled-publishing): move SchedulePublishUpsellContext to singletons | 2164666 |
Binoy Patel | refactor(scheduled-publishing): move SchedulesContext to singletons | d946d30 |
Binoy Patel | fix: next studio build | 52bcbda |
Binoy Patel | chore: add eslint rule for disabling createContext outside _singletons (#6349) | d79f363 |
Herman Wikner | fix(comments): inline comment creation issue in Safari (#6510) | 3b4a7e6 |
Herman Wikner | fix(core): skip reset presence selection on PTE blur (#6511) | f0c94f1 |
Pedro Bonamin | fix(scheduled-publishing): deprecated error toast shows multiple times (#6513) | 21d5b32 |
Sindre Gulseth | chore(typegen): track empty union type nodes generated (#6495) | 124be88 |
Espen Hovlandsdal | chore(deps): upgrade to react 18.3.1 (#6505) | 9e2cf15 |
ecospark[bot] | chore(deps): dedupe pnpm-lock.yaml (#6515) | cc106e4 |
jordanl17 | fix: statusButton requires provided aria-label (#6430) | 06c67fc |
renovate[bot] | chore(deps): update dependency @sanity/tsdoc to v1.0.41 (#6518) | 7876a0a |
renovate[bot] | chore(lockfile): update dependency @sanity/react-loader to v1.9.16 (#6519) | e618da3 |
RitaDias | chore(sanity): remove beta and unstable from comments and tasks (#6478) | f92ba3e |
renovate[bot] | chore(deps): update pnpm to v8.15.8 (#6526) | 0982673 |
renovate[bot] | chore(deps): update dependency @sanity/pkg-utils to v6.8.9 (#6525) | bc85a3d |
Nina Andal Aarvik | fix(structure): add string for duplicate event (#6523) | f51b157 |
renovate[bot] | chore(lockfile): update dependency @babel/preset-env to v7.24.5 (#6528) | dbb26b7 |
Per-Kristian Nordnes | fix(portable-text-editor): fix issue where decoration on inline object would cause freeze (#6531) | f03f6eb |
renovate[bot] | chore(deps): update dependency @sanity/tsdoc to v1.0.42 (#6529) | c893c77 |
Per-Kristian Nordnes | fix(portable-text-editor): fix issue where decoration would not target correctly (#6532) | 251d592 |