← Back to articles

Payload CMS Review 2026: The CMS Developers Actually Want

Payload is a TypeScript-native headless CMS that runs inside your Next.js app. Not alongside it — inside it. Same codebase, same database, same deployment. After building two projects with Payload 3, here's the honest review.

What Makes Payload Different

Most headless CMSes are separate services: your frontend talks to a CMS API. Payload runs as part of your Next.js app. Your CMS admin panel is a Next.js route. Your content API is your app's API.

Traditional: Frontend → API → CMS (separate server)
Payload:     Frontend + CMS (same Next.js app)

This means: one deployment, one database, no network latency for content fetching during SSR.

What I Like

TypeScript Everything

Schemas are TypeScript. Hooks are TypeScript. Access control is TypeScript. Queries return typed data. The entire CMS is type-safe:

const articles = await payload.find({
  collection: 'articles',
  where: { status: { equals: 'published' } },
})
// articles.docs is fully typed based on your schema

No codegen, no type mismatches, no runtime surprises.

Next.js Integration

Payload 3 lives inside your Next.js app. The admin panel is at /admin. Content APIs are at /api. Server Components can fetch content directly:

// app/articles/[slug]/page.tsx
export default async function ArticlePage({ params }) {
  const article = await payload.find({
    collection: 'articles',
    where: { slug: { equals: params.slug } },
  })
  
  return <Article data={article.docs[0]} />
}

No API call. No network latency. Direct database access in your server component.

Flexible Access Control

Per-collection, per-field access control:

access: {
  read: () => true,  // Anyone can read
  create: ({ req }) => req.user?.role === 'admin',
  update: ({ req, id }) => req.user?.id === id || req.user?.role === 'admin',
  delete: ({ req }) => req.user?.role === 'admin',
}

This is more powerful than Strapi's RBAC. You can write any logic.

Rich Text with Lexical

Payload uses Lexical (Meta's editor framework) for rich text. Extensible, performant, and customizable. Add custom blocks, embeds, and formatting.

Hooks System

Before/after hooks on every operation:

hooks: {
  beforeChange: [
    ({ data }) => {
      data.slug = slugify(data.title)
      data.updatedAt = new Date()
      return data
    },
  ],
  afterChange: [
    ({ doc }) => revalidateTag('articles'),
  ],
}

What I Don't Like

Learning Curve

Payload is powerful but complex. Understanding collections, globals, blocks, hooks, access control, and the admin customization takes time. Steeper than Strapi.

Admin UI Customization

Customizing the admin panel requires React components in specific file patterns. It works but isn't as intuitive as writing regular Next.js pages.

Documentation Gaps

Docs are good but some advanced patterns (custom admin views, complex relationships, Lexical customization) require digging through GitHub issues or Discord.

MongoDB Legacy

Payload originally only supported MongoDB. Postgres support (via Drizzle) was added in v3. Some features feel more natural with MongoDB's document model.

Smaller Community

Compared to Strapi's massive community, Payload's is smaller. Fewer tutorials, fewer plugins, fewer Stack Overflow answers. The Discord is active and the team is responsive.

Pricing

TierPriceFeatures
Free$0Full features, self-hosted
Payload Cloud$50/moManaged hosting, S3 storage
EnterpriseCustomPriority support, SLA

Payload is free and open source. Cloud hosting is optional. Self-host on Vercel, Railway, or any Node.js hosting.

Best Use Cases

  • SaaS with content — product + blog + docs in one app
  • E-commerce — product catalog with custom admin
  • Multi-tenant apps — access control per tenant
  • Developer portfolios — Next.js site with editable content
  • Custom admin panels — Payload as a flexible admin framework

Payload vs Strapi vs Contentful

PayloadStrapiContentful
TypeScript✅ Native✅ (v5)
Self-hosting
Next.js embed
Rich textLexical (best)BasicBasic
Access controlCode-based (best)Role-basedRole-based
PricingFree (self-host)Free (self-host)$300+/mo
Best forDevelopersContent teamsEnterprise

FAQ

Is Payload production-ready?

Yes. v3 is stable and used in production by many companies.

Can non-developers use the admin panel?

Yes. Once a developer sets up collections and fields, the admin UI is intuitive for content editors.

Payload vs building a custom admin?

Payload saves weeks of development. You get a full admin panel, API, auth, and access control. Building custom only makes sense for very specific UIs.

Can I use Payload without Next.js?

Yes. Payload can run standalone as a headless CMS with Express. But the Next.js integration is the main selling point.

Bottom Line

Payload is the best headless CMS for developers in 2026. TypeScript-native, runs inside Next.js, powerful access control, and free to self-host. The tradeoff is a steeper learning curve and smaller community than Strapi.

Recommendation: Use Payload if you're building a Next.js application that needs CMS functionality. The single-codebase approach is genuinely better than managing a separate CMS.

Get AI tool guides in your inbox

Weekly deep-dives on the best AI coding tools, automation platforms, and productivity software.