Releases: payloadcms/payload
Releases · payloadcms/payload
v3.40.0
v3.40.0 (2025-05-29)
🚀 Features
- adds new canSetHeaders prop to auth strategies (#12591) (ca6f849)
- moves getSafeRedirect into payload package (#12593) (7e873a9)
- adds calling of before and after operation hooks to resetPassword (#12581) (54a0484)
- show nested fields in named tabs as separate columns in the list view (#12530) (20f7017)
- filter query preset constraints (#12485) (0204f0d)
- select field filter options (#12487) (f75d62c)
- ui: export FieldAction type (#12589) (699af8d)
🐛 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
🛠 Refactors
📚 Documentation
- autoLogin codeblock was not nested under 'admin' (#12573) (0c0b0fe)
- typos and links (#12484) (7fa879c)
- fix typos, duplicated words, wrong property names etc. (#12480) (e2f7889)
📝 Templates
🏡 Chores
- updates bug template (#12587) (4a41369)
- fixes monorepo dev plugin-import-export (#12528) (06fbc07)
- moves collections folders property to the top level (#12508) (d83b2bf)
- examples: remove unused imports from custom server example (#12467) (071c61f)
- examples: fix read permission in auth example (#12403) (cceb793)
- ui: finish adding folders e2e tests (#12524) (feb7e08)
🤝 Contributors
- Sasha (@r1tsuu)
- Jarrod Flesch (@JarrodMFlesch)
- James Mikrut (@jmikrut)
- Alessio Gravili (@AlessioGr)
- Jacob Fletcher (@jacobsfletch)
- Jordy (@jordanlambrecht)
- Alessandro Stoppato (@alexrah)
- Germán Jabloñski (@GermanJablo)
- Sean Zubrickas (@zubricks)
- Jessica Rynkar (@jessrynkar)
- Patrik (@PatrikKozak)
- Said Akhrarov (@akhrarovsaid)
- Paul (@paulpopus)
- Anders Semb Hermansen (@andershermansen)
- Anyu Jiang (@anyuj)
- Dan Ribbens (@DanRibbens)
- Ricardo Tavares (@rjgtav)
- Jake Grella (@jakegrella)
- Rémy (@rrelmy)
- Elliot DeNolf (@denolfe)
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)