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)