Faster dev server, Portable Text plugins, new Blueprints syntax, and more improvements
✨ Highlights
Faster dev server
Improves cold starts on sanity dev
by eliminating optimized dependencies changed. reloading cycles in vite
. We now use server.warmup
to ensure cold starts are much less cold and jarring. 🫡
Improved timezone UX for datetime
fields
Adds the ability to control the display of datetime
fields with regard to timezones. Use the new displayTimeZone
field option to specify the time zone used for displaying and interacting with the timestamp in Studio. Each user may personalize the time zone they see (this can be prevented by setting the allowTimeZoneSwitch
field option to false
).

It's now possible to deprecate Portable Text blocks
Custom Portable Text block objects may now be marked as deprecated. When a block is deprecated in the schema, its corresponding toolbar button will be inactive and display a tooltip with the provided deprecated.reason
.
defineArrayMember({
name: 'customBlock',
type: 'object',
deprecated: {
reason: 'This block type is deprecated and will be removed in the future.',
},
fields: [
// ...
],
})
Custom Portable Text plugins come to Studio
The Portable Text Editor's Behavior API is now compatible with Studio in a format that is familiar to creators of custom components. Create your own plugins, or add an existing one to your block content. Follow our guide for creating a new Portable Text Editor plugin to get started.
Blueprints now supports TS/JS configuration formats
When you initialize a new Blueprint with sanity blueprints init
, you're now able to select TypeScript or JavaScript—in addition to JSON—for the configuration format. You can update existing blueprint configurations to this format by adding the @sanity/blueprints
package and updating your configuration file.
import { defineBlueprint, defineDocumentFunction } from '@sanity/blueprints'
export default defineBlueprint({
resources: [
defineDocumentFunction({
name: 'Create Fancy Report',
src: 'functions/create-fancy-report',
memory: 2,
timeout: 360,
event: {
on: ['publish'],
filter: "_type == 'customer'",
projection: "totalSpend, lastOrderDate",
}
}),
],
})
Other features
- Bumps version of React to 19 for studios created using
sanity init
ornpm create sanity
. - Clicking to edit the visual editing overlay for slugs now focuses the slug input, rather than doing nothing. It's amazing what modern technology can do. 🤯
- When using Studio inside Dashboard, it's now possible to switch Studio workspaces again.
- If the first document action is custom, it will now be displayed as the primary document action when viewing document versions. Previously, it was only available by opening the document actions menu.
🐛 Notable bugfixes
- Fixes an issue that caused the history cleared event to show in between edit events.
- Fixes an issue that caused comments created in version documents to sometimes contain the title of the draft or published version in the notification email.
- Fixes a bug that caused React's maximum render depth to be exceeded if a custom component used lazy loading. In production builds, this was reported as minified React error
#185
. This caused the@sanity/color-input
plugin to crash when used inside a Portable Text annotation. - Fixes an issue that caused comments created in arrays of objects to sometimes not be displayed.
- Fixes an issue that caused restoration of deleted documents to restore the first revision, rather than the most recent revision prior to deletion.
- Fixes an issue that caused users of
next@canary
, orreact@canary
, to see agetAttribute is not a function
error when attempting to edit a link in a Portable Text input field. You shouldn't have to choose between being able to fully use Sanity Studio's Portable Text Editor, or fun new React versions and features, and you no longer have to! - Fixes incorrect filtering results in timezone modal.
- Fixes an issue where running
sanity init
in unattended mode or with--create-project
sometimes created a new organization. - Skips auto-update-prompts during
sanity build
andsanity deploy
for non-interactive sessions. - Restores the Continue anyway option to
sanity deploy
andsanity build
. - Sometimes a confusing
Duplicate instances of context "sanity/_singletons/context/media-library"
warning was logged to the console. It's confusing because it implies that the user did something wrong. This time it was us, not you. ❤
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.