Payload CMS Version 0.15.0 brings publishing, versions, performance, more
Tags: javascript, webdev, react, node
Published: 2022-03-17 15:53:24

We've just published our biggest version release yet. It comes with over 20 new Payload features and countless quality of life improvements for Payload developers and admin panel users.

We've been busy over the past few months. In addition to fixing bugs and adding polish to Payload's APIs and admin panel, we've released a ton of new features—some small, some massive. `0.15.0` is now available on NPM. Payload is now nearing our `1.0` release, and we couldn't be more excited.

## New Features

### Versions

By far the biggest change that `payload@0.15.0` brings is the introduction of Versions, Drafts, and Autosave. Payload now includes a way for you to keep a running history of document changes over time. You can easily go back and compare two versions, and restore changes back to a specific date.

It's extremely performant and opting in is super easy.

![Admin panel content change diff](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tmvh91ouudut5mlj7ez4.png)

For more information, <a href="https://payloadcms.com/docs/versions/overview">check out the docs</a>.

### Drafts

In addition to simply storing changes to your documents over time, Payload now includes a full set of `draft` functionality where your admins can keep drafts of documents before publishing them. This is super useful when you want to preview changes on your frontend(s) before you actually publish changes, or if you want to build a way to schedule publish dates in the future.

You can use Payload's existing Access Control to closely manage what users can publish, what users can only save drafts, who can read draft documents, and much more. <a href="https://payloadcms.com/docs/versions/drafts">Check out the docs</a> for more.

### Autosave

If you've opted into `versions` and `drafts`, you can now enable Autosave on your collections so that your editors never lose their work again.

It's a powerful but beautifully simple feature that saves progress as your admins work.


### New ways to customize Admin React components

In `0.15.0`, we've introduced a suite of new ways that you can easily customize the Admin UI with custom React components. We now support the following custom components:

**Custom Admin routes**

You can now easily inject your own routes and views directly into the Payload UI which allow you to build absolutely anything you can think of. Build custom functionality, reports, and utilities right into the Payload admin UI with ease. <a href="https://payloadcms.com/docs/admin/components#custom-routes">Check out the docs</a> for more info.

**Login**

- `BeforeLogin` - allows you to inject a custom component like a welcome message or instructions above the Login form
- `AfterLogin` - same as above, but below the form

![The Payload demo, showing what a BeforeLogin component might look like](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pihiyi125iefse7ayy4t.png)

*The Payload <a href="https://demo.payloadcms.com" target="_blank">public demo</a>, showing how a `BeforeLogin` component might be used*


**Dashboard**

- `BeforeDashboard` - inject a custom component into the Dashboard view so you can add custom logic and components directly into the Dashboard without having to replace the entire view
- `AfterDashboard` - same as above, but below the Dashboard

**Nav**

- `BeforeNavLinks` - Add your own links, functionality, and whatever you need before the Nav component without having to replace the entire Nav itself
- `AfterNavLinks` - same as above, but below the Nav sidebar links

### Rich Text Upload fields

Payload's Rich Text Upload functionality just got a lot more powerful by allowing users to add their own fields & data to embedded rich text uploads. For example, if you want to allow your admins to "link" an upload to a post, you can build fields directly into the Rich Text Upload to allow them to "edit" the Upload, and link it to another document or URL. You could also build in alignment controls and sizing controls, but it's totally open-ended and uses the same field schema that Payload's collections and globals do. It's simple but extremely powerful.

![Rich Text Upload Edit functionality](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mf8v1uq19ex6jqrpv9fa.png)

### Rich Text Indentation & Nested Bulleted Lists

Now, Payload ships with a built-in way to indent copy and nest bulleted lists.

## Performance Optimizations

`0.15.0` also comes with a suite of performance optimizations to both the API and the React Admin UI.

**GraphQL Relationship Population**

We've reduced the behind-the-scenes database queries that are run **by half** while querying relationship fields within GraphQL.

**Relationship Admin Field**

The Relationship field is now significantly more performant when being used with 10+ relationships.

**Much more**

To view the full list of performance optimizations and changes, check out the <a href="https://github.com/payloadcms/payload/blob/master/CHANGELOG.md#0150-2022-03-16">Changelog</a>.

## Bug fixes

In addition to all the new features and performance improvements that `0.15.0` brings, we've also fixed a handful of bugs. Since our beta launch, Payload has been put to the test in production projects around the world and our community has been so helpful to us in identifying bugs and writing up detailed reports regarding how to reproduce undesired behavior.

We're proud of the speed and commitment to solving issues that the Payload team has displayed over the past few months and are confident that this is only the beginning.

For a full list of bug fixes that are shipped with `0.15.0`, check the <a href="https://github.com/payloadcms/payload/blob/master/CHANGELOG.md#0150-2022-03-16">Changelog</a>.

## Breaking changes

Payload strives to keep breaking changes to an absolute minimum so that you can update Payload with ease. With all of these new features, we're happy to report that the only breaking change in this minor version release is related to GraphQL errors, which are now structured more according to how a developer might expect them to be returned.

Thanks to GitHub user [chladog](https://github.com/chladog) for the ideas and discussion around how to improve them. If you are handling GraphQL errors on your frontend(s) and would like to know how to migrate to this new version, <a href="https://github.com/payloadcms/payload/blob/master/CHANGELOG.md#0150-2022-03-16">check here</a>. for more details. Otherwise, you can update to `0.15.0` without fear of any breaking changes!

## More to come

It's a very exciting time for Payload, and we're getting closer and closer to 1.0. We're already the most feature-rich TypeScript CMS there is, but with every release Payload gets more stable and more powerful—and it's only the beginning.

Keep an eye out for more to come - and as always, we'd love to know what you think. Head over to join our <a href="https://github.com/payloadcms/payload/discussions">GitHub Discussions</a> if you have questions, thoughts, feedback, or feature requests!