v3.72.0 (2026-01-16)
๐ Features
- adds experimental option localizeStatus and allows unpublish per-locale functionality (#14667) (d77af00)
- plugin-mcp: add depth parameter support to all MCP find resource tools (#14931) (c979fb3)
Localized Status (Experimental) - Each locale can now track and manage its own publication status independently. Publish or unpublish individual locales without affecting others, with locale-aware UI and version history. Requires enabling at both config and collection level. #14667
// payload.config.ts
export default buildConfig({
experimental: {
localizeStatus: true,
},
// ...
})
// collections/Posts.ts
export const Posts: CollectionConfig = {
slug: 'posts',
versions: {
drafts: {
localizeStatus: true,
},
},
}โ ๏ธ Migration Required: If you have existing version data, run the provided migration helper to convert
_statusfields from strings to locale objects. See PR #14667 for full migration guide.
Depth Parameter Support (plugin-mcp) - MCP resource tools now support a depth parameter (0-10) to control relationship population depth. Use depth: 0 for lightweight ID-only responses or higher values for fully populated relationship data. Significantly reduces token count when reading documents. #14931
๐ Bug Fixes
- thumbnailURL hook, virtually populate from thumbnail size (#15232) (beeb269)
- isValidID validation (#15217) (4f452ac)
selectinfindByIDwithdraft: truemay return a wrong version (#14742) (49c9fa9)- use window.location.origin as fallback for API URL copy (#15220) (a46e3a2)
- folder creation errors when collection uses translation function labels (#15216) (1a3aeb8)
- correct image size URLs in beforeChange (#15214) (da12eed)
- db-mongodb: hasMany relationship filtering with equals operator returns no results (#15204) (1756c0d)
- deps: bump undici to 7.18.2 to mitigate chained decompression (#15221) (591f9d2)
- plugin-ecommerce: issue with slug map ignoring variants and threading through cart data (#15234) (4b6529f)
- plugin-ecommerce: translations not being mapped correctly (#15205) (3337403)
- templates: prevent jobs run if secret unset (#15207) (8f50f83)
- translations: correct Russian translations for UI states in general section (#14953) (454042e)
- ui: truncates long JSON cells in list view (#9214) (6827978)
๐ Documentation
๐งช Tests
- fix race condition in language switcher helper (#15206) (f98d915)
- add
@payloadcms/storage-s3 clientUploadsintegration test suite (#15194) (4dce061) - fields with defaultValue โโshould not be overwritten in upsert (#15197) (c684c6b)
โ๏ธ CI
๐ก Chores
- adds generate-translations claude skill (#15215) (f1f2be6)
- enforce no-console rule for
@payloadcms/ui(#15195) (54db43d) - plugin-redirects: add Swedish translation (#15213) (e19f432)
- translations: fixes to Swedish translation (#15212) (d3b12a1)
๐ค Contributors
- Jarrod Flesch (@JarrodMFlesch)
- German Jablonski (@GermanJablo)
- Vincent Vu (@rubixvi)
- Sasha (@r1tsuu)
- Paul (@paulpopus)
- Kendell (@kendelljoseph)
- Elliot DeNolf (@denolfe)
- Jens Becker (@jhb-dev)
- Patrik (@PatrikKozak)
- spiner2000 (@spiner2000)
- Marcus Forsberg (@marcusforsberg)
- Jessica Rynkar (@jessrynkar)
- Said Akhrarov (@akhrarovsaid)
- Jeffery To (@jefferyto)