LabHub

Blog

Headless CMS in 2026 — Sanity / Contentful / Strapi 5 / Payload (Figma acquisition) / Directus / Keystatic / Storyblok Deep Dive

한국어English日本語

Prologue — "Where Should the Content Live?"

A marketing PM said this in 2026.

"We are rebuilding on Next.js. Who owns the content model? Marketers must be able to change text and images themselves, multilingual must work, we want to assemble pages with a builder, and ideally developers can still write in MDX."

That is the ordinary request in 2026. "Just install a CMS" is no longer the answer. You have to find your team's spot on a five-axis matrix: editor UX, data model, API shape, deployment model, price, and lock-in.

This piece lays the whole headless CMS market on one page as of May 2026, with the strengths, weaknesses, and the last twelve months of changes for each one. Strapi 5's Document Service (Sept 2024), the open-source community controversy around Payload's acquisition by Figma (Sept 2024), the current state of Hygraph (formerly GraphCMS) — let's stop postponing the decision and sort it out.


1. The 2026 Headless CMS Map — Four Tribes

First we cut the whole market into four tribes. A CMS can straddle two tribes, but we classify by primary operating model.

TribeDefinitionExamples
SaaS hostedVendor hosts, only API is exposed, monthly subscriptionSanity, Contentful, Storyblok, Hygraph, Prismic, Dato, ButterCMS, Cosmic, Hashnode, microCMS, Newt
Open source self-hostDeployed on your own servers, you run the DBStrapi 5, Payload, Directus, KeystoneJS, Ghost, WordPress, Statamic
Git-basedContent committed to a Git repo, processed at build timeKeystatic, Outstatic, decap CMS (formerly Netlify CMS), Contentlayer/MDX
Visual / page builderMarketers drag-and-drop the page itselfBuilder.io, Storyblok (visual side), Webflow, Notion

This taxonomy matters because editor UX, operational responsibility, and lock-in differ by tribe.

A summary on axes:

AxisSaaSOpen sourceGit-basedVisual
Marketer UXTopAverageLowTop
Developer freedomAverageHighVery highLow
Lock-in riskLargeSmallNear zeroLarge
Operational burdenNoneLargeNear zeroNone
PricingUsage-basedInfra costNear freeUsage-based

Now we go tribe by tribe.


2. Sanity — The Real-Time Standard

Sanity started in Norway in 2017, and in 2026 it is increasingly the favorite SaaS among developers.

Core traits

// schemaTypes/post.ts — Sanity Studio schema
import { defineField, defineType } from 'sanity'

export const post = defineType({
  name: 'post',
  type: 'document',
  fields: [
    defineField({ name: 'title', type: 'string', validation: (r) => r.required() }),
    defineField({ name: 'slug', type: 'slug', options: { source: 'title' } }),
    defineField({ name: 'body', type: 'array', of: [{ type: 'block' }] }),
    defineField({
      name: 'author',
      type: 'reference',
      to: [{ type: 'author' }],
    }),
  ],
})

A GROQ query looks like this.

// Fetch a post list from Next.js
import { createClient } from '@sanity/client'

const client = createClient({
  projectId: 'abc',
  dataset: 'production',
  apiVersion: '2026-05-16',
  useCdn: true,
})

const posts = await client.fetch(`
  *[_type == "post" && defined(slug.current)]
  | order(publishedAt desc)[0...10]{
    title, "slug": slug.current, publishedAt,
    author->{name, avatar}
  }
`)

What changed in 2026

Strengths and weaknesses

StrengthsWeaknesses
Real-time collaborative UXGROQ learning curve
Schema-as-code (Git tracked)So much freedom that initial structuring takes time
Built-in image CDN and transformsPrice ramps fast with usage
Powerful referencingYou write migrations yourself

Who should pick it


3. Contentful — The Enterprise Default

Contentful started in Berlin in 2013, and in 2026 it is still the default enterprise headless CMS. It almost always appears on RFPs from large companies.

Core traits

// Contentful GraphQL query
const query = `
  query {
    postCollection(limit: 10, order: publishDate_DESC) {
      items {
        title
        slug
        publishDate
        author { name }
      }
    }
  }
`

const res = await fetch(
  `https://graphql.contentful.com/content/v1/spaces/${process.env.CONTENTFUL_SPACE_ID}/environments/master`,
  {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      Authorization: `Bearer ${process.env.CONTENTFUL_TOKEN}`,
    },
    body: JSON.stringify({ query }),
  },
)

Strengths and weaknesses

StrengthsWeaknesses
Enterprise SLA, SOC 2, HIPAAPrice ramps very fast
Mature locales and environmentsFree tier is narrow with a steep step up
GraphQL, REST, CDN all stableSchema is not code (UI-defined)
Rich workflow and approvalsUX is conservative among SaaS competitors

Who should pick it


4. Strapi 5 (Sept 2024) — Plugins v5 + Document Service

Strapi is a French-origin open-source headless CMS. Node/TS-based, MIT-licensed. Strapi 5 GA shipped in September 2024, and in 2026 the default entry point is v5.

Key changes in v5

// Strapi 5 Document Service API example (inside a custom route)
const documents = await strapi.documents('api::article.article').findMany({
  filters: { publishedAt: { $notNull: true } },
  sort: { publishedAt: 'desc' },
  populate: ['author'],
  status: 'published',
  locale: 'en',
})

// Explicit handling of drafts vs published is the v5 distinction
const draft = await strapi.documents('api::article.article').findOne({
  documentId: 'abc123',
  status: 'draft',
})

Strengths and weaknesses

StrengthsWeaknesses
MIT, self-hostableYou own operations (DB, images, backups)
Plugin ecosystemi18n and draft model rewritten v4 to v5
TS-friendlyAdmin UI rougher than SaaS competitors
Strapi Cloud option existsAdmin perf reports on large datasets

Who should pick it


5. Payload (Acquired by Figma Sept 2024) — TS-First Controversy

Payload is a TypeScript-first headless CMS. It launched in 2021 and rapidly built a developer following. In September 2024, Figma acquired Payload, and the open-source community immediately raised concerns — "as Figma integrates Payload into its own products, won't the open-source identity blur?"

As of May 2026, observations: Payload retains the MIT license, and the core is actively developed in the open. But Payload Cloud (hosted) and Figma-side integrations are growing faster than before. Part of the community sees this as "gradual enclosure."

Core traits

// payload.config.ts
import { buildConfig } from 'payload'
import { mongooseAdapter } from '@payloadcms/db-mongodb'

export default buildConfig({
  collections: [
    {
      slug: 'posts',
      fields: [
        { name: 'title', type: 'text', required: true },
        { name: 'slug', type: 'text', required: true, unique: true },
        {
          name: 'content',
          type: 'richText',
        },
        {
          name: 'author',
          type: 'relationship',
          relationTo: 'users',
        },
      ],
      access: {
        read: () => true,
        create: ({ req }) => Boolean(req.user),
      },
    },
  ],
  db: mongooseAdapter({ url: process.env.MONGODB_URI! }),
})
// Query directly from a Next.js server component
import { getPayload } from 'payload'
import config from '@/payload.config'

export default async function PostPage({ params }: { params: { slug: string } }) {
  const payload = await getPayload({ config })
  const result = await payload.find({
    collection: 'posts',
    where: { slug: { equals: params.slug } },
    limit: 1,
  })
  const post = result.docs[0]
  return <article>{post.title}</article>
}

Implications of the Figma acquisition

Who should pick it


6. Directus — Built Backwards, from DB to API

Directus's premise is unusual. Most CMS go "admin UI to DB"; Directus bolts onto an existing SQL DB and auto-generates the admin UI and REST/GraphQL API. Your existing data becomes a CMS.

Core traits

-- An existing articles table
CREATE TABLE articles (
  id SERIAL PRIMARY KEY,
  title TEXT NOT NULL,
  slug TEXT UNIQUE NOT NULL,
  content TEXT,
  published_at TIMESTAMPTZ
);

Connect this table to Directus and you immediately get an admin UI and APIs.

# Fetch via REST
curl "https://cms.example.com/items/articles?fields=*,author.*&filter[status][_eq]=published"

# Fetch via GraphQL
curl -X POST https://cms.example.com/graphql \
  -H "Content-Type: application/json" \
  -d '{"query":"{ articles(filter:{status:{_eq:\"published\"}}){ title slug }}"}'

Strengths and weaknesses

StrengthsWeaknesses
Use your existing DBOverkill for content-only use cases
BSL license (free for small orgs)BSL means some companies must review
Powerful Flows automationRich-text and block models weaker than SaaS competitors
Content schema is SQL as isYou model i18n yourself

Who should pick it


7. Cosmic / Builder.io — Visual + Headless

Both center on "marketers build the page themselves."

Cosmic

Builder.io

// Render a Builder.io page in Next.js
import { builder, BuilderComponent } from '@builder.io/react'

builder.init(process.env.NEXT_PUBLIC_BUILDER_KEY!)

export default async function Page({ params }: { params: { slug: string[] } }) {
  const content = await builder
    .get('page', { url: '/' + params.slug.join('/') })
    .toPromise()

  return <BuilderComponent model="page" content={content} />
}

Who should pick them (both)

But design-system consistency is easy to lose. Pre-narrowing the catalog of usable components is the key.


8. Keystatic (Thinkmill) — Git-Based TS-First

Keystatic is built by Australia's Thinkmill, and Mark Pinches is one of the core maintainers. It launched in 2023, and in 2026 it has settled in as the TS-first flagship of Git-based CMS.

Core traits

// keystatic.config.ts
import { config, fields, collection } from '@keystatic/core'

export default config({
  storage: { kind: 'github', repo: 'me/blog' },
  collections: {
    posts: collection({
      label: 'Posts',
      slugField: 'title',
      path: 'content/posts/*',
      format: { contentField: 'content' },
      schema: {
        title: fields.slug({ name: { label: 'Title' } }),
        publishedAt: fields.date({ label: 'Published' }),
        content: fields.markdoc({ label: 'Content' }),
      },
    }),
  },
})

Strengths and weaknesses

StrengthsWeaknesses
Content lives in your repo (zero lock-in)Concurrent editing limited by Git workflow
TS schema, type safeMarketers must be comfortable with GitHub OAuth
Free (no hosting, no DB)Large assets (images) need a separate CDN
Pulled in at build timeMulti-step workflow (approvals) handled via PRs

Who should pick it


9. Storyblok — The Visual Editor Heavyweight

Storyblok is an Austrian SaaS headless CMS launched in 2017. Its visual editor is the biggest differentiator.

Core traits

// Fetch a Storyblok page from Next.js
import { storyblokInit, apiPlugin, getStoryblokApi } from '@storyblok/react'

storyblokInit({ accessToken: process.env.STORYBLOK_TOKEN, use: [apiPlugin] })

export default async function Page({ params }: { params: { slug: string[] } }) {
  const slug = params.slug?.join('/') || 'home'
  const sb = getStoryblokApi()
  const { data } = await sb.get(`cdn/stories/${slug}`, { version: 'published' })
  return <StoryblokComponent blok={data.story.content} />
}

Strengths and weaknesses

StrengthsWeaknesses
Marketer-friendly visual editorBlock component catalog design matters
Mature multilingualPrice ramps fast with usage
Global CDNContent model defined in SaaS UI (weak schema-as-code)
Rich workflowLarge API response sizes

Who should pick it


10. Hygraph (formerly GraphCMS) — GraphQL First

GraphCMS rebranded as Hygraph in 2022. The name changed but the identity — a GraphQL-first headless CMS — did not.

Core traits

# Hygraph GraphQL query
query Posts {
  posts(orderBy: publishedAt_DESC, first: 10, locales: [en, ko]) {
    id
    title
    slug
    publishedAt
    author {
      name
    }
  }
}

Who should pick it


11. Prismic / Hashnode / Outstatic — Other SaaS and Git

Prismic

Hashnode

Outstatic


12. Dato CMS / ButterCMS / KeystoneJS — Other Headless Options

Dato CMS

ButterCMS

KeystoneJS


13. Ghost / WordPress Headless / Webflow / Notion — Non-Traditional CMS

These four are not "born headless" but get used as headless.

Ghost

WordPress headless

Webflow

Notion as CMS


14. decap CMS (formerly Netlify CMS) / Statamic — Git-Based and Flat-File

decap CMS (formerly Netlify CMS)

Statamic


15. Korea — Markdown CMS Trend and Kakao Contents

Patterns of headless CMS use in Korea in 2026.

Rise of markdown / Git-based

Kakao Contents / Brunch / Naver

SaaS usage

Korean search and SEO considerations


16. Japan — microCMS, Newt, Storyblok Japan

Japan is a market where local SaaS CMS are strong.

microCMS

// microCMS client
import { createClient } from 'microcms-js-sdk'

const client = createClient({
  serviceDomain: 'example',
  apiKey: process.env.MICROCMS_API_KEY!,
})

const data = await client.get({
  endpoint: 'posts',
  queries: { limit: 10, orders: '-publishedAt' },
})

Newt

Storyblok in Japan

Contentful and Sanity usage


17. Who Should Pick What — Decision Guide

Use caseFirst choiceSecond choiceNote
Solo developer blogKeystatic / OutstaticHashnodeZero lock-in, Git-friendly
Company tech blogSanityStrapi 5Multi-author, multilingual
Startup marketing siteStoryblok / Builder.ioSanityMarketer autonomy
Enterprise corporate siteContentfulSanitySLA, compliance
e-commerceSanity / StoryblokBuilder.ioPages vs products separated
Multilingual global siteSanity / ContentfulHygraphMature i18n
Data + CMS combinedDirectusPayloadReuse existing DB
TS full-stackPayloadStrapi 5Code-first
Self-host requiredStrapi 5 / Payload / Directus / KeystoneJSGhostYou own ops
Japan market focusmicroCMS / NewtStoryblok JapanLocal UX
Korean global siteSanity / StoryblokContentfulMultilingual, CDN
Writers and newslettersGhostHashnodeMail delivery built in
Migrating from WordPressWP headlessStrapi 5Gradual transition
Designer-led siteWebflowBuilder.ioDesign-first
Fast initial MVPNotion as CMSHashnodeZero-day setup

Signals you picked wrong

Estimating migration costs


Closing — Content Is an Asset

Picking a CMS is deciding where to keep your content asset. Tools can be swapped every five years, but the content you build up is your company's asset.

A one-line summary as of May 2026.

Two rules only. First, pick a CMS that guarantees a data export. Second, use the UI marketers will use every day, yourself, at least once. The rest is catalog detail.


References

Comments

No comments yet.

Sign in to leave a comment