github payloadcms/payload v3.64.0

13 hours ago

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

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
      },
    ],
  },
}

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

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

๐Ÿ› 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

๐Ÿ“š Documentation

๐Ÿงช 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

โš™๏ธ 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

Don't miss a new payload release

NewReleases is sending notifications on new releases.