Analytics cookies only (Google Analytics, PostHog). No ad networks, no cross-site tracking. See our privacy policy.
upstream: github.com/payloadcms/payload (opens in new tab) · github.com/directus/directus (opens in new tab)
Pick Payload
If your site is Next.js and you want the CMS in the same codebase, with the schema in TypeScript and a plain MIT licence.
Pick Directus
If there is a SQL database you want to put an API and admin app on top of, or you want an official image and a Compose file with nothing to build; it is rated 2 out of 5 against Payload's 3. Payload idled at about 100 MB against Directus's 313 MB.
Payload and Directus are both headless backends that generate APIs and an admin panel, but they sit at different layers. Payload is a code-first framework that installs into a Next.js app: you describe collections and access control in TypeScript and get REST, GraphQL and Local APIs. Directus is a data platform that layers instant REST and GraphQL APIs and an admin app over a SQL database. If your starting point is a Next.js project, Payload fits inside it. If your starting point is a database, Directus fits on top of it.
Payload is MIT-licensed and written in TypeScript on Next.js and React with PostgreSQL. Collections, fields and access control live in config files that you commit with the rest of the app. Its Local API lets code in the same Next.js process query content directly, without an HTTP hop.
Directus is Node.js and TypeScript, licensed MSCL-1.0, which permits any use other than a Competing Use and converts to GPL-3.0 four years after each release. It reads a SQL database and turns it into an API with an admin app, which makes it a natural choice when the tables already exist or other tools also write to them. Directus is also listed on our site as an alternative to Firebase.
The question to ask is who owns the schema. If developers own it in TypeScript and it ships with the app, Payload. If the database owns it and the API is a view onto it, Directus.
Directus is the simpler install and the lower difficulty rating: 2 out of 5
against Payload's 3. Ours is a docker-compose.yml using the official
directus/directus image with Postgres, no scaffolding needed.
Payload has no prebuilt image. We scaffolded the blank template with
create-payload-app pinned to a version and built it with the template's own
Dockerfile, after fixing three things the Dockerfile needed: standalone output in
next.config.ts, the template's .npmrc, and a writable media folder for
uploads. Postgres in production also needs a migration created and applied first,
because schema push is a development feature.
Estimates first: 2 GB for Payload and 512 MB for Directus, both our figures. Measured idle on a GCP e2-standard-2 box, Payload used about 100 MB and Directus about 313 MB, so the app with the larger estimate had the smaller idle footprint. The 2 GB is headroom, not a prediction of idle use. Disk was roughly 10.5 GB for Payload after its image build and 2 GB for Directus.
Choose Payload if your site is Next.js, you want the CMS in the same codebase, and you want a plain MIT licence and schema reviewed in pull requests.
Choose Directus if there is a SQL database you want to put an API and admin app on top of, or you want a Compose file with an official image and nothing to build.
See Strapi vs Payload, Strapi vs Directus and Directus vs Appwrite for the rest of the field. Install steps for Directus are in the Directus deploy guide, and app pages are Payload and Directus. For a hosted service to replace, start at Firebase alternatives.
Pick Payload for a Next.js site where the CMS lives in the same codebase with the schema in TypeScript. Pick Directus to put an API and admin app over a SQL database, with an official image and a Compose file.
Payload lists REST, GraphQL and a Local API. The Local API lets code running inside the same Next.js app query content directly rather than over HTTP.
Our site lists Directus as a self-hosted alternative to Firebase. It provides REST and GraphQL APIs and an admin app over a SQL database.
Payload has no prebuilt image: we scaffolded the template, patched its Dockerfile for standalone output, the .npmrc and a writable media folder, and applied a first Postgres migration. Directus is a Compose file with the official image.
Our estimates are 2 GB for Payload and 512 MB for Directus. Measured idle on a GCP e2-standard-2 box we saw about 100 MB for Payload (2026-10-14) and about 313 MB for Directus (2026-09-28).
Paid link — we earn a commission if you shop through it.
A CMS where you build the content model vs. a data platform that sits on top of your SQL database.
A standalone Node.js CMS with a click-to-model builder vs. a code-first CMS that lives inside your Next.js app.
A REST/GraphQL data layer over your own SQL database vs. an all-in-one BaaS with auth, functions, and messaging built in.