Skip to content

Releases: payloadcms/payload

v3.40.0

29 May 19:48
3670886
Compare
Choose a tag to compare

v3.40.0 (2025-05-29)

🚀 Features

🐛 Bug Fixes

  • parseCookies ignore invalid encoded values (#12515) (bfdcb51)
  • improve translation script prompt and fix some incorrectly used terms in spanish and dutch (#12548) (1731dd7)
  • browseByFolder route should be optional (#12527) (c010d51)
  • thread req into interal folder payload operations (#12523) (64443d8)
  • infinite loop in findUp utility when a result is not found (#12457) (842d184)
  • delete subfolders hook with relational databases (#12507) (45f4c5c)
  • db-*: disable DB connection for payload migrate:create (#12596) (12395e4)
  • db-*: migrate:reset executes in a wrong order (#12445) (1b1e36e)
  • db-mongodb: exists query on checkbox fields (#12567) (f2b6c4a)
  • db-postgres: properly escape the ' character (#12590) (6888f13)
  • examples: update live-preview example to ESM (#12570) (d6f6b05)
  • next: folder redirects not working (#12509) (bc43982)
  • richtext-lexical: respect disableBlockName (#12597) (ca26402)
  • richtext-lexical, ui: opening relationship field with appearance: "drawer" inside rich text inline block (#12529) (f2b54b5)
  • storage-vercel-blob: client uploads with a prefix (#12559) (b61ef13)
  • templates: update template/plugin and fix import map issue (#12305) (68ba24d)
  • translations: improve Spanish translations (#12555) (8a7ac78)
  • translations: correct Norwegian terms for “locale” and language labels (#12557) (bd2571c)
  • ui: reduces pill sizing in autosave cells (#12606) (a17d84e)
  • ui: oversized column selector pills (#12583) (3022cab)
  • ui: filtering on hasMany fields (#12579) (166dafe)
  • ui: prevent textarea description overlapping fields and not honoring rows attribute (#12406) (032375b)
  • ui: cloudfront removing X-HTTP-Method-Override header (#12571) (8448e5b)
  • ui: live-preview-tab should show beforeDocumentControls (#12568) (dfa0974)
  • ui: safari css rendering issues with table and folder cards (#12531) (293cdc1)
  • ui: only and files/folders to the grid/list if they were added to the current folder (#12525) (5a75881)
  • ui: replaces css fn with css calc (#12520) (feeee19)
  • ui: index based ids without useAsTitle breaks folders (#12519) (e9cda1e)

⚡ Performance

  • folder views download only images and get best fit from image sizes (#12514) (11a4a20)

🛠 Refactors

📚 Documentation

📝 Templates

🏡 Chores

🤝 Contributors

v3.39.1

22 May 15:44
9ef51a7
Compare
Choose a tag to compare

v3.39.1 (2025-05-22)

🐛 Bug Fixes

📚 Documentation

📝 Templates

🤝 Contributors

v3.39.0

22 May 14:23
c1c0db3
Compare
Choose a tag to compare

v3.39.0 (2025-05-22)

🚀 Features

📁 Folders (#10030) (00667fa)

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

  • add test for sorting by a virtual field with a reference (#12351) (81d333f)

📝 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

v3.38.0

15 May 18:45
5617087
Compare
Choose a tag to compare

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

🏡 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

v2.32.3

08 May 18:20
f8ec6a7
Compare
Choose a tag to compare

2.32.3 (2025-05-08)

Bug Fixes

  • filter state resetting when removing previous condition in WhereBuilder (#12262) (a09fefa)
  • upload: ensure only image files are read for preview (#9562) (5ecee3f), closes #9559

v3.37.0

05 May 19:17
9a6bb44
Compare
Choose a tag to compare

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 and prevPage are non nullable even though they can be null 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

v3.36.1

30 Apr 18:58
cfe8c97
Compare
Choose a tag to compare

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

🤝 Contributors

v3.36.0

29 Apr 16:43
3df1329
Compare
Choose a tag to compare

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

  • translations: improvements for german translations (#11807) (92380bf)

📚 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

v3.35.1

17 Apr 15:09
17d5168
Compare
Choose a tag to compare

v3.35.1 (2025-04-17)

🐛 Bug Fixes

🏡 Chores

  • db-postgres: improve table name length exceeded error message (#12142) (0a59707)

🤝 Contributors

  • Jessica Chowdhury (@JessChowdhury)
  • Sasha (@r1tsuu)

v3.35.0

16 Apr 19:59
bcbb912
Compare
Choose a tag to compare

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

  • ui: prevent blockType: "$undefined" from being sent through the network (#12131) (4426625)

📚 Documentation

🏡 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