# Payload changelog > A TypeScript-native headless CMS that runs inside a Next.js application. - Vendor: Payload - Category: Developer Tools - Official site: https://payloadcms.com - Tracked by: What's New (https://whatsnew.fyi/product/payload-cms) - Harvested from: GitHub (payloadcms/payload) - Entries below: 10 (newest first) What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. ## Releases ### v3.87.1 - Date: 2026-08-06 - Version: v3.87.1 - Original notes: https://github.com/payloadcms/payload/releases/tag/v3.87.1 - Permalink: https://whatsnew.fyi/product/payload-cms/releases/v3.87.1 - **fixed** — Connect to the correct Next.js dev HMR endpoint per version - **security** — Bump mongoose to 8.24.1 for GHSA-664h-wqgq-64gw - **security** — Bump undici for security vulnerability - **security** — Bump @modelcontextprotocol/sdk to 1.30.0 for GHSA-frvp-7c67-39w9 - **fixed** — Preserve link drawer form state in richtext-lexical - **fixed** — Fix with-cloudflare-d1 build and bump dependencies ##### [v3.87.1](https://github.com/payloadcms/payload/compare/v3.87.0...v3.87.1) (2026-08-06) ###### 🐛 Bug Fixes * connect to the correct Next.js dev HMR endpoint per version ([#17644](https://github.com/payloadcms/payload/issues/17644)) ([291ac66](https://github.com/payloadcms/payload/commit/291ac66)) * **db-mongodb:** bump mongoose to 8.24.1 for GHSA-664h-wqgq-64gw (3.x backport of #17609) ([#17608](https://github.com/payloadcms/payload/issues/17608)) ([f039324](https://github.com/payloadcms/payload/commit/f039324)) * **deps:** bump undici ([#17630](https://github.com/payloadcms/payload/issues/17630)) ([9e2c11e](https://github.com/payloadcms/payload/commit/9e2c11e)) * **plugin-mcp:** bump @modelcontextprotocol/sdk to 1.30.0 for GHSA-frvp-7c67-39w9 (3.x) ([#17611](https://github.com/payloadcms/payload/issues/17611)) ([0cb605d](https://github.com/payloadcms/payload/commit/0cb605d)) * **richtext-lexical:** preserve link drawer form state ([#17586](https://github.com/payloadcms/payload/issues/17586)) ([90fb9e1](https://github.com/payloadcms/payload/commit/90fb9e1)) * **templates:** fix with-cloudflare-d1 build and bump dependencies ([#17577](https://github.com/payloadcms/payload/issues/17577)) ([ca3e899](https://github.com/payloadcms/payload/commit/ca3e899)) ###### 📚 Documentation * update admin panel location link in custom components docs ([#17624](https://github.com/payloadcms/payload/issues/17624)) ([57178e3](https://github.com/payloadcms/payload/commit/57178e3)) ###### ⚙️ CI * allow changes job to check out repository ([#17643](https://github.com/payloadcms/payload/issues/17643)) ([ec4f979](https://github.com/payloadcms/payload/commit/ec4f979)) ###### 🤝 Contributors - Nate Lentz (@nathanlentz) - Jarrod Flesch (@JarrodMFlesch) - Elliot DeNolf (@denolfe) - Sean Zubrickas (@zubricks) - Patrik (@PatrikKozak) ### v3.87.0 - Date: 2026-07-31 - Version: v3.87.0 - Original notes: https://github.com/payloadcms/payload/releases/tag/v3.87.0 - Permalink: https://whatsnew.fyi/product/payload-cms/releases/v3.87.0 - **added** — storage-azure client uploads with chunkLargeFiles can now support files larger than 5gb - **fixed** — preserve parent localization through tabs - **fixed** — replace image-size with image-dimensions dependency for upload dimensions - **fixed** — forward locale in count and countGlobalVersions - **fixed** — pass id to delete access control on soft delete in updateByID - **fixed** — prefer draft titles in by folder view - **fixed** — arrays and blocks should handle null values - **fixed** — db-mongodb error on null values in arrays and blocks - **fixed** — drizzle validate companion table name length against 63-char limit - **fixed** — drizzle dedupe reused localized block tables - **fixed** — plugin-multi-tenant apply tenant on confirm - **fixed** — storage-vercel-blob allow overwriting existing blob keys - **fixed** — templates prevent unauthenticated draft-mode access in website preview route - **fixed** — templates mark website button as client component for radix-slot context - **fixed** — ui resolve named-tab field permissions in bulk edit field select - **fixed** — ui keep folder create drawers open during autosave - **fixed** — ui handle undefined field admin components - **changed** — export parse params and related sanitizers ##### [v3.87.0](https://github.com/payloadcms/payload/compare/v3.86.0...v3.87.0) (2026-07-31) ###### 🚀 Features * **storage-azure:** client uploads with chunkLargeFiles can now support files larger than 5gb ([#17319](https://github.com/payloadcms/payload/issues/17319)) ([3c00a39](https://github.com/payloadcms/payload/commit/3c00a39)) ###### 🐛 Bug Fixes * preserve parent localization through tabs 3.x ([#17591](https://github.com/payloadcms/payload/issues/17591)) ([9c8d636](https://github.com/payloadcms/payload/commit/9c8d636)) * replace image-size with image-dimensions dependency for upload dimensions ([#17571](https://github.com/payloadcms/payload/issues/17571)) ([2a99a01](https://github.com/payloadcms/payload/commit/2a99a01)) * forward locale in count and countGlobalVersions (3.x) ([#17547](https://github.com/payloadcms/payload/issues/17547)) ([e042561](https://github.com/payloadcms/payload/commit/e042561)) * pass id to delete access control on soft delete in updateByID ([#17529](https://github.com/payloadcms/payload/issues/17529)) ([a539f5b](https://github.com/payloadcms/payload/commit/a539f5b)) * prefer draft titles in by folder view ([#17412](https://github.com/payloadcms/payload/issues/17412)) ([ef8a6a5](https://github.com/payloadcms/payload/commit/ef8a6a5)) * arrays and blocks should handle null values, v3 backport ([#17278](https://github.com/payloadcms/payload/issues/17278)) ([2a69863](https://github.com/payloadcms/payload/commit/2a69863)) * **db-mongodb:** error on null values in arrays and blocks ([#17190](https://github.com/payloadcms/payload/issues/17190)) ([249f8df](https://github.com/payloadcms/payload/commit/249f8df)) * **drizzle:** validate companion table name length against 63-char limit ([#17563](https://github.com/payloadcms/payload/issues/17563)) ([fd629f2](https://github.com/payloadcms/payload/commit/fd629f2)) * **drizzle:** dedupe reused localized block tables ([#17430](https://github.com/payloadcms/payload/issues/17430)) ([3e8191c](https://github.com/payloadcms/payload/commit/3e8191c)) * **plugin-multi-tenant:** apply tenant on confirm ([#17350](https://github.com/payloadcms/payload/issues/17350)) ([09e01df](https://github.com/payloadcms/payload/commit/09e01df)) * **storage-vercel-blob:** allow overwriting existing blob keys ([#17385](https://github.com/payloadcms/payload/issues/17385)) ([fc2572e](https://github.com/payloadcms/payload/commit/fc2572e)) * **templates:** prevent unauthenticated draft-mode access in website preview route ([#17472](https://github.com/payloadcms/payload/issues/17472)) ([0c2e9a8](https://github.com/payloadcms/payload/commit/0c2e9a8)) * **templates:** mark website button as client component for radix-slot context ([#17474](https://github.com/payloadcms/payload/issues/17474)) ([981b282](https://github.com/payloadcms/payload/commit/981b282)) * **ui:** resolve named-tab field permissions in bulk edit field select (3.x backport of #17523) ([#17524](https://github.com/payloadcms/payload/issues/17524)) ([2371624](https://github.com/payloadcms/payload/commit/2371624)) * **ui:** keep folder create drawers open during autosave ([#17421](https://github.com/payloadcms/payload/issues/17421)) ([bf72bda](https://github.com/payloadcms/payload/commit/bf72bda)) * **ui:** handle undefined field admin components ([#17388](https://github.com/payloadcms/payload/issues/17388)) ([5157c72](https://github.com/payloadcms/payload/commit/5157c72)) ###### 📚 Documentation * remove deprecated root endpoint property ([#17570](https://github.com/payloadcms/payload/issues/17570)) ([6402daa](https://github.com/payloadcms/payload/commit/6402daa)) * accessibility banner fix ([#17431](https://github.com/payloadcms/payload/issues/17431)) ([29dd43c](https://github.com/payloadcms/payload/commit/29dd43c)) * fix link in live preview dynamic url section ([#17340](https://github.com/payloadcms/payload/issues/17340)) ([cc81ef0](https://github.com/payloadcms/payload/commit/cc81ef0)) _[Truncated at 4000 characters — full notes: https://github.com/payloadcms/payload/releases/tag/v3.87.0]_ ### v3.86.0 - Date: 2026-07-10 - Version: v3.86.0 - Original notes: https://github.com/payloadcms/payload/releases/tag/v3.86.0 - Permalink: https://whatsnew.fyi/product/payload-cms/releases/v3.86.0 - **added** — Add collection-level disableBulkDelete option - **added** — Add livePreview.openByDefault config option to UI - **added** — Backport plugin-form-builder v3 to support translations - **fixed** — Coerce schedulePublish doc.value to collection ID type before update - **fixed** — Escape regex metacharacters in isURLAllowed pathname allow-list - **fixed** — Respect disabled GraphQL config in v3 backport - **fixed** — Allow access to files reuploaded on a draft - **fixed** — Run tenant delete cleanup inside the request transaction in plugin-multi-tenant - **fixed** — Use qs-esm allowEmptyArrays parameter in SDK - **fixed** — Skip presentational fields in form state when admin.condition is false in UI - **fixed** — Prevent slug field error tooltip from hiding lock button in UI ##### [v3.86.0](https://github.com/payloadcms/payload/compare/v3.85.2...v3.86.0) (2026-07-10) ###### 🚀 Features * collection-level disableBulkDelete ([#17207](https://github.com/payloadcms/payload/issues/17207)) ([ca02cdc](https://github.com/payloadcms/payload/commit/ca02cdc)) * **plugin-form-builder:** v3 backport to support translations ([#17255](https://github.com/payloadcms/payload/issues/17255)) ([2cde8c8](https://github.com/payloadcms/payload/commit/2cde8c8)) * **ui:** add livePreview.openByDefault config option ([#17213](https://github.com/payloadcms/payload/issues/17213)) ([f23b693](https://github.com/payloadcms/payload/commit/f23b693)) ###### 🐛 Bug Fixes * coerce schedulePublish doc.value to collection ID type before update ([#17238](https://github.com/payloadcms/payload/issues/17238)) ([7de11b2](https://github.com/payloadcms/payload/commit/7de11b2)) * escape regex metacharacters in isURLAllowed pathname allow-list ([#17237](https://github.com/payloadcms/payload/issues/17237)) ([2061859](https://github.com/payloadcms/payload/commit/2061859)) * respect disabled GraphQL config, v3 backport ([#17228](https://github.com/payloadcms/payload/issues/17228)) ([9e9c35a](https://github.com/payloadcms/payload/commit/9e9c35a)) * allow access to files reuploaded on a draft ([#17209](https://github.com/payloadcms/payload/issues/17209)) ([f02d22a](https://github.com/payloadcms/payload/commit/f02d22a)) * **plugin-multi-tenant:** run tenant delete cleanup inside the request transaction ([#17175](https://github.com/payloadcms/payload/issues/17175)) ([d128fde](https://github.com/payloadcms/payload/commit/d128fde)) * **sdk:** use qs-esm allowEmptyArrays parameter ([#17208](https://github.com/payloadcms/payload/issues/17208)) ([c7dc68e](https://github.com/payloadcms/payload/commit/c7dc68e)) * **ui:** presentational fields skipped in form state when admin.condition is false ([#17224](https://github.com/payloadcms/payload/issues/17224)) ([f31f26d](https://github.com/payloadcms/payload/commit/f31f26d)) * **ui:** prevent slug field error tooltip from hiding lock button ([#15885](https://github.com/payloadcms/payload/issues/15885)) ([908fba1](https://github.com/payloadcms/payload/commit/908fba1)) ###### ⚙️ CI * upgrade pnpm to v11 ([#17169](https://github.com/payloadcms/payload/issues/17169)) ([ca72620](https://github.com/payloadcms/payload/commit/ca72620)) ###### 🤝 Contributors - Jessica Rynkar (@JessRynkar) - Ævar Þór Gunnlaugsson (@aevarOrigo) - Sasha (@r1tsuu) - Herman Ciechanowiec (@ciechanowiec) - Vivek Tyagi (@darkspirit2802) - Noah Bachmann (@noahbachmann) - Jake Fletcher (@jacobsfletch) - Amelia (@LimChorngUan) - German Jablonski (@GermanJablo) - Elliot DeNolf (@denolfe) - Jarrod Flesch (@JarrodMFlesch) ### v3.85.2 - Date: 2026-07-01 - Version: v3.85.2 - Original notes: https://github.com/payloadcms/payload/releases/tag/v3.85.2 - Permalink: https://whatsnew.fyi/product/payload-cms/releases/v3.85.2 - **fixed** — Fix payload bin fails with tsx on node v23.5+ - **fixed** — Regenerate reused array and block row IDs during bulk update - **fixed** — Prevent type generation script from hanging on storage-r2 - **fixed** — Prevent reordering from unpublishing documents that have a newer draft - **fixed** — Remove duplicate IDs in nested relationship queries for MongoDB - **security** — Resolve high severity audit vulnerabilities - **security** — Override transitive js-cookie to ^3.0.7 for CVE-2026-46625 - **fixed** — Preserve failing sub-table on unique-constraint ValidationError in Drizzle - **fixed** — Split client and server utility exports in plugin-cloud-storage - **fixed** — Prevent draft file reupload from unpublishing the document in plugin-cloud-storage - **fixed** — Preserve hard line breaks on markdown import in richtext-lexical - **fixed** — Replace Malay strings in Burmese (my) locale - **fixed** — Preserve polymorphic upload bulk select relation in UI - **fixed** — List relationship cell shows (Untitled) for draft-only titles in UI - **fixed** — Respect admin.condition on row fields in UI ##### [v3.85.2](https://github.com/payloadcms/payload/compare/v3.85.1...v3.85.2) (2026-07-01) ###### 🐛 Bug Fixes * payload bin fails with tsx on node v23.5+ ([#17081](https://github.com/payloadcms/payload/issues/17081)) ([afb0226](https://github.com/payloadcms/payload/commit/afb0226)) * regenerate reused array and block row IDs during bulk update (3.x) ([#17018](https://github.com/payloadcms/payload/issues/17018)) ([e526c88](https://github.com/payloadcms/payload/commit/e526c88)) * prevent type generation script from hanging on storage-r2 ([#17020](https://github.com/payloadcms/payload/issues/17020)) ([b681448](https://github.com/payloadcms/payload/commit/b681448)) * prevent reordering from unpublishing documents that have a newer draft ([#16969](https://github.com/payloadcms/payload/issues/16969)) ([b4d43c0](https://github.com/payloadcms/payload/commit/b4d43c0)) * **db-mongodb:** remove duplicate IDs in nested relationship queries ([#17019](https://github.com/payloadcms/payload/issues/17019)) ([8533dfb](https://github.com/payloadcms/payload/commit/8533dfb)) * **deps:** resolve high severity audit vulnerabilities ([#17086](https://github.com/payloadcms/payload/issues/17086)) ([ac000e5](https://github.com/payloadcms/payload/commit/ac000e5)) * **deps:** override transitive js-cookie to ^3.0.7 (CVE-2026-46625) ([#17000](https://github.com/payloadcms/payload/issues/17000)) ([ef888de](https://github.com/payloadcms/payload/commit/ef888de)) * **drizzle:** preserve failing sub-table on unique-constraint ValidationError (3.x) ([#17015](https://github.com/payloadcms/payload/issues/17015)) ([6dfac53](https://github.com/payloadcms/payload/commit/6dfac53)) * **plugin-cloud-storage:** split client and server utility exports ([#17152](https://github.com/payloadcms/payload/issues/17152)) ([30bc3fd](https://github.com/payloadcms/payload/commit/30bc3fd)) * **plugin-cloud-storage:** prevent draft file reupload from unpublishing the document (3.x) ([#17034](https://github.com/payloadcms/payload/issues/17034)) ([a18ae22](https://github.com/payloadcms/payload/commit/a18ae22)) * **richtext-lexical:** preserve hard line breaks on markdown import ([#17061](https://github.com/payloadcms/payload/issues/17061)) ([c0affcb](https://github.com/payloadcms/payload/commit/c0affcb)) * **translations:** replace Malay strings in Burmese (my) locale (3.x) ([#17032](https://github.com/payloadcms/payload/issues/17032)) ([c3ae01d](https://github.com/payloadcms/payload/commit/c3ae01d)) * **ui:** preserve polymorphic upload bulk select relation ([#17112](https://github.com/payloadcms/payload/issues/17112)) ([9691e42](https://github.com/payloadcms/payload/commit/9691e42)) * **ui:** list relationship cell shows (Untitled) for draft-only titles ([#16979](https://github.com/payloadcms/payload/issues/16979)) ([16152e2](https://github.com/payloadcms/payload/commit/16152e2)) * **ui:** respect admin.condition on row fields ([#16954](https://github.com/payloadcms/payload/issues/16954)) ([29afa77](https://github.com/payloadcms/payload/commit/29afa77)) ###### ⚙️ CI * backport test service image pinning to ghcr on 3.x ([#17162](https://github.com/payloadcms/payload/issues/17162)) ([d04d47e](https://github.com/payloadcms/payload/commit/d04d47e)) * reintroduce audit script ([#17122](https://github.com/payloadcms/payload/issues/17122)) ([f76d670](https://github.com/payloadcms/payload/commit/f76d670)) ###### 🤝 Contributors - Jarrod Flesch (@JarrodMFlesch) - Elliot DeNolf (@denolfe) - Sasha (@r1tsuu) - German Jablonski (@GermanJablo) - Amelia (@LimChorngUan) ### v3.85.1 - Date: 2026-06-09 - Version: v3.85.1 - Original notes: https://github.com/payloadcms/payload/releases/tag/v3.85.1 - Permalink: https://whatsnew.fyi/product/payload-cms/releases/v3.85.1 - **fixed** — Fix draft save and duplicate behaviour on upload-enabled collections - **fixed** — Bin scripts cannot import dependencies without explicit "type": "module" - **fixed** — Add type declarations for css export for TypeScript 6 compatibility - **fixed** — Follow redirects when fetching uploaded files for MIME type detection - **fixed** — Fix CSV import of arrays and richText in plugin-import-export - **fixed** — Use explicit relative paths for internal SCSS imports in ui - **fixed** — Hide entire tabs field when admin.condition is false - **changed** — Skip rendering custom components hidden by admin.condition for improved performance ##### [v3.85.1](https://github.com/payloadcms/payload/compare/v3.85.0...v3.85.1) (2026-06-09) ###### 🐛 Bug Fixes * fix draft save and duplicate behaviour on upload-enabled collections ([#16853](https://github.com/payloadcms/payload/issues/16853)) ([fad992c](https://github.com/payloadcms/payload/commit/fad992c)) * bin scripts cannot import dependencies without explicit "type": "module" (backport) ([#16848](https://github.com/payloadcms/payload/issues/16848)) ([6707e85](https://github.com/payloadcms/payload/commit/6707e85)) * add type declarations for css export (TypeScript 6 compat) ([#16348](https://github.com/payloadcms/payload/issues/16348)) ([6c81355](https://github.com/payloadcms/payload/commit/6c81355)) * follow redirects when fetching uploaded files for MIME type detection ([#16708](https://github.com/payloadcms/payload/issues/16708)) ([ac46214](https://github.com/payloadcms/payload/commit/ac46214)) * **plugin-import-export:** fix CSV import of arrays and richText nest… ([#16923](https://github.com/payloadcms/payload/issues/16923)) ([ccbdcc2](https://github.com/payloadcms/payload/commit/ccbdcc2)) * **ui:** use explicit relative paths for internal SCSS imports v3.x ([#16827](https://github.com/payloadcms/payload/issues/16827)) ([c039e55](https://github.com/payloadcms/payload/commit/c039e55)) * **ui:** hide entire tabs field when admin.condition is false ([#16809](https://github.com/payloadcms/payload/issues/16809)) ([79b4e4c](https://github.com/payloadcms/payload/commit/79b4e4c)) ###### ⚡ Performance * **ui:** skip rendering custom components hidden by admin.condition ([#16819](https://github.com/payloadcms/payload/issues/16819)) ([0be11b6](https://github.com/payloadcms/payload/commit/0be11b6)) ###### 📚 Documentation * fixes 404 link to monaco editor options ([#16877](https://github.com/payloadcms/payload/issues/16877)) ([5f40868](https://github.com/payloadcms/payload/commit/5f40868)) * restructure getting started and concepts pages ([#16846](https://github.com/payloadcms/payload/issues/16846)) ([0f384f4](https://github.com/payloadcms/payload/commit/0f384f4)) ###### ⚙️ CI * restore post-release workflow on 3.x ([#16748](https://github.com/payloadcms/payload/issues/16748)) ([f1861c1](https://github.com/payloadcms/payload/commit/f1861c1)) ###### 🤝 Contributors - Paul (@paulpopus) - Habeeb (@haxllo) - Sean Zubrickas (@zubricks) - Alessio Gravili (@AlessioGr) - Jake Fletcher (@jacobsfletch) - Anders Semb Hermansen (@andershermansen) - Elliot DeNolf (@denolfe) ### v3.85.0 - Date: 2026-05-26 - Version: v3.85.0 - Original notes: https://github.com/payloadcms/payload/releases/tag/v3.85.0 - Permalink: https://whatsnew.fyi/product/payload-cms/releases/v3.85.0 - **added** — Move plugin-import-export out of beta and add support for collection-level and field-level hooks - **fixed** — Bump uuid package to 13.0.2 - **fixed** — Stop workflows retrying forever when no retries are configured - **security** — Bump mongoose to 8.22.1 for GHSA-wpg9-53fq-2r8h in db-mongodb - **fixed** — Propagate custom hook errors during upload in plugin-cloud-storage - **fixed** — Preserve user-defined prefix.defaultValue in plugin-cloud-storage - **fixed** — Dedupe filename in clientUploads signed URL in plugin-cloud-storage - **fixed** — Make tenant field selectable in bulk upload Edit all in plugin-multi-tenant - **fixed** — Fix cursor kicked out of nested richtext while typing in a block in richtext-lexical - **fixed** — Fix drag/drop image into rich text failing when a field name matches the collection slug in richtext-lexical - **fixed** — Stop bulk upload silently counting failed files as saved - **fixed** — Respect formatDocURL returning null in ListDrawer - **fixed** — Show all listSearchableFields in ListDrawer search placeholder ##### [v3.85.0](https://github.com/payloadcms/payload/compare/v3.84.1...v3.85.0) (2026-05-26) ###### 🚀 Features * **plugin-import-export:** out of beta and added support for collection-level and field-level hooks ([#16556](https://github.com/payloadcms/payload/issues/16556)) ([cf9252d](https://github.com/payloadcms/payload/commit/cf9252d)) ###### 🐛 Bug Fixes * bump uuid package to 13.0.2 ([#16545](https://github.com/payloadcms/payload/issues/16545)) ([274af06](https://github.com/payloadcms/payload/commit/274af06)) * stop workflows retrying forever when no retries are configured ([#16465](https://github.com/payloadcms/payload/issues/16465)) ([caf9150](https://github.com/payloadcms/payload/commit/caf9150)) * **db-mongodb:** bump mongoose to 8.22.1 for GHSA-wpg9-53fq-2r8h ([#16688](https://github.com/payloadcms/payload/issues/16688)) ([4baba91](https://github.com/payloadcms/payload/commit/4baba91)) * **plugin-cloud-storage:** propagate custom hook errors during upload ([#16632](https://github.com/payloadcms/payload/issues/16632)) ([055c508](https://github.com/payloadcms/payload/commit/055c508)) * **plugin-cloud-storage:** preserve user-defined prefix.defaultValue ([#16529](https://github.com/payloadcms/payload/issues/16529)) ([8d14915](https://github.com/payloadcms/payload/commit/8d14915)) * **plugin-cloud-storage:** dedupe filename in clientUploads signed URL ([#16510](https://github.com/payloadcms/payload/issues/16510)) ([64b2860](https://github.com/payloadcms/payload/commit/64b2860)) * **plugin-multi-tenant:** tenant field unselectable in bulk upload "Edit all" ([#16466](https://github.com/payloadcms/payload/issues/16466)) ([695df3c](https://github.com/payloadcms/payload/commit/695df3c)) * **richtext-lexical:** cursor kicked out of nested richtext while typing in a block ([#16490](https://github.com/payloadcms/payload/issues/16490)) ([931a349](https://github.com/payloadcms/payload/commit/931a349)) * **richtext-lexical:** drag/drop image into rich text fails when a field name matches the collection slug ([#16409](https://github.com/payloadcms/payload/issues/16409)) ([d6f7b47](https://github.com/payloadcms/payload/commit/d6f7b47)) * **ui:** bulk upload silently counts failed files as saved ([#16532](https://github.com/payloadcms/payload/issues/16532)) ([c31f4ef](https://github.com/payloadcms/payload/commit/c31f4ef)) * **ui:** respect formatDocURL returning null in ListDrawer ([#16464](https://github.com/payloadcms/payload/issues/16464)) ([0facc44](https://github.com/payloadcms/payload/commit/0facc44)) * **ui:** show all listSearchableFields in ListDrawer search placeholder ([#16467](https://github.com/payloadcms/payload/issues/16467)) ([3cd4a64](https://github.com/payloadcms/payload/commit/3cd4a64)) ###### 📚 Documentation * fix links in admin faq ([#16711](https://github.com/payloadcms/payload/issues/16711)) ([7e4f7af](https://github.com/payloadcms/payload/commit/7e4f7af)) * adds relevant videos to docs sections ([#16516](https://github.com/payloadcms/payload/issues/16516)) ([d17298f](https://github.com/payloadcms/payload/commit/d17298f)) ###### 📝 Templates * bumps next.js to 16.2.6 ([#16538](https://github.com/payloadcms/payload/issues/16538)) ([9b36063](https://github.com/payloadcms/payload/commit/9b36063)) ###### ⚙️ CI * use postgres 15 for content api tests ([#16706](https://github.com/payloadcms/payload/issues/16706)) ([99d4930](https://github.com/payloadcms/payload/commit/99d4930)) ###### 🏡 Chores * **deps:** bump nodemailer minimum version to 8.0.5 ([#16664](https://github.com/payloadcms/payload/issues/16664)) ([efa4afe](https://github.com/payloadcms/payload/commit/efa4afe)) ###### 🤝 Contributors - Sean Zubrickas (@zubricks) - German Jablonski (@GermanJablo) - Jake Fletcher (@jacobsfletch) - Paul (@paulpopus) - Alessio Gravili (@AlessioGr) ### v3.84.1 - Date: 2026-04-23 - Version: v3.84.1 - Original notes: https://github.com/payloadcms/payload/releases/tag/v3.84.1 - Permalink: https://whatsnew.fyi/product/payload-cms/releases/v3.84.1 - **changed** — Adjust 3.x branch references in create-payload-app ##### [v3.84.1](https://github.com/payloadcms/payload/compare/v3.84.0...v3.84.1) (2026-04-23) Retargeting create-payload-app to pull from 3.x branch. ###### ⚙️ CI * adjust 3.x branch references ([#16358](https://github.com/payloadcms/payload/issues/16358)) ([b6131f7](https://github.com/payloadcms/payload/commit/b6131f7)) ###### 🤝 Contributors - Elliot DeNolf (@denolfe) ### v3.84.0 - Date: 2026-04-22 - Version: v3.84.0 - Original notes: https://github.com/payloadcms/payload/releases/tag/v3.84.0 - Permalink: https://whatsnew.fyi/product/payload-cms/releases/v3.84.0 - **added** — Allow client components to also be used as custom collection views - **added** — Add email recipient override config to email-nodemailer - **added** — Add locale-aware currency formatting and symbol positioning to plugin-ecommerce - **added** — Add support for multi part uploads to plugin-form-builder - **added** — Add support for server instructions to plugin-mcp - **fixed** — Fix unique value errors not being displayed properly for localized fields - **fixed** — Fix multipart uploads without content-length - **fixed** — Fix plugin-ecommerce to verify PaymentIntent succeeded before creating orders - **fixed** — Fix internal links exporting as [text](undefined) in markdown transformer for richtext-lexical - **fixed** — Simplify key handling for signed urls and composite prefixes in storage plugins - **fixed** — Remove tilde SCSS imports and add Sass loadPaths for Windows in templates - **fixed** — Fix json and richText fields exposing unsupported operators in WhereBuilder - **fixed** — Fix bulk edit ignoring fields in named tabs and showing incorrect labels for unlabeled containers ##### [v3.84.0](https://github.com/payloadcms/payload/compare/v3.83.0...v3.84.0) (2026-04-22) ###### 🚀 Features * allow client components to also be used as custom collection views ([#16312](https://github.com/payloadcms/payload/issues/16312)) ([8fe5f04](https://github.com/payloadcms/payload/commit/8fe5f04)) * **email-nodemailer:** add email recipient override config ([#16311](https://github.com/payloadcms/payload/issues/16311)) ([1c1ed97](https://github.com/payloadcms/payload/commit/1c1ed97)) * **plugin-ecommerce:** add locale-aware currency formatting and symbol positioning ([#15139](https://github.com/payloadcms/payload/issues/15139)) ([6731036](https://github.com/payloadcms/payload/commit/6731036)) * **plugin-form-builder:** add support for multi part uploads ([#15268](https://github.com/payloadcms/payload/issues/15268)) ([aa01a45](https://github.com/payloadcms/payload/commit/aa01a45)) * **plugin-mcp:** add support for server instructions ([#15858](https://github.com/payloadcms/payload/issues/15858)) ([c852d85](https://github.com/payloadcms/payload/commit/c852d85)) ###### 🐛 Bug Fixes * unique value errors are not displayed properly for localized fields ([#16069](https://github.com/payloadcms/payload/issues/16069)) ([f6e9073](https://github.com/payloadcms/payload/commit/f6e9073)) * correct slugifyTitle hook example in documentation ([#16306](https://github.com/payloadcms/payload/issues/16306)) ([48db8c1](https://github.com/payloadcms/payload/commit/48db8c1)) * handle multipart uploads without content-length ([#16301](https://github.com/payloadcms/payload/issues/16301)) ([c150ef8](https://github.com/payloadcms/payload/commit/c150ef8)) * **plugin-ecommerce:** verify PaymentIntent succeeded before creating… ([#15902](https://github.com/payloadcms/payload/issues/15902)) ([500e39d](https://github.com/payloadcms/payload/commit/500e39d)) * **richtext-lexical:** internal links export as [text](undefined) in markdown transformer ([#16302](https://github.com/payloadcms/payload/issues/16302)) ([3dc6041](https://github.com/payloadcms/payload/commit/3dc6041)) * **storage-*:** simplify key handling for signed urls and composite prefixes ([#16291](https://github.com/payloadcms/payload/issues/16291)) ([6139508](https://github.com/payloadcms/payload/commit/6139508)) * **templates:** remove tilde SCSS imports and add Sass loadPaths for Windows ([#16295](https://github.com/payloadcms/payload/issues/16295)) ([7ca8b05](https://github.com/payloadcms/payload/commit/7ca8b05)) * **ui:** json and richText fields expose unsupported operators in WhereBuilder ([#16353](https://github.com/payloadcms/payload/issues/16353)) ([a507fcc](https://github.com/payloadcms/payload/commit/a507fcc)) * **ui:** bulk edit ignores fields in named tabs and shows incorrect labels for unlabeled containers ([#16340](https://github.com/payloadcms/payload/issues/16340)) ([e5bc6be](https://github.com/payloadcms/payload/commit/e5bc6be)) ###### 📚 Documentation * add publishing access control example ([#16021](https://github.com/payloadcms/payload/issues/16021)) ([da17810](https://github.com/payloadcms/payload/commit/da17810)) ###### 🧪 Tests * add tests for autosave creating new versions and losing draft status on reload ([#16335](https://github.com/payloadcms/payload/issues/16335)) ([60d8678](https://github.com/payloadcms/payload/commit/60d8678)) * add more integration tests to CI ([#15419](https://github.com/payloadcms/payload/issues/15419)) ([8a470c1](https://github.com/payloadcms/payload/commit/8a470c1)) ###### 📝 Templates * bump plugin template to latest payload version ([#16305](https://github.com/payloadcms/payload/issues/16305)) ([9de13c2](https://github.com/payloadcms/payload/commit/9de13c2)) ###### ⚙️ CI * disable audit-dependencies slack notification ([#16329](https://github.com/payloadcms/payload/issues/16329)) ([eeee018](https://github.com/payloadcms/payload/commit/eeee018)) * use SLACK_CHANNEL env var for acti _[Truncated at 4000 characters — full notes: https://github.com/payloadcms/payload/releases/tag/v3.84.0]_ ### v3.83.0 - Date: 2026-04-15 - Version: v3.83.0 - Original notes: https://github.com/payloadcms/payload/releases/tag/v3.83.0 - Permalink: https://whatsnew.fyi/product/payload-cms/releases/v3.83.0 - **added** — Expand plugin API with definePlugin helper that introduces opt-in execution ordering, cross-plugin discovery via slug-keyed plugins map, and module augmentation for type-safe plugin options - **added** — Add profiling utilities timeSync and timeAsync for measuring function execution time during development - **added** — Add internal plugin priority and slug API for execution ordering and cross-plugin discovery - **added** — Hide slug field buttons when field is read-only - **added** — Add --agent flag for create-payload-app to download and install Payload coding skill for coding agents - **added** — Add uuidv7 support to Drizzle adapter for Postgres and SQLite - **added** — Add custom headers support to Resend email adapter - **added** — Add support for custom collection views in Next.js admin - **changed** — Change checkbox label from 'Default Value' to 'Checked by default' in form builder plugin - **added** — Allow external plugins to extend MCP plugin - **added** — Add view override system for custom node rendering in Richtext Lexical - **added** — Add useCompositePrefixes option and fix client upload prefix handling in storage adapters ##### [v3.83.0](https://github.com/payloadcms/payload/compare/v3.82.1...v3.83.0) (2026-04-15) ###### 🚀 Features * expand plugin API ([#16247](https://github.com/payloadcms/payload/issues/16247)) ([54189e1](https://github.com/payloadcms/payload/commit/54189e1)) * add profiling utilities for performance analysis ([#16198](https://github.com/payloadcms/payload/issues/16198)) ([9391c20](https://github.com/payloadcms/payload/commit/9391c20)) * add internal plugin priority and slug api for cross-plugin discovery ([#16244](https://github.com/payloadcms/payload/issues/16244)) ([5f5694f](https://github.com/payloadcms/payload/commit/5f5694f)) * hide slug field buttons when field is read-only ([#14824](https://github.com/payloadcms/payload/issues/14824)) ([67c2c47](https://github.com/payloadcms/payload/commit/67c2c47)) * **cpa:** add --agent flag for coding agent skill installation ([#16278](https://github.com/payloadcms/payload/issues/16278)) ([9f9f343](https://github.com/payloadcms/payload/commit/9f9f343)) * **drizzle:** add uuidv7 support ([#16113](https://github.com/payloadcms/payload/issues/16113)) ([ac01e82](https://github.com/payloadcms/payload/commit/ac01e82)) * **email-resend:** add Custom headers for the Resend adapter ([#15645](https://github.com/payloadcms/payload/issues/15645)) ([a7dd17c](https://github.com/payloadcms/payload/commit/a7dd17c)) * **next:** add support for custom collection views ([#16243](https://github.com/payloadcms/payload/issues/16243)) ([835a0ad](https://github.com/payloadcms/payload/commit/835a0ad)) * **plugin-form-builder:** change checkbox label from 'Default Value' to 'Checked by default' ([#15229](https://github.com/payloadcms/payload/issues/15229)) ([b3d2054](https://github.com/payloadcms/payload/commit/b3d2054)) * **plugin-mcp:** allow external plugins to extend mcp plugin ([#16245](https://github.com/payloadcms/payload/issues/16245)) ([ac4fc31](https://github.com/payloadcms/payload/commit/ac4fc31)) * **richtext-lexical:** add view override system for custom node rendering ([#14244](https://github.com/payloadcms/payload/issues/14244)) ([1ef43eb](https://github.com/payloadcms/payload/commit/1ef43eb)) * **storage-*:** add useCompositePrefixes option and fix client upload prefix handling ([#16230](https://github.com/payloadcms/payload/issues/16230)) ([74aa825](https://github.com/payloadcms/payload/commit/74aa825)) --- **Expanded Plugin API** — New `definePlugin` helper introduces opt-in execution ordering, cross-plugin discovery via a slug-keyed `plugins` map, and module augmentation for type-safe plugin options. The existing `(config) => config` contract remains unchanged. [#16247](https://github.com/payloadcms/payload/pull/16247) ```ts import { definePlugin } from 'payload' export const seoPlugin = definePlugin({ slug: 'plugin-seo', order: 10, plugin: ({ config, plugins, collections, generateTitle }) => ({ ...config, // collections and generateTitle come from SEOPluginOptions }), }) ``` **Profiling Utilities** — Lightweight `timeSync` and `timeAsync` wrappers for measuring function execution time during development. Wrap any function to capture its duration, then call `printProfileResults` for a formatted timing table. Not intended for production use. [#16198](https://github.com/payloadcms/payload/pull/16198) **Internal Plugin Priority & Slug API** — Plugins can now attach `priority`, `slug`, and `options` properties for execution ordering and cross-plugin discovery. Lower priority runs first; other plugins can find each other by slug via `config.plugins` without imports. Marked `@internal` for now. [#16244](https://github.com/payloadcms/payload/pull/16244) **Hidden Slug Field Buttons on Read-Only** — The Generate and Lock/Unlock buttons on slug fields are now automatically hidden when the field is read-only, removing controls that serve no purpose in that state. [#14824](https://github.com/payloadcms/payload/pull/14 _[Truncated at 4000 characters — full notes: https://github.com/payloadcms/payload/releases/tag/v3.83.0]_ ### v3.82.1 - Date: 2026-04-09 - Version: v3.82.1 - Original notes: https://github.com/payloadcms/payload/releases/tag/v3.82.1 - Permalink: https://whatsnew.fyi/product/payload-cms/releases/v3.82.1 - **fixed** — Use correct config key for disabling turbo server fast refresh in Next.js - **fixed** — Await populateBreadcrumbs in resaveChildren for plugin-nested-docs - **changed** — Avoid getObject call in storage-s3 if ETag matches ##### [v3.82.1](https://github.com/payloadcms/payload/compare/v3.82.0...v3.82.1) (2026-04-09) ###### 🐛 Bug Fixes * **next:** use correct config key for disabling turbo server fast refresh ([#16215](https://github.com/payloadcms/payload/issues/16215)) ([11adc9d](https://github.com/payloadcms/payload/commit/11adc9d)) * **plugin-nested-docs:** await populateBreadcrumbs in resaveChildren ([#15582](https://github.com/payloadcms/payload/issues/15582)) ([0554b50](https://github.com/payloadcms/payload/commit/0554b50)) ###### ⚡ Performance * **storage-s3:** avoid getObject call if ETag matches ([#15295](https://github.com/payloadcms/payload/issues/15295)) ([7ccc3f0](https://github.com/payloadcms/payload/commit/7ccc3f0)) ###### 📚 Documentation * fix incorrect select syntax example in querying docs ([#14590](https://github.com/payloadcms/payload/issues/14590)) ([be6c443](https://github.com/payloadcms/payload/commit/be6c443)) ###### 📝 Templates * bump to 3.82.0, remove --no-server-fast-refresh flag ([#16212](https://github.com/payloadcms/payload/issues/16212)) ([79c8d7e](https://github.com/payloadcms/payload/commit/79c8d7e)) ###### 🤝 Contributors - William Ding (@wingding12) - Syazwan (@syazwanz) - Alessio Gravili (@AlessioGr) - Anders Semb Hermansen (@andershermansen)