Skip to content

Releases: payloadcms/payload

v3.48.0

17 Jul 18:51
a336135

Choose a tag to compare

v3.48.0 (2025-07-17)

🚀 Features

  • add findDistinct operation (#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

  • drizzle: further optimize postgres row updates (#13184) (7cd682c)

📚 Documentation

🧪 Tests

📝 Templates

⚙️ CI

🤝 Contributors

v3.47.0

11 Jul 19:49
e5f64f7

Choose a tag to compare

v3.47.0 (2025-07-11)

🚀 Features

  • allow joins, select, populate, depth and draft to /me REST API operation (#13116) (2d91cb6)
  • exports new sanitizeUserDataForEmail function (#13029) (9f1bff5)
  • next: redirect non-existent documents to list view with banner (#13062) (5e82f9f)
  • next: add redirect from ${adminRoute}/collections to ${adminRoute} (#13061) (a7a0501)
  • plugin-import-export: show delayed toast when export download takes time (#13126) (b3a994e)
  • storage-*: include modified headers into the response headers of files when using adapters (#12096) (cb6a73e)
  • ui: add API key visibility toggle (#13110) (8a3b97c)
  • ui: adds support for copy pasting complex fields (#11513) (1d6ffcb)

🐛 Bug Fixes

  • execute mimetype validation on the file buffer data (#13117) (5695d22)
  • login operation not returning collection and _strategy (#13119) (0c2b105)
  • ensure we perform ssrf check within dispatcher (#13078) (e99c67f)
  • ensure default values are not shown when value is hidden (#13074) (855a320)
  • correctly reset login attempts (#13075) (aa97f3c)
  • payload auth api-key algorithm compatibility (#13076) (9c45321)
  • next: prevent live preview url functions from firing unnecessarily (#13088) (0b88466)
  • plugin-import-export: sync export field selection with list view columns from query columns (#13131) (c1bad01)
  • plugin-import-export: flattening logic for polymorphic relationships in CSV exports (#13094) (c6105f1)
  • plugin-import-export: selectionToUse field to dynamically show valid export options (#13092) (0806ee1)
  • plugin-import-export: sync field select dropdown with form value (#13103) (1c6a79b)
  • ui: disabled and styles add row button correctly (#13140) (2cafe49)
  • ui: ensure buildFormStateHandler throws error instead of returning null for unauthorized requests (#13123) (06ef798)
  • ui: monomorphic joins tables not fetching draft documents (#13139) (19a3367)
  • ui: ensure that schedule publishing time picker can only be in the future (#13128) (f63dfad)
  • ui: hidden input should wait for form initialization (#13114) (c77b39c)
  • ui: improve alignment of clear and dropdown indicator buttons in select based fields (#12995) (4c25357)
  • ui: prevent error crashing UI when relationship assigned as useAsTitle (#12981) (8a5cb27)

⚡ Performance

  • db-postgres: simplify db.updateOne to a single DB call with if the passed data doesn't include nested fields (#13060) (055cc4e)

📚 Documentation

  • richtext-lexical: add documentation page about official features (#13132) (576644d)
  • templates: fix grammar in README (#13027) (96c24a2)

⚙️ CI

🏡 Chores

  • deps: bump deps to resolve all high severity (#13002) (417b70e)

🤝 Contributors

v3.46.0

07 Jul 20:15
14612b4

Choose a tag to compare

v3.46.0 (2025-07-07)

🚀 Features

🐛 Bug Fixes

  • deduplicate custom array id fields (#13064) (e6f8ca6)
  • check hostname of upload url (#13018) (30fc7e3)
  • db-mongodb: updateOne mutates the data object and does not transform it for read (#13065) (6d5cc84)
  • next: adds token to reset password initialState (#13067) (f4f13a2)
  • next: respect collection-level live preview config (#13036) (f49eeb1)
  • plugin-redirects: make 'from' field unique to prevent errors in redirect logic (#12964) (50c2f8b)
  • ui: increase timeout for opening list drawer in RelationshipInput (#13031) (2650eb7)
  • ui: change password button is hidden when user has full field access (#12988) (1d9ad6f)

🧪 Tests

⚙️ CI

🤝 Contributors

v3.45.0

03 Jul 13:32
1ccd7ef

Choose a tag to compare

v3.45.0 (2025-07-03)

🚀 Features

  • mount live preview to document root (#12860) (f2213e5)
  • drizzle: support half-precision, binary, and sparse vectors column types (#12491) (583a733)

🐛 Bug Fixes

  • disable graphql introspection queries when disableIntrospectionInProduction is true (#12982) (a9580e0)
  • strict custom view paths (#12968) (cfc7adc)
  • appropriately throw unverified email error (#12933) (9f60306)
  • db-mongodb: nested sorting by ID (#13016) (81532cb)
  • db-mongodb: add ability to disable fallback sort and no longer adds a fallback for unique fields (#12961) (c902f14)
  • db-postgres: joins with hasMany: true relationships nested to an array (#12980) (0e8ac0b)
  • drizzle: ensure updateOne does not create new document if where query has no results (#12991) (fafaa04)
  • examples: only allow super admins to create users with super admin role (#13015) (6e5ddc8)
  • examples: checks requested tenant matches user tenant permissions (#13012) (5002953)
  • plugin-import-export: pre-scan columns before streaming CSV export (#13009) (34c3a51)
  • plugin-import-export: preview table to include all selected columns regardless of populated data (#12985) (335af1b)
  • plugin-multi-tenant: unnecessary modal appearing (#12854) (16f5538)
  • templates: wrong link in demo content (custom components) (#13024) (f70c6fe)
  • ui: save nested richtext inside inlineBlock (#12773) (babcd59)
  • ui: autosave infinite loop within document drawer (#13007) (b40c581)
  • ui: field bulk upload showing stale data (#13006) (9ba740e)
  • ui: prevent document drawer from remounting on save (#13005) (c80b6e9)
  • ui: bulk upload redirecting to relationship documents when added (#13001) (a9ad7c7)
  • ui: skip disabled fields when adding OR filter conditions in list view (#13004) (7a40a9f)
  • ui: render preview sizes button when adjustments are disabled but image sizes are defined (#12999) (b1ae749)
  • ui: block rows unexpectedly collapse and array rows not collapsed on init (#12987) (3f30a2e)
  • ui: prevent error if rows is undefined in mergeServerFormState (#12962) (6f6d305)

🎨 Styles

  • richtext-lexical: ensure error state is shown at small-break (#12827) (ac19b78)

🧪 Tests

📝 Templates

⚙️ CI

  • template errors not being caught due. fix: error due to updated generated-types User type (#12973) (4458f74)

🏡 Chores

🤝 Contributors

v3.44.0

27 Jun 13:28
c66e5ca

Choose a tag to compare

v3.44.0 (2025-06-27)

🚨 Notice 🚨

If your project uses the local auth strategy with db-postgres or db-sqlite, a migration is required. This is due to a new security feature (enabled by default) that stores a unique auth session identifier in the database.

To opt out and continue using the previous behavior, you can disable the feature by setting auth.useSessions: false in your users collection config.

For example:

// payload.config.ts collections: [ { slug: 'users', auth: { useSessions: false, }, fields: [], }, ],

🚀 Features

🐛 Bug Fixes

  • richTextField supports beforeInput/afterInput, but these were missing from types.ts (#12889) (e769550)
  • validate "null" value for point field as true when its not required (#12908) (2da6d92)
  • get external resource blocked (#12927) (a7ad573)
  • restore missing properties to live preview client config (#12904) (bcb10b5)
  • uses valid fractional index for test (#12942) (8900a38)
  • querying virtual fields deeply with draft: true (#12868) (bc9b501)
  • use small pill size when viewing version information (#12844) (6c4dfe4)
  • db-mongodb: strip deleted from the config blocks from the result (#12869) (54afaf9)
  • db-postgres: joins with custom schema (#12937) (c1f6297)
  • db-postgres: querying on hasMany: true select field in a relationship (#12916) (b74969d)
  • drizzle: skip column if undefined in findMany (#12902) (605c993)
  • live-preview: client-side live preview cannot populate more than 10 relationships at once (#12929) (7472798)
  • live-preview: foreign postMessage events reset client-side state (#12925) (67fa5a0)
  • next: live preview popup triggers leave without saving modal (#12947) (141133a)
  • next: prevent errors in globals version view (#12920) (39e9519)
  • next: remove error handling from next auth functions (#12897) (1b5e3fe)
  • next: remove console.error from next auth functions (#12881) (fe58f03)
  • plugin-import-export: duplicated rows and headers in CSV export when streaming paginated results (#12941) (5cf9287)
  • plugin-import-export: csv export for polymorphic relationship fields (#12926) (6d76874)
  • plugin-import-export: omit CSV columns when toCSV returns undefined (#12923) (751691a)
  • plugin-multi-tenant: updates tenant selector upon tenant creation (#12936) (c76d839)
  • richtext-lexical: consistent html converter inline padding (#12848) (11ac230)
  • ui: usePreventLeave should not show alert for exceptions (#12722) (c3c1614)
  • ui: vertically align table headers to the middle (#12699) (0e9865c)
  • ui: properly render create new button in polymorphic joins (#12930) (a1822d2)
  • ui: render DateTime label as instead of (#12949) (4b9566f)
  • ui: bulk upload losing state when adding additional files (#12946) (d62d9b4)
  • ui: unreachable custom views when admin route set to '/' (#12812) (379fc12)
  • ui: toggle list selections off on successful bulk action (#12861) (9f17db8)
  • ui: align caret on error tooltip for checkbox field (#12917) (c094b0e)
  • ui: updates auth fields UI to reflect access control (#12745) (1845669)
  • ui: folder server function must reference exports dir (#12898) (0d50799)
  • ui: custom row labels on arrays should not be removed on field duplication (#12895) (37c945b)
  • ui: date format of useAsTitle lost after changing value (#12928) (20bbbcf)
  • ui: properly differentiate between DOM events and raw values in setValue (#12892) (c03e9c1)
  • ui: should select document after creation from relationship field (#12842) (25e3902)
  • ui: support react node content in ConfirmationModal heading and body (#12841) (dffdee8)

🛠 Refactors

📚 Documentation

Read more

v3.43.0

16 Jun 20:14
810869f

Choose a tag to compare

v3.43.0 (2025-06-16)

🚀 Features

🐛 Bug Fixes

  • ensure job autoruns are not triggered if jobs collection not enabled (#12808) (769ca03)
  • filtering joins in where by ID (#12804) (9943b35)
  • change payload.jobs.run and bin script to only run jobs from default queue by default, adds support for allQueues argument (#12799) (06ad171)
  • remove unsupported path property from default document view configs (#12774) (f64a0ae)
  • field inside an unnamed group field erroring when used as a title (#12771) (143aff5)
  • error when saving global with versioning enabled (#12778) (cf43c5c)
  • reduce global DOM/Node type conflicts in server-only packages (#12737) (67fb29b)
  • orderable has incorrect sort results depending on capitalization (#12758) (37afbe6)
  • ensure redirect route is correctly formatted for "Copy to locale" (#12560) (9d2817e)
  • db-mongodb: 4x and more level deep relationships querying (#12800) (245a2de)
  • db-mongodb: bump mongoose to 8.15.1 (#12755) (860e0b4)
  • db-postgres: reordering of enum values, bump drizzle-kit@0.31.0 and drizzle-orm@0.43.1 (#12256) (7045182)
  • db-postgres: x3 and more nested blocks regression (#12770) (df8be92)
  • db-sqlite: sqlite unique validation messages (#12740) (254ffec)
  • plugin-import-export: download button in collection edit view (#12805) (8235fe1)
  • plugin-import-export: incorrect custom type on toCSVFunction changed to toCSV (#12796) (3edcc40)
  • plugin-import-export: export all available fields by default (#12731) (c4e5831)
  • plugin-nested-docs: check error name that is changed at compile time (#12798) (729b676)
  • plugin-redirects: add missing optional chaining (#12753) (d0e647a)
  • storage-azure: return error status 404 when file is not found instead of 500 (#11734) (018317d)
  • storage-gcs: return 404 on file not found instead of 500 (#11746) (d8626ad)
  • storage-s3: return error status 404 when file is not found instead of 500 (#11733) (a19921d)
  • translations: reformats bnBD and bnIN translation imports to camelCase (#12736) (08fbcb5)
  • ui: reordering with a join field inside a group (#12803) (e60db07)
  • ui: adjust alignment of list header actions (#12793) (77f3805)
  • ui: not showing hyphenated field values in table (#12791) (e7b5884)
  • ui: inconsistent pill sizes across admin panel (#12788) (9364d51)

⚡ Performance

  • ui: do not re-animate drawer on re-render, reduce useEffects (#12743) (cb3f9bb)

🛠 Refactors

📚 Documentation

🏡 Chores

🤝 Contributors

v3.42.0

09 Jun 18:47
4ac1894

Choose a tag to compare

v3.42.0 (2025-06-09)

🚀 Features

  • create the importmap file if missing and the location can be found (#12727) (c6659db)
  • plugin-import-export: add custom toCSV function on fields (#12533) (8f4c442)
  • plugin-import-export: add debug logging option (#12705) (678bfc7)
  • translations: add Bangla translations (#12696) (3f670ca)

🐛 Bug Fixes

  • proper globals max versions clean up (#12611) (9fbc3f6)
  • adds routeParams to the req on views (#12711) (773e4ad)
  • plugin-form-builder: export DateField type (#12695) (8d7dbe6)
  • plugin-import-export: incorrect config extension of jobs (#12730) (ff615d3)
  • plugin-import-export: revise zhTw translations (#12685) (afbdf3d)
  • richtext-lexical: text state css not applied if 2+ text state groups present (#12726) (3d177fd)
  • richtext-lexical: prevent runtime error if using TextStateFeature without props (#12668) (6f82154)
  • richtext-slate: add 'li' string literal to RichTextElement type (#12693) (e10e445)
  • translations: correct i18n dynamic variable name for 'movingFromFolder' (#12642) (6f76d72)

⚡ Performance

  • richtext-lexical: improve typing performance while toolbars are enabled (#12669) (aef4f77)

📚 Documentation

  • document how to expose the jobs collection in Admin UI (#12707) (34fe36b)
  • fix formatting in custom components > edit view paragraph (#12697) (6466684)
  • improve jobs autorun docs, adds e2e test (#12196) (7c05c77)
  • enhance drafts documentation with examples for REST, Local, and GraphQL APIs (#12575) (629e74d)
  • removes duplicate headline in building without a db connection (#12694) (4ee4aa7)
  • plugin-form-builder: add warning about GraphQL type name collis… (#12720) (7b21270)

🏡 Chores

🤝 Contributors

v3.41.0

05 Jun 14:10
a10c3a5

Choose a tag to compare

v3.41.0 (2025-06-05)

🚀 Features

  • optionally exclude collection documents from appearing in browse-by-folder (#12654) (337f618)
  • improve turbopack compatibility (#11376) (319d335)
  • polymorphic join querying by fields that don't exist in every collection (#12648) (2b40e0f)
  • ui: use document drawers for folder edit/create (#12676) (9581092)
  • ui: adds new editMenuItems custom component (#12649) (625d8d9)

🐛 Bug Fixes

  • correctly detect glb & gltf mimetypes during upload (#12623) (05eeddb)
  • allow unnamed group fields to not set a label at all (#12580) (d561195)
  • cpa: generate .env when using the --example flag (#12572) (836fd86)
  • db-postgres: ensure deletion of numbers and texts in upsertRow (#11787) (bd512f1)
  • db-postgres: in query with null (#12661) (c08cdff)
  • live-preview: correct type inference (#12619) (c83e791)
  • next: cannot override tab of default views (#11789) (c639c5f)
  • plugin-seo: thread allowCreate to meta image component (#12624) (ede5c67)
  • richtext-lexical: export defaultColors for use in client components (#12627) (8199a7d)
  • richtext-lexical: enable select inputs with ctrl+a or cmd+a (#12453) (89ced5e)
  • translations: add missing import for lv locale from date-fns (#12577) (cbc37d8)
  • ui: adjusts margin spacing on upload actions (#12692) (1dd4a12)
  • ui: safely extract text from React nodes (#12419) (48e5ee6)
  • ui: formatDate and formatTimeToNow utility type error on i18n arg to support I18nClient too (#12576) (76bf459)
  • ui: correctly thread through the autoComplete attribute from admin config to the text input (#12473) (08ec837)
  • ui: clear miliseconds in date fields unless theyre explicitly provided in the display format (#12650) (a9ff375)
  • ui: reset columns state throwing errors (#11903) (08a6f88)
  • ui: upload action button styles (#12592) (6119d89)

⚡ Performance

  • ui: prevent unnecessary client config sanitization (#12665) (2bd098c)

🛠 Refactors

  • translations: correct i18n translation for Mandarin (#12561) (6f8cff7)
  • ui: improve relationship field option loading reliability using queues (#12653) (30dd9a2)

📚 Documentation

  • add Content-Type header for JWT authentication (#12513) (3f7debd)
  • fix import statements for plugin-nested-docs (#12494) (5635ec5)
  • improve rich-text documentation with hasText usage tip (#12645) (53de775)
  • fix beforeHook documentation to reflect actual behaviour (#12651) (fd5cd1a)
  • improve module augmentation docs for request context (#12681) (0c3ff88)
  • update seo plugin tabbedUI docs to mention potential pitfalls with the config option (#12549) (505eaa2)
  • missing dash (#12644) (684c436)
  • building without a db connection (#12607) (7c094dc)

📝 Templates

⚙️ CI

🏡 Chores

  • fix various e2e test setup issues (#12670) (545d870)
  • fix lint warnings for default exports, unused imports, unused err in catch (#12666) (48218bc)
  • migrate to TypeScript strict in Payload package (enable strictNullChecks) - #3 (#12586) (6ec21a5)
  • update CONTRIBUTING.md (#12511) (5e3a94b)

🤝 Contributors

v3.40.0

29 May 19:48
3670886

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

Choose a tag to compare

v3.39.1 (2025-05-22)

🐛 Bug Fixes

📚 Documentation

📝 Templates

🤝 Contributors