Releases: payloadcms/payload
Releases · payloadcms/payload
v3.39.1
v3.39.0
v3.39.0 (2025-05-22)
🚀 Features
Folders allow you to organize your documents in a more manageable way. Now you can enable folders on a per-collection basis and from there start adding folders from within the admin panel (or via the API). Once you have folders enabled you can then start organizing. You can create folders and store documents across multiple collection types and then view them either in the collection "By Folder" or in the global "Browse by Folder" view.
CleanShot.2025-05-21.at.21.49.16.mp4
- show fields inside groups as separate columns in the list view (#7355) (2a41d3f)
- plugin-form-builder: add new date field (#12416) (4dfb2d2)
- richtext-lexical: add TextStateFeature (allows applying styles such as color and background color to text) (#9667) (fc83823)
- ui: extracts relationship input for external use (#12339) (88769c8)
🐛 Bug Fixes
- auto inject req.user into query preset constraints (#12461) (22b1858)
- telemetry in opennext cloudflare (#12327) (2ab8e2e)
- prevent resizing of original file with
withoutEnlargement
on update (#12291) (1235a18) - incorrect environment file loading (#12360) (1425269)
- sanitize duplicate blocks (#12440) (5855f3a)
- orderable with groups and tabs requires migration (#12422) (529bfe1)
- respect
hidden: true
for virtual fields that have reference to a relationship field (#12219) (1f6efe9) - cpa: ensure it always installs the latest version of the templates (#12488) (898e97e)
- db-*: ensure consistent sorting even when sorting on non-unique fields or no sort parameters at all (#12447) (72ab319)
- db-mongodb: remove
limit
from nested querying (#12464) (230128b) - db-postgres: allow the same block slug in different places with a different
localized
value (#12414) (219fd01) - plugin-import-export: add translations for all UI elements and fields (#12449) (3127d6a)
- plugin-multi-tenant: multi-locale tenant select label (#12444) (4fe3423)
- plugin-multi-tenant: add missing translation for Assigned Tenant field (#12448) (e8c2b15)
- plugin-seo: fix genImageResponse result parsing (#12301) (cead312)
- richtext-lexical: support inline block types in strict mode for JSXConvertersFunction type (#12478) (8596ac5)
- templates: make images visible in live preview if it is not running on port 3000 (#12432) (d4899b8)
- ui: set gap to 0 in sort column buttons to remove unneeded spacing (#12481) (c772a32)
- ui: render missing group children fields for unnamed group (#12433) (6fb2beb)
- ui: req not being threaded through to views (#12213) (bd6ee31)
⚡ Performance
📚 Documentation
- update rich text to HTML conversion documentation (#12465) (c701dd4)
- fix API capitalization typo in virtual fields documentation (#12477) (324daff)
🧪 Tests
📝 Templates
🏡 Chores
- simplifies buildColumnState functions (#12496) (8142a00)
- ignore .idea run configuration templates (#12439) (23f4204)
- fix all lint errors and add mechanisms to prevent them from appearing again (#12401) (2a929cf)
- add ignores .next folder in eslint config for templates template (#12423) (e395a0a)
- drizzle: fix lint errors in
@payloadcms/drizzle
(#12428) (38029cd) - live-preview: load schemaJSON from proper client config in integration tests (#12167) (08a3dfb)
🤝 Contributors
- Jarrod Flesch (@JarrodMFlesch)
- Paul (@paulpopus)
- Anders Semb Hermansen (@andershermansen)
- Germán Jabloñski (@GermanJablo)
- Patrik (@PatrikKozak)
- Sasha (@r1tsuu)
- Dan Ribbens (@DanRibbens)
- Alessio Gravili (@AlessioGr)
- Keisuke Ikeda (@ksk1kd)
- Jacob Fletcher (@jacobsfletch)
- conico974 (@conico974)
- Femi Oladipo (@femioladipo)
- Anyu Jiang (@anyuj)
- Elliot DeNolf (@denolfe)
- ch-jwoo (@ch-jwoo)
v3.38.0
v3.38.0 (2025-05-15)
🚀 Features
- add latvian language support (#12363) (77bb7e3)
- allow group fields to have an optional name (#12318) (e258cd7)
- prevent query preset lockout (#12322) (9779cf7)
- thread overrideAccess through field validations (#12399) (7130834)
- plugin-multi-tenant: prompt the user to confirm the change of tenant before actually updating (#12382) (faa7794)
- storage-s3: presigned URLs for file downloads (#12307) (800c424)
- ui: fixed toolbar group customization (#12108) (b7b2b39)
- ui: display the actual error message on unpublish if available (#11898) (b3cac75)
🐛 Bug Fixes
- db-mongodb: sort by fields in relationships with
draft: true
(#12387) (fd67d46) - db-mongodb: localized dates being returned as date objects instead of strings (#12354) (c43891b)
- db-postgres: build
near
sort query properly for point fields (#12240) (58fc2f9) - db-postgres:
dbName
in arrays regression with long generated drizzle relation names (#12237) (5fce501) - db-postgres: v2-v3 migration errors with relation already exists (#12310) (3edfd7c)
- db-postgres: ensure module augmentation for generated schema is picked up correctly in turborepo (#12312) (98283ca)
- db-postgres: selectDistinct might remove expected rows when querying with nested fields or relations (#12365) (8219c04)
- drizzle: improve db push schema comparison (#12193) (7266225)
- next: tells webpack not to bundle the require-in-the-middle pkg (#12417) (7498d09)
- plugin-cloud: ensure scheduled publishing works if no custom jobs are defined (#12410) (d63c8ba)
- richtext-lexical: newTab not being able to be checked to true by default (#12389) (3e7db30)
- ui: respect
filterOptions: { id: { in: [] } }
(#12408) (8ebadd4) - ui: passes value to server component args (#12352) (d9c0c43)
⚡ Performance
- remove duplicative deep loops during field sanitization (#12402) (93d79b9)
- actually debounce rich text editor field value updates to only process latest state (#12086) (1d5d96d)
📚 Documentation
- remove link to outdated ecommerce template from stripe plugin docs (#12353) (cd45574)
- add local api instructions for vercel content link (#12385) (a9cc747)
- add pagination and limit: 0 information in pagination for API docs (#12243) (05ae957)
📝 Templates
- fix categories search sync (#12359) (3701de5)
- add eslint ignore rule for '.next/' (#12332) (09f15ff)
- fix Media component failing when setting a custom serverURL (#12214) (1869377)
🏡 Chores
- add NODE_OPTIONS to vscode settings by default in the repo for playwright extension (#12390) (e93d0ba)
- add no-frozen-lockfile flag for templates script (#12394) (735d699)
- bump node version in monorepo and add new flag for node 23.6+ (#12328) (021932c)
- plugin-stripe: enable TypeScript strict (#12303) (edeb381)
🤝 Contributors
- Sasha (@r1tsuu)
- Paul (@paulpopus)
- Jarrod Flesch (@JarrodMFlesch)
- Dan Ribbens (@DanRibbens)
- Dmitrijs Trifonovs (@dt-globelaxy)
- Alessio Gravili (@AlessioGr)
- Jacob Fletcher (@jacobsfletch)
- Ruslan (@ruslan-amboss)
- Philipp Schneider (@philipp-tailor)
- Anyu Jiang (@anyuj)
- Jessica Rynkar (@jessrynkar)
- Germán Jabloñski (@GermanJablo)
- Rot4tion (@Rot4tion)
- jeepman32 (@jeepman32)
- Tobias Odendahl (@tak-amboss)
v2.32.3
v3.37.0
v3.37.0 (2025-05-05)
🚀 Features
- exports additional login helper utils (#12309) (dcd4e37)
- live-preview: expose requestHandler to subscribe.ts (#10947) (35c0404)
- ui: update RelationshipFilter if only filterOptions are changed (#11985) (446938b)
- ui: add document link to drawer (#12036) (292b462)
- ui: add option to open related documents in a new tab (#11939) (1ef1c55)
- ui: make select and relationship field placeholder configurable (#12253) (e568391)
- ui: allow array fields to be filtered in list view (#11925) (78d3af7)
🐛 Bug Fixes
- allow custom admin user collection in query presets constraints (#12202) (b9868c4)
- cpa: overwrites existing env variables (#10636) (e5b28c9)
- db-*: migration batch not incrementing past 1 (#12215) (3c9ee5d)
- db-postgres: start transaction in v2-v3 migration only after drizzle prompts to avoid timeout (#12302) (2628b43)
- graphql:
nextPage
andprevPage
are non nullable even though they can benull
sometimes (#12201) (3fb81ef) - graphql: population of joins that target relationship fields that have
relationTo
as an array (#12289) (c08c707) - plugin-cloud-storage: missing 'prefix' in cloud storage plugin (#11970) (0d10f43)
- plugin-multi-tenant: make tenant selector respect order if orderable enabled for tenant collection (#12314) (a6d76d6)
- richtext-lexical: add missing line-breaks to plaintext conversion (#11951) (ddf40d5)
- ui: unable to search for nested fields in WhereBuilder field selection (#11986) (3818634)
- ui: blockType ignored when merging server form state (#12207) (a62cdc8)
- ui: fix version list status for unpublished documents (#11983) (b6b02ac)
📚 Documentation
- fix typo in fields/relationship.mdx (#12306) (055a263)
- repair blank template markdown link in installation docs (#12297) (5365d4f)
🏡 Chores
- live-preview: enable TypeScript strict (live-preview-vue) (#12299) (b480f81)
- live-preview-react: enable TypeScript strict (#12298) (11018eb)
- storage-uploadthing: enable TypeScript strict (#12304) (d7d3744)
🤝 Contributors
- Ruslan (@ruslan-amboss)
- Anyu Jiang (@anyuj)
- Florian Beeres (@cideM)
- James Mikrut (@jmikrut)
- Tobias Odendahl (@tak-amboss)
- Sasha (@r1tsuu)
- Dan Ribbens (@DanRibbens)
- Germán Jabloñski (@GermanJablo)
- Bamsi (@francescoamici)
- Philipp Schneider (@philipp-tailor)
- qoheleth-tech (@qoheleth-tech)
- Samuel Gabriel (@sam-gab)
- Jessica Rynkar (@jessrynkar)
- Janus Reith (@janus-reith)
v3.36.1
v3.36.1 (2025-04-30)
🐛 Bug Fixes
- duplicate with orderable (#12274) (710fe09)
- virtual relationship fields with
select
(#12266) (564fdb0) - update email regex to support special characters (#12181) (8fee016)
- db-postgres:
count
crashes when query contains subqueries and doesn't return any rows (#12273) (4a56597) - plugin-import-export: csv export column order (#12258) (47a1eee)
- richtext-lexical: ensure state is up-to-date on inline-block restore (#12128) (1b17df9)
⚡ Performance
- optimize file access promises (#12275) (6133a1d)
- db-postgres: skip pagination overhead if
limit: 0
is passed (#12261) (27d644f)
🤝 Contributors
- Dan Ribbens (@DanRibbens)
- Sasha (@r1tsuu)
- Mattias Grenhall (@grenhall)
- Tobias Odendahl (@tak-amboss)
v3.36.0
v3.36.0 (2025-04-29)
🚀 Features
- add
beforeDocumentControls
slot to allow custom component injection next to document controls (#12104) (d553069) - add
showSaveDraftButton
option to show draft button with autosave enabled (#12150) (34ea6ec)
🐛 Bug Fixes
- user validation error inside the forgotPassword operation in the cases where user had localised fields (#12034) (c85fb80)
- db-mongodb: fallback
version
when not selected (#12158) (6dc61ae) - db-postgres: sort by distance when the
near
operator is used (#12185) (9955818) - examples: incorrect documentation links for Live Preview example (#12233) (ab03f4f)
- next: pg-cloudflare build issue (#12242) (2157450)
- plugin-search: delete does not also delete the search doc (#12148) (df7a369)
- richtext-lexical: prevent extra paragraph when inserting blocks or uploadNodes. Add preemptive selection normalization (#12077) (5492542)
- richtext-lexical: allow to indent and outdent if at least one selected node allows it (#12182) (9b1dd2a)
- richtext-lexical: reset indent on node transforms (#12183) (2c20051)
- ui: copyToLocale should not pass any id's to avoid duplicates (#11887) (34ead72)
- ui: relationship using list drawer correctly updates when hasMany is true (#12176) (5bd852c)
- ui: reflect default sort in join tables (#12084) (b750ba4)
⚡ Performance
- optimize virtual fields that reference ID (#12159) (fdff587)
- graphql: skip count query for join field using simple pagination (#12223) (6b83086)
- plugin-nested-docs: remove extra find call (#12224) (2f21d46)
- plugin-search: reduce query depth in hooks (#12225) (caae598)
- ui: only select necessary data for relationship options (#12251) (9948040)
🛠 Refactors
📚 Documentation
- adds warning about handling different environments with migrations (#12249) (b7ae4ee)
- fix query preset config link (#12156) (034a267)
- virtual fields linking with relationship fields (#12145) (d91478c)
🤝 Contributors
- Germán Jabloñski (@GermanJablo)
- Tobias Odendahl (@tak-amboss)
- Jessica Rynkar (@jessrynkar)
- Bjørn Nyborg (@Bjornnyborg)
- Dan Ribbens (@DanRibbens)
- Sam Wheeler (@swheeler7)
- Adrian Maj (@AdrianMaj)
- Tylan Davis (@tylandavis)
- Elliot DeNolf (@denolfe)
- Said Akhrarov (@akhrarovsaid)
- Silas Krause (@krsilas)
- Sasha (@r1tsuu)
- Corey Larson (@coreyleelarson)
- Patrik (@PatrikKozak)
v3.35.1
v3.35.0
v3.35.0 (2025-04-16)
🚀 Features
- queriable / sortable /
useAsTitle
virtual fields linked with a relationship field (#11805) (1c99f46) - threads operation through field condition function (#12132) (c877b1a)
- adds and exports reusable auth server functions (#11900) (6b34937)
- db-postgres: dependency inject pg to allow Sentry instrumentation (#11478) (da7be35)
- ui: add option for rendering the relationship field as list drawer (#11553) (55d00e2)
- ui: use defaultDepth in API view (#11950) (b354d00)
🐛 Bug Fixes
- respects boolean query preset constraints (#12124) (a675c04)
- ensures cors headers are run against custom endpoints (#12091) (e79b203)
- reordering draft documents causes data loss (#12109) (e90ff72)
- correct typo in error message and remove console.log (#12082) (a9eca3a)
- db-postgres: use correct export path for codegen in
createSchemaGenerator
(#12043) (71e3c78) - db-sqlite: text field converts to floating point number (#12107) (6572bf4)
- richtext-lexical: allow to indent children even if their parents are not indentable (#12042) (babf4f9)
- templates: missing default value in select field (#11715) (5b554e5)
- translations: add missing Catalan translations (#10682) (85e6edf)
- ui: stale paths on custom components within rows (#11973) (21599b8)
- ui: issue with schedule publish disappearing on autosave collections (#12078) (3a7cd71)
- ui: use route.api from config in OrderableTable (#12081) (3287f70)
⚡ Performance
📚 Documentation
- fix syntax issue in blocks field (#11855) (b9832f4)
- minor formatting tweaks to server function examples (#12102) (c661d33)
🏡 Chores
- adjusts ChevronIcon styling to match other icons (#12133) (2362899)
- assign available port to env variable in dev suite (#12092) (39462bc)
- separate Lexical tests into dedicated suite (#12047) (a66f90e)
🤝 Contributors
- Sasha (@r1tsuu)
- Patrik (@PatrikKozak)
- Philipp Schneider (@philipp-tailor)
- Tylan Davis (@tylandavis)
- Kristian Djaković (@kristian240)
- Jacob Fletcher (@jacobsfletch)
- James Mikrut (@jmikrut)
- Dan Ribbens (@DanRibbens)
- Tobias Odendahl (@tak-amboss)
- Adler Weber (@adlrwbr)
- Sam Wheeler (@swheeler7)
- AoiYamada (@AoiYamada)
- Edgar Guerra (@edguerrade)
- Jessica Chowdhury (@JessChowdhury)
- Paul (@paulpopus)
- Slava Nossar (@slavanossar)
- Corey Larson (@coreyleelarson)
- alexrah (@alexrah)
- Germán Jabloñski (@GermanJablo)
v3.34.0
v3.34.0 (2025-04-10)
🚀 Features
- support
where
querying by join fields (#12075) (466dcd7) - add support for time format config on scheduled publish (#12073) (eab9770)
🐛 Bug Fixes
- cannot define a join field when the target relationship is nested to a second or higher tab (#12041) (7aa3c5e)
- image previews getting stuck in list view when paginating (#12062) (a0fb335)
- array minRow validation should not show when non-required with no rows (#12037) (f079ece)
- querying by polymorphic join field
relationTo
withoverrideAccess: false
(#11999) (b9ffbc6) - db-postgres: long array field table aliases cause error even when
dbName
is used (#11995) (09782be) - richtext-lexical: diff component css was not included in css bundle (#12028) (f1d9b44)
- ui: ensure
file
field is only serialized at top-level for upload-enabled collections (#12074) (112e081) - ui: form state race conditions (#12026) (4d7c1d4)
- ui: adds multi select inputs for text fields in where builder (#12054) (18ff9cb)
- ui: orderable table rendering (#12066) (9853f27)
- ui: adds multi select inputs for number fields in where builder (#12053) (09916ad)
- ui: resets value in where builder when operator changes (#11136) (ec34e64)
- ui: upload edits handling for bulk uploads (#12001) (c7b14bd)
- ui: prefer adminThumbnail even if file is non-image (#11948) (7721025)
⚡ Performance
📚 Documentation
- formatting tweaks for local api docs (#12064) (a90ae9d)
- adjust formatting on Local API - Server Functions documentation (#12058) (d19412f)
- adds server function and access control sections to local API docs (#11902) (b809c98)
- clarify file upload example with
_payload
& field explanation (#12025) (83319be) - fix and normalize links (#11993) (e109491)
- fix a typo (#12012) (dee9abd)
- fix markdown link (#12000) (5c54d9a)
🧪 Tests
📝 Templates
- update readme on blank template and blank template variations for Vercel (#12070) (3523c2c)
- bump for v3.33.0 (#12003) (6d83147)
⚙️ CI
🏡 Chores
- run
dev:generate-types
(#11994) (97e2e77) - add logging templates script and fix engines for pnpm v10 (#12021) (b270901)
- deps: bump image-size to 2.0.2 version (#12063) (37bfc63)
- deps: bump next.js to 15.3.0 and related dependencies (#12067) (e0046bb)
- deps: bump image-size package for security update (#12040) (acae547)
- plugin-seo: enable TypeScript strict (#11933) (a72fa86)
🤝 Contributors
- Sasha (@r1tsuu)
- Germán Jabloñski (@GermanJablo)
- Paul (@paulpopus)
- Patrik (@PatrikKozak)
- Jacob Fletcher (@jacobsfletch)
- Jessica Chowdhury (@JessChowdhury)
- Philipp Schneider (@philipp-tailor)
- Jarrod Flesch (@JarrodMFlesch)
- Alessio Gravili (@AlessioGr)
- Tylan Davis (@tylandavis)
- Said Akhrarov (@akhrarovsaid)
- Elliot DeNolf (@denolfe)
- Omar (@oasaleh)
- zy1p (@zy1p)