
ByAhsan NadeemLead Full-Stack Engineer
Choosing a headless CMS is a five-year decision dressed up as a weekend one. Once your content, your editors' habits and your front end are built around it, switching is expensive. So it's worth understanding how the three names that come up most often (Payload, Strapi and Sanity) actually differ, beyond their feature lists.
Disclosure: the website you're reading runs on Payload, and we've used it in production. We've tried to be fair to all three; where our experience leans one way, we say so.
The three in one paragraph each
Payload
Payload is an open-source, TypeScript-first CMS and application framework. You define collections, fields, access rules and hooks in code, and since version 3 it runs inside a Next.js app alongside your front end. Content is stored in your own database (PostgreSQL, MongoDB or SQLite). Figma acquired the Payload team in June 2025, and the maintainers have said the project stays MIT-licensed.
Strapi
Strapi is an open-source Node.js CMS with an admin panel where you can build content types visually, then use them through REST or GraphQL. The Community edition is free to self-host, and Strapi Cloud offers managed hosting. Features aimed at larger teams, such as SSO and audit logs, sit in paid plans.
Sanity
Sanity is a hosted content platform. Your content lives in Sanity's Content Lake, which you query with GROQ (its own query language) or GraphQL. You edit it in Sanity Studio, an open-source React app you can customise heavily. Real-time collaboration and structured rich text (Portable Text) are standout features.
Side-by-side comparison
Payload | Strapi | Sanity | |
|---|---|---|---|
Where content lives | Your own database | Your own database (or Strapi Cloud) | Sanity's hosted Content Lake |
How you define the schema | TypeScript config, in code | Visual builder (stored as files) or code | JavaScript/TypeScript schemas in the Studio |
Querying | REST, GraphQL, or the local API in-process | REST and GraphQL | GROQ and GraphQL |
Hosting | Anywhere Node runs; deploys with your app | Self-host or Strapi Cloud | Hosted by Sanity; you deploy the Studio |
Editing experience | Clean admin, live preview, drafts and versions | Familiar admin panel, drafts and publishing | Highly customisable Studio, real-time collaboration |
Access control | Function-based, per collection and field, in code | Roles and permissions in the admin | Roles; finer control on higher plans |
Pricing model | Free and open source; you pay for hosting | Free self-hosted; Cloud plans per project | Free tier, then per-seat plans and usage |
Lock-in risk | Low: your code, your database | Low to medium | Higher: content in a proprietary store |
Prices and plan limits change often, so check each vendor's current pricing page before you decide. The model (who you pay, and for what) is more stable than the numbers.
Where each one shines
Choose Payload when…
- Your team writes TypeScript and wants the CMS in the same repository and deployment as the site.
- You need your content in your own PostgreSQL or MongoDB, for compliance or reporting.
- You'll build application features too: user accounts, custom endpoints, workflows. Payload doubles as a backend framework.
- You want access control expressed as code that you can review and test.
Choose Strapi when…
- Non-developers will help shape content types, and a visual builder helps them do it.
- You want an established plugin ecosystem and a large community.
- You like the option of self-hosting now and moving to managed hosting later.
Choose Sanity when…
- You have a busy editorial team that edits at the same time and benefits from real-time collaboration.
- You don't want to run a database or CMS server at all.
- Your content is highly structured and reused across many channels: web, apps, email, in-store screens.
Ask where your content will live in five years, and who you'll pay to keep it there. The answer narrows the choice faster than any feature list.
What we learned running Payload in production
On this site, Payload handles the blog only: articles, categories, authors and media. Everything else is typed content in the front-end codebase. A few lessons:
- Migrations are your friend. With PostgreSQL, schema changes ship as migration files that are reviewed like any other code. No surprise changes in production.
- Code-defined access rules are easy to audit. Who can read drafts, who can publish and who can delete are a few lines each, with tests.
- You own the operations. Backups, database upgrades and storage are yours to run. That's the price of control.
- Rich text needs a renderer you trust. We render the editor's JSON ourselves instead of injecting HTML, which keeps output safe and consistent.
Migrating between them
All three expose your content through APIs, so moving is possible: export, transform, import, then point the front end at the new source. The hard parts are rich text (each stores it in a different structure), media references and URL redirects. Budget for those explicitly, and read our website migration SEO checklist before you change any URLs.
A quick decision path
- Must content stay in your own database? → Payload or Strapi.
- Will developers own the schema, in code, next to the front end? → Payload.
- Will non-developers build content types? → Strapi.
- Do you want no servers or database to run, and real-time co-editing? → Sanity.
Frequently asked questions
Is Payload still open source after the Figma acquisition?
Yes. When the Payload team joined Figma in June 2025, the maintainers said the project would remain MIT-licensed and self-hostable. As with any dependency, keep an eye on its roadmap.
Which headless CMS is best for SEO?
None of them is better for SEO on its own. Rankings depend on your front end: fast server-rendered pages, clean URLs, metadata and structured data. All three can feed an SEO-friendly site.
Can I use these with frameworks other than Next.js?
Yes. Strapi and Sanity are framework-agnostic APIs. Payload runs inside Next.js, but its REST and GraphQL APIs can serve any front end; this site's front end is built with SolidStart.
What does a headless CMS cost to run?
Self-hosted Payload or Strapi costs your hosting and database, plus the time to maintain them. Sanity and Strapi Cloud charge subscription fees that grow with seats, usage or projects. Compare total cost over two or three years, not the first month.
Do I even need a headless CMS?
If only developers update the site, typed content files in the codebase may be simpler and faster. A CMS earns its keep when non-developers publish regularly.
We build headless sites and set up the CMS that fits your team. See our headless CMS development service, or ask us which one we'd pick for you.


