Releases: payloadcms/payload
Releases · payloadcms/payload
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)
v3.33.0
v3.33.0 (2025-04-04)
🚀 Features
- drizzle: export buildQuery and parseParams (#11935) (f34eb22)
- graphql: improve non-nullability in query result types (#11952) (018bdad)
- next: improved lexical richText diffing in version view (#11760) (d29bdfc)
- storage-uploadthing: configurable upload router input config (#11954) (f9c73ad)
- ui: use drag overlay in orderable table (#11959) (816fb28)
🐛 Bug Fixes
- postgres null value breaks orderable hook (#11997) (9adbbde)
- allow custom
password
field when usingdisableLocalStrategy: true
(#11893) (8ad22eb) ValidationError
error message whenlabel
is a function (#11904) (dc793d1)- do not append
doc
input for scheduled publish job if it's enabled only for globals (#11892) (760cfad) - db-mongodb: querying relationships with where clause as an object with several conditions (#11953) (857e984)
- db-postgres:
deleteOne
fails when thewhere
query does not resolve to any document (#11632) (4ebd3ce) - db-postgres: down migration fails because
migrationTableExists
doesn't check in the current transaction (#11910) (f310c90) - graphql: respect
draft: true
when querying joins (#11869) (e5690fc) - storage-uploadthing: pass
clientUploads.routerInputConfig
to the handler (#11962) (8e93ad8) - ui: optimistic rows disappear while form state requests are pending (#11961) (8880d70)
⚡ Performance
- ui: significantly optimize form state component rendering, up to 96% smaller and 75% faster (#11946) (e87521a)
📚 Documentation
- fix invalid markdown (#11996) (f7ed8e9)
- add missing comma (#11976) (e6aad5a)
- fix variable names for lexical markdown conversion (#11963) (06d937e)
📝 Templates
🏡 Chores
- fix flake (fae113b)
- plugin-cloud-storage: enable TypeScript strict (#11850) (d47b753)
- plugin-form-builder: enable TypeScript strict (#11929) (a58ff57)
- plugin-nested-docs: enable TypeScript strict (#11930) (fd42ad5)
- plugin-redirects: enable TypeScript strict (#11931) (6c735ef)
- richtext-lexical: add DebugJsxConverterFeature (#10856) (308cb64)
🤝 Contributors
- Dan Ribbens (@DanRibbens)
- Sasha (@r1tsuu)
- Paul (@paulpopus)
- Alessio Gravili (@AlessioGr)
- Tony Tkachenko (@tonytkachenko)
- James (@jmikrut)
- Jacob Fletcher (@jacobsfletch)
- reiv (@reiv)
- Said Akhrarov (@akhrarovsaid)
- Germán Jabloñski (@GermanJablo)
v3.32.0
v3.32.0 (2025-04-01)
🚀 Features
- orderable collections (#11452) (d963e6a)
- configurable job queue processing order (LIFO/FIFO), allow sequential execution of jobs (#11897) (c844b4c)
- change version view
modifiedOnly
default totrue
(#11794) (21f7ba7) - db-*: return database name to unsanitized config (#11913) (a083d47)
- db-*: export types from main export (#11914) (a6f7ef8)
🐛 Bug Fixes
- typescriptSchema override required to false (#11941) (968a066)
- support parallel job queue tasks (#11917) (9a1c3cf)
- next: block encoded and escaped open redirects in getSafeRedirect (#11907) (96289bf)
- plugin-cloud-storage: ensure client handlers are added to import map regardless of enabled state (#11880) (98e4db0)
- richtext-lexical: incorrectly hidden fields in drawers due to incorrect permissions handling (#11883) (f34cc63)
- translations: improve Swedish translations for query presets (#11937) (5b0e0ab)
- ui: nested fields disappear when manipulating rows in form state (#11906) (373f6d1)
- ui: switching languages does not update cached client config (#11725) (4a0bc86)
- ui: query presets are available for unrelated collections (#11872) (4fc2eec)
- ui: nested custom components sometimes disappear when queued in form state (#11867) (10ac989)
⚡ Performance
- prefer async fs calls (#11918) (d1c0989)
- ui: download only images and optimize image selection for document edit view, prioritize best-fit size (#11844) (5ae5255)
🛠 Refactors
- drizzle: replace query chaining with dynamic query building (#11923) (9c88af4)
- ui: replace autosave queue pattern with useQueues hook (#11884) (62c4e81)
📚 Documentation
- capitalization error (#11912) (af8c786)
- fix invalid react-hooks docs (#11895) (2b6313e)
- correct spelling of "it" (#11889) (b863fd0)
- fix links in custom components and custom features (#11881) (6b56343)
🧪 Tests
📝 Templates
🏡 Chores
- deps: bump mongodb-github-action (#10921) (329cd0b)
- live-preview: enable TypeScript strict (#11840) (6badb5f)
- ui: added selected option as a class to list table cell (#11750) (1578cd2)
🤝 Contributors
- Germán Jabloñski (@GermanJablo)
- Dan Ribbens (@DanRibbens)
- Jacob Fletcher (@jacobsfletch)
- Marcus Forsberg (@marcusforsberg)
- Alessio Gravili (@AlessioGr)
- Patrik (@PatrikKozak)
- Said Akhrarov (@akhrarovsaid)
- Nate Schneider (@nate-at-keen)
- Maxim Seshuk (@maximseshuk)
- Philipp Schneider (@philipp-tailor)
- Pranav (@pranav-vaniya)
- Paul (@paulpopus)