Skip to content
Learni
View all tutorials
CMS & Contenu

How to Get Started with Sanity CMS in 2026

Lire en français

Introduction

Sanity is a revolutionary headless CMS designed for modern developers. Unlike traditional CMS platforms like WordPress, which tie content management to frontend rendering, Sanity separates the backend (content storage) from the frontend (presentation). This lets you store structured data via GraphQL or GROQ APIs and fetch it into any app—React sites, mobile apps, or even IoT devices.

Why choose Sanity in 2026? As Jamstack architectures and statically generated sites (SSG/SSR) take over, Sanity shines with real-time collaboration, limitless scalability, and a customizable studio. Marketing teams edit rich content like images, videos, and documents without touching code, while developers create flexible schemas. This fully conceptual beginner tutorial takes you from basics to theoretical mastery—bookmark it as your go-to reference. Ready to revolutionize your content workflow?

Prerequisites

  • Basic web development knowledge (HTML/CSS/JS).
  • Familiarity with REST or GraphQL APIs (concepts only, no code needed).
  • A free account on sanity.io (unlimited for small projects).
  • Understanding of JSON as a structured data format.

What is Sanity? The Foundations

Think of Sanity as an intelligent Excel dashboard for rich content. At its core is the Sanity Studio, a customizable web admin interface where editors and developers collaborate.

Key concepts:

  • Projects: Isolated spaces for each app (like a workspace).
  • Datasets: Databases within a project (e.g., production/staging).
  • Documents: Content units (articles, products) with custom fields.

Analogy: Sanity is like Lego. You define blocks (schemas), assemble them into structures (documents), and query them via API. No rigid relational database—everything is schemaless by default but typed for safety.

Case study: A blog. A 'post' schema includes title (string), body (array of blocks), and author (reference). Scales effortlessly to 1M+ documents with zero downtime.

Sanity's Headless Architecture

Headless means no built-in rendering. Sanity provides:

  1. Global CDN backend: Real-time content with edge caching (99.99% uptime).
  2. Flexible APIs: REST, GraphQL, or GROQ (Sanity's ultra-fast query language).
  3. Studio: Customizable React interface (drag-and-drop, media previews).
Typical workflow:
  • Developers model schemas (JS objects defining types/fields).
  • Editors create documents in the Studio.
  • Frontend queries the API: *_where(slug == $slug)[0] in GROQ.
Advantages vs. Strapi/Directus:
FeatureSanityOthers
-------------------------
Real-timeYes (WebSockets)Limited
SchemasPortable (files)DB-focused
PricingFreemium & scalableOften paid early
Next steps: From static schemas to dynamic schemas (via plugins).

Data Modeling: Schemas and Documents

Schemas are the theoretical heart. A schema defines a document type:

  • Primitive fields: string, number, boolean, text (rich).
  • Object fields: {name: string, age: number}.
  • Arrays: array of blocks (for WYSIWYG editors).
  • References: Links to other documents (weak/strong).

Early best practices:
  • Use namespaces for organization (e.g., 'blog.post').
  • Built-in validation (required, maxLength).
  • Preview secrets for drafts vs. published.

Real-world example: 'product' schema:
  • Name (string).
  • Price (number).
  • Images (array of image).
  • Category (reference to 'category' schema).

Documents: Live instances. Lifecycle: Draft → Publish → Unpublish. Real-time means editors see changes instantly.

Queries and Consumption: GROQ Theory

GROQ (Graph-Relational Object Queries) is Sanity's star query language. Simpler than GraphQL, optimized for content.

Progressive syntax:

  1. Selection: [_type == "post"] (all posts).
  2. Filters: [_type == "post" && publishedAt < now()][0..5] (latest 5 published).
  3. Projections: [_type == "post"] {title, "slug": slug.current}.
  4. Joins: [_type == "post"] {..., "author": *[_type == "author" && _id == ^.author._ref][0]{name}}.

Analogy: SQL meets MongoDB. Handles billions of docs efficiently.

Variables: $mySlug for dynamic params. Integrate in Next.js with sanity.client. Cache with ISR for top performance.

Essential Best Practices

  • Model iteratively: Start simple, refine based on editor feedback.
  • Use portable schemas: Version them in Git for CI/CD deployments.
  • Secure access: Roles/members (admin/editor/viewer) + scoped API tokens.
  • Optimize queries: Avoid *[] on large datasets; paginate with [0...100].
  • Integrate Vision: Plugin for live previews in VSCode/Studio.

Common Mistakes to Avoid

  • Overly rigid schemas: Skip excessive required fields; prefer optionals + fallbacks.
  • Unindexed queries: Without GROQ indexes, performance tanks on large volumes (add via Studio).
  • Forgetting locales: For i18n, use string[] or pt::locale (not one doc per language).
  • Ignoring assets: Images/videos need hotspots/crops; leverage auto CDN optimization.

Next Steps

Master Sanity through practice:


Check out our Learni trainings on headless CMS for hands-on Next.js + Sanity workshops. Join the Sanity Discord community for live Q&A.