Installation and upgrading
To initiate a new Studio without installing the CLI globally:
npm create sanity@latest
To upgrade a v3 Studio, run this command in its folder:
npm install sanity@latest
✨ Highlights
🌍 Publish! Veröffentlichen! Publicar! 公開!: Sanity Studio UI Localization! 🌍
The Translate the studio UI #1603 issue has been one of our most popular feature requests on GitHub. Now we can finaly close it, because we have launched Studio UI localization.
What's New?
- Multilingual support: You can now configure the Sanity Studio user interface to use languages other than English. We're kicking off with many languages, including Spanish, French, Norwegian, German, Portuguese, Korean, Turkish, Icelandic, Thai, Vietnamese, Swedish, Finnish, Czech, Italian, Japanese, Chinese, and Polish. Don’t see your preferred language? It's easy to request additional language plugins!
- AI-Translated language plugins: These initial translations are generated by AI — we're inviting the community (that’s you!) to help us improve and maintain these translations for accuracy and cultural relevance. Interested? Read more about how to contribute over on GitHub.
First steps to a localized Studio
This is our first step towards a fully global studio. The support for localization will grow, starting with our official plugins. We appreciate your patience and contributions as we expand these capabilities!
Getting started:
- Choose your language: Visit github.com/sanity-io/locales to find the plugin for your desired language. If it's not listed, we’d love you to request it - we can do a first auto-translated pass, and you can help us review and improve the automated translations.
- Plugin setup:
- Ensure you are using Sanity version
3.22.0
or newer - Install the plugin for your desired language (
npm install @sanity/locale-nb-no
) - Import it (
import {nbNOLocale} from @sanity/locale-nb-no
- Add it to your studio's
plugins
array (plugins: [nbNOLocale()]
) - You’ll find full instructions on the locale plugin’s README!
- Ensure you are using Sanity version
- Documentation:
We're eager to hear from you and welcome any feedback. This is just the beginning, and your insights are invaluable in making Sanity Studio even better.
Introducing telemetry 📡
As a product company, we have to prioritize what to work on. Ideally, those decisions are based on a healthy amount of vision (how we think things could be better) and insight (how people use the product). We have had a good amount of the former but less of the latter.
With this release, we’re introducing telemetry data collection in the CLI and Studio. Participation is optional, and you can easily opt-out by running npx sanity telemetry disable
, setting the DO_NOT_TRACK=1
environment variable, or visiting Account Settings in Manage. For more details on what data is collected, how it’s being used, and how consent is handled, go to sanity.io/telemetry.
Other features
- Adds experimental support for using Bun as package manager when creating new Sanity projects (
bun create sanity
) - Adds ability to customize the suffix added to auto-generated GraphQL filter types (
Filter
by default), by configuringfilterSuffix
in the GraphQL configuration ofsanity.cli.ts
🐛 Notable bugfixes
- Fixes issue where annotation popover would open in the wrong location when selecting annotation text in the Portable Text editor
- Fixes removal of marks in the Portable Text editor not always cleaning up unused mark definitions
- Fixes issue where Portable Text editor would crash when attempting to use annotations on text over multiple blocks
- Fixes issue in which new empty text blocks were added when adding a non-text block in the Portable Text editor.
- Fixes an issue where selecting a custom API version in the Vision tool would sometimes crash
📓 Full changelog
Author | Message | Commit |
---|---|---|
Espen Hovlandsdal | chore(test-studio): add locale plugins | fe21e82 |
Nina Andal Aarvik | fix(core): add timestamps to all preview components (#5352) | 2083fd3 |
Nina Andal Aarvik | fix(core): simplify code for getting preview paths (#5360) | 423c1b4 |
Nina Andal Aarvik | fix(core): prevent annotation popover from jumping when opening (#5280) | 8c77a10 |
Binoy Patel | chore(e2e): add @sanity/test package (#5359) | 5acafe9 |
Pedro Bonamin | fix(pte): clear unused markdefs when removing annotations (#5254) | 41552c3 |
Pedro Bonamin | fix(pte): disable multiple blocks annotations (#5257) | 7452848 |
Pedro Bonamin | fix(pte): removes empty text block when inserting a new block in that position (#5271) | b6ef7dc |
Pedro Bonamin | fix(core): update getPreviewPaths function (#5362) | a70bf39 |
renovate[bot] | fix(deps): update dependency @sanity/presentation to v1.2.1 (#5364) | d0a43f6 |
Espen Hovlandsdal | docs(import): add missing allowFailingAssets option to readme
| 072fccd |
Pedro Bonamin | fix(pte): add transalation to disabled tooltip text (#5366) | da54a28 |
Pedro Bonamin | fix(pte): update removing annotations function (#5267) | d4e5409 |
Pedro Bonamin | feat(free-trial): adds free trial button, popover and modal. (#5345) | 16a8b58 |
Herman Wikner | refactor(core): desk renaming popover (#5369) | 5de2c6f |
Espen Hovlandsdal | chore(deps): upgrade jsdom dependency (#5327) | 05287be |
Rico Kahler | fix(i18n): fix incorrect menu items; localize default group titles (#5370) | bd87ffc |
Binoy Patel | feat(graphql): add support for customizing the filter suffix for graphql types (#5372) | 67dee78 |
Binoy Patel | fix(vision): fixes an issue where selection other would crash (#5377) | 87e5493 |
Espen Hovlandsdal | test(block-tools): update snapshots to account for i18n changes | bc1bdd8 |
Bjørge Næss | fix(cli): add (experimental) support for bun as package manager (#5356) | 0c6a32e |
Herman Wikner | feat(core): document layout (#5340) | adaae0e |
ecospark[bot] | chore(deps): dedupe yarn.lock (#5379) | a521871 |
Pedro Bonamin | fix(free-trial): add apiVersion stamp to free trial request (#5385) | 785d87c |
Bjørge Næss | feat(cli) add telemetry scaffolding (#5321) | 69dfe87 |
Espen Hovlandsdal | fix(i18n): add missing string for cancelling uploads (#5388) | 2a7aff1 |
Espen Hovlandsdal | feat(i18n): use last registered locale as default (#5381) | 30cbe31 |
Espen Hovlandsdal | chore(design-studio): fix incorrect type import | e164745 |
Espen Hovlandsdal | fix(i18n): give default root structure node an i18n title | 2b16afb |
Espen Hovlandsdal | fix(i18n): translate placeholder text for tags input | 3dae10b |
Espen Hovlandsdal | fix(i18n): translate structure tool loading pane | 7f517d2 |
Rune Botten | docs: update readme contribution info (#5365) | 9cd0cb2 |
Bjørge Næss | feat(cli): instrument cli with telemetry events (#5320) | 75e4555 |
Per-Kristian Nordnes | fix(portable-text-editor): return unless range count (#5391) | 5b3492b |
Espen Hovlandsdal | refactor(free-trial): fault tolerance, code conventions (#5387) | 8b03846 |
Bjørge Næss | feat(cli): add telemetry cli commands (#5322) | 02f4cf2 |
Bjørge Næss | feat(cli): add env var for logging telemetry events to file (#5347) | 44008f4 |
Per-Kristian Nordnes | refactor(portable-text-editor): remove obsolete code (#5393) | e4bc20d |
Bjørge Næss | fix(cli): improve telemetry exit flushing (#5392) | 53232c7 |
Espen Hovlandsdal | fix(i18n): correct "create new" button translation labels | 4790958 |