Multiple S.list() groups in Sanity desk structure

8 replies
Last updated: Jan 28, 2026
Hi folks. I’m working on the desk structure and trying to figure out how to have more than one list with a title that contains groups if of document types. e.g. in this screenshot, I want to have another list like the “Site” one but with a different title. I can’t seem to get it working. It seems I can only use one
S.list(…)
in the structure?
AI Update

Based on the Structure Builder documentation, you actually can have multiple lists with titles and groups of document types! The key is understanding that you only have one root S.list(), but within that list, you can create multiple S.listItem() entries that each contain their own nested lists.

Here's how to structure it:

export const structure: StructureResolver = (S) =>
  S.list()
    .id('root')
    .title('Content')
    .items([
      // First section - "Site"
      S.listItem()
        .title('Site')
        .child(
          S.list()
            .title('Site Settings')
            .items([
              S.documentTypeListItem('siteSettings'),
              S.documentTypeListItem('navigation'),
              S.documentTypeListItem('footer'),
            ])
        ),
      
      // Divider (optional)
      S.divider(),
      
      // Second section - "Content"
      S.listItem()
        .title('Content')
        .child(
          S.list()
            .title('Content Types')
            .items([
              S.documentTypeListItem('page'),
              S.documentTypeListItem('post'),
              S.documentTypeListItem('author'),
            ])
        ),
      
      // Third section - "Media"
      S.listItem()
        .title('Media')
        .child(
          S.list()
            .title('Media Assets')
            .items([
              S.documentTypeListItem('gallery'),
              S.documentTypeListItem('video'),
            ])
        ),
    ])

The pattern is:

  1. One root S.list() at the top level
  2. Multiple S.listItem() entries within it (these become your titled sections)
  3. Each S.listItem() uses .child() to contain another S.list() with its own items

This creates a navigable structure where clicking on "Site", "Content", or "Media" in the root list takes you to a new list with that group's document types. According to the Structure Builder documentation, you can nest these infinitely deep if needed!

You can learn more about this in the Structure customization course.

Show original thread
8 replies

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.

Was this answer helpful?