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
| Tier | Price | Features |
|---|---|---|
| Free | $0 | Full features, self-hosted |
| Payload Cloud | $50/mo | Managed hosting, S3 storage |
| Enterprise | Custom | Priority 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
| Payload | Strapi | Contentful | |
|---|---|---|---|
| TypeScript | ✅ Native | ✅ (v5) | ❌ |
| Self-hosting | ✅ | ✅ | ❌ |
| Next.js embed | ✅ | ❌ | ❌ |
| Rich text | Lexical (best) | Basic | Basic |
| Access control | Code-based (best) | Role-based | Role-based |
| Pricing | Free (self-host) | Free (self-host) | $300+/mo |
| Best for | Developers | Content teams | Enterprise |
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.