Self-hosted headless CMS platforms give you data ownership, unlimited API calls, and no per-seat pricing. Three options lead the open-source space.
Platform Overview
Payload CMS: TypeScript-first, React admin panel, built on Next.js (v3). Code-defined schemas. Acquired by Vercel.
Directus: Database-first. Wraps any SQL database with an API and admin panel. No-code schema management.
KeystoneJS: GraphQL-first. Schema-as-code. Prisma-based. Built by Thinkmill.
Feature Comparison
| Feature | Payload CMS | Directus | KeystoneJS |
|---|---|---|---|
| Language | TypeScript | TypeScript | TypeScript |
| Admin UI | React (customizable) | Vue (customizable) | React (basic) |
| Schema definition | Code (TypeScript) | UI or code | Code (TypeScript) |
| API | REST + GraphQL | REST + GraphQL | GraphQL |
| Database | PostgreSQL, MongoDB | PostgreSQL, MySQL, SQLite, etc. | PostgreSQL, MySQL, SQLite |
| ORM | Drizzle (v3) | Knex.js | Prisma |
| Authentication | Built-in (JWT + sessions) | Built-in (multiple methods) | Built-in (basic) |
| Access control | Field-level, code-based | Role-based, granular | Code-based |
| Media management | Built-in (S3, local) | Built-in (multiple adapters) | Basic |
| Live preview | Yes | No | No |
| Drafts/versions | Yes | Yes | No |
| Localization | Built-in | Built-in | Community plugin |
| Webhooks | Yes | Yes | Basic |
| Workflow/approval | Basic | Yes | No |
| Hosting | Self-hosted + Payload Cloud | Self-hosted + Directus Cloud | Self-hosted only |
| License | MIT | BSL 1.1 / GPL | MIT |
| Next.js integration | Native (lives inside Next.js) | API-based | API-based |
When Payload Wins
- Next.js projects: Payload v3 runs inside Next.js
- TypeScript codebases: Best type safety in the CMS space
- Custom admin UI: React-based, highly extensible
- E-commerce: Rich content types for product management
- Vercel deployment: Native integration
- Developer-first teams: Schema-as-code workflow
When Directus Wins
- Existing databases: Wraps any SQL database instantly
- Non-technical editors: Best admin UI for content teams
- Multi-database support: Connect to MySQL, Postgres, SQLite, etc.
- Workflow management: Approval flows, content staging
- No-code teams: Schema management without writing code
- Asset management: Advanced DAM features
When Keystone Wins
- GraphQL-first projects: Native GraphQL with auto-generated schema
- Prisma ecosystem: Leverages Prisma ORM features
- Simple content needs: Blog, documentation, basic pages
- MIT license: Fully open-source, no restrictions
- Custom GraphQL: Extend schema with custom resolvers
Our Recommendation
We use Payload CMS for content-managed Next.js projects. The ability to run Payload inside Next.js (same deployment, same codebase) eliminates the complexity of managing a separate CMS. For clients with existing databases or non-technical content teams, Directus is the stronger choice.
Set up your CMS with the right architecture.