v3.71.0

payloadcms/payloadv3.71.0Jan 13, 2026by denolfe

AI Summary

This release introduces advanced job queue concurrency controls, strict TypeScript types for drafts, and major updates to the import/export and e-commerce plugins.

Key Highlights

  • Job queue gains 'supersedes' and 'exclusive' concurrency controls to prevent race conditions.
  • New 'strictDraftTypes' flag improves TypeScript type safety for draft queries.
  • plugin-import-export is refactored with new import functionality.
  • plugin-ecommerce moves cart logic to the server with new hooks.
  • Support for custom IANA timezones and UTC offsets is added.

Breaking Changes

  • plugin-import-export: refactor plugin and add import functionality

New Features

  • Job queue concurrency supersedes option for 'last queued wins' behavior
  • Exclusive concurrency controls for workflows and tasks
  • Job cancellation from within workflow or task handlers
  • Custom Status component in document controls
  • Bulk operations single transaction config option
  • Additional IANA timezones and custom UTC offsets support
  • TypeScript strictDraftTypes flag for opt-in draft query type safety
  • Validation error context including collection slugs in Drizzle
  • Server-side cart logic with new REST API endpoints
  • Automatic type inference in the SDK
  • Proper error handling with PayloadSDKError

Full Release Notes

## [v3.71.0](https://github.com/payloadcms/payload/compare/v3.70.0...v3.71.0) (2026-01-13)


### 🚀 Features

* supersedes option to job queue concurrency controls ([#15179](https://github.com/payloadcms/payload/issues/15179)) ([9aeb843](https://github.com/payloadcms/payload/commit/9aeb843))
* add support for custom Status component in document controls ([#11154](https://github.com/payloadcms/payload/issues/11154)) ([ef863e6](https://github.com/payloadcms/payload/commit/ef863e6))
* add exclusive concurrency controls for workflows and tasks ([#15177](https://github.com/payloadcms/payload/issues/15177)) ([35fe09d](https://github.com/payloadcms/payload/commit/35fe09d))
* add bulkOperations.singleTransaction config option ([#14387](https://github.com/payloadcms/payload/issues/14387)) ([92da9fa](https://github.com/payloadcms/payload/commit/92da9fa))
* add support for additional IANA timezones, custom UTC offsets and overriding the timezone field ([#15120](https://github.com/payloadcms/payload/issues/15120)) ([a8785ba](https://github.com/payloadcms/payload/commit/a8785ba))
* ability to cancel current job from within workflow or task handlers ([#15119](https://github.com/payloadcms/payload/issues/15119)) ([1bd3146](https://github.com/payloadcms/payload/commit/1bd3146))
* add typescript.strictDraftTypes flag for opt-in draft query type safety ([#14388](https://github.com/payloadcms/payload/issues/14388)) ([58faafd](https://github.com/payloadcms/payload/commit/58faafd))
* **drizzle:** include collection and global slugs in validation errors ([#15147](https://github.com/payloadcms/payload/issues/15147)) ([910d274](https://github.com/payloadcms/payload/commit/910d274))
* **plugin-ecommerce:** new hooks, cart logic moved to the server and fixed several bugs ([#15142](https://github.com/payloadcms/payload/issues/15142)) ([dcd4030](https://github.com/payloadcms/payload/commit/dcd4030))
* **plugin-ecommerce:** add new method refreshCart in useCart ([#14765](https://github.com/payloadcms/payload/issues/14765)) ([#14767](https://github.com/payloadcms/payload/issues/14767)) ([529726e](https://github.com/payloadcms/payload/commit/529726e))
* **plugin-import-export:** refactor plugin and add import functionality ([#14782](https://github.com/payloadcms/payload/issues/14782)) ([13e6035](https://github.com/payloadcms/payload/commit/13e6035))
* **plugin-mcp:** add draft parameter support to MCP find resource tool ([#14924](https://github.com/payloadcms/payload/issues/14924)) ([744a593](https://github.com/payloadcms/payload/commit/744a593))
* **plugin-mcp:** adds tools that can find and update globals ([#15091](https://github.com/payloadcms/payload/issues/15091)) ([f6d9873](https://github.com/payloadcms/payload/commit/f6d9873))
* **plugin-nested-docs:** add req parameter to GenerateURL and GenerateLabel types in nested docs ([#14617](https://github.com/payloadcms/payload/issues/14617)) ([6821a09](https://github.com/payloadcms/payload/commit/6821a09))
* **plugin-redirects:** add Japanese translations ([#15080](https://github.com/payloadcms/payload/issues/15080)) ([c5b57f7](https://github.com/payloadcms/payload/commit/c5b57f7))
* **plugin-search:** enables skipping of document syncing ([#14928](https://github.com/payloadcms/payload/issues/14928)) ([dfcf15c](https://github.com/payloadcms/payload/commit/dfcf15c))
* **sdk:** automatically fallback to generated types attempt ([#15167](https://github.com/payloadcms/payload/issues/15167)) ([ae50d39](https://github.com/payloadcms/payload/commit/ae50d39))
* **sdk:** add proper error handling ([#15148](https://github.com/payloadcms/payload/issues/15148)) ([bfe2154](https://github.com/payloadcms/payload/commit/bfe2154))

---

### Feature Details

**Job Queue Concurrency Supersedes** - Newer jobs can automatically delete older pending jobs with the same concurrency key. Enables "last queued wins" behavior for scenarios where only the latest state matters. [#15179](https://github.com/payloadcms/payload/pull/15179)

```typescript
concurrency: {
  key: ({ input }) => `generate:${input.documentId}`,
  exclusive: true,
  supersedes: true,  // Newer jobs delete older pending ones (not yet completed and did not start processing yet)
}
```

**Exclusive Concurrency Controls** - Prevents race conditions when multiple jobs operate on the same resource. Jobs with the same concurrency key will not run in parallel. Requires `enableConcurrencyControl: true` (will default to `true` in v4.0). [#15177](https://github.com/payloadcms/payload/pull/15177)

```typescript
export default buildConfig({
  jobs: {
    enableConcurrencyControl: true,
    workflows: [{
      slug: 'syncDocument',
      concurrency: ({ input }) => `sync:${input.documentId}`,
      handler: async ({ job }) => {
        // Only one job per documentId runs at a time
      }
    }]
  }
})
```

**Job Cancellation from Handlers** - Throw `JobCancelledError` from within a task or workflow handler to stop the job without retrying. [#15119](https://github.com/payloadcms/payload/pull/15119)

**Custom Status Component** - Replace the Status section in document or global edit views without replacing the entire Edit view. Useful for custom locale publishing logic or additional status indicators. [#11154](https://github.com/payloadcms/payload/pull/11154)

```ts
admin: {
  components: {
    edit: {
      Status: '/components/Status/index.tsx#Status',
    },
  },
},
```

**Bulk Operations Single Transaction (db-mongodb)** - Handle database transaction limitations when processing large numbers of documents in bulk operations. Useful for DocumentDB and Cosmos DB which have cursor limitations within transactions. [#14387](https://github.com/payloadcms/payload/pull/14387)

**Additional IANA Timezones & Custom UTC Offsets** - Support for additional IANA timezone names via `DateTimeFormat` API validation, custom UTC offsets in `±HH:mm` format, and the ability to override the timezone field configuration. [#15120](https://github.com/payloadcms/payload/pull/15120)

```ts
{
  name: 'eventTime',
  type: 'date',
  timezone: {
    supportedTimezones: [
      { label: 'UTC+5:30 (India)', value: '+05:30' },
      { label: 'UTC-8 (Pacific)', value: '-08:00' },
      { label: 'UTC+0', value: '+00:00' },
    ],
  },
}
```

Override the timezone field:

```ts
{
  name: 'publishedAt',
  type: 'date',
  label: 'Published At',
  timezone: {
    override: ({ baseField }) => ({
      ...baseField,
      admin: {
        ...baseField.admin,
        disableListColumn: true, // Hide from list view columns
      },
    }),
  },
}
```

**Strict Draft Types (typescript)** - Opt-in `strictDraftTypes` flag for correct type safety when querying drafts. When enabled, `find` operations with `draft: true` will correctly type required fields as optional. Will become default in v4.0. [#14388](https://github.com/payloadcms/payload/pull/14388)

```typescript
export default buildConfig({
  typescript: {
    strictDraftTypes: true,  // defaults to false
  },
})
```

**Validation Error Context (drizzle)** - Unique constraint `ValidationError`s now include `data.collection` or `data.global` for better error context when debugging. [#15147](https://github.com/payloadcms/payload/pull/15147)

**Server-Side Cart Logic (plugin-ecommerce)** - Cart logic moved to the server with new REST API endpoints. New hooks: `onLogin` (merge guest cart with user cart), `onLogout` (clear session), `clearSession`, `mergeCart`, and `refreshCart`. Support for custom cart item matchers and MongoDB-style `$inc` operator for quantity changes. [#15142](https://github.com/payloadcms/payload/pull/15142)

```ts
/**
 * Custom cart item matcher that includes fulfillment option.
 */
const fulfillmentCartItemMatcher: CartItemMatcher = ({ existingItem, newItem }) => {
  const existingProductID =
    typeof existingItem.product === 'object' ? existingItem.product.id : existingItem.product

  const existingVariantID =
    existingItem.variant && typeof existingItem.variant === 'object'
      ? existingItem.variant.id
      : existingItem.variant

  const productMatches = existingProductID === newItem.product

  const variantMatches = newItem.variant
    ? existingVariantID === newItem.variant
    : !existingVariantID

  const existingFulfillment = existingItem.fulfillment as string | undefined
  const newFulfillment = newItem.fulfillment as string | undefined
  const fulfillmentMatches = existingFulfillment === newFulfillment

  return productMatches && variantMatches && fulfillmentMatches
}
```

**refreshCart Method (plugin-ecommerce)** - Manually refresh cart state after direct modifications, allowing the UI to stay in sync without being blocked by `addItem`'s uniqueness validation. [#14767](https://github.com/payloadcms/payload/pull/14767)

**Import Functionality (plugin-import-export)** - Complete plugin refactor with new import functionality. Config is now per-collection with required `collections` array. Supports disabling import/export per collection and custom collection overrides. [#14782](https://github.com/payloadcms/payload/pull/14782) ⚠️ **BREAKING CHANGE**

```ts
importExportPlugin({
  overrideExportCollection: (collection) => {
    collection.admin.group = 'System'
    collection.upload.staticDir = path.resolve(dirname, 'uploads')
    return collection
  },
  overrideImportCollection: (collection) => {
    collection.admin.group = 'System'
    collection.upload.staticDir = path.resolve(dirname, 'uploads')
    return collection
  },
  collections: [
    {
      slug: 'posts',
      import: false, // disables import functionality, export enabled by default
    },
    {
      slug: 'pages',
      export: ({ collection }) => {
        collection.admin.group = 'System'
        collection.upload.staticDir = path.resolve(dirname, 'uploads')
        return collection
      },
      disableJobsQueue: true, // disable jobs queue for this collection only
    },
  ],
  debug: true,
})
```

**Draft Parameter for MCP Find (plugin-mcp)** - Query draft/unpublished documents via the MCP plugin's find tool using the new `draft` boolean parameter. [#14924](https://github.com/payloadcms/payload/pull/14924)

**Globals Support (plugin-mcp)** - New MCP tools to `find` and `update` globals. [#15091](https://github.com/payloadcms/payload/pull/15091)

**Request Parameter in Nested Docs (plugin-nested-docs)** - `req` parameter added to `generateURL` and `generateLabel` functions for more flexibility (e.g., reading current locale). [#14617](https://github.com/payloadcms/payload/pull/14617)

**Skip Sync (plugin-search)** - Conditionally skip syncing documents to the search index based on locale, document properties, or other criteria. [#14928](https://github.com/payloadcms/payload/pull/14928)

```ts
skipSync: async ({ locale, doc, collectionSlug, req }) => {
  if (!locale) return false

  const tenant = await req.payload.findByID({
    collection: 'tenants',
    id: doc.tenant.id,
  })

  return !tenant.allowedLocales.includes(locale)
}
```

**Automatic Type Inference (sdk)** - The SDK automatically uses your generated types via module augmentation—no need to manually pass `GeneratedTypes`. [#15167](https://github.com/payloadcms/payload/pull/15167)

```ts
import { PayloadSDK } from '@payloadcms/sdk'

const sdk = new PayloadSDK({}) // Types inferred automatically from payload-types.ts
```

**Proper Error Handling (sdk)** - The SDK now throws `PayloadSDKError` on failed API requests with `status`, `errors`, `response`, and `message` properties. [#15148](https://github.com/payloadcms/payload/pull/15148)

```ts
import { PayloadSDKError } from '@payloadcms/sdk'

try {
  await sdk.create({ collection: 'posts', data: { ... } })
} catch (err) {
  if (err instanceof PayloadSDKError) {
    console.log(err.status)  // 400
    console.log(err.errors)  // [{ name: 'ValidationError', message: '...', data: {...} }]
  }
}
```

**Japanese Translations (plugin-redirects)** - Localized admin UI strings for Japanese users. [#15080](https://github.com/payloadcms/payload/pull/15080)

### 🐛 Bug Fixes

* wrong construction of urlToUse leads to false alert with logger.error ([#15190](https://github.com/payloadcms/payload/issues/15190)) ([ec6bba5](https://github.com/payloadcms/payload/commit/ec6bba5))
* adds missing transactions to login and logout operations ([#15134](https://github.com/payloadcms/payload/issues/15134)) ([dd494be](https://github.com/payloadcms/payload/commit/dd494be))
* set basePath from next config as env variable ([#15154](https://github.com/payloadcms/payload/issues/15154)) ([a8bfade](https://github.com/payloadcms/payload/commit/a8bfade))
* throw error on empty relationTo array and allow disabling lockDocuments on all collections ([#14871](https://github.com/payloadcms/payload/issues/14871)) ([9521ec6](https://github.com/payloadcms/payload/commit/9521ec6))
* add distinct validate to richtext field type definition ([#15069](https://github.com/payloadcms/payload/issues/15069)) ([d68e75a](https://github.com/payloadcms/payload/commit/d68e75a))
* exclude files from being sent to the form-state action ([#15174](https://github.com/payloadcms/payload/issues/15174)) ([aaea133](https://github.com/payloadcms/payload/commit/aaea133))
* full image urls stored in DB ([#15089](https://github.com/payloadcms/payload/issues/15089)) ([d462f9b](https://github.com/payloadcms/payload/commit/d462f9b))
* field schema map paths ([#10852](https://github.com/payloadcms/payload/issues/10852)) ([d288752](https://github.com/payloadcms/payload/commit/d288752))
* custom OPTIONS endpoints are intercepted and cannot set custom CORS headers ([#15153](https://github.com/payloadcms/payload/issues/15153)) ([c103667](https://github.com/payloadcms/payload/commit/c103667))
* upload drawer not loading data for uploads without files ([#15150](https://github.com/payloadcms/payload/issues/15150)) ([00fb6e8](https://github.com/payloadcms/payload/commit/00fb6e8))
* cannot read private member #headers error on Node.js 24 when using isolateObjectProperty ([#15116](https://github.com/payloadcms/payload/issues/15116)) ([e214deb](https://github.com/payloadcms/payload/commit/e214deb))
* **db-mongodb:** avoid unnecessary `$lookup` when a join field is not selected ([#15149](https://github.com/payloadcms/payload/issues/15149)) ([e39b1b5](https://github.com/payloadcms/payload/commit/e39b1b5))
* **db-mongodb:** `exists` operator on fields that have an array value in the db ([#15152](https://github.com/payloadcms/payload/issues/15152)) ([0afe200](https://github.com/payloadcms/payload/commit/0afe200))
* **db-mongodb:** find id field from flattened fields ([#15110](https://github.com/payloadcms/payload/issues/15110)) ([40081f4](https://github.com/payloadcms/payload/commit/40081f4))
* **db-postgres:** add filenameCompoundIndex baseIndexes for upload collections ([#15182](https://github.com/payloadcms/payload/issues/15182)) ([01f90c9](https://github.com/payloadcms/payload/commit/01f90c9))
* **db-postgres:** localized and hasMany/polymorphic relationships/uploads inside blocks ([#15095](https://github.com/payloadcms/payload/issues/15095)) ([01e4412](https://github.com/payloadcms/payload/commit/01e4412))
* **drizzle:** unique field errors were not thrown as ValidationErrors ([#15146](https://github.com/payloadcms/payload/issues/15146)) ([43c19cb](https://github.com/payloadcms/payload/commit/43c19cb))
* **live-preview:** remove payload import ([#15160](https://github.com/payloadcms/payload/issues/15160)) ([ec658a4](https://github.com/payloadcms/payload/commit/ec658a4))
* **plugin-cloud-storage:** should persist external data returned by handleUpload ([#15188](https://github.com/payloadcms/payload/issues/15188)) ([7d80d21](https://github.com/payloadcms/payload/commit/7d80d21))
* **plugin-cloud-storage:** prevent deleting original file when duplicating ([#14961](https://github.com/payloadcms/payload/issues/14961)) ([9d54267](https://github.com/payloadcms/payload/commit/9d54267))
* **plugin-mcp:** handle defaultDepth: 0 in api key authentication ([#15014](https://github.com/payloadcms/payload/issues/15014)) ([e0e058c](https://github.com/payloadcms/payload/commit/e0e058c))
* **plugin-multi-tenant:** cannot clear selected tenant from dashboard view ([#15141](https://github.com/payloadcms/payload/issues/15141)) ([cd77e5d](https://github.com/payloadcms/payload/commit/cd77e5d))
* **richtext-lexical,ui:** make uploadNode default to `alt` user-defined values. ([#15097](https://github.com/payloadcms/payload/issues/15097)) ([3290b04](https://github.com/payloadcms/payload/commit/3290b04))
* **storage-*:** add range headers to storage adapters ([#14890](https://github.com/payloadcms/payload/issues/14890)) ([ef90811](https://github.com/payloadcms/payload/commit/ef90811))
* **storage-s3:** respect upload limits with client uploads ([#15176](https://github.com/payloadcms/payload/issues/15176)) ([4a6189e](https://github.com/payloadcms/payload/commit/4a6189e))
* **templates:** fix mobile menu auth buttons overflow in ecommerce template ([#15020](https://github.com/payloadcms/payload/issues/15020)) ([6c1109f](https://github.com/payloadcms/payload/commit/6c1109f))
* **templates:** improve cli detection in cloudflare template ([#15098](https://github.com/payloadcms/payload/issues/15098)) ([5d21ed1](https://github.com/payloadcms/payload/commit/5d21ed1))
* **templates:** add recommended serverExternalPackages to cloudflare ([#15094](https://github.com/payloadcms/payload/issues/15094)) ([0eed581](https://github.com/payloadcms/payload/commit/0eed581))
* **translations:** improve Japanese translations for naturalness and consistency ([#15077](https://github.com/payloadcms/payload/issues/15077)) ([88a901c](https://github.com/payloadcms/payload/commit/88a901c))
* **ui:** ensure up-to-date upload preview thumbnails in admin panel ([#15029](https://github.com/payloadcms/payload/issues/15029)) ([6f4b272](https://github.com/payloadcms/payload/commit/6f4b272))
* **ui:** use optional chaining for potentiallyStalePath ([#15185](https://github.com/payloadcms/payload/issues/15185)) ([38cd67a](https://github.com/payloadcms/payload/commit/38cd67a))
* **ui:** virtual fields with virtual: true show sort chevrons in list view ([#15186](https://github.com/payloadcms/payload/issues/15186)) ([33c3630](https://github.com/payloadcms/payload/commit/33c3630))
* **ui:** prevent text overlap in breadcrumbs ([#15040](https://github.com/payloadcms/payload/issues/15040)) ([0e27f19](https://github.com/payloadcms/payload/commit/0e27f19))
* **ui:** avoid creating hasMany options during IME composition ([#15086](https://github.com/payloadcms/payload/issues/15086)) ([98bc876](https://github.com/payloadcms/payload/commit/98bc876))
* **ui:** duplicate document has unused serverURL dependency ([#15178](https://github.com/payloadcms/payload/issues/15178)) ([6d212b8](https://github.com/payloadcms/payload/commit/6d212b8))
* **ui:** bulk upload error count ([#15155](https://github.com/payloadcms/payload/issues/15155)) ([0a46f4e](https://github.com/payloadcms/payload/commit/0a46f4e))
* **ui:** margins on small screens when using hideGutter in group ([#15041](https://github.com/payloadcms/payload/issues/15041)) ([22f94cd](https://github.com/payloadcms/payload/commit/22f94cd))
* **ui:** preserve beforeInput/afterInput components in bulk edit ([#14954](https://github.com/payloadcms/payload/issues/14954)) ([c62dc2a](https://github.com/payloadcms/payload/commit/c62dc2a))
* **ui:** prevent wrong scroll target when adding rows in repeated array blocks ([#15047](https://github.com/payloadcms/payload/issues/15047)) ([f13a741](https://github.com/payloadcms/payload/commit/f13a741))
* **ui:** crop width and height inputs limited to -1 of max ([#15101](https://github.com/payloadcms/payload/issues/15101)) ([3a6d3bd](https://github.com/payloadcms/payload/commit/3a6d3bd))

### ⚡ Performance

* optimized collection create when versions are enabled ([#14885](https://github.com/payloadcms/payload/issues/14885)) ([25813a7](https://github.com/payloadcms/payload/commit/25813a7))
* **graphql:** optimized join count when docs are not needed ([#14872](https://github.com/payloadcms/payload/issues/14872)) ([6025eff](https://github.com/payloadcms/payload/commit/6025eff))

### 🛠 Refactors

* clean up generated type resolution ([#15163](https://github.com/payloadcms/payload/issues/15163)) ([51d6cd2](https://github.com/payloadcms/payload/commit/51d6cd2))
* deprecate returning failed state from job queue handlers ([#15102](https://github.com/payloadcms/payload/issues/15102)) ([070ded7](https://github.com/payloadcms/payload/commit/070ded7))

### 📚 Documentation

* clarify available operations for beforeOperation hook ([#14774](https://github.com/payloadcms/payload/issues/14774)) ([8c59762](https://github.com/payloadcms/payload/commit/8c59762))
* update link for MDN docs on cookies in requests ([#15075](https://github.com/payloadcms/payload/issues/15075)) ([0859f1c](https://github.com/payloadcms/payload/commit/0859f1c))
* updates custom upload component examples ([#14678](https://github.com/payloadcms/payload/issues/14678)) ([d3d8b4e](https://github.com/payloadcms/payload/commit/d3d8b4e))
* add graphql multi-field sort note ([#15123](https://github.com/payloadcms/payload/issues/15123)) ([14ac061](https://github.com/payloadcms/payload/commit/14ac061))
* task failure docs ([#15096](https://github.com/payloadcms/payload/issues/15096)) ([81df3d6](https://github.com/payloadcms/payload/commit/81df3d6))

### 🧪 Tests

* remove silly tests from accessComposition unit tests ([#15158](https://github.com/payloadcms/payload/issues/15158)) ([cc33129](https://github.com/payloadcms/payload/commit/cc33129))
* fixes flaky form state test ([#15128](https://github.com/payloadcms/payload/issues/15128)) ([251fc68](https://github.com/payloadcms/payload/commit/251fc68))
* adds assert helpers to the a11y suite ([#15132](https://github.com/payloadcms/payload/issues/15132)) ([daf8061](https://github.com/payloadcms/payload/commit/daf8061))
* running a11y test suite sequentially ([#15130](https://github.com/payloadcms/payload/issues/15130)) ([536582f](https://github.com/payloadcms/payload/commit/536582f))
* update outdated hardcoded postgres connection strings ([#15114](https://github.com/payloadcms/payload/issues/15114)) ([7930f44](https://github.com/payloadcms/payload/commit/7930f44))
* fixes lexical block test flakes ([#15113](https://github.com/payloadcms/payload/issues/15113)) ([13edb8a](https://github.com/payloadcms/payload/commit/13edb8a))

### ⚙️ CI

* remove website post release notification ([#15133](https://github.com/payloadcms/payload/issues/15133)) ([5ebda61](https://github.com/payloadcms/payload/commit/5ebda61))
* **deps:** bumps setup-node version from 4 to 6 ([#15122](https://github.com/payloadcms/payload/issues/15122)) ([fe9119b](https://github.com/payloadcms/payload/commit/fe9119b))

### 🏡 Chores

* deprecate skip parameter from db-adapters ([#15183](https://github.com/payloadcms/payload/issues/15183)) ([ea15f00](https://github.com/payloadcms/payload/commit/ea15f00))
* add v4 comments for relationTo types ([#15187](https://github.com/payloadcms/payload/issues/15187)) ([d7351d5](https://github.com/payloadcms/payload/commit/d7351d5))
* upgrade to pnpm 10 ([#15137](https://github.com/payloadcms/payload/issues/15137)) ([1c8d515](https://github.com/payloadcms/payload/commit/1c8d515))
* refactor withPayload back to js ([#15159](https://github.com/payloadcms/payload/issues/15159)) ([44af1ad](https://github.com/payloadcms/payload/commit/44af1ad))
* **plugin-mcp:** adds config.admin.user as an optional default userCollection ([#14989](https://github.com/payloadcms/payload/issues/14989)) ([cdabf79](https://github.com/payloadcms/payload/commit/cdabf79))
* **templates:** replace arbitrary tailwind values with utilities in ecommerce template ([#14654](https://github.com/payloadcms/payload/issues/14654)) ([67cc734](https://github.com/payloadcms/payload/commit/67cc734))

### ⚠️ BREAKING CHANGES

* **plugin-import-export:** refactor plugin and add import functionality ([#14782](https://github.com/payloadcms/payload/issues/14782)) ([13e6035](https://github.com/payloadcms/payload/commit/13e6035))

  This PR works to refactor the entire plugin so it's easier for us to
  work with it going forward and also implements import functionality.



### 🤝 Contributors

- Sasha (@r1tsuu)
- Jeffery To (@jefferyto)
- Alessio Gravili (@AlessioGr)
- tapartdev (@tapartdev)
- Paul (@paulpopus)
- Patrik (@PatrikKozak)
- Elmo (@Spreizu)
- Jarrod Flesch (@JarrodMFlesch)
- German Jablonski (@GermanJablo)
- Jessica Rynkar (@jessrynkar)
- roboin (@Robot-Inventor)
- Tobias Odendahl (@tak-amboss)
- Rick Geersing (@RickGeersing)
- Dan Ribbens (@DanRibbens)
- Riley Langbein (@rilrom)
- David Wensley (@wensleyio)
- Bernhard Frick (@baer95)
- Said Akhrarov (@akhrarovsaid)
- Kendell (@kendelljoseph)
- Jiayi Wang (@Jeromestein)
- Jake (@jacobsfletch)
- Jens Becker (@jhb-dev)
- Sean Zubrickas (@zubricks)
- Anton Timmermans (@atimmer)
- Ricardo Tavares (@rjgtav)
- Marcin Gierada (@teastudiopl)
- Colum Kelly (@columk1)
- Elliot DeNolf (@denolfe)
- Jonathan Elmgren (@jonathanelmgren)
- Thomas Coldwell (@thomas-coldwell)