mrkeyoor.com_
Wed 16 Sept 18:59 UTC
Dataevaluationupdated 25 Aug 2026

payload review

Payload is a TypeScript backend and headless CMS that runs inside a Next.js application. You define collections and fields in code, then get an admin interface, authentication, access control, REST and GraphQL APIs, drafts, localization, hooks, and generated types around that data.

+123stars / 7d
Verdict

Our Payload workspace installed 2,292 packages and built in 101 seconds, but all 95 test files failed during setup before any tests ran. Payload is the best fit here for a TypeScript team that wants its CMS schema, backend logic, admin extensions, and Next.js frontend in one codebase. Choose Strapi or Directus when non-developers need more configuration power, or when the CMS should remain separate from the web framework.

We ran it

Lab card: what happened when we ran payloadScreenshot of payload (payloadcms.com)
Install✓ · 121s2292 packages · 2193 MB
Build✓ · 101s
Tests✗ · 26sran, no count parsed
Repo8894 files~875,696 lines of source · 72 MB · 16 CI workflows · tests dir

Answers from our run

Does payload build from source?

Dependencies installed in 121 seconds (2292 packages), and the build succeeded in 101 seconds. We cloned commit 3aa4043 into a clean Debian container with 3 CPUs and no project-specific setup.

Do payload's tests pass?

The test command failed in our container, and its output did not report a pass or fail count.

Who should not use payload?

Teams outside the Next.js and TypeScript stack: Payload's main advantage is its native place inside that application model.

What are the alternatives to payload?

Strapi, Directus, Keystone. Our Payload workspace installed 2,292 packages and built in 101 seconds, but all 95 test files failed during setup before any tests ran.

Setup3/5Fast generator path, heavy full workspace and deployment choices
Docs5/5Extensive guides, migration notes, templates, and examples
Community5/5Recent push with busy issue and pull-request activity
Maturity4/5Large v3 platform with active adapter and API changes

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 content models and application backend code in one repository.
Next.js products that benefit from querying Payload directly in React Server Components.
Agencies building editable sites, stores, portfolios, or campaign systems from reusable templates.
Developers who need deep control over the admin UI, field behavior, hooks, and permissions.

Who it’s NOT for

Teams outside the Next.js and TypeScript stack: Payload's main advantage is its native place inside that application model.
Editors who need a ready-made publishing workflow without developer setup: collections, fields, access rules, storage, and deployment are code and infrastructure decisions.
Projects expecting one database-neutral configuration to behave identically everywhere: the README offers Vercel with Neon and Blob or Cloudflare with D1 and R2, which are distinct runtime and storage paths.
Contributors who require a passing bare-workspace suite after install: our command failed all 95 test files during Vitest setup and ran no tests.
Teams unwilling to test access control carefully: current issue activity includes permission reporting, API-key field access, and trash behavior.

Setup reality

Our Node 22 sandbox installed 2,292 packages in 121 seconds and used 2,193 MB. The build succeeded in 101 seconds. Tests failed after 26 seconds: Vitest reported 95 failed files and no tests because failures occurred through 'test/vitest.setup.ts'. The tail does not identify the underlying setup error, so we cannot say which service or variable was missing.

A new product starts with 'create-payload-app' and then chooses a database, file storage, deployment target, authentication policy, and content model. The website template adds a Next.js frontend, Tailwind, rich-text blocks, preview, and revalidation. Vercel's path pairs Neon with Blob; Cloudflare's pairs Workers, D1, and R2.

The 72 MB checkout held 8,894 files and about 875,696 source lines. It is a pnpm monorepo with 16 CI workflow files and a tests directory, but no root Dockerfile. Consuming a generated application is more focused than developing all packages, adapters, examples, and templates in the repository.

Payload makes the CMS part of the Next.js application

Payload treats content configuration as TypeScript code inside a Next.js project. A collection definition can produce an admin screen, validation, generated types, REST and GraphQL access, authentication, hooks, and field-level permissions. React Server Components can query the database through Payload without making an HTTP round trip. This is a strong fit when content and application data overlap, or when a team is tired of keeping a separate CMS schema and frontend type definitions synchronized.

The repository was pushed on August 25, 2026, and v3.88.0 was released on August 11. GitHub reported 1,080 open issues and pull requests together. Same-day work touched API-key access, large uploads, Cloudflare request context, unique slugs, bulk delete query counts, live preview, and REST joins. That is active maintenance across a wide surface. It also means adopters should pin versions and read v3 release notes rather than treating the CMS as a static content appliance.

Code-first modeling gives developers control and responsibility

Payload's feature list includes drafts, versions, localization, block fields, Lexical rich text, conditional fields, document and field hooks, authentication, and granular access control. The React admin can be extended with server components. These are useful building blocks for products whose data rules cannot be expressed through a generic editor. A team can keep schema changes, hooks, and UI components in code review beside the frontend that consumes them.

That model asks developers to make more decisions. A 3-collection marketing site still needs field definitions, roles, storage, preview behavior, seed content, and deployment configuration. Access functions deserve direct tests, especially when they return query constraints rather than booleans. An issue updated on August 25 reported '/api/access' showing permission as true for a constrained operation. One report does not define the product, but it is a concrete reason to verify authorization through real API requests, not only through the admin interface.

The templates are useful starting points, not finished requirements

The quickstart runs 'pnpx create-payload-app@latest', and the README recommends the website template for newcomers. That template combines a frontend, Tailwind, custom rich-text blocks, live preview, and on-demand revalidation in one app folder. Other official templates include ecommerce. Examples can also be selected through the application generator. This is much better than starting from an empty schema when evaluating how editors and developers work together.

One-click deployments still encode architectural choices. Vercel combines a Next.js frontend, Neon database, and Vercel Blob. Cloudflare combines Workers, D1, and R2. Those 2 paths differ in runtime behavior, database capabilities, storage, debugging, and local parity. "Deploy anywhere" should be read as adapter support, not proof that every deployment behaves the same. Test migrations, uploads, preview, scheduled work, and request context on the actual target.

What happened when we ran it

Our sandbox cloned commit '3aa4043' into a 72 MB checkout with 8,894 files and about 875,696 source lines. Node 22 and pnpm installed 2,292 packages in 121 seconds, using 2,193 MB on disk. The complete workspace build succeeded in 101 seconds. The repository exposed 16 CI workflow files, a tests directory, and monorepo workspaces, while our root scanner found no Dockerfile.

Tests failed after 26 seconds. Vitest reported 95 failed test files and no executed tests. The tail pointed to 'test/vitest.setup.ts:38:1', then showed 0 milliseconds of setup and import work before the lifecycle command exited 1. Those lines do not reveal the original exception above the captured tail. We can say the suite failed during setup; we cannot responsibly name a missing database, package, variable, or system service from this evidence.

The contrast is informative: a 101-second successful build verifies that the pinned workspace compiled, while 95 setup failures mean our container did not reach behavior tests. Contributors should reproduce the documented test dependencies or CI environment before making changes. Product evaluators should use the generated app path and run a smaller acceptance suite around login, permissions, create and update hooks, drafts, upload storage, and deployment-specific behavior.

Payload trades separation for a single typed codebase

A conventional headless CMS sits across a network boundary. That separation lets several frontends share it and allows CMS operators to upgrade on their own schedule. Payload can still expose REST and GraphQL, but its distinctive path places backend and frontend in the same Next.js application. Direct server-component queries remove request ceremony, and generated TypeScript types make schema drift visible during development.

The tradeoff is coupling. A Next.js upgrade, Payload upgrade, database adapter change, or admin customization can affect one deployable application. The 8,894-file upstream checkout shows how much machinery exists behind the simple collection API. Keep custom code at documented extension points, avoid patching internals, and stage upgrades with representative content. Teams wanting a separate content service may find Strapi or Directus organizationally clearer even if the application code becomes more repetitive.

Choose Payload when developers own the publishing system

Payload is compelling when the people building the product also want to own its content model and editor behavior. MIT licensing, TypeScript schemas, a customizable admin, direct server access, and deployment adapters create a practical base for more than blog posts. The framework can act as a CMS or as the data and administration layer for a larger application.

Strapi suits UI-driven administration, Directus is attractive over an existing SQL database, and Keystone offers a narrower code-first comparison. Payload wins when Next.js integration is an advantage rather than a constraint. Our failed 95-file test setup should make contributors cautious about workspace prerequisites, but the successful build and active project give application teams a credible reason to test the generator with their own schema and deployment target.

Alternatives

ProjectWhat it isPick it when
Strapi gh↗A JavaScript headless CMS with a plugin ecosystem and an administrator-first content model.pick this instead when editors and administrators should configure more of the system through the UI.
Directus gh↗A data platform and admin application layered over SQL databases.pick this instead when an existing SQL schema is the center of the project and you want an instant data studio.
KeystoneA TypeScript headless CMS for schema-defined data, GraphQL, auth, and an admin UI.pick this instead when you want a smaller code-first CMS centered on GraphQL and Prisma.

What people are saying

  1. [github-trending] payloadcms/payload
  2. [hackernews] Malicious Rust crate Arrayref runs a build-time payload

Sources

  1. Payload README
  2. Payload v3.88.0 release
  3. Payload documentation
  4. Payload issue and pull-request activity

More data reviews

dbt · GeoLibre · TradingView-API · os-taxonomy · Lean · bokeh · the whole board →