Sanity is the Content Operating System for the AI era. Model your content as code, store it in a real-time API, and use it everywhere: websites, mobile apps, agentic applications, and the editorial workflows in between.
🚀 Get started • 📚 Documentation • 💬 Community • 🎓 Learn • 📦 Exchange
- Content Lake: Real-time database for structured content. Query with GROQ, or access it over HTTP from any language.
- Schema-as-code: Define content models in TypeScript, version control them, and get automatic type generation for queries and documents.
- Real-time and collaborative: Live queries, multiplayer editing, and instant previews are part of the platform.
- Studio + App SDK: A customizable React-based editorial environment, plus an SDK with hooks and stores for building custom content apps on top of Sanity.
- AI agents and content automation: The MCP server lets Claude, Cursor, and VS Code read and edit your content with full schema context. Agent Actions generate, transform, and translate content with LLMs. Canvas turns free-form drafts into structured documents.
- Functions: Serverless logic that runs on content changes. No infrastructure to maintain.
- Framework agnostic: Works with Next.js, Astro, Nuxt, React Router, SvelteKit, or any framework.
See code examples
// schemaTypes/articleType.ts
import { defineType, defineField } from "sanity";
export const articleType = defineType({
name: "article",
type: "document",
fields: [
defineField({
name: "title",
type: "string",
validation: (Rule) => [
Rule.required(),
Rule.max(80).warning(
"Titles over 80 characters may be truncated in search results"
),
],
}),
defineField({
name: "excerpt",
type: "text",
validation: (Rule) =>
Rule.custom((value, context) => {
// Cross-field validation
const isFeatured = context.document?.featured;
return isFeatured && !value
? "Featured articles need an excerpt"
: true;
}),
}),
],
});import { defineQuery } from "groq";
export const ARTICLES_QUERY = defineQuery(`*[_type == "article"] {
_id,
title,
"author": author->name,
"categories": categories[]->title,
"wordCount": length(pt::text(body))
}[0...10]`);GraphQL is also available if you prefer it.
npm create sanity@latestThis creates a Sanity project with Studio and connects you to the Content Lake. You'll get:
- A customizable content management interface
- Real-time APIs for your content
- Automatic TypeScript types
- Generous free tier with hosting and bandwidth included (no credit card required)
Pricing: Start free, pay-as-you-go for overages. View pricing →
Sanity powers content operations for teams at Spotify, Shopify, Figma, Unity, Linear, Anthropic, MoMA, Brex, Arc'teryx, Tecovas, and thousands more.
- 🔍 Contribute: Browse our open source repositories and help build the platform
- 💬 Connect: Join our community with thousands of developers
- 🎓 Learn: Free courses and guides to master Sanity
- 📝 Stay updated: Read our blog for releases and best practices
- 🔌 Extend: Browse plugins and starters on Sanity Exchange
- 💼 Join us: We're hiring engineers to build the future of content
- sanity: Core toolkit, Studio, and CLI
- sdk: App SDK for building custom content applications on top of Sanity
- next-sanity: Sanity toolkit for Next.js
- agent-toolkit: Building blocks for AI agents working with Sanity content
- visual-editing: Tools for live visual editing
- GROQ: Specification for the GROQ query language
- groq-js: JavaScript implementation of GROQ
- document-internationalization: Plugin for translating documents across languages
We welcome contributions to our open source projects. Check each repository's CONTRIBUTING.md for guidelines, or report bugs in the relevant issue tracker.
Built by developers, for developers. We treat content as a strategic asset and give technical teams the tools to work without constraints.