Discussion on enabling deskStructure titles in other languages
The issue you're encountering is a common one - Sanity's Structure Builder requires that list item IDs must contain only alphanumeric characters (letters A-Z, a-z, numbers 0-9, and sometimes hyphens/underscores). This means Cyrillic characters, emojis, and other Unicode characters aren't allowed in the id field.
However, there's good news: you can absolutely use Cyrillic (or any other language) in the title field. The id and title are separate properties:
id: Must be alphanumeric (used internally for routing and identification)title: Can contain any characters including Cyrillic, Chinese, Arabic, emojis, etc. (this is what users see)
Here's how to properly structure your desk configuration:
S.listItem()
.id('events') // Must be alphanumeric
.title('События') // Can be Cyrillic!
.child(
S.documentTypeList('event')
.title('Все события')
)Or with documentTypeListItem:
S.documentTypeListItem('artist')
.id('artists') // Alphanumeric ID
.title('Артисты') // Cyrillic title - totally fine!The key is to always provide an explicit id() with alphanumeric characters, and then use title() for your localized display text. The Structure Builder uses the ID for internal navigation and routing (it appears in the URL), while the title is what appears in the Studio UI.
If you're getting errors, it's likely because either:
- You're trying to use Cyrillic characters in the
.id()method - You're only setting a title without an explicit ID, and Sanity is trying to auto-generate an ID from your Cyrillic title
Always set both explicitly, and you'll be able to use any language you want for your visible titles while keeping the technical IDs in alphanumeric format.
Sanity – Build the way you think, not the way your CMS thinks
Sanity is the developer-first content operating system that gives you complete control. Schema-as-code, GROQ queries, and real-time APIs mean no more workarounds or waiting for deployments. Free to start, scale as you grow.