v3.87.0
payloadcms/payloadv3.87.0Jul 31, 2026by denolfe
AI Summary
Payload CMS v3.87.0 introduces support for large file uploads on Azure, improves localization handling, and enhances the UI with better folder management and field components. It also includes numerous bug fixes for database operations, uploads, and permissions.
Key Highlights
- Azure storage now supports chunking for files larger than 5GB.
- UI improvements include keeping folder create drawers open during autosave and resolving named-tab field permissions.
- Fixed localization issues through tabs and improved draft title handling in folder views.
- Updated Drizzle integration to dedupe localized block tables and validate table name lengths.
New Features
- Azure chunking support for files >5GB
- Preserve parent localization through tabs
- Replace image-size with image-dimensions dependency
- Forward locale in count and countGlobalVersions
- Pass ID to delete access control on soft delete
- Prefer draft titles in by folder view
- Handle null values in arrays and blocks
- Prevent unauthenticated draft-mode access
- Export parse params and sanitizers
Full Release Notes
## [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)) * document exported TypeScript type helpers for plugins ([#17336](https://github.com/payloadcms/payload/issues/17336)) ([d4d029f](https://github.com/payloadcms/payload/commit/d4d029f)) * **plugin-mcp:** fix broken Claude Code link ([#17502](https://github.com/payloadcms/payload/issues/17502)) ([21e24ca](https://github.com/payloadcms/payload/commit/21e24ca)) ### π§ͺ Tests * **richtext-lexical:** create dev user first in seed to fix flaky e2e (3.x backport of #17507) ([#17568](https://github.com/payloadcms/payload/issues/17568)) ([0f6c1b3](https://github.com/payloadcms/payload/commit/0f6c1b3)) ### βοΈ CI * remove --json from pnpm publish to fix release hang on pnpm v11 ([#17279](https://github.com/payloadcms/payload/issues/17279)) ([4a82c20](https://github.com/payloadcms/payload/commit/4a82c20)) ### π‘ Chores * export parse params and related sanitizers ([#17314](https://github.com/payloadcms/payload/issues/17314)) ([f14722a](https://github.com/payloadcms/payload/commit/f14722a)) ### π€ Contributors - Dan Ribbens (@DanRibbens) - Paul (@paulpopus) - Patrik (@PatrikKozak) - Nate Lentz (@nathanlentz) - Kacper Zawojski (@zawoj) - Marc Maceira (@marcmaceira) - Jarrod Flesch (@JarrodMFlesch) - Sean Zubrickas (@zubricks) - RaΕit Akyol (@rasitakyol) - Jessica Rynkar (@JessRynkar) - Elliot DeNolf (@denolfe)