made with
payload
  • Showcases
  • Plugins
  • Creators
  • Tutorials
  • Templates
  • Videos

Not affiliated with PayloadCMS. Made by paul

  • Contact
  • Submit an entry
  • Releases
  • Stats
Back to Releases

v3.64.0

Version v3.64.0Minor Release
Released:

November 13, 2025

Type:

New features, backward compatible

GitHub:View Release
Download TarballDownload ZIP

Release Notes

v3.64.0 (2025-11-13)

πŸš€ Features

  • add support for UTC timezone in date fields (#14586) (8b34e40)
  • next: turbopack build support, fix incorrect handling of external packages (#14475) (3a975d7)
  • plugin-mcp: adds MCP context to req.payloadAPI (#14595) (860bdf2)
  • plugin-mcp: adds custom auth config (#14538) (73a18dc)
  • plugin-redirects: support translations (#14548) (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
import { buildConfig } from 'payload'
const config = buildConfig({
admin: {
timezones: {
supportedTimezones: [
{
label: 'UTC',
value: 'UTC',
},
],
defaultTimezone: 'UTC',
},
},
})
ts

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 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

export const Posts: CollectionConfig = {
slug: 'posts',
hooks: {
beforeRead: [
({ doc, req }) => {
if (req.payloadAPI === 'MCP') {
doc.title = `${doc.title} (MCP Hook Override)`
}
return doc
},
],
},
}
ts

Custom Auth Configuration - Override default API key authentication with custom authorization logic using overrideAuth. Provides granular control over MCP access permissions. #14538

import { type MCPAccessSettings, mcpPlugin } from '@payloadcms/plugin-mcp'
plugins: [
mcpPlugin({
overrideAuth: (req) => {
return {
posts: { find: true },
products: { find: true, update: true },
} as MCPAccessSettings
},
})
]
ts

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

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'] })],
})
ts

πŸ› Bug Fixes

  • previous value undefined for nested fields in afterChange (#14582) (d60ea6e)
  • default values inconsistent between Local and REST APIs (#14556) (8f7ef35)
  • findGlobalVersionByID id type (#14534) (99ed0e5)
  • localized block fields (#14587) (2295c89)
  • add secondary PDF mimeType validation and tests (#14529) (ce479ab)
  • unlock access not being correctly denied when using a where query (#14585) (f63e34e)
  • error when calling jobs.handleSchedules when there are no schedules defined (#14519) (072cb97)
  • changing the language of the admin panel does not work for "radio" and "select" fields. (#14569) (bb520d6)
  • inject custom translations into supportedLanguages in sanitization (#14549) (d7f1ea2)
  • db-mongodb: localization transforms on nested localized fields (#14600) (6070d8d)
  • db-mongodb: findVersions/findGlobalVersions not respecting limit of 0 (#14573) (43dcf84)
  • graphql: avoid errors with sort as empty string (#14594) (fad476d)
  • next: turbopack error when using db-d1-sqlite package (#14558) (bd6decf)
  • next, ui: show status "changed" in List View (#14555) (565680d)
  • plugin-form-builder: expose formSubmissionID as a variable to be used in emails (#14429) (ad74386)
  • plugin-mcp: correctly uses local access controls (#14457) (fc2becf)
  • richtext-lexical: urls being wrongly encoded by incomplete URL validation (#14557) (2cb0c59)
  • storage-r2: respect data.prefix in handleUpload path construction (#14485) (454d0d3)
  • ui: error on inserting new documents on uploads with hasMany (#14567) (fd44d2b)
  • ui: save button becomes disabled after failed save with draft validation (#14584) (6fda71a)
  • ui: invalid req.locale shows incorrect data (#14537) (f29a07f)

⚑ Performance

  • ui: don't return full documents on bulk UI operations (#14145) (4430739)

πŸ›  Refactors

  • richtext-slate: deprecate slate editor (#14536) (1a4ce44)

πŸ“š Documentation

  • updates Jobs queue docs (#14552) (dff3d1b)

πŸ§ͺ Tests

  • move draft validation tests from form-state to field error states test suite (#14599) (e1f07ff)
  • run cpa against create-next-app latest and canary (#14583) (cca97c6)
  • 21x faster versions int suite (#14510) (844f99f)

πŸ“ Templates

  • update next.js 15.4.4 to 15.4.7 (#14533) (d3b934c)

βš™οΈ CI

  • fix ERR_PNPM_ADDING_TO_ROOT in create-payload-app int (#14581) (6789939)

🏑 Chores

  • add .worktrees to .gitignore (87f2bd9)
  • fix serverExternalPackages errors in monorepo (#14535) (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)
Browse All ReleasesView on GitHub