| title |
aliases |
tags |
sources |
created |
updated |
| PayloadCMS — Getting Started |
| what-is-payload |
| payload-overview |
|
| payloadcms |
| tech-patterns |
| cms |
| nextjs |
| fullstack |
|
| getting-started__what-is-payload.md |
| getting-started__installation.md |
| getting-started__concepts.md |
|
2026-05-15 |
2026-05-15 |
PayloadCMS — Getting Started
Overview
Payload is a code-first, open-source Next.js fullstack framework that acts as a CMS, enterprise tool builder, or headless commerce platform. Write a payload.config.ts and get an auto-generated Admin Panel, REST/GraphQL/Local APIs, database schema with migrations, auth, and file upload out of the box. Self-hostable anywhere Node.js runs, including Vercel serverless.
Key Concepts
- Config — central
payload.config.ts file; fully typed JS object; everything derives from it
- Collections — groups of Documents sharing a schema (e.g.
pages, posts, users)
- Globals — singleton Documents (e.g. site header, nav); same APIs as Collections but one doc only
- Fields — schema building blocks; define DB columns + Admin UI simultaneously
- Hooks — lifecycle callbacks (before/after read, create, update, delete)
- Access Control — per-collection/global functions controlling what each user can do
- Local API — direct-to-DB Node.js API, zero HTTP overhead, fully typed
- REST API — auto-mounted at
/api/<collection-slug>
- GraphQL API — auto-mounted at
/api/graphql, playground at /api/graphql-playground
- Admin Panel — Next.js App Router React app, auto-generated from config, fully extensible
Requirements
- Node.js 24.15.0+
- Next.js 16.2.6+
- pnpm (preferred), npm, or yarn 2+
- One DB: MongoDB, PostgreSQL, or SQLite
API / Config Reference
Minimal payload.config.ts
import sharp from 'sharp'
import { lexicalEditor } from '@payloadcms/richtext-lexical'
import { mongooseAdapter } from '@payloadcms/db-mongodb'
import { buildConfig } from 'payload'
export default buildConfig({
editor: lexicalEditor(),
collections: [],
secret: process.env.PAYLOAD_SECRET || '',
db: mongooseAdapter({
url: process.env.DATABASE_URL || '',
}),
sharp,
})
Core TypeScript types
import { Config, CollectionConfig, GlobalConfig, Field } from 'payload'
import type { Config, SanitizedConfig } from 'payload'
tsconfig.json path alias (required)
{
"compilerOptions": {
"paths": {
"@payload-config": ["./payload.config.ts"]
}
}
}
next.config.js wrapper (required)
import { withPayload } from '@payloadcms/next/withPayload'
const nextConfig = {}
export default withPayload(nextConfig)
next.config must be ESM — either add "type": "module" to package.json or use .mjs extension.
Code Examples
Quickstart
npx create-payload-app
# or target a template:
npx create-payload-app@latest -t website
npx create-payload-app@latest -t blank
Manual install packages
pnpm i payload @payloadcms/next
pnpm i @payloadcms/richtext-lexical sharp graphql
pnpm i @payloadcms/db-mongodb # or db-postgres, db-sqlite
Local API usage in React Server Component
import config from '@payload-config'
import { getPayload } from 'payload'
const MyServerComponent: React.FC = async () => {
const payload = await getPayload({ config })
const findResult = await payload.find({ collection: 'pages' })
// findResult.docs is typed as Page[]
}
REST API
fetch('https://localhost:3000/api/pages')
.then((res) => res.json())
.then((data) => console.log(data))
App folder structure after install
app/
├─ (payload)/ # Payload files — do NOT edit
├─ (my-app)/ # Your frontend files
Package Architecture
| Package |
Role |
payload |
Core business logic, Local API, TypeScript types |
@payloadcms/next |
Admin Panel, REST API, GraphQL HTTP layer |
@payloadcms/ui |
Reusable Admin UI React components |
@payloadcms/db-* |
Database adapters (one per project) |
@payloadcms/richtext-lexical |
Rich text editor (optional) |
@payloadcms/graphql |
GraphQL layer (bundled in @payloadcms/next) |
Use Cases
| Use Case |
Description |
Quickstart |
| Headless CMS |
Website content management with Live Preview, redirects, form builder, visual editing |
npx create-payload-app@latest -t website |
| Enterprise Tool |
Internal apps — SSO auth, access control, admin UI, REST/GraphQL, migrations all built-in |
npx create-payload-app@latest -t blank |
| Headless Commerce |
Full storefront without Shopify — products, catalogs, media, orders in one backend; offload only payments (Stripe) |
npx create-payload-app@latest -t blank |
| Digital Asset Management |
API-first tagging/sorting/querying, folder organization, file versioning, bulk upload, media access control |
npx create-payload-app@latest -t blank |
When to Use / Avoid
Use Payload when
- Data ownership and privacy matter (no vendor lock-in)
- Building a Next.js site that needs a CMS — install in existing repo
- Custom business logic beyond a typical headless CMS
- Need to reuse data outside of a SaaS API
- Serverless deploy on Vercel is a requirement
Avoid Payload when
- Project can be managed fully with code, no admin UI needed
- Site fits within Webflow / Framer constraints
- Already have a full DB and just need data visualization
- Certain you'll never need code/data ownership
Gotchas
- All official Payload packages must use matching version numbers — mixing versions breaks things
withPayload is ESM only; require() in next.config.js will fail
next.cacheComponents has partial compatibility — not fully supported alongside Payload
- yarn 1.x is not supported; use pnpm, npm, or yarn 2+
- The
(payload) app folder files are not meant to be edited and will not regenerate
sharp is optional but required for image cropping, resizing, focal point selection
graphql package must be in your package.json explicitly if you use GraphQL queries
Key Takeaways
- Payload is a code-first Next.js fullstack framework — not a SaaS; you own your data and schema
- One config file (
payload.config.ts) drives Admin Panel, DB schema, REST/GraphQL/Local APIs, auth, uploads simultaneously
- Four distinct use cases: Headless CMS, Enterprise Tool, Headless Commerce, DAM — all from the same tool
- No click-ops — schema is always version controlled; non-technical users operate via the generated Admin UI
- MIT licensed, self-hostable on any Node.js host including Vercel serverless
- Avoid if: no admin UI needed, project fits Webflow/Framer, or you already have a complete DB stack
Related