Releases: payloadcms/payload
Releases · payloadcms/payload
v3.55.1
v3.55.1 (2025-09-10)
🐛 Bug Fixes
- presentational-field types incorrectly exposing hooks (#11514) (285fc8c)
- graphql: pass collectionSlug to nested join fields in tabs, collapsible and group resolvers (#13752) (e52b757)
- next: error after logging in and navigating to different page in production (#13758) (e40c821)
- ui: listSearchableFields can resolve to multiple fields with the same name when using tabs (#13668) (ffed540)
📝 Templates
🤝 Contributors
- Dallas Opelt (@DallasO)
- Alessio Gravili (@AlessioGr)
- German Jablonski (@GermanJablo)
- timeo-schmidt (@timeo-schmidt)
- Elliot DeNolf (@denolfe)
v3.55.0
v3.55.0 (2025-09-09)
🚀 Features
- adds disableListColumn and disableListFilter to imageSize admin props (#13699) (e1ea074)
- unauthenticated client config (#13714) (e49005f)
- adds new experimental.localizeStatus option (#13207) (0f6d748)
- live-preview: client-side live preview: simplify population, support hooks and lexical block population (#13619) (6e203db)
- richtext-lexical: upgrade lexical from 0.34.0 to 0.35.0 (#13715) (7a8bcdf)
- richtext-lexical: upgrade lexical from 0.28.0 to 0.34.0 (#13622) (1a1696d)
- richtext-lexical: add options to hide block handles (#13647) (fdab271)
- ui: save collection folder tab preferences (#13702) (6a0637e)
- ui: adds admin.autoRefresh root config property (#13682) (f288cf6)
🐛 Bug Fixes
- ensure client-side live preview correctly updates for globals (#13718) (03f7102)
- set X-Payload-HTTP-Method-Override as allowed cross origin header (#13717) (a4a0298)
- update user session on reset (#13667) (d9e1832)
- prevent enabling trash on folders (#13675) (be47f65)
- db-sqlite: convert Date to ISO 8601 string in queries (#11694) (917c66f)
- next: version diff view not handling all field permissions correctly (#13721) (911f17a)
- next: display deleted relations and uploads in version diff views (#12955) (bbcdea5)
- next: version diff view shows correct document title in step nav (#13713) (794bf82)
- plugin-multi-tenant: hide watchTenant column field (#13740) (a0112d7)
- plugin-multi-tenant: skip baseFilter if user has access to all tenants (#13633) (65b3845)
- plugin-nested-docs: prevent phantom breadcrumb row (#13628) (a231a05)
- plugin-nested-docs: crumbs not syncing on non-versioned collections (#13629) (4600c94)
- plugin-search: update with db adapter on create (#13670) (1293019)
- richtext-lexical: fix picture closing tag in html converter (#13100) (24e436b)
- richtext-lexical: add internationalization support for default style label in textStateFeature (#13662) (0c44c3b)
- storage-vercel-blob: filename is incorrectly stored encoded when addRandomSuffix is true (#13746) (b2f9d4e)
- templates: URI encode the cacheTag in getMediaUrl utility - Website template (#13558) (008a52d)
- ui: consistent searchbar across folders and lists (#13712) (09e3174)
- ui: cannot filter by virtual relationship fields in WhereBuilder (#13686) (7e98fbf)
- ui: undefined permissions passed in create-first-user view (#13671) (5146fc8)
- ui: don't populate on auto save (#13649) (7794541)
- ui: use consistent row ids when duplicating array and block rows (#13679) (b8d7ccb)
- ui: field.admin.condition data attribute missing document ID when document is being edited (#13676) (a115868)
- ui: await for publish success to update the UI (#13673) (9b10933)
- ui: sidebar missing sticky top offset (#13652) (1c68ed5)
- ui: should not show publish specific locale button when no localized fields exist (#13459) (ac691b6)
- ui: json field type ignoring editorOptions (#13630) (426f99c)
⚡ Performance
- plugin-search: reindex collections in parallel, up to 80% faster (#13608) (b99c324)
- ui: opt-in to the select api in the list view (#13697) (d2d2df4)
📚 Documentation
- missing comma in custom-strategies example (#13701) (27cfe77)
- plugin-form-builder: add RadioField documentation (#13529) (4e972c3)
🧪 Tests
⚙️ CI
🏡 Chores
- add AGENTS.md (#13688) (d109b44)
- ui: prevent loading orphaned documents when viewing root collection folders (#13684) (9f0573d)
🤝 Contributors
- Patrik (@PatrikKozak)
- Jarrod Flesch (@JarrodMFlesch)
- Alessio Gravili (@AlessioGr)
- Jacob Fletcher (@jacobsfletch)
- Ilham Saputrajati (@ilhamsj)
- Cedric Delacombaz (@cdelacombaz)
- Said Akhrarov (@akhrarovsaid)
- Aapo Laakkio (@ApsiV11)
- Anders Semb Hermansen (@andershermansen)
- German Jablonski (@GermanJablo)
- Yazal Ulloa (@yazalulloa)
- Elliot DeNolf (@denolfe)
- Jessica Rynkar (@JessRynkar)
- reiv (@reiv)
- Riley Langbein (@rilrom)
v3.54.0
v3.54.0 (2025-08-28)
🚀 Features
- support parallel job queue tasks, speed up task running (#13614) (e0ffada)
- configurable toast notifications (#13609) (0a18306)
- allow multiple, different payload instances using getPayload in same process (#13603) (13c24af)
- db-*: support atomic array $push db updates (#13453) (5ded64e)
- plugin-multi-tenant: allow custom tenant field per collection (#13553) (6db07f0)
- plugin-multi-tenant: re-enable global selector on all views (#13575) (f260d0a)
🐛 Bug Fixes
- restore as draft function was passing a published status (#13599) (a670438)
- hide jobs stats global by default (#13566) (a92c251)
- deeply merge array and block rows from server form state (#13551) (1e13474)
- ensure updates to createdAt and updatedAt are respected (#13335) (5c16443)
- db-*: add delete version id for non-mongodb (#10613) (ddb8ca4)
- graphql: invalid enum names when values include brackets (#13597) (1dc346a)
- next: richtext fields not read-only for locked documents (#13579) (344ad69)
- next: update rest route handler types for Next.js 15.5 compatibility (#13521) (763cb61)
- plugin-multi-tenant: prevent duplicate filters on referenced blocks (#13607) (03a00ca)
- plugin-multi-tenant: autosave global documents not rendering (#13552) (409dd56)
- richtext-lexical: toolbar dropdown items are disabled when selecting via double-click (#13544) (3bc1d08)
- ui: prevent infinite redirect if no user (#13615) (303381e)
- ui: bulk edit overwriting fields within named tabs (#13600) (138938e)
- ui: autosave in document drawer overwrites local changes (#13587) (bd81936)
- ui: multiple logout requests being made in parallel (#13595) (cf37433)
- ui: auth-fields container renders despite no visible auth/API key/verify content (#13554) (8101842)
- ui: correctly pass query params to locked document requests (#10802) (598ff4c)
🛠 Refactors
📚 Documentation
- adds default populate video (#13586) (ded8ec4)
- blank-template-url-fix (#13580) (45c3be2)
- fix small typo in documentation (#13545) (3408d7b)
⚙️ CI
- remove run-e2e-turbo flow (#13611) (5c41966)
- ignore template bump commits in release notes [skip ci] (60cfc31)
🤝 Contributors
- Alessio Gravili (@AlessioGr)
- Jarrod Flesch (@JarrodMFlesch)
- Jacob Fletcher (@jacobsfletch)
- Jessica Rynkar (@JessRynkar)
- Sean Zubrickas (@zubricks)
- Elliot DeNolf (@denolfe)
- Patrik (@PatrikKozak)
- Rodrigo Solís (@sorodrigo)
- Logan Stellway (@lstellway)
- Yunsup Sim (@SimYunSup)
- Vincent Vu (@rubixvi)
v3.53.0
v3.53.0 (2025-08-21)
🚀 Features
- add icelandic translations (#13423) (2bdd669)
- plugin-import-export: use groupBy as SortBy when present and sort is unset (#13491) (a7ed88b)
- plugin-import-export: adds sort order control and sync with sort-by field (#13478) (efdf002)
- plugin-multi-tenant: visible tenant field on documents (#13379) (5cf215d)
🐛 Bug Fixes
- server edit view components don't receive document id prop (#13526) (9607453)
- uploads update unnecessarily resizing with sharp (#13528) (a94cd95)
- accept computed array and block rows from server form state (#13501) (f382c39)
- 'front-end' spelling typo in JSDocs for overrideAccess (#13515) (f44e276)
- imports (part 2/2) (#13520) (cf427e5)
- select field component value prop type does not support array values (#13510) (4f6d0d8)
- unable to query versions on latest key (#13512) (73ba4d1)
- avoid re-uploading the file unless changed (#13500) (92d459e)
- copy to locale with localized fields inside tabs (#13456) (ec5b673)
- omit trashed documents from appearing in folder results (#13492) (1909063)
- update docker base image in templates (#13020) (64f4b0a)
- db-mongodb: disable join aggregations in DocumentDB compatibility mode (#13270) (c7b9f0f)
- db-postgres: camelCase point fields (#13519) (aa90271)
- next: no client field found error when accessing version view in some configurations (#13339) (393b4a0)
- next: add missing translations to version view (c8ef924)
- plugin-form-builder: export radio field type (#11908) (fea6742)
- richtext-lexical: use thumbnail component for uploads (#12540) (7699d02)
- storage-s3: validate Content-Length before appending header (#13472) (9d08f50)
- templates: plugin template correct paths for exports (#13427) (b714e6b)
- translations: stale version.versionCreatedOn key in translation (#13530) (a04bc9a)
- ui: thread id through instead of from routeParams (#13539) (b65ca68)
- ui: logout type error when user is null during locale switch (#13514) (b3e48f8)
- ui: replace deprecated
document.execCommand('copy')API withnavigator(#13431) (368cd90) - ui: local image src changing when title changes (#13442) (406a09f)
- ui: double ? in gravatar url (#13511) (332b2a9)
- ui: nested fields with admin.disableListColumn still appear as columns in list view (#13504) (9f7d8c6)
- ui: blocks field not respecting width styles in row layouts (#13502) (30ea8e1)
- ui: cannot replace the file if the user does not have delete access (#13484) (3dd142c)
- ui: bulk upload action bar buttons wrapping (#13486) (b7243b1)
⚡ Performance
- storage-s3: stream files and abort s3 request from static handler (#13430) (36fd6e9)
- ui: do not fetch doc permissions on autosave (#13477) (c67ceca)
- ui: reduce number of field renders on submit (#13524) (5e433aa)
📚 Documentation
- fix typo in custom views (#13522) (a840fc9)
- clarify pagination and improve cross-referencing (#13503) (f9bbca8)
- db-mongodb: note on indexing localized fields & per-locale growth (#13469) (379ef87)
🧪 Tests
🏡 Chores
🤝 Contributors
- Jarrod Flesch (@JarrodMFlesch)
- Jónas G. Sigurðsson (@jonnigs)
- Patrik (@PatrikKozak)
- Alessio Gravili (@AlessioGr)
- Dan Ribbens (@DanRibbens)
- Anders Semb Hermansen (@andershermansen)
- Jacob Fletcher (@jacobsfletch)
- Said Akhrarov (@akhrarovsaid)
- Sasha (@r1tsuu)
- Gregor Billing (@gregorbg)
- Bob Bass (@robertjbass)
- Boyan Bratvanov (@bratvanov)
- German Jablonski (@GermanJablo)
- Jan Huenges (@jhuenges)
- Паламар Роман (@VeiaG)
- chenxi-debugger (@chenxi-debugger)
- id3er0 (@id3er0)
- Anatoly Kopyl (@anatolykopyl)
- Elliot DeNolf (@denolfe)
v3.52.0
v3.52.0 (2025-08-15)
🚀 Features
🐛 Bug Fixes
- filter
payload-cookies ingetExternalFileonly if the URL is external (#13475) (8d4e7f5) - db-postgres: ensure index names are not too long (#13428) (047519f)
- plugin-import-export: csv export & preview showing full documents for hasMany monomorphic relationships instead of just ID (#13465) (3e65111)
- ui: significantly more predictable autosave form state (#13460) (0b60bf2)
📚 Documentation
🧪 Tests
- skip cookies filter for internal URLs in
getExternalFile(#13476) (46699ec) - fix import-export plugin int (#13474) (b426052)
📝 Templates
🤝 Contributors
- jacobsfletch (@jacobsfletch)
- Sasha (@r1tsuu)
- Sean Zubrickas (@zubricks)
- Dan Ribbens (@DanRibbens)
- Patrik (@PatrikKozak)
- Elliot DeNolf (@denolfe)
v3.51.0
v3.51.0 (2025-08-13)
🚀 Features
- plugin-multi-tenant: allow tenant field overrides (#13316) (995f96b)
- ui: update query presets ux (#13095) (255bba9)
🐛 Bug Fixes
- upload with no filename gives vague error (#13414) (5a99d8c)
- version view breaks when tab field has function for label (#13415) (35ca98e)
- ensure scheduling by default only handles default queue, add allQueues config to autoRun (#13395) (ad2564e)
- use thumbnailUrl for upload documents in folder view (#13368) (2211f3d)
- next: group by boolean values (#13382) (d4f1986)
- next: group by dates with null values (#13381) (7344d64)
- richtext-lexical, plugin-multi-tenant: text editor exposes documents from other tenants (#13229) (9c8f320)
- templates: only generate slug from title on demand (#12956) (2bc9a2d)
- translations: update traditional chinese (zh-TW) localization (#13370) (5d8f8dc)
- ui: autosave form state discards local changes (#13438) (8173180)
- ui: misalignment of nested toggles on document API tab (#13424) (306b7f6)
- ui: field elements showing over the top of Preview content (#13148) (72f5763)
- ui: bulk upload issues (#13413) (a374aab)
- ui: autosave hooks are not reflected in form state (#13416) (1d81b0c)
- ui: search in select fields with
filterOptions(#13397) (c9a1590)
📚 Documentation
🧪 Tests
⚙️ CI
🏡 Chores
🤝 Contributors
- Jessica Rynkar (@JessRynkar)
- Jacob Fletcher (@jacobsfletch)
- Patrik (@PatrikKozak)
- Alessio Gravili (@AlessioGr)
- Jarrod Flesch (@JarrodMFlesch)
- Paul (@paulpopus)
- Marcus Michaels (@marcusmichaels)
- Luke Bennett (@lukebennett)
- German Jablonski (@GermanJablo)
- Rodrigo Antunes (@rodrigoant)
- Sasha (@r1tsuu)
- Yi Chi (@chiyi4488)
- Sam (@damnsamn)
- Elliot DeNolf (@denolfe)
v3.50.0
v3.50.0 (2025-08-05)
🚀 Features
- add hooks to restoreVersion collection operation (#13333) (9031f3b)
- adds trash support to the count operation (#13304) (1175508)
- graphql: allow to pass
count: trueto a join query (#13351) (f432cc1) - translations: add Indonesian translations (#13323) (df91321)
🐛 Bug Fixes
- deletedAt in TypeWithID not accepting null from generated types (#13363) (8401b21)
- svg uploads allowed when glob (#13356) (43b4b22)
- querying
hasMany: trueselect fields inside polymorphic joins (#13334) (b26a73b) - next: version view did not properly handle field-level permissions (#13336) (1d70d4d)
- next: incorrect version view stepnav value (#13305) (8a48941)
- next: safely access relationTo value from relationship field (#13337) (095e7d9)
- next: incorrect doc link in trash view with groupBy enabled (#13332) (c48b57f)
- next: cannot filter trash (#13320) (e7124f6)
- plugin-multi-tenant: constrain results to assigned tenants when present (#13365) (20b4de9)
- richtext-lexical: recursively unwrap generic Slate nodes in Lexical migration converter (#13202) (227a20e)
- ui: fallback to default locale checkbox passes wrong value (#12396) (b74f4fb)
- ui: group/array error paths persisting when valid (#13347) (2903486)
- ui: add hidden sidebar fields css specificity (#13344) (b965db8)
- ui: hide sidebar when no fields rendered (#13340) (1b93c4b)
- ui: incorrect padding when using rtl (#13338) (f2d4004)
⚡ Performance
- 23% faster job queue system on postgres/sqlite (#13187) (3114b89)
- ui: only select the useAsTitle field when fetching the document data of a relationship value (#13228) (1b31c74)
🧪 Tests
- adds e2e tests for auth enabled collections with trash enabled (#13317) (a8b6983)
- stabilize frequent fails (#13318) (a22f27d)
🏡 Chores
🤝 Contributors
- Jessica Rynkar (@JessRynkar)
- Patrik (@PatrikKozak)
- Jarrod Flesch (@JarrodMFlesch)
- Alessio Gravili (@AlessioGr)
- Jens Becker (@jhb-dev)
- Sasha (@r1tsuu)
- Muhammad Nizar (@mnizarzr)
- Evelyn Hathaway (@evelynhathaway)
v3.49.1
v3.49.1 (2025-07-29)
🐛 Bug Fixes
- support next.js 15.4.4 (#13280) (5c94d2d)
- keep apiKey encrypted in refresh operation (#13063) (#13177) (b1fa76e)
- filters cookies with the
payload-prefix in getExternalFile by default (#13215) (0894249) - use atomic operation for incrementing login attempts (#13204) (4fde0f2)
- refactors toast error rendering (#13252) (d093bb1)
- serve svg+xml as svg (#13277) (bc80284)
- svg+xml file detection (#13276) (e8f6cb5)
- drizzle: respect join.type config (#13258) (8518141)
- next: group by null relationship crashes list view (#13315) (e502203)
- next: catch list filter errors, prevent list view crash (#13297) (8d84352)
- next: pass req through document tab conditions and custom server components (#13302) (c5c8c13)
- next: unable to view trashed documents when group-by is enabled (#13300) (aff2ce1)
- plugin-multi-tenant: prefer assigned tenants for selector population (#13213) (e29d1d9)
- richtext-lexical: unify indent between different converters and make paragraphs and lists match without CSS (#13274) (7cd4a8a)
- translations: improve swedish translations (#13272) (da8bf69)
- translations: missing closing brace in rs latin translation for lastSavedAgo (#13172) (26d9dae)
- ui: autosave-enabled document drawers close unexpectedly within the join field (#13298) (61ee8fa)
⚡ Performance
📚 Documentation
- remove asterisk from optional url property in live preview docs (#13108) (fc59448)
- typo in vercel-content-link.mdx (#13170) (9e04dbb)
- fixes typo in ternary operator for live preview docs (#13163) (72954ce)
- remove obsolete scheduler property (#13278) (2e9ba10)
🧪 Tests
📝 Templates
⚙️ CI
🏡 Chores
- next: cleanup unused code (#13292) (b1aac19)
- ui: var name typo in relationship field (#13295) (a888d5c)
🤝 Contributors
- contip (@contip)
- German Jablonski (@GermanJablo)
- Adebayo Ajayi (@Braggedtooth)
- brutumfulmen97 (@brutumfulmen97)
- Alejandro Martinez (@ja-martinez)
- Aayush Rajagopalan (@aayushxr)
- Sean Zubrickas (@zubricks)
- Jacob Fletcher (@jacobsfletch)
- Jarrod Flesch (@JarrodMFlesch)
- Elliot DeNolf (@denolfe)
- Alessio Gravili (@AlessioGr)
- Patrik (@PatrikKozak)
v3.49.0
v3.49.0 (2025-07-25)
🚀 Features
- adds trash support (soft deletes) (#12656) (f63dc2a)
- group by (#13138) (bccf6ab)
- scheduling jobs (#12863) (c08b2ae)
- ui: expose refresh method to list drawer context (#13173) (e48427e)
🐛 Bug Fixes
- filtering by polymorphic relationships inside other fields (#13265) (75385de)
- text field validation for minLength: 1, required: false (#13124) (af2ddff)
- empty folderType arrays break relational dbs (#13219) (7f9de6d)
- handle undefined values in afterChange hooks when read:false and create:true on the field level access for parents and siblings (#12664) (46d8a26)
- exit payload jobs:run process after completion (#13211) (4ae503d)
- db-mongodb: handle duplicate unique index error for DocumentDB (#13239) (c1cfceb)
- db-postgres: search is broken when
useAsTitleis not specified (#13232) (a83ed5e) - next: prevent base list filters from being injected into the url (#13253) (0eac58e)
- plugin-import-export: json preview and downloads preserve nesting and exclude disabled fields (#13210) (8f85da8)
- ui: preserve localized blocks and arrays when using CopyToLocale (#13216) (4a712b3)
- ui: incorrect blocks label sizing (#13264) (fa7d209)
- ui: ensure document unlocks when logging out from edit view of a locked document (#13142) (7e81d30)
- ui: monomorphic relationship fields should not show relationTo option labels (#13245) (29fb9ee)
- ui: select all should reset when params change, page, filter, etc (#12612) (412bf4f)
- ui: ensure publishSpecificLocale works during create operation (#13129) (dce898d)
- ui: properly sync search params to user preferences (#13200) (d7a3faa)
⚡ Performance
- db-postgres: avoid including
prettierto the bundle (#13251) (380ce04) - drizzle: single-roundtrip db updates for simple collections (#13186) (94f5e79)
🛠 Refactors
📚 Documentation
- add
statusto forbidden field names when using Postgres and drafts are enabled (#13233) (7ae4f8c) - remove payload cloud (#13240) (77f279e)
- fix typo, example was not valid JSON (#13224) (0eb8f75)
- shorten line length in code snippet comments to avoid horizontal scrolling (#13217) (d6e21ad)
- plugin-import-export: document plugin-import-export (#13243) (14322a7)
🔨 Build
⚙️ CI
🏡 Chores
- add new int test verifying that select improves performance of new optimization (#13254) (aeee070)
- plugin-import-export: use debug-level logging for createExport process (#13242) (246a42b)
🤝 Contributors
- Sasha (@r1tsuu)
- Patrik (@PatrikKozak)
- German Jablonski (@GermanJablo)
- Jarrod Flesch (@JarrodMFlesch)
- Jacob Fletcher (@jacobsfletch)
- Dan Ribbens (@DanRibbens)
- Alessio Gravili (@AlessioGr)
- Elliot DeNolf (@denolfe)
- fgrsource (@fgrsource)
- Chandler Gonzales (@jcgsville)
- Jessica Rynkar (@JessRynkar)
- iamacup (@iamacup)
- Jake Fell (@jakefell)
v3.48.0
v3.48.0 (2025-07-17)
🚀 Features
- add
findDistinctoperation (#13102) (a20b436) - atomic number field updates (#13118) (841bf89)
- plugin-import-export: adds support for disabling fields (#13166) (5839cb6)
- plugin-import-export: adds support for forcing export format via plugin config (#13160) (7294cf5)
- plugin-import-export: adds pluginConfig options to disable Save and Download buttons in export UI (#13158) (de53f68)
- richtext-lexical: export $createLinkNode and $isLinkNode for server use (#13205) (6ae730b)
- ui: supports collection scoped folders (#12797) (12539c6)
🐛 Bug Fixes
- Enhances field-level access controls on Users collection to address s… (#13197) (cab7ba4)
- cron jobs running when calling bin scripts, leading to db errors (#13135) (64d76a3)
- types for RenderField fields prop (#13162) (5f01953)
- db-mongodb: improve compatibility with Firestore database (#12763) (41cff6d)
- plugin-import-export: disabled flag to cascade to nested fields from parent containers (#13199) (95e373e)
- plugin-import-export: export field dropdown to properly label and path fields in named/unnamed tabs (#13180) (2a59c5b)
- plugin-multi-tenant: selector could become hidden (#13134) (e575511)
- plugin-seo: add localized property to MetaTitleComponent (#12751) (d213c91)
⚡ Performance
📚 Documentation
- fix minor typo (#13185) (be8e8d9)
- performance (#13068) (277448d)
- fix invalid syntax failing the docs import (#13165) (4831bae)
- add section on browser environment variables when using experimental-build-mode (#13164) (4c69f8e)
🧪 Tests
📝 Templates
⚙️ CI
- disable bundle analysis for forks (#13198) (e6da384)
- fix post-release-templates workflow (#13159) (edd1f02)
🤝 Contributors
- Patrik (@PatrikKozak)
- Jarrod Flesch (@JarrodMFlesch)
- Alessio Gravili (@AlessioGr)
- Sasha (@r1tsuu)
- Sean Zubrickas (@zubricks)
- Elliott W (@elliott-w)
- Elliot DeNolf (@denolfe)
- jangir-ritik (@jangir-ritik)
- Jacob Fletcher (@jacobsfletch)
- Patrick Roelofs (@Patrickroelofs)