mrkeyoor.com_
Sat 31 Oct 21:50 UTC
Dataevaluationupdated 05 Oct 2026

payload review

Payload is a code-first TypeScript CMS and application framework that runs inside a Next.js app. You define collections, fields, access rules, and hooks in code, then get an admin interface, authentication, generated types, and REST, GraphQL, and local APIs around that data.

+101stars / 7d
Verdict

Our Payload run installed 2,322 packages in 136 seconds and used 2,212 MB, then 113 test files failed before a test ran, so the polished app generator sits on a demanding contributor workspace. Use Payload when the same TypeScript team should own the CMS, admin customizations, and Next.js product. Choose a separate content service if framework independence matters more than direct server access and shared types.

We ran it

Lab card: what happened when we ran payloadScreenshot of payload (payloadcms.com)
Install✓ · 136s2322 packages · 2212 MB
Build✓ · 137s
Tests✗ · 22sran, no count parsed
Repo9457 files~979,289 lines of source · 75.5 MB · 16 CI workflows · tests dir

Answers from our run

Does payload build from source?

Dependencies installed in 136 seconds (2322 packages), and the build succeeded in 137 seconds. We cloned commit 15d051b into a clean Debian container with 3 CPUs and no project-specific setup.

Do payload's tests pass?

No. The project's own test command exited unsuccessfully after 22 seconds, and its output did not expose an individual test count.

Who should not use payload?

Teams outside the supported Next.js, TypeScript, and Node versions: Payload's main path installs directly in the App Router and the docs warn that only specified framework ranges are supported.

What are the alternatives to payload?

Directus, Strapi, Keystone. Our Payload run installed 2,322 packages in 136 seconds and used 2,212 MB, then 113 test files failed before a test ran, so the polished app generator sits on a demanding contributor workspace.

Setup3/5Easy generator path, but 2,212 MB and a failed workspace suite
Docs5/5Detailed install, database, migration, plugin, and deployment guides
Community5/545,098 stars, an October 5 push, and busy pull-request work
Maturity4/5v3.90.2 is active, though framework compatibility stays narrow

Discussed on

  1. hnPayloadCMS: Open-Source, Fullstack Next.js Framework214 points
  2. hnPayload – Free and Open-source Headless CMS and Application Framework8 points
  3. hnPayloadcms v3.0.05 points
  4. hnFigma Acquires OSS CMS Payload3 points

Who it’s for

TypeScript teams that want the content model and product backend in one repository.
Next.js developers who want to query Payload directly from React Server Components.
Agencies building sites or stores whose editor UI needs code-level customization.
Product teams prepared to own database migrations, storage, access rules, and framework upgrades.

Who it’s NOT for

Teams outside the supported Next.js, TypeScript, and Node versions: Payload's main path installs directly in the App Router and the docs warn that only specified framework ranges are supported.
Projects that require guaranteed compatibility with Next.js Cache Components: the installation guide says full compatibility is not guaranteed, and issue 18065 reports admin errors with the feature enabled.
PostgreSQL teams that expect generated rollback migrations to be trusted without review: open issue 14800 documents a failing drop order for a related table.
MCP-driven publishing that must refresh static pages immediately on v3.90.2: issue 18490 reports saved changes whose revalidation calls are dropped.
Contributors who require a green fresh-container suite: our run ended with 113 failed files and no tests executed.

Setup reality

Our lab-node:22 sandbox installed commit 15d051b in 136 seconds, pulling 2,322 packages and using 2,212 MB on disk. The build passed in 137 seconds. Tests exited 1 after 22 seconds: Vitest reported 113 failed files and no tests, with 113 isolated workers spawned. The supplied tail does not show the underlying error.

A working app needs a Payload secret, one database adapter and connection URL, an initial administrator, and a storage plan for uploads. Email, preview, revalidation, and deployment credentials depend on the features and host you choose.

The installation guide at this commit requires Node 24.15.0 or newer, Next.js 16.2.6 or newer, and TypeScript 6.0.3 or newer, even though our repository build completed in lab-node:22. Payload is fully ESM, and the docs warn that not every Next.js 15 or 16 release is compatible.

Payload makes the CMS part of a Next.js application

Payload installs into a Next.js /app folder and turns TypeScript collection definitions into an admin interface, authentication, generated types, and three data paths: REST, GraphQL, and a local API. React Server Components can query that local API without crossing an HTTP boundary. That arrangement keeps the content model beside the frontend code that consumes it.

The same arrangement ties their release work together. A field change, access callback, admin component, database adapter, and frontend query can ship in one deployment. That is convenient when one team owns the whole product. It is less attractive when a central CMS must serve several applications that upgrade Next.js on separate schedules.

The generated app is smaller than the 9,457-file workspace

commit 15d051b contained 9,457 files, about 979,289 lines of source, and a 75.5 MB checkout. Its pnpm workspaces include the core packages, database adapters, storage plugins, templates, examples, and a broad test estate. Evaluating the generated website template is a more focused adoption path than treating the upstream monorepo as an ordinary application dependency.

The README recommends create-payload-app and its website template for newcomers. That template combines the CMS and frontend with rich-text blocks, live preview, and on-demand revalidation. The one-click Vercel route pairs Next.js with Neon and Vercel Blob, while Cloudflare pairs Workers, D1, and R2. Those two paths make different database, storage, and runtime choices.

What happened when we ran it

Our sandbox installed commit 15d051b in 136 seconds, adding 2,322 packages and consuming 2,212 MB on disk. The build completed successfully in 137 seconds. We used a fresh unprivileged Debian container with 3 CPUs, 8 GB of RAM, the lab-node:22 image, and no secrets. These results cover the repository toolchain, not page speed, database latency, or editor load time.

The test command failed with exit code 1 after 22 seconds. Vitest reported 113 failed test files and no executed tests. It spawned 113 isolated workers at about 102 milliseconds of startup per file, and its own summary said the run spent 96 percent of worker time in worker work. The visible tail did not include the exception behind those file failures.

The supplied tail gives no cause for the failures. The defensible finding is that the full suite never reached a test case in our container. The repository had 16 CI workflow files and a tests directory, while the scan found no Dockerfile. A contributor should reproduce the project's documented test environment before changing core packages.

Current app requirements start at Node 24.15.0

The installation guide stored at commit 15d051b lists Node 24.15.0 or newer, Next.js 16.2.6 or newer, and TypeScript 6.0.3 or newer. It also says only specified Next.js 15 and 16 ranges are supported. Our source build passed inside lab-node:22. Application requirements for this commit still start at Node 24.15.0.

Payload is fully ESM, and adding it to an existing app can require moving frontend files into a route group and converting the Next config to ESM. The database adapter is another explicit choice: MongoDB uses Mongoose, while PostgreSQL and SQLite use Drizzle. PostgreSQL schema changes call for migrations. Open issue 14800 reports one generated down migration dropping a table before its dependent constraint and index.

MCP writes share Payload access rules and application side effects

The MCP plugin adds an HTTP endpoint at /api/mcp and uses Payload authentication when credentials are supplied. Collection tools can find, create, update, or delete documents, and each tool can be disabled or given a separate access callback. The documentation warns that development's overrideAccess=true path skips normal permission checks and is rejected outside development.

Bulk MCP creates are best effort rather than transactional: an item can fail after earlier documents have been saved. Version v3.90.2 fixed a TypeScript 6 crash in the plugin's create and update tools. Open issue 18490 then documented a different v3.90.2 edge: writes succeed, but revalidation called from hooks arrives after the streaming route has returned, leaving statically rendered pages stale.

October activity is high, with 769 open pull requests

GitHub showed 45,098 stars and a last push on October 5, 2026. Search results counted 499 open issues and 769 open pull requests, which explains the API's combined total of 1,268. The latest release, v3.90.2, shipped on September 23 with fixes for trailing slashes, cloud storage, multi-tenant forms, the MCP plugin, and runner configuration.

The numbers describe an active project and a wide review queue. They do not turn 1,268 into a bug count. Recent issue 18065 concerns Next.js 16.3 with Cache Components, matching the installation guide's warning that full compatibility is not guaranteed. Pin Payload with its supported Next.js range, then test the admin panel, previews, uploads, migrations, and revalidation on the host you plan to use.

Choose Payload when one team owns product and publishing

Payload earns a trial when TypeScript configuration, direct server queries, and a customizable React admin remove more work than framework coupling adds. Directus fits an existing SQL database, Strapi keeps the CMS behind a service boundary, and Keystone offers a narrower code-first comparison. Our 137-second build proves this commit compiled in the measured sandbox. The 113 failed files with no tests executed mean contributors still need a better-matched environment before trusting changes.

Alternatives

ProjectWhat it isPick it when
Directus gh↗A data Studio and API layer designed to sit over SQL databases.pick this instead when an existing SQL schema should remain the center of the system.
Strapi gh↗A JavaScript headless CMS with a separate admin application and plugin ecosystem.pick this instead when the CMS should be a service shared by several frontends.
KeystoneA TypeScript CMS centered on schema configuration, GraphQL, Prisma, and an admin UI.pick this instead when you want a narrower code-first CMS without Payload's Next.js-native product model.

What people are saying

  1. [github-trending] payloadcms/payload

Sources

  1. Payload README
  2. Payload repository facts
  3. Payload installation guide
  4. Payload database guide
  5. Payload MCP plugin guide
  6. Payload v3.90.2 release
  7. Payload Cache Components issue 18065
  8. Payload down-migration issue 14800

More data reviews

jq · pgx · HowToLiveLonger · ip2region · dbdelve · litestream · the whole board →