How to add color serializer for color-list plugin in Next.js with Sanity?
The error you're seeing happens because you've added a color annotation to your Portable Text schema, but your Next.js frontend doesn't know how to render it. When you use the color-list plugin in your Studio, it stores color data in the Portable Text JSON, but you need to tell your frontend how to display that colored text.
Solution: Add a Custom Mark Serializer
You need to add a custom serializer for the color mark in your Next.js app where you're rendering the Portable Text content.
If you're using @portabletext/react (the modern approach):
import { PortableText } from '@portabletext/react'
const components = {
marks: {
color: ({ children, value }) => {
return <span style={{ color: value?.hex }}>{children}</span>
}
}
}
// Then use it in your component:
<PortableText value={yourContent} components={components} />If you're using the older @sanity/block-content-to-react:
import BlockContent from '@sanity/block-content-to-react'
const serializers = {
marks: {
color: ({ mark, children }) => {
return <span style={{ color: mark.hex }}>{children}</span>
}
}
}
// Then use it:
<BlockContent
blocks={yourContent}
serializers={serializers}
projectId="your-project-id"
dataset="your-dataset"
/>Understanding the Code
The color annotation in your schema stores color data (typically with a hex property). The serializer receives this data and wraps the text in a <span> with the appropriate color styling. The children prop contains the actual text that was marked with the color.
Additional Considerations
If you're using the color-list plugin specifically, check what properties it stores. Some color plugins might store the color as value.color or mark.color instead of hex. You can console.log the value or mark object to see the exact structure.
For more complex styling or if you need to support different color formats (RGB, HSL, etc.), you might need to adjust the serializer accordingly.
The Portable Text serializers guide provides more details on creating custom mark serializers for various use cases like this.
Show original thread1 reply
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.