v3.67.0

payloadcms/payloadv3.67.0Dec 5, 2025by denolfe

AI Summary

Adds groupBy support to query presets and reworks guest cart access control in the e-commerce plugin.

Key Highlights

  • GroupBy support now saved and restored in query presets.
  • Guest carts enabled with reworked access config in e-commerce plugin.
  • Fixes for missing hooks and upload admin types.

Breaking Changes

  • plugin-ecommerce: add ability to enable guest carts with reworked access config

New Features

  • GroupBy support to query presets
  • Guest carts with reworked access config
  • Fix missing beforeInput and afterInput properties in UploadAdmin
  • Fix missing afterOperation and beforeOperation hook calls
  • Fix sanitized versions type
  • Fix multi-tenant getGlobalViewRedirect exports
  • Fix autosave not queued while background process is in flight

Full Release Notes

## [v3.67.0](https://github.com/payloadcms/payload/compare/v3.66.0...v3.67.0) (2025-12-05)


  ### 🚀 Features

  * add groupBy support to query presets ([#14808](https://github.com/payloadcms/payload/issues/14808)) ([2b7aa7a](https://github.com/payloadcms/payload/commit/2b7aa7a))
  * **plugin-ecommerce:** add ability to enable guest carts with reworked access config ([#14565](https://github.com/payloadcms/payload/issues/14565)) ([90c92f4](https://github.com/payloadcms/payload/commit/90c92f4))

  ---

  **GroupBy Support for Query Presets** - Query presets now save and restore `groupBy` state when switching between presets. Previously, groupBy settings would persist across preset switches and weren't saved as part of the preset configuration. [#14808](https://github.com/payloadcms/payload/pull/14808)

  <img width="711" height="684" alt="Preset creation with group-by added" src="https://github.com/user-attachments/assets/5fe6ee88-6ed7-40f6-b190-df6b2e89460c" />

  ---

  **Guest Carts (plugin-ecommerce)** - Enable guest users to create and manage carts without authentication. Carts created by guests are secured with a generated secret stored in local storage. Configure with `allowGuestCarts` (enabled by default). Also adds `isLoading` status to all hooks for conditional UI state.
  [#14565](https://github.com/payloadcms/payload/pull/14565)

  ```ts
  // Before
  ecommercePlugin({
    access: {
      adminOnly,
      adminOnlyFieldAccess,
      adminOrCustomerOwner,
      adminOrPublishedStatus,
      customerOnlyFieldAccess,
    }
  })

  // After
  ecommercePlugin({
    access: {
      adminOnlyFieldAccess,
      adminOrPublishedStatus,
      customerOnlyFieldAccess,
      isAdmin,
      isDocumentOwner,
    }
  })
```

  🐛 Bug Fixes

  - add missing beforeInput and afterInput properties to UploadAdmin type (https://github.com/payloadcms/payload/issues/14775) (https://github.com/payloadcms/payload/commit/22a0255)
  - add missing afterOperation and beforeOperation hook calls (https://github.com/payloadcms/payload/issues/14778) (https://github.com/payloadcms/payload/commit/e9cd2a5)
  - sanitized versions type was incorrect (https://github.com/payloadcms/payload/issues/14810) (https://github.com/payloadcms/payload/commit/51c951f)
  - plugin-multi-tenant: moves getGlobalViewRedirect from utilities to rsc exports (https://github.com/payloadcms/payload/issues/14817) (https://github.com/payloadcms/payload/commit/1340818)
  - ui: autosave not queued while background process is in flight (https://github.com/payloadcms/payload/issues/14805) (https://github.com/payloadcms/payload/commit/14f042f)
  - ui: ensure block error css only gets applied to the affected block (https://github.com/payloadcms/payload/issues/14826) (https://github.com/payloadcms/payload/commit/7520140)
  - ui: missing translation support in SelectMany component (https://github.com/payloadcms/payload/issues/14819) (https://github.com/payloadcms/payload/commit/8fa91a5)

  ⚡ Performance

  - cpa: use AST for templates (https://github.com/payloadcms/payload/issues/14648) (https://github.com/payloadcms/payload/commit/bad6680)

  ⚙️ CI

  - clean up bug report template for auto-labeling (https://github.com/payloadcms/payload/commit/ebee8e1)

  🏡 Chores

  - claude: add coding patterns and best practices section (https://github.com/payloadcms/payload/issues/14829) (https://github.com/payloadcms/payload/commit/c5d8e68)
  - deps: bump @types/react and @types/react-dom to 19.2.1 (https://github.com/payloadcms/payload/issues/14815) (https://github.com/payloadcms/payload/commit/d56796b)
  - deps: bump next to 15.4.8 in root and test dirs (https://github.com/payloadcms/payload/issues/14811) (https://github.com/payloadcms/payload/commit/1c3417d)

  ⚠️ BREAKING CHANGES

  - plugin-ecommerce: add ability to enable guest carts with reworked access config (https://github.com/payloadcms/payload/issues/14565) (https://github.com/payloadcms/payload/commit/90c92f4)

  This PR introduce a breaking change into the plugin as it was necessary
  in order to provide more secure guest carts.

  🤝 Contributors

  - Paul (@paulpopus)
  - Jake (@jacobsfletch)
  - Jessica Rynkar (@jessrynkar)
  - Elliot DeNolf (@denolfe)
  - Patrik (@PatrikKozak)
  - Jarrod Flesch (@JarrodMFlesch)
  - Jens Becker (@jhb-dev)