Image schemas not appearing in Sanity Studio structure despite no errors
// schemas/index.js
console.log('Importing schemas...');import text1 from './text1';
import text2 from './text2';
import text3 from './text3';
import text4 from './text4';
import image1 from './image1';
import image2 from './image2';
import image3 from './image3';
console.log('Schemas imported:', [text1, text2, text3, text4, image1, image2, image3]);const schemaTypes = [text1, text2, text3, text4, image1, image2, image3];console.log('Exporting schemaTypes:', schemaTypes);export default schemaTypes;
import {defineConfig} from 'sanity'
import { structureTool } from 'sanity/structure'
import schemaTypes from './schemas/index'
console.log('Configuring Sanity Studio...');
console.log('Imported schemaTypes:', schemaTypes);
export default defineConfig({
title: "",
projectId: "xxxxxxx",
dataset: "xxxxxx",
plugins: [structureTool()],
schema: {
types: schemaTypes,
},
});
console.log('Sanity Studio configuration:', defineConfig);
// schemas/image.js
export default {
name: 'image1',
title: 'Image1',
type: 'image',
options: {
hotspot: true,
},
fields: [
{
name: 'caption',
type: 'string',
title: 'Caption',
},
{
name: 'attribution',
type: 'string',
title: 'Attribution',
}
]
}
I can see your issue! Your image schemas are configured correctly, but they won't show up in the Structure Tool's default navigation because image types are not document types - they're object types meant to be used as fields within documents.
The Structure Tool only displays document types in its main navigation. Since you defined your image schemas with type: 'image', they're treated as reusable image field definitions, not standalone documents.
Your current setup:
export default {
name: 'image1',
type: 'image', // This makes it an object/field type, not a document
// ...
}To make them appear in Studio, you have two options:
Option 1: Change them to document types (if you want standalone image documents):
export default {
name: 'image1',
title: 'Image1',
type: 'document', // Changed from 'image' to 'document'
fields: [
{
name: 'image',
type: 'image',
title: 'Image',
options: {
hotspot: true,
},
},
{
name: 'caption',
type: 'string',
title: 'Caption',
},
{
name: 'attribution',
type: 'string',
title: 'Attribution',
}
]
}Option 2: Use them as fields in your text documents (more common pattern):
// In your text1.js, text2.js, etc.
export default {
name: 'text1',
type: 'document',
fields: [
{
name: 'content',
type: 'string',
// ... other fields
},
{
name: 'featuredImage',
type: 'image1', // Reference your custom image type
title: 'Featured Image'
}
]
}Most likely, you want Option 1 - to make them actual document types that can be created and managed independently in Studio. Just change type: 'image' to type: 'document' and nest the actual image field inside.
The key concept: In Sanity, only schemas with type: 'document' appear in the Studio navigation. Everything else (type: 'image', type: 'object', etc.) are building blocks used within documents. You can learn more about this in the schema types documentation.
Show original thread2 replies
Was this answer helpful?
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.