v3.28.0
payloadcms/payloadv3.28.0Mar 11, 2025by denolfe
AI Summary
Introduces an opt-in compilation performance flag that can cut Payload's compile times in half by skipping server-only package bundling during development. It also upgrades Lexical to 0.27.1 and adds a new HTML converter.
Key Highlights
- Opt-in compilation speed improvement (50% faster)
- Lexical upgrade to 0.27.1
- New HTML converter for Lexical
- Disable auto-link creation
- Disable copy to locale option
New Features
- Opt-in dev bundle optimization
- Lexical 0.27.1 upgrade
- HTML converter
- Disable auto-link
- Disable copy to locale
Full Release Notes
## [v3.28.0](https://github.com/payloadcms/payload/compare/v3.27.0...v3.28.0) (2025-03-11)
## Important
### Compilation Performance Improvements
We’ve introduced a new opt-in flag that can cut Payload’s compile times in half during development. To enable it, add the following to your next.config.js:
```diff
const nextConfig = {
// ...
}
-export default withPayload(nextConfig)
+export default withPayload(nextConfig, { devBundleServerPackages: false })
```
In some rare cases, you may see unexpected behavior if your project relies on server-only Payload dependencies being bundled during development. Because of this, we’ve made the feature opt-in for existing projects.
### Lexical Version Bump
This release upgrades the lexical dependency from `0.21.0` to `0.27.1`. Alongside table improvements and bug fixes, this version bump lays the groundwork for frequently requested features like color pickers.
If you installed lexical manually, update it to `0.27.1`. Installing lexical manually is not recommended, as it may break between updates, and our re-exported versions should be used. See the [yellow banner box](https://payloadcms.com/docs/rich-text/custom-features) for details.
If you still encounter richtext-lexical errors, do the following, in this order:
1. Delete `node_modules`
2. Delete your lockfile (e.g. `pnpm-lock.json`)
3. Reinstall your dependencies (e.g. `pnpm install`)
---
### 🚀 Features
* defaults to noindex nofollow ([#11623](https://github.com/payloadcms/payload/issues/11623)) ([5285518](https://github.com/payloadcms/payload/commit/5285518))
* threads path through field validate function ([#11591](https://github.com/payloadcms/payload/issues/11591)) ([3ede7ab](https://github.com/payloadcms/payload/commit/3ede7ab))
* allow specification of which JWT extraction methods are supported, and in which order ([#10794](https://github.com/payloadcms/payload/issues/10794)) ([8f6d2e7](https://github.com/payloadcms/payload/commit/8f6d2e7))
* **db-mongodb:** strip keys from the data that don't exist in the schema from read results ([#11558](https://github.com/payloadcms/payload/issues/11558)) ([2ad035f](https://github.com/payloadcms/payload/commit/2ad035f))
* **next:** fully expose Next.js metadata ([#11593](https://github.com/payloadcms/payload/issues/11593)) ([397c1f1](https://github.com/payloadcms/payload/commit/397c1f1))
* **richtext-lexical:** allow disabling indentation for specific nodes ([#11631](https://github.com/payloadcms/payload/issues/11631)) ([eb09ce9](https://github.com/payloadcms/payload/commit/eb09ce9))
* **richtext-lexical:** upgrade lexical from 0.21.0 to 0.27.1 ([#11564](https://github.com/payloadcms/payload/issues/11564)) ([557ac99](https://github.com/payloadcms/payload/commit/557ac99))
* **richtext-lexical:** adds ability to disable auto link creation ([#11563](https://github.com/payloadcms/payload/issues/11563)) ([1e708bd](https://github.com/payloadcms/payload/commit/1e708bd))
* **richtext-lexical:** new HTML converter ([#11370](https://github.com/payloadcms/payload/issues/11370)) ([36921bd](https://github.com/payloadcms/payload/commit/36921bd))
* **ui:** form state queues ([#11579](https://github.com/payloadcms/payload/issues/11579)) ([ac1e3cf](https://github.com/payloadcms/payload/commit/ac1e3cf))
* **ui:** adds disable copy to locale option to collection config ([#11546](https://github.com/payloadcms/payload/issues/11546)) ([657ad20](https://github.com/payloadcms/payload/commit/657ad20))
### 🐛 Bug Fixes
* ensure only authenticated users can access the `payload-locked-documents` collection ([#11624](https://github.com/payloadcms/payload/issues/11624)) ([8f3d1bd](https://github.com/payloadcms/payload/commit/8f3d1bd))
* upload imageSizes forces original file uploads to be compressed ([#11612](https://github.com/payloadcms/payload/issues/11612)) ([6d0924e](https://github.com/payloadcms/payload/commit/6d0924e))
* add missing auth property to new defaults function ([#11561](https://github.com/payloadcms/payload/issues/11561)) ([3af0468](https://github.com/payloadcms/payload/commit/3af0468))
* **db-mongodb:** properly sanitize `updateVersion` read result ([#11589](https://github.com/payloadcms/payload/issues/11589)) ([e9afb36](https://github.com/payloadcms/payload/commit/e9afb36))
* **graphql:** sanitize graphql field names for schema generation ([#11556](https://github.com/payloadcms/payload/issues/11556)) ([029cac3](https://github.com/payloadcms/payload/commit/029cac3))
* **plugin-import-export:** plugin breaks `i18n` configuration ([#11590](https://github.com/payloadcms/payload/issues/11590)) ([5d65cb0](https://github.com/payloadcms/payload/commit/5d65cb0))
* **translations:** update translation placeholders to not be translated for lithuanian ([#11622](https://github.com/payloadcms/payload/issues/11622)) ([85f88a0](https://github.com/payloadcms/payload/commit/85f88a0))
* **ui:** adds fallback locale when defaultLocale is unavailable ([#11614](https://github.com/payloadcms/payload/issues/11614)) ([9ac7a3e](https://github.com/payloadcms/payload/commit/9ac7a3e))
* **ui:** stale list thumbnails when navigating ([#11609](https://github.com/payloadcms/payload/issues/11609)) ([fc5876a](https://github.com/payloadcms/payload/commit/fc5876a))
* **ui:** logic for showing copyToLocale button and adds test ([#11584](https://github.com/payloadcms/payload/issues/11584)) ([a53876d](https://github.com/payloadcms/payload/commit/a53876d))
* **ui:** upload.displayPreview should affect all previews in the admin panel ([#11496](https://github.com/payloadcms/payload/issues/11496)) ([6f90d62](https://github.com/payloadcms/payload/commit/6f90d62))
* **ui:** apply consistent styling to custom & default block thumbnails ([#11555](https://github.com/payloadcms/payload/issues/11555)) ([8378654](https://github.com/payloadcms/payload/commit/8378654))
* **ui:** incorrect error states ([#11574](https://github.com/payloadcms/payload/issues/11574)) ([4811531](https://github.com/payloadcms/payload/commit/4811531))
### ⚡ Performance
* 50% faster compilation speed by skipping bundling of server-only packages during dev ([#11594](https://github.com/payloadcms/payload/issues/11594)) ([c7bb694](https://github.com/payloadcms/payload/commit/c7bb694))
### 🛠 Refactors
* more reliable import map generation, supporting turbopack and tsconfig basePath ([#11618](https://github.com/payloadcms/payload/issues/11618)) ([243cdb1](https://github.com/payloadcms/payload/commit/243cdb1))
### 📚 Documentation
* fix documentation about custom i18n types ([#11386](https://github.com/payloadcms/payload/issues/11386)) ([38f61e9](https://github.com/payloadcms/payload/commit/38f61e9))
* document `payload migrate:create` flags ([#11592](https://github.com/payloadcms/payload/issues/11592)) ([3de1636](https://github.com/payloadcms/payload/commit/3de1636))
### 📝 Templates
* fix issue with populateAuthors hook breaking live-preview on website template ([#11608](https://github.com/payloadcms/payload/issues/11608)) ([72efc84](https://github.com/payloadcms/payload/commit/72efc84))
* allow displaying dynamic error message on forms created via Form Builder plugin ([#11275](https://github.com/payloadcms/payload/issues/11275)) ([814ced4](https://github.com/payloadcms/payload/commit/814ced4))
### ⚙️ CI
* adjust paths filter for workflows, only look at main.yml ([#11572](https://github.com/payloadcms/payload/issues/11572)) ([9f7e8f4](https://github.com/payloadcms/payload/commit/9f7e8f4))
* add canary nightly cron, adjust lock and stale crons ([259ea6a](https://github.com/payloadcms/payload/commit/259ea6a))
* use GITHUB_OUTPUT instead of set-output [skip ci] ([1ad1de7](https://github.com/payloadcms/payload/commit/1ad1de7))
* canary and internal releases [skip ci] ([#11565](https://github.com/payloadcms/payload/issues/11565)) ([1797782](https://github.com/payloadcms/payload/commit/1797782))
### 🏡 Chores
* set all licenses for internal tooling ([30af889](https://github.com/payloadcms/payload/commit/30af889))
* **db-postgres:** enable TypeScript strict ([#11560](https://github.com/payloadcms/payload/issues/11560)) ([c8f01e3](https://github.com/payloadcms/payload/commit/c8f01e3))
* **deps:** bump all eslint packages ([#11629](https://github.com/payloadcms/payload/issues/11629)) ([f2da72b](https://github.com/payloadcms/payload/commit/f2da72b))
* **deps:** bump next.js from 15.2.0 to 15.2.1 in monorepo ([#11576](https://github.com/payloadcms/payload/issues/11576)) ([b0da85d](https://github.com/payloadcms/payload/commit/b0da85d))
* **deps:** bumps @payloadcms/admin-bar in templates and examples ([#11566](https://github.com/payloadcms/payload/issues/11566)) ([7cef890](https://github.com/payloadcms/payload/commit/7cef890))
* **ui:** code/json field full height should include any padding added ([#11607](https://github.com/payloadcms/payload/issues/11607)) ([051c1fe](https://github.com/payloadcms/payload/commit/051c1fe))
* **ui:** removes margin when row is empty and passes style from props ([#11504](https://github.com/payloadcms/payload/issues/11504)) ([6699844](https://github.com/payloadcms/payload/commit/6699844))
### 🤝 Contributors
- Germán Jabloñski (@GermanJablo)
- Alessio Gravili (@AlessioGr)
- Jacob Fletcher (@jacobsfletch)
- Patrik (@PatrikKozak)
- Rokas Puzonas (@RokasPuzonas)
- Jessica Chowdhury (@JessChowdhury)
- Dan Ribbens (@DanRibbens)
- Jarrod Flesch (@JarrodMFlesch)
- Paul (@paulpopus)
- Sasha (@r1tsuu)
- Md. Tajmirul Islam Akhand (@Tajmirul)
- Elliot DeNolf (@denolfe)
- James Mikrut (@jmikrut)