Simplify your stack and build anything. Or everything.
Build tomorrow’s web with a modern solution you truly own.
Code-based nature means you can build on top of it to power anything.
It’s time to take back your content infrastructure.

Payload 3.0: The first CMS that installs directly into any Next.js app

Published On
Meet the first and only Next.js CMS
Meet the first and only Next.js CMS

Payload has completely reinvented the Headless CMS and solved the headaches you might encounter when running Headless infrastructure.


Today is the culmination of a year of work from a small but very crazy and passionate team. I was going to crack another Budweiser in celebration here, but I need to get through recording about a million more videos. So not today—maybe tomorrow.

As of today, Payload has completely reinvented the Headless CMS and solved the headaches you might encounter when running Headless infrastructure.

Payload is the only Next.js CMS—in a way that no other CMS can come close to. It installs directly into your app folder without any third-party SaaS services—no free trials, no free tier, no subscriptions. It’s yours. This is the definition of open source.

And this is all possible with one line:

pnpx create-payload-app

Honestly, it's an overdue evolution of how projects, large and small, think about connecting content to presentation layers.

This release is about more than just becoming the first Next.js CMS: Every part of Payload has been significantly improved, slimmed down, optimized, and generally sharpened.

We launched the 3.0 beta back in April, and since then, the community adoption, testing, and feedback have blown us away.

It feels surreal to work so hard for so long on something that so many people are interested in. Our community has kept up with our manic beta-breaking changes, instantly helping us spot areas of improvement, regressions, or new feature ideas—all with detailed reproductions and feedback.

None of you get paid for this; you take time out of your own day to help this project. That is the spirit of open source. We realize that—and we do not take it for granted. Your commitment drives us to do the best work we can.

So seriously, thank you, and let’s keep it going.

Key structural changes in Payload 3.0

Here’s a quick recap of the structural changes we’ve made in Payload 3.0. First, we are now Next.js native. Payload now installs fully in any Next.js app, including both the admin panel and full backend—right in your app folder.

Again: no free trials, no free tiers. It's yours.

You can deploy it anywhere: serverless on Vercel for free, in a container, or wherever you want.

With Payload built to work perfectly with all Next.js features, there’s no need for a separate front and backend unless you prefer to keep them separate. If you’re using Next for your frontend, this basically gives a head back to the headless CMS.

You get all the power of templating, rendering, and dynamic components right within Payload.

Another major update is that we’ve marked PostgreSQL and Lexical as stable. Both have been rigorously tested over the last year. We’re also shipping SQLite and Vercel PostgreSQL database adapters, thanks to Drizzle, using the same code across all three adapters.

Overhauled and simplified exports pattern

Payload exports are now easier to manage. You can import any utility, type, or component with a simple import { WhateverType } from 'payload'. If you want to import a Payload component to reuse in your UI, import { Button } from '@payloadcms/ui'. Simple, done. It's just flat and simple.

Additionally, we converted everything to ECMAScript Modules (ESM), which aligns with modern standards and helps push Node forward.

Server components and server functions

Importantly, you can use the local API in server components and server functions to query and mutate your data in Payload. This goes straight to the database without needing a third-party API.

This is the fastest way to manage data in a Next.js app, and Payload is the only CMS that supports this capability.

Enhanced portability across front-end frameworks

Payload 3.0 is significantly more portable.

You can now use it seamlessly with Astro, SvelteKit, Remix, or any Node environment.

If you install Payload in Remix, for example, it won’t bring unnecessary overhead like the admin panel, REST API, or GraphQL engine. The result is a lean, flexible setup with just 27 dependencies—down from 88 in 2.0.

New features shaped by community and customer feedback

Payload 3.0 also introduces a host of new features based on input from our community and enterprise customers, all of which go live today.


  1. First up, the join field allows for more complex database architectures. For example, in a movie collection, you can create a relationship to a director and surface all movies directed by a particular director with a single join. This join is highly performant and operates at the database level.

  2. Another new addition is the Select and Populate APIs. These features help you optimize queries by selectively loading only the fields you need. You can reduce the JSON output significantly, tailoring your queries to retrieve only the essential data. The new defaultPopulate option lets you specify fields for automatic inclusion, and you can override this setting on a query-by-query basis.

  3. Lexical is now stable, with new features to enhance the editor experience. Payload now supports inline and block-level components within Lexical. For example, you can create dynamic inline references, like car prices from a third-party API, directly in rich text. Adding and customizing these components has become much easier.

    You can also add block-level components, such as a warning banner, directly in rich text, making Lexical highly customizable without requiring deep knowledge of its workings.
  4. One of the most significant additions in 3.0 is a fully functional jobs queue, a common feature in frameworks like Laravel and Rails. With this, you can defer tasks separately from the main API, run them on a schedule, or set up workflows with multiple tasks that run in a specific order.

    Tasks and workflows are defined in the Payload config. Each task includes arguments, output, and a handler function.

    You can set up multiple queues with different schedules, and integrate them with Vercel Cron or other cron services to automate tasks in your application.

    All of this comes out of the box with Payload, and works seamlessly with the local API.

  5. Payload now supports bulk uploads, allowing you to select multiple files and upload them simultaneously.

    This is especially useful for creating galleries or handling large sets of media files. The new hasMany option for the upload field simplifies organizing and managing multiple files in a single location.

  6. Live Preview, introduced in 2.0, is now stable, with added support for server components. Previously, Live Preview required client-side rendering, but now you can use server components across your entire front end.

    Payload’s new website template showcases the latest features of Next.js and Payload, including server-side Live Preview with full server component support. The front end is built entirely with Tailwind and server components.

    You can check that out here:
pnpx create-payload-app my-project -t website


  1. Alongside the big architectural changes, Payload 3.0 includes numerous other improvements across the board:
  • Removed GraphQL overhead: GraphQL will now only start if you’re using it, which reduces Payload’s initialization time.
  • React Compiler: Payload now uses the React compiler before shipping code, leading to performance gains across the board.
  • Ability to run migrations on production init, not in CI: You can now run migrations directly in production rather than in CI, addressing scenarios where enterprises may lack database access in CI environments.
  • UploadThing storage adapter: We've introduced a storage adapter for UploadThing, allowing seamless integration with Payload's file storage.
  • New Local API operations: Payload’s local API now has optimized operations that streamline admin panel data requirements, improving performance.
  • New baseListFilter collection option: Helpful for multi-tenant applications with Payload, or for localized content where some docs aren't available in all locales.
  • Lexical fixed toolbar option
  • Optimized the way that relational DBs store relations: We’ve also improved the way relational databases handle relationships, using ID columns for simple relations and expanding support for PostgreSQL fields, including JSON fields and point data types. You can now also pass in a custom Drizzle schema if you want to tailor it to your needs.
  • Fully typed i8n t function: Gives you the T function for outputting typed translated strings.
  • Log in with username rather than email: Choose username, email, or both.
  • Easy pattern for custom component props: Define client and server props in a declarative way.
  • Email adapter pattern: For future Cloudflare compatibility. A Resend HTTP API adapter available.
  • Optimized the shape of /access permissions results: Large configs used to send significant JSON—now they do not.
  • Sort by multiple fields: Works seamlessly on the database level.
  • MongoDB now saves ObjectID for relationships
  • Document locking
  • NotFound and Forbidden are no longer errors
  • New toast notifications: We switched to Sonner, which offers a cleaner and more efficient notification system.
  • Virtual Fields: Just add virtual: true to any field to create a virtual field without needing hooks.
  • Customize filenames before upload: File names can now be customized before upload, ideal for standardizing or sanitizing file naming conventions.
  • Localized field indicators: Admin panels now clearly indicate at-a-glance which fields are localized and which are not.
  • Scope all payload CSS to payload-default layer: All Payload CSS is now scoped to make overriding styles easier, and custom CSS now has higher specificity.
  • Custom CSS will now have the highest possible specificity: Tailwind lovers can now use Tailwind and not have it take over the universe.
  • Duplicate and delete from drawers: Previously, you could only perform these actions from the main edit view.
  • Publish individual locale: Now you can publish a single locale without publishing all of them.
  • More control over log level customization: You can now determine which types of logs come through at which level.

Looking forward

Payload 3.0 is stable, with no further breaking changes as long as we’re on this version.

Looking ahead to 4.0, which will come at some point, we’ll be adding more features and modernizing the admin panel to increase customization and usability.

We’re excited to see what you’ll build with Payload 3.0—let us know what you think, and we hope to see you on Discord and GitHub.