v3.73.0
payloadcms/payloadv3.73.0Jan 23, 2026by denolfe
AI Summary
Added full support for Next.js 16, SQLite Write-Ahead Logging (WAL) mode, and a predefined migration for `blocksAsJSON`. It also exposes requestHandler to live preview hooks.
Key Highlights
- Full compatibility with Next.js 16 including Turbopack HMR
- Added WAL mode support and busy timeout option for SQLite
- Predefined migration for `blocksAsJSON: true`
- Live preview hooks now accept `requestHandler` argument
New Features
- Next.js 16 support
- SQLite WAL mode
- blocksAsJSON migration
- Live preview requestHandler
Full Release Notes
## [v3.73.0](https://github.com/payloadcms/payload/compare/v3.72.0...v3.73.0) (2026-01-23) ### 🚀 Features * next.js 16 support ([#14456](https://github.com/payloadcms/payload/issues/14456)) ([18ca83b](https://github.com/payloadcms/payload/commit/18ca83b)) * **db-sqlite:** add `busyTimeout` option ([#15317](https://github.com/payloadcms/payload/issues/15317)) ([0c235c3](https://github.com/payloadcms/payload/commit/0c235c3)) * **db-sqlite:** add WAL mode support ([#15278](https://github.com/payloadcms/payload/issues/15278)) ([3357aa6](https://github.com/payloadcms/payload/commit/3357aa6)) * **drizzle:** predefined migration for `blocksAsJSON: true` ([#15257](https://github.com/payloadcms/payload/issues/15257)) ([1b7b13d](https://github.com/payloadcms/payload/commit/1b7b13d)) * **live-preview:** expose requestHandler arg to hooks ([#15302](https://github.com/payloadcms/payload/issues/15302)) ([4f3c31f](https://github.com/payloadcms/payload/commit/4f3c31f)) * **plugin-mcp:** adds select API with CRUD tools ([#15301](https://github.com/payloadcms/payload/issues/15301)) ([268b33a](https://github.com/payloadcms/payload/commit/268b33a)) * **ui:** use native useEffectEvent if available ([#15304](https://github.com/payloadcms/payload/issues/15304)) ([f0458fb](https://github.com/payloadcms/payload/commit/f0458fb)) #### Feature Details **🔥 Next.js 16 Support** - Full compatibility with Next.js 16, including Turbopack HMR and build support. Requires Next.js >16.1.1-canary.35 or 16.2.0+. Templates will be updated after Next.js 16.2.0 is released. Stable Next.js 16.1.* is not supported, as we depend on fixes released in the Next.js canary. Support for cache components will follow in a future release [#14456](https://github.com/payloadcms/payload/pull/14456) **WAL Mode Support (db-sqlite)** - Enable SQLite Write-Ahead Logging for improved concurrent read/write performance. Configurable synchronous mode and journal size limit. [#15278](https://github.com/payloadcms/payload/pull/15278) **Busy Timeout Option (db-sqlite)** - Set maximum wait time in milliseconds when the database is locked, preventing `SQLITE_BUSY` errors in high-concurrency scenarios. [#15317](https://github.com/payloadcms/payload/pull/15317) **Predefined Migration for blocksAsJSON (drizzle)** - Migrate existing projects to use `blocksAsJSON: true` with a single command. Automatically updates your Payload config and generates the required migration. [#15257](https://github.com/payloadcms/payload/pull/15257) ```bash pnpm payload migrate:create --file @payloadcms/db-postgres/blocks-as-json ``` **Request Handler in Live Preview Hooks (live-preview)** - The `useLivePreview` hook (React and Vue) now accepts a `requestHandler` argument, allowing customization of data fetching. Useful when your frontend proxies requests or uses external middleware. [#15302](https://github.com/payloadcms/payload/pull/15302) **Select API for MCP Tools (plugin-mcp)** - Find, Create, and Update tools for Globals and Collections now support the `select` API, reducing token usage and aligning with Payload's existing query capabilities. [#15301](https://github.com/payloadcms/payload/pull/15301) **Native useEffectEvent (ui)** - Uses React's native `useEffectEvent` when available (React 19.2.0+), falling back to the existing polyfill for older versions. [#15304](https://github.com/payloadcms/payload/pull/15304) ### 🐛 Bug Fixes * select hasMany prevent duplicate values ([#15218](https://github.com/payloadcms/payload/issues/15218)) ([f4e8990](https://github.com/payloadcms/payload/commit/f4e8990)) * orderable fractional indexing case-sensitivity issue with PostgreSQL ([#14867](https://github.com/payloadcms/payload/issues/14867)) ([ef27ad9](https://github.com/payloadcms/payload/commit/ef27ad9)) * find distinct sort on a different field ([#15233](https://github.com/payloadcms/payload/issues/15233)) ([e95f26d](https://github.com/payloadcms/payload/commit/e95f26d)) * conditional tabs breaking in Next.js 16 due to unstable tab id ([#15270](https://github.com/payloadcms/payload/issues/15270)) ([f5a7a00](https://github.com/payloadcms/payload/commit/f5a7a00)) * correct previousValue and value in afterChange when using seo-plugin ([#15253](https://github.com/payloadcms/payload/issues/15253)) ([b6b6bab](https://github.com/payloadcms/payload/commit/b6b6bab)) * **db-mongodb:** fix projection handling for relationship fields in GraphQL queries with select ([#14850](https://github.com/payloadcms/payload/issues/14850)) ([ace3447](https://github.com/payloadcms/payload/commit/ace3447)) * **drizzle:** d1 sqlite IN querying of `id` when any other join is present in the query ([#15290](https://github.com/payloadcms/payload/issues/15290)) ([4f5a9c2](https://github.com/payloadcms/payload/commit/4f5a9c2)) * **next:** relationship fields with maxDepth: 0 show "Untitled - ID" in diff view ([#15305](https://github.com/payloadcms/payload/issues/15305)) ([65238c5](https://github.com/payloadcms/payload/commit/65238c5)) * **plugin-mcp:** auto-detect basePath from Payload config routes ([#15189](https://github.com/payloadcms/payload/issues/15189)) ([dbc06f6](https://github.com/payloadcms/payload/commit/dbc06f6)) * **richtext-lexical:** internal links render as href="#" in versions view ([#15308](https://github.com/payloadcms/payload/issues/15308)) ([ab4102c](https://github.com/payloadcms/payload/commit/ab4102c)) * **sdk:** correct return types with `select` ([#15289](https://github.com/payloadcms/payload/issues/15289)) ([db40d7b](https://github.com/payloadcms/payload/commit/db40d7b)) * **ui:** diff view columns have unequal widths for nested fields causing text misalignment ([#15330](https://github.com/payloadcms/payload/issues/15330)) ([db72a65](https://github.com/payloadcms/payload/commit/db72a65)) * **ui:** upsertPreferences did not return preferences when creating new preferences ([#15321](https://github.com/payloadcms/payload/issues/15321)) ([94d5728](https://github.com/payloadcms/payload/commit/94d5728)) * **ui:** pass the locale to reorder endpoint in orderable table ([#14839](https://github.com/payloadcms/payload/issues/14839)) ([d6bb3de](https://github.com/payloadcms/payload/commit/d6bb3de)) ### 📚 Documentation * add jsdocs to query presets api ([#15306](https://github.com/payloadcms/payload/issues/15306)) ([3dbaed8](https://github.com/payloadcms/payload/commit/3dbaed8)) * small md fix ([#15299](https://github.com/payloadcms/payload/issues/15299)) ([9a1eb77](https://github.com/payloadcms/payload/commit/9a1eb77)) * remove csv as a language for code blocks ([#15265](https://github.com/payloadcms/payload/issues/15265)) ([259eac4](https://github.com/payloadcms/payload/commit/259eac4)) ### 📝 Templates * upgrade website template and examples tailwind to v4 ([#11197](https://github.com/payloadcms/payload/issues/11197)) ([e77f9b6](https://github.com/payloadcms/payload/commit/e77f9b6)) ### ⚙️ CI * prevent rate limiting in release-commenter action ([#15298](https://github.com/payloadcms/payload/issues/15298)) ([71b35fa](https://github.com/payloadcms/payload/commit/71b35fa)) ### 🏡 Chores * removes never implemented readDrafts access arg on globals ([#15297](https://github.com/payloadcms/payload/issues/15297)) ([12b679f](https://github.com/payloadcms/payload/commit/12b679f)) * export fractional indexing utilities ([#15286](https://github.com/payloadcms/payload/issues/15286)) ([02800b0](https://github.com/payloadcms/payload/commit/02800b0)) ### 🤝 Contributors - Sasha (@r1tsuu) - Patrik (@PatrikKozak) - Alessio Gravili (@AlessioGr) - Kendell (@kendelljoseph) - David Murdoch (@dsm23) - Rafau (@RafalFilipek) - Aaron Claes (@AaronClaes) - Jarrod Flesch (@JarrodMFlesch) - German Jablonski (@GermanJablo) - Elliot DeNolf (@denolfe) - Jens Becker (@jhb-dev) - Paul (@paulpopus) - Vladyslav Prosolupov (@vladyslavprosolupov) - Jessica Rynkar (@jessrynkar)