Skip to content

v3.70.0

Choose a tag to compare

@denolfe denolfe released this 05 Jan 20:07
· 192 commits to main since this release
9e9a45f

v3.70.0 (2026-01-05)

🚀 Features

  • support qs-esm sort arrays in REST API (#15065) (2ccf898)
  • richtext-lexical: adds docs page for lexical blocks, adds new lexical block component types and styles (#14971) (329115c)

Multi-Column REST API Sorting

Sort by multiple columns in the REST API using array syntax, aligning REST API behavior with the Local API. Previously only string-based sorting was supported. #15065

// Sort by multiple fields via REST API query string
// GET /api/posts?sort[0]=createdAt&sort[1]=-title

// Equivalent to Local API:
const posts = await payload.find({
  collection: 'posts',
  sort: ['createdAt', '-title'],
})

Lexical Blocks Documentation & Component Styles (richtext-lexical)

New documentation page for Lexical blocks with comprehensive examples showing usage and customization. Also introduces new block component types and styles for enhanced rich text editing. #14971

See the https://payloadcms.com/docs/rich-text/blocks for full details.

🐛 Bug Fixes

  • s3 plugin uploads files before validation (#14988) (502947b)
  • add beforeDocumentControls to globals generate importmap (#15036) (4468197)
  • warning during Next.js build "the request of a dependency is an expression" (#15007) (cd87ab4)
  • next: turbopack build version check not working for 16.1.1 canaries (#15005) (ab68a2f)
  • plugin-mcp: pin modelcontextprotocol/sdk dependency version to 1.24.0 (#15017) (1a9d665)
  • storage-*: allow prefix to always exist as a field via alwaysInsertFields flag (#14949) (23a8689)
  • ui: invalid sass imports to support windows - add Stylelint to prevent regression (#15028) (c66e953)

🧪 Tests

  • fix console logs not appearing on vitest (#15008) (e3879bf)
  • ensure vitest vscode extension env variables match CI (#15009) (f6248f9)
  • migrate from jest to vitest eslint plugin, remove remaining jest references (#14997) (418375c)

🏡 Chores

⚠️ BREAKING CHANGES

@payloadcms/storage-s3

Only users with custom hooks on S3 upload fields are affected — standard plugin usage is unchanged.

  • External upload process for the S3 plugin has moved from beforeChange to afterChange as a result of fix: s3 plugin uploads files before validation (#14988)

This change was necessary to ensure that files uploaded to S3 have passed all validations and been saved to the document, preventing orphaned external files.

🤝 Contributors