v3.82.0 (2026-04-08)
🚀 Features
- disambiguate media files by prefix via query parameter (#15844) (05ddec1)
- add missing disableErrors to globals findOne operation (#14913) (c8332e7)
- improve default slugify utility by triming whitespace first (#14421) (fdaa051)
- add typescript.postProcess hook for type generation (#16103) (67b5dc3)
- plugin-redirects: add Portuguese translation (#15269) (122f4c1)
- plugin-search: pass collection slug to
beforeSynchook (#11581) (ebbd6ad) - ui: export drag-and-drop components (#12626) (23b0f1b)
🐛 Bug Fixes
- incorrect 24 hour format comment example (#15649) (f42b767)
- resolve 404/500 error when downloading files containing hash in filename (#15799) (3a09387)
- JSDoc string for focalPoint option in uploads so it correctly mentions defaults to true (#13070) (84090ac)
- skip validation for unpublish operations with localized required fields (#16120) (24b9e13)
- skip default validation for virtual fields (#16015) (e09c619)
- db-mongodb: update mongoose-paginate-v2 to fix collation pagination (#16049) (78a27ab)
- drizzle: convert equals/not_equals to in/not_in for hasMany relationship array values (#15766) (59af156)
- next: fix hmr, bump minimum required next.js 16 version to 16.2.2 (#16202) (7f83571)
- next: admin.meta.title object form renders [object Object] in browser tab (#16117) (0981cdc)
- plugin-mcp: add error handling to convertCollectionSchemaToZod (#16114) (6184b0c)
- plugin-multi-tenant: infinite api calling loop on user switch (#16065) (3da805f)
- storage-*: redundant re-uploads when file was already uploaded by the client and add comprehensive E2E tests for
s3andvercel-blob(#16115) (a6735f3) - storage-azure: fix azure storage mime type handling for streaming uploads (#15949) (cd7fcea)
- templates: tailwind file extension is wrong in website template components.json file (#9342) (2011f28)
- templates: fixed forgot password link (#15037) (b505e36)
- templates: add generated files to ESLint ignores (#15716) (941a41f)
- templates: typo in with-cloudflare-d1 template (#14243) (14b708f)
- translations: fix Swedish unpublish translations and capitalization (#15353) (4e48706)
- translations: correct French translation for 'move' action (#14771) (750d29f)
- translations: update passive voice and newLabel wording in zh-TW translations (#13761) (e284ab5)
- translations: update Japanese translations related to localizeStatus (#15358) (7ab2881)
- ui: relationship filter duplicate options when switching operators (#16204) (3a1f31a)
- ui: unpublish button missing for globals and version count incorrectly incrementing after unpublish (#16203) (1ddeb60)
- ui: exclude unnamed tab labels from filter and groupBy field options (#9965) (b13c5c9)
- ui: update node to v20 (#15717) (b2593d6)
- ui: radio fields do not reliably trigger admin.condition re-evaluation on sibling fields (#16056) (7e2a126)
⚡ Performance
🛠 Refactors
- plugin-seo: rename non-JSX files from .tsx to .ts (#14418) (b67882c)
- translations: improve German translations for consistency and accuracy (#14439) (f3c0bc8)
📚 Documentation
- fix typo in Collection Config docs (collection → collections) (#16183) (ac085cd)
- remove JSX comment from content in dashboard (#16156) (05447b7)
- add warning about Cosmos dB incompatibility (#13350) (c4375bd)
- add info about custom errors via
APIErrorto hooks overview (#13047) (d03054e) - fix typo in storage-adapters documentation (#13648) (911f059)
- rename incorrect usage of the cloud storage plugin to align with the imported module in storage-adapters.mdx (#11475) (d491f29)
- add dev note about auth strategy hot-reload requirement (#14122) (c4da453)
- fix anchor link reference for settingsMenu (#14391) (8c748d6)
- nested plugin (#15230) (2e653ae)
- add getDataByPath to useForm table (#12098) (69a49e7)
- add missing comma to seo plugin doc (#11516) (df03ed0)
- fix typo in ecommerce template link in seo plugin docs (#15641) (e2cd07c)
- corrects Local API example in import export docs (#16128) (13a726a)
- update link to Custom Components Performance docs (#15723) (9141e34)
- update folders documentation with the right property (#14060) (b63198d)
📝 Templates
🏡 Chores
- upgrade vitest and @vitest/ui to 4.1.2 (#16154) (5af591c)
- export FieldAccessArgs from payload (#14755) (c3ec73f)
- extract sanitizeField from sanitizeFields (#16133) (b705af4)
- improve int summary counts when content-api is unavailable (#16127) (a65e715)
- add React component file structure conventions to CLAUDE.md (#16125) (9284441)
- richtext-lexical: improve Swedish translations (#15273) (ac16116)
- templates: add type detection on getGlobal utility (#11617) (b278a17)
- templates: remove redundant condition check (#12130) (cf0a883)
🤝 Contributors
- Alessio Gravili (@AlessioGr)
- Maxim Seshuk (@maximseshuk)
- Paul (@paulpopus)
- Jens Becker (@jhb-dev)
- JianJroh (@JianJroh)
- Pierre Cabrière (@pierrecabriere)
- Tyler Schwartz (@tschwartz)
- Jarrod Flesch (@JarrodMFlesch)
- Patrik (@PatrikKozak)
- Mohsen (@webgodo)
- German Jablonski (@GermanJablo)
- Anders Semb Hermansen (@andershermansen)
- Marcus Forsberg (@marcusforsberg)
- Sasha Rakhmatulin (@r1tsuu)
- Said Akhrarov (@akhrarovsaid)
- marketsystems (@marketsystems)
- Eduardo Würch (@ewurch)
- Matthieu (@RibeyrollesMatthieu)
- Riley Langbein (@rilrom)
- Matthew DeAbreu (@mdeabreu)
- Tim @ erdee (@tim-at-erdee)
- José Eduardo Dias (@josedudias)
- Rot4tion (@Rot4tion)
- Adebayo Ajayi (@Braggedtooth)
- Christian Wesselhoeft (@xtian)
- ab192130 (@ab192130)
- MichalKormanik (@MichalKormanik)
- Yi Chi (@chiyi4488)
- swenzel-arc (@swenzel-arc)
- roboin (@Robot-Inventor)
- Wes DiMiceli (@wesdimiceli)
- codeflorist (@codeflorist)
- Vincent Vu (@rubixvi)
- Ilham Saputrajati (@ilhamsj)
- Boyan Bratvanov (@bratvanov)
- Roman Ryzhikov (@yagee)
- spiner2000 (@spiner2000)
- Sean Zubrickas (@zubricks)
- Sebastian Blank (@blankse)
- Max Malm (@benjick)
- Omar Yusuf Abdi (@omar-y-abdi)
- Shaun Wallace (@ShaunMWallace)