v3.64.0
payloadcms/payloadv3.64.0Nov 13, 2025by denolfe
AI Summary
This release adds UTC timezone support, enables Turbopack builds, and introduces MCP context detection alongside custom authentication configuration for the MCP plugin.
Key Highlights
- UTC timezone support for date fields
- Full Turbopack build support
- MCP context detection via req.payloadAPI
- Custom Auth Configuration for MCP access control
- Translation support for the plugin-redirects
New Features
- Add support for UTC timezone in date fields
- Turbopack build support
- Add MCP context to req.payloadAPI
- Add custom auth config to MCP plugin
- Support translations in plugin-redirects
Full Release Notes
## [v3.64.0](https://github.com/payloadcms/payload/compare/v3.63.0...v3.64.0) (2025-11-13)
### ๐ Features
* add support for UTC timezone in date fields ([#14586](https://github.com/payloadcms/payload/issues/14586)) ([8b34e40](https://github.com/payloadcms/payload/commit/8b34e40))
* **next:** turbopack build support, fix incorrect handling of external packages ([#14475](https://github.com/payloadcms/payload/issues/14475)) ([3a975d7](https://github.com/payloadcms/payload/commit/3a975d7))
* **plugin-mcp:** adds MCP context to req.payloadAPI ([#14595](https://github.com/payloadcms/payload/issues/14595)) ([860bdf2](https://github.com/payloadcms/payload/commit/860bdf2))
* **plugin-mcp:** adds custom auth config ([#14538](https://github.com/payloadcms/payload/issues/14538)) ([73a18dc](https://github.com/payloadcms/payload/commit/73a18dc))
* **plugin-redirects:** support translations ([#14548](https://github.com/payloadcms/payload/issues/14548)) ([ad8f0b2](https://github.com/payloadcms/payload/commit/ad8f0b2))
**UTC Timezone Support** - Add support for 'UTC' as a timezone value in date fields. Previously unsupported due to validation against Intl API runtime values. Also fixes issue where having only one timezone would make it selected by default. [#14586](https://github.com/payloadcms/payload/pull/14586)
```ts
import { buildConfig } from 'payload'
const config = buildConfig({
admin: {
timezones: {
supportedTimezones: [
{
label: 'UTC',
value: 'UTC',
},
],
defaultTimezone: 'UTC',
},
},
})
```
**Turbopack Build Support** - Full support for Turbopack builds (now default in Next.js 16). Properly externalizes database adapter entry points to prevent production failures. Resolves issues with direct dependency externalization causing runtime errors. [#14475](https://github.com/payloadcms/payload/pull/14475)
**MCP Context Detection** - Detect when Payload API calls originate from MCP context using `req.payloadAPI === 'MCP'`. Enables conditional logic in hooks based on MCP usage. [#14595](https://github.com/payloadcms/payload/pull/14595)
```ts
export const Posts: CollectionConfig = {
slug: 'posts',
hooks: {
beforeRead: [
({ doc, req }) => {
if (req.payloadAPI === 'MCP') {
doc.title = `${doc.title} (MCP Hook Override)`
}
return doc
},
],
},
}
```
**Custom Auth Configuration** - Override default API key authentication with custom authorization logic using `overrideAuth`. Provides granular control over MCP access permissions. [#14538](https://github.com/payloadcms/payload/pull/14538)
```ts
import { type MCPAccessSettings, mcpPlugin } from '@payloadcms/plugin-mcp'
plugins: [
mcpPlugin({
overrideAuth: (req) => {
return {
posts: { find: true },
products: { find: true, update: true },
} as MCPAccessSettings
},
})
]
```
**Redirect Plugin Translation Support** - Enable translations for plugin fields, eliminating need for verbose field `overrides` configuration. Configure field labels in multiple languages directly through i18n config. [#14548](https://github.com/payloadcms/payload/pull/14548)
```ts
export default buildConfig({
i18n: {
translations: {
en: {
'plugin-redirects': {
fromUrl: 'Source URL (Custom)',
},
},
de: {
'plugin-redirects': {
fromUrl: 'Quell-URL',
internalLink: 'Interner Link',
},
},
},
},
plugins: [redirectsPlugin({ collections: ['pages'] })],
})
```
### ๐ Bug Fixes
* previous value undefined for nested fields in afterChange ([#14582](https://github.com/payloadcms/payload/issues/14582)) ([d60ea6e](https://github.com/payloadcms/payload/commit/d60ea6e))
* default values inconsistent between Local and REST APIs ([#14556](https://github.com/payloadcms/payload/issues/14556)) ([8f7ef35](https://github.com/payloadcms/payload/commit/8f7ef35))
* findGlobalVersionByID id type ([#14534](https://github.com/payloadcms/payload/issues/14534)) ([99ed0e5](https://github.com/payloadcms/payload/commit/99ed0e5))
* localized block fields ([#14587](https://github.com/payloadcms/payload/issues/14587)) ([2295c89](https://github.com/payloadcms/payload/commit/2295c89))
* add secondary PDF mimeType validation and tests ([#14529](https://github.com/payloadcms/payload/issues/14529)) ([ce479ab](https://github.com/payloadcms/payload/commit/ce479ab))
* unlock access not being correctly denied when using a where query ([#14585](https://github.com/payloadcms/payload/issues/14585)) ([f63e34e](https://github.com/payloadcms/payload/commit/f63e34e))
* error when calling jobs.handleSchedules when there are no schedules defined ([#14519](https://github.com/payloadcms/payload/issues/14519)) ([072cb97](https://github.com/payloadcms/payload/commit/072cb97))
* changing the language of the admin panel does not work for "radio" and "select" fields. ([#14569](https://github.com/payloadcms/payload/issues/14569)) ([bb520d6](https://github.com/payloadcms/payload/commit/bb520d6))
* inject custom translations into supportedLanguages in sanitization ([#14549](https://github.com/payloadcms/payload/issues/14549)) ([d7f1ea2](https://github.com/payloadcms/payload/commit/d7f1ea2))
* **db-mongodb:** localization transforms on nested localized fields ([#14600](https://github.com/payloadcms/payload/issues/14600)) ([6070d8d](https://github.com/payloadcms/payload/commit/6070d8d))
* **db-mongodb:** findVersions/findGlobalVersions not respecting limit of 0 ([#14573](https://github.com/payloadcms/payload/issues/14573)) ([43dcf84](https://github.com/payloadcms/payload/commit/43dcf84))
* **graphql:** avoid errors with sort as empty string ([#14594](https://github.com/payloadcms/payload/issues/14594)) ([fad476d](https://github.com/payloadcms/payload/commit/fad476d))
* **next:** turbopack error when using db-d1-sqlite package ([#14558](https://github.com/payloadcms/payload/issues/14558)) ([bd6decf](https://github.com/payloadcms/payload/commit/bd6decf))
* **next, ui:** show status "changed" in List View ([#14555](https://github.com/payloadcms/payload/issues/14555)) ([565680d](https://github.com/payloadcms/payload/commit/565680d))
* **plugin-form-builder:** expose formSubmissionID as a variable to be used in emails ([#14429](https://github.com/payloadcms/payload/issues/14429)) ([ad74386](https://github.com/payloadcms/payload/commit/ad74386))
* **plugin-mcp:** correctly uses local access controls ([#14457](https://github.com/payloadcms/payload/issues/14457)) ([fc2becf](https://github.com/payloadcms/payload/commit/fc2becf))
* **richtext-lexical:** urls being wrongly encoded by incomplete URL validation ([#14557](https://github.com/payloadcms/payload/issues/14557)) ([2cb0c59](https://github.com/payloadcms/payload/commit/2cb0c59))
* **storage-r2:** respect data.prefix in handleUpload path construction ([#14485](https://github.com/payloadcms/payload/issues/14485)) ([454d0d3](https://github.com/payloadcms/payload/commit/454d0d3))
* **ui:** error on inserting new documents on uploads with hasMany ([#14567](https://github.com/payloadcms/payload/issues/14567)) ([fd44d2b](https://github.com/payloadcms/payload/commit/fd44d2b))
* **ui:** save button becomes disabled after failed save with draft validation ([#14584](https://github.com/payloadcms/payload/issues/14584)) ([6fda71a](https://github.com/payloadcms/payload/commit/6fda71a))
* **ui:** invalid req.locale shows incorrect data ([#14537](https://github.com/payloadcms/payload/issues/14537)) ([f29a07f](https://github.com/payloadcms/payload/commit/f29a07f))
### โก Performance
* **ui:** don't return full documents on bulk UI operations ([#14145](https://github.com/payloadcms/payload/issues/14145)) ([4430739](https://github.com/payloadcms/payload/commit/4430739))
### ๐ Refactors
* **richtext-slate:** deprecate slate editor ([#14536](https://github.com/payloadcms/payload/issues/14536)) ([1a4ce44](https://github.com/payloadcms/payload/commit/1a4ce44))
### ๐ Documentation
* updates Jobs queue docs ([#14552](https://github.com/payloadcms/payload/issues/14552)) ([dff3d1b](https://github.com/payloadcms/payload/commit/dff3d1b))
### ๐งช Tests
* move draft validation tests from form-state to field error states test suite ([#14599](https://github.com/payloadcms/payload/issues/14599)) ([e1f07ff](https://github.com/payloadcms/payload/commit/e1f07ff))
* run cpa against create-next-app latest and canary ([#14583](https://github.com/payloadcms/payload/issues/14583)) ([cca97c6](https://github.com/payloadcms/payload/commit/cca97c6))
* 21x faster versions int suite ([#14510](https://github.com/payloadcms/payload/issues/14510)) ([844f99f](https://github.com/payloadcms/payload/commit/844f99f))
### ๐ Templates
* update next.js 15.4.4 to 15.4.7 ([#14533](https://github.com/payloadcms/payload/issues/14533)) ([d3b934c](https://github.com/payloadcms/payload/commit/d3b934c))
### โ๏ธ CI
* fix ERR_PNPM_ADDING_TO_ROOT in create-payload-app int ([#14581](https://github.com/payloadcms/payload/issues/14581)) ([6789939](https://github.com/payloadcms/payload/commit/6789939))
### ๐ก Chores
* add .worktrees to .gitignore ([87f2bd9](https://github.com/payloadcms/payload/commit/87f2bd9))
* fix serverExternalPackages errors in monorepo ([#14535](https://github.com/payloadcms/payload/issues/14535)) ([e76da3f](https://github.com/payloadcms/payload/commit/e76da3f))
### ๐ค Contributors
- Kendell (@kendelljoseph)
- Jarrod Flesch (@JarrodMFlesch)
- Patrik (@PatrikKozak)
- Paul (@paulpopus)
- German Jablonski (@GermanJablo)
- Jessica Rynkar (@jessrynkar)
- Sasha (@r1tsuu)
- Sam (@damnsamn)
- Alessio Gravili (@AlessioGr)
- Tobias Odendahl (@tak-amboss)
- Elliot DeNolf (@denolfe)
- Jens Becker (@jhb-dev)
- Sean Zubrickas (@zubricks)