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:
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 for details.
If you still encounter richtext-lexical errors, do the following, in this order:
- Delete
node_modules
- Delete your lockfile (e.g.
pnpm-lock.json
) - Reinstall your dependencies (e.g.
pnpm install
)
🚀 Features
- defaults to noindex nofollow (#11623) (5285518)
- threads path through field validate function (#11591) (3ede7ab)
- allow specification of which JWT extraction methods are supported, and in which order (#10794) (8f6d2e7)
- db-mongodb: strip keys from the data that don't exist in the schema from read results (#11558) (2ad035f)
- next: fully expose Next.js metadata (#11593) (397c1f1)
- richtext-lexical: allow disabling indentation for specific nodes (#11631) (eb09ce9)
- richtext-lexical: upgrade lexical from 0.21.0 to 0.27.1 (#11564) (557ac99)
- richtext-lexical: adds ability to disable auto link creation (#11563) (1e708bd)
- richtext-lexical: new HTML converter (#11370) (36921bd)
- ui: form state queues (#11579) (ac1e3cf)
- ui: adds disable copy to locale option to collection config (#11546) (657ad20)
🐛 Bug Fixes
- ensure only authenticated users can access the
payload-locked-documents
collection (#11624) (8f3d1bd) - upload imageSizes forces original file uploads to be compressed (#11612) (6d0924e)
- add missing auth property to new defaults function (#11561) (3af0468)
- db-mongodb: properly sanitize
updateVersion
read result (#11589) (e9afb36) - graphql: sanitize graphql field names for schema generation (#11556) (029cac3)
- plugin-import-export: plugin breaks
i18n
configuration (#11590) (5d65cb0) - translations: update translation placeholders to not be translated for lithuanian (#11622) (85f88a0)
- ui: adds fallback locale when defaultLocale is unavailable (#11614) (9ac7a3e)
- ui: stale list thumbnails when navigating (#11609) (fc5876a)
- ui: logic for showing copyToLocale button and adds test (#11584) (a53876d)
- ui: upload.displayPreview should affect all previews in the admin panel (#11496) (6f90d62)
- ui: apply consistent styling to custom & default block thumbnails (#11555) (8378654)
- ui: incorrect error states (#11574) (4811531)
⚡ Performance
- 50% faster compilation speed by skipping bundling of server-only packages during dev (#11594) (c7bb694)
🛠 Refactors
📚 Documentation
- fix documentation about custom i18n types (#11386) (38f61e9)
- document
payload migrate:create
flags (#11592) (3de1636)
📝 Templates
- fix issue with populateAuthors hook breaking live-preview on website template (#11608) (72efc84)
- allow displaying dynamic error message on forms created via Form Builder plugin (#11275) (814ced4)
⚙️ CI
- adjust paths filter for workflows, only look at main.yml (#11572) (9f7e8f4)
- add canary nightly cron, adjust lock and stale crons (259ea6a)
- use GITHUB_OUTPUT instead of set-output [skip ci] (1ad1de7)
- canary and internal releases [skip ci] (#11565) (1797782)
🏡 Chores
- set all licenses for internal tooling (30af889)
- db-postgres: enable TypeScript strict (#11560) (c8f01e3)
- deps: bump all eslint packages (#11629) (f2da72b)
- deps: bump next.js from 15.2.0 to 15.2.1 in monorepo (#11576) (b0da85d)
- deps: bumps @payloadcms/admin-bar in templates and examples (#11566) (7cef890)
- ui: code/json field full height should include any padding added (#11607) (051c1fe)
- ui: removes margin when row is empty and passes style from props (#11504) (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)