· cms / headless-cms / sanity

Best Headless CMS for Developers 2026: Sanity, Strapi & More

Sanity is the default SaaS pick; Strapi and Payload own the self-host tier. When each of the five contenders wins — and why Contentful dropped out.

By Ethan

1,972 words · 10 min read

If you are starting a new project today and need a headless CMS: use Sanity for SaaS convenience with a real free tier, Strapi or Payload if data ownership matters, and Directus when you are wrapping an existing database. TinaCMS is the right call only if your content lives in Git and visual editing on a static site is a hard requirement.

Contentful used to be here. It is not anymore — the $0→$300/month pricing cliff with no middle tier has made it irrelevant for anyone outside enterprise procurement.

Who this is for

Developers choosing a headless CMS for a new project, or evaluating a migration off something that is no longer working. If you are already happy with your current CMS, the setup cost of switching almost certainly outweighs anything here.

What we tested

Pricing fetched from official pages on 2026-05-24. GitHub data from the GitHub API on the same date. Integration quality assessed from official docs and starter templates. We did not run independent query latency benchmarks — that gap is called out in the Caveats.

Sanity v4Strapi v5Payload v3Directus v12TinaCMS
Free tier20 seats, 10k docsMIT self-hostMIT self-host<$5M rev + <50 emp2 users
Paid entry$15/seat/mo$18/mo (Cloud)Self-host only$99/mo (Cloud)$24/mo
APIREST + GROQ + GQLREST + GQL + Typed SDKREST + GQL + Local APIREST + GQL + Real-timeAPI/Beta (Business+ only)
Self-hostStudio UI onlyFull stackFull stackFull stack (MSCL)Data layer
AstroOfficial adapterOfficial toolkitCommunity templatesOfficial guidesOfficial (visual exp.)
Next.jsDeepDeepNative co-locatedOfficialPrimary
LicenseSaaS (content)MITMITMSCLApache 2.0
GitHub ★6.1k (OSS Studio)72.2k42.6k35.8k13.4k

Sanity v4

Sanity is a SaaS content platform — Sanity Studio (the admin UI) is open source under MIT, but your content lives in Sanity’s Content Lake. There is no self-hosted data option. That is a hard stop for compliance-heavy use cases; for everyone else, it is a trade-off worth understanding.

What you get in return: the best structured-content developer experience in this group. GROQ is Sanity’s query language, and it is the real moat. A single GROQ query handles joins, projections, and filtering against the Content Lake, served via a global CDN. GROQ also allows zero-downtime content model changes — no schema regeneration required.

Studio v4 (July 2025) was a deliberately minor bump: Node.js 20 required (from 18) — the Node 20 upgrade unblocks Vite 7 support in a future release — and nothing else breaking. If you are on Node 18, upgrade before starting. All existing Studio code runs as-before on Node 20+.

Pricing: Free tier covers 20 seats and 10,000 documents — genuinely enough for solo devs and small agencies. Growth is $15/seat/month per occupied seat (viewers are free), no annual lock-in. Optional add-ons at Growth (SSO at $1,399/mo, dedicated support at $799/mo) make it clear Sanity’s growth plan is a path to enterprise, not a ceiling.

Astro and Next.js: Both have official adapters. @sanity/astro installs via npx astro add @sanity/astro and supports static (build-time) and server (SSR) modes with visual editing in the latter. Next.js integration is the most mature in this group.

Strapi v5

Strapi is the most starred open source CMS on GitHub (72,237 stars as of May 2026) and the default recommendation for teams that want full data ownership with no license concerns. MIT forever, self-host on your own infra, no call-home.

v5 (September 2024) was a meaningful rewrite. The biggest change: flat API responses. Code that unwraps data.attributes.title must be rewritten to data.title. The documentId (UUID string) also replaces numeric id as the primary content identifier — any client code using data.id in database queries or API calls needs updating. The new @strapi/client typed SDK is a genuine DX improvement that makes up for some of the migration friction.

Migration tooling: npx @strapi/upgrade major automates a significant portion of v4→v5 changes via codemods. Budget time for the rest — particularly if you have custom plugins. Strapi v4 gets security patches only until April 2026, so the migration is not optional for projects still on it.

Pricing: self-hosting is free (MIT). Strapi Cloud Essential starts at $18/month; infrastructure you run yourself costs $6–7/month on Hetzner or ~$20/month on DigitalOcean for basic setups. Production-grade on managed Postgres runs $200–300/month depending on load. For a platform-by-platform cost breakdown, see best deploy platform for full-stack web apps in 2026.

Astro and Next.js: Strapi has a dedicated Astro toolkit — the Astro Strapi Loader, Astro Strapi Blocks Field, and an official Astro Strapi Starter template. Next.js integration uses @strapi/client with full TypeScript support. One of the best-supported frameworks in this group.

Payload v3

Payload is the code-first CMS: your content schema lives in TypeScript configuration files, not a database table or a GUI. There is no “admin sets up the schema” surface — engineers define it, engineers own it. For developer-led teams, that is the point. If that schema-as-code approach appeals, your next decision is likely which TypeScript ORM to pair it with — best TypeScript ORM 2026: Drizzle, Prisma, Kysely, TypeORM covers the options.

The Next.js-native integration is category-defining. npx create-payload-app scaffolds a Next.js project with Payload co-located. The Local API lets server components query the Payload database directly — no HTTP round-trip. For co-located Next.js architectures, this is the fastest query path available in any CMS in this list.

Figma acquisition (June 2025): Payload joined Figma. The OSS commitment has been maintained — MIT license unchanged — and Figma’s resources presumably accelerate development. The practical downside: Payload Cloud is paused for new signups post-acquisition. Self-hosting is the only option for new projects. Payload Cloud was available before the acquisition; check payloadcms.com/get-started for current status.

Pricing: self-hosting is free (MIT). Infrastructure runs under €10/month on Hetzner, or $40–100/month on Vercel/Railway/Render with managed Postgres.

Astro and Next.js: Astro support is community-led — no official Payload adapter, though starter templates exist on GitHub. Next.js is first-class: Payload v3 was essentially rebuilt around the Next.js App Router.

GitHub: 42,590 stars, committed daily. Fastest-growing developer CMS in the 2024–2025 cycle.

Directus v12

Directus takes a different architectural stance: it is a data platform that wraps your existing database and exposes REST, GraphQL, real-time WebSocket, and a typed SDK simultaneously. If you have a Postgres database you want to add content management to without modeling content from scratch, Directus is the most direct path. For teams still evaluating a managed Postgres backend before committing to Directus self-hosting, Supabase vs Firebase (2026): Postgres or NoSQL? covers the backend tradeoffs.

v12 (May 2026) brings the MSCL license — free for organizations with both under $5M annual revenue and under 50 employees. Larger organizations get a free Core tier for prototyping, with paid tiers gating enterprise features (SCIM, offline mode). The code auto-converts to GPLv3 after 4 years. This is a meaningful shift from v10’s BSL 1.1, which drew backlash for pricing optics. MSCL is more permissive than BSL for most development use cases.

Cloud pricing tightened in November 2025: the Starter tier (~$15–49/mo) was discontinued. Cloud Professional now starts at $99/month (annual) for 5 Studio users, 75k database entries, and 250k API requests/month. New self-hosters get a one-click Railway template.

Astro and Next.js: Official guides for both frameworks, with the @directus/sdk covering the integration surface. No dedicated adapter, but the SDK is comprehensive. Grade: solid, not as turnkey as Sanity’s adapter or Strapi’s toolkit.

GitHub: 35,849 stars. Actively maintained, daily commits.

TinaCMS

TinaCMS is the Git-backed pick. Content is stored in Markdown or MDX files in your repository — the CMS is a layer over your Git workflow, not a separate data store. This makes it compelling for static-site and Jamstack projects where content-as-code is a design constraint, not an afterthought.

The trade-offs are real. API (Beta) access requires the Business plan ($249/month) — below that, you are working with Git I/O, not an API. Visual editing for Next.js is the most mature integration; visual editing for Astro is experimental as of May 2026. The Editorial Workflow (draft/review queue) now requires Team Plus ($41/month), moved up from a lower tier.

Pricing: Free tier covers 2 users. Team $24/month (up to 10 users). Business $249/month for API access and 20 users.

Astro and Next.js: Next.js is the primary framework — deep integration, MDX support, stable visual editing. Astro integration exists officially but visual editing is experimental. Do not build a production Astro site with TinaCMS if you need visual editing.

GitHub: 13,357 stars, active.

Headless CMS verdict — pick X if Y

Pick Sanity if you want the best SaaS DX with a real free tier and are not blocked by the no-self-hosted-data constraint. GROQ pays for itself on any content model with complex joins.

Pick Strapi if full data ownership is the requirement and you want the most battle-tested OSS option. Expect v4→v5 migration work if you are upgrading; greenfield v5 is clean.

Pick Payload if you are building a Next.js application and want the CMS co-located in the same project with zero HTTP overhead. Also the right call for code-first teams that distrust GUI-defined schemas.

Pick Directus if you are wrapping an existing database or need REST + GraphQL + real-time from a single surface. Evaluate the MSCL license threshold if your org is above the free-tier limits.

Pick TinaCMS if content-as-code in Git is a hard design requirement and your primary framework is Next.js. Skip it for Astro if visual editing matters.

Skip Contentful: $0→$300/month with no middle tier makes it irrelevant for this audience unless you are already in enterprise procurement.

Caveats

No independent query latency benchmarks. Sanity routes all Content Lake reads through a global CDN. We did not independently measure GROQ vs. GraphQL delivery times. Verify latency with your specific data shape.

Payload Cloud status may change. New signups were paused at research date (2026-05-24) post-Figma acquisition. Check payloadcms.com/get-started before planning around Cloud hosting.

Directus MSCL license threshold. The $5M revenue / 50 employee threshold applies conjunctively (both conditions must hold for the free grant). Verify current terms at directus.io/blog/directus-v12-license-change before relying on the free tier in a commercial product.

Strapi v4 EOL is April 2026. No support after that date. If you are still on v4, the migration is urgent, not optional.

TinaCMS API gate. The API (Beta) requires Business tier ($249/mo). If your architecture depends on querying TinaCMS programmatically outside of the Git layer, plan for that cost from day one.

No affiliate programs verified. None of the five CMSes in this article have a live consumer affiliate program as of research date. All links below are plain links to official documentation and pricing pages.

References

  1. Sanity pricing — fetched 2026-05-24
  2. Sanity Studio v4 changelog
  3. Sanity Astro integration
  4. Astro + Sanity guide
  5. Strapi Cloud pricing — fetched 2026-05-24
  6. Strapi v4→v5 breaking changes
  7. Strapi Astro integration
  8. Payload + Figma acquisition — June 2025
  9. Payload pricing / getting started — fetched 2026-05-24
  10. Directus v12 MSCL license — May 2026
  11. Directus Cloud tier update (Nov 2025)
  12. Directus pricing — fetched 2026-05-24
  13. TinaCMS pricing — fetched 2026-05-24
  14. TinaCMS Astro docs
  15. GitHub stars — all five CMSes — API data fetched 2026-05-24
  16. Contentful pricing — fetched 2026-05-24
  17. Payload GitHub repo — MIT license
  18. Strapi v4 migration and support lifecycle — fetched 2026-05-24