v3.73.0
Breaking Changes📦 payload-cmsView on GitHub →
⚠ 1 breaking✨ 7 features🐛 14 fixes🔧 9 symbols
Summary
This release introduces full support for Next.js 16 and enhances database flexibility with SQLite WAL mode and busy timeout options. It also includes numerous bug fixes across database drivers, UI components, and the SDK, alongside a migration helper for `blocksAsJSON`.
⚠️ Breaking Changes
- Removed the never implemented `readDrafts` access argument on globals. If you were relying on this, you must update your access control logic.
Migration Steps
- If you need to migrate an existing project to use `blocksAsJSON: true` with Drizzle, run the following command: `pnpm payload migrate:create --file @payloadcms/db-postgres/blocks-as-json`.
- If you were relying on the `readDrafts` access argument on globals, update your access control logic as this argument has been removed.
✨ New Features
- Added full support for Next.js 16 (requires Next.js >16.1.1-canary.35 or 16.2.0+).
- SQLite database now supports configuring `busyTimeout` option.
- Enabled Write-Ahead Logging (WAL) mode support for `db-sqlite` for improved concurrency.
- Drizzle integration now includes a predefined migration command to automatically handle projects using `blocksAsJSON: true`.
- The `useLivePreview` hook (React and Vue) now accepts a `requestHandler` argument for customizing data fetching.
- The plugin-mcp (Media Conversion Plugin) now supports the `select` API for Find, Create, and Update tools, reducing token usage.
- The UI layer now uses React's native `useEffectEvent` when available (React 19.2.0+).
🐛 Bug Fixes
- Fixed an issue where select fields with `hasMany` could result in duplicate values.
- Resolved case-sensitivity issue with orderable fractional indexing when using PostgreSQL.
- Fixed sorting issue when using `find distinct` on a field different from the sort field.
- Addressed conditional tabs breaking in Next.js 16 environments due to unstable tab IDs.
- Corrected `previousValue` and `value` passed to `afterChange` hook when using the SEO plugin.
- Fixed projection handling for relationship fields in GraphQL queries using `select` with `db-mongodb`.
- Fixed D1 SQLite `IN` querying of `id` when any other join is present in the query.
- Resolved issue where relationship fields with `maxDepth: 0` showed "Untitled - ID" in the diff view.
- Fixed `plugin-mcp` to auto-detect `basePath` from the Payload configuration routes.
- Internal links in the Rich Text editor now render correctly as actual links (not `href="#"`) in version views.
- Corrected return types when using the `select` option in the SDK.
- Fixed unequal column widths in the diff view for nested fields, resolving text misalignment.
- Fixed `upsertPreferences` not returning preferences when creating new preferences.
- Passed the locale parameter to the reorder endpoint in the orderable table UI.