v3.58.0

payloadcms/payloadv3.58.0Sep 30, 2025by denolfe

AI Summary

A major release introducing the Ecommerce Plugin and Template (beta), the Payload SDK for type-safe API access, and native support for Cloudflare D1 and R2 storage adapters.

Key Highlights

  • Ecommerce Plugin and Template available in beta
  • New Payload SDK package for type-safe REST API queries
  • New Cloudflare D1 SQLite adapter
  • New Cloudflare R2 storage adapter
  • 1-click Cloudflare deployment template

New Features

  • Ecommerce plugin and template
  • Payload SDK package
  • New Cloudflare D1 SQLite adapter
  • New Cloudflare R2 storage adapter and template

Full Release Notes

## [v3.58.0](https://github.com/payloadcms/payload/compare/v3.57.0...v3.58.0) (2025-09-30)


## 🚀 Features

### Ecommerce plugin and template ([#8297](https://github.com/payloadcms/payload/issues/8297)) ([ef4874b](https://github.com/payloadcms/payload/commit/ef4874b))

The [Ecommerce Template](https://github.com/payloadcms/payload/tree/main/templates/ecommerce) and Plugin is now ready in beta, you can get started by running the Payload CPA command below

```
pnpx create-payload-app my-project -t ecommerce
```

Full docs are available on our [website](https://payloadcms.com/docs/ecommerce/overview)

### Payload SDK package ([#9463](https://github.com/payloadcms/payload/issues/9463)) ([92a5f07](https://github.com/payloadcms/payload/commit/92a5f07))

Allows querying Payload REST API in a fully type safe way. Has support for all necessary operations, including auth, type safe `select`, `populate`, `joins` properties and simplified file uploading. Its interface is _very_ similar to the Local API.

```ts
import { PayloadSDK } from '@payloadcms/sdk'
import type { Config } from './payload-types'

// Pass your config from generated types as generic
const sdk = new PayloadSDK<Config>({
  baseURL: 'https://example.com/api',
})

// Find operation
const posts = await sdk.find({
  collection: 'posts',
  draft: true,
  limit: 10,
  locale: 'en',
  page: 1,
  where: { _status: { equals: 'published' } },
})
```

### New Cloudflare D1 SQLite adapter, R2 storage adapter and Cloudflare template ([#12537](https://github.com/payloadcms/payload/issues/12537)) ([99043ee](https://github.com/payloadcms/payload/commit/99043ee))

You can now deploy directly to Cloudflare using our [1-click template](https://github.com/payloadcms/payload/edit/main/templates/with-cloudflare-d1) or click the deployment button below

[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/payloadcms/payload/tree/main/templates/with-cloudflare-d1)

### 🐛 Bug Fixes

* ensure blocks filterOptions are awaited ([#13960](https://github.com/payloadcms/payload/issues/13960)) ([41aa201](https://github.com/payloadcms/payload/commit/41aa201))
* sanitize collection labels to inherit defaults when only a partial config is provided ([#13944](https://github.com/payloadcms/payload/issues/13944)) ([1752043](https://github.com/payloadcms/payload/commit/1752043))
* avoid relying on `Function.prototype.name` to detect react components ([#13931](https://github.com/payloadcms/payload/issues/13931)) ([4652bd0](https://github.com/payloadcms/payload/commit/4652bd0))
* **next:** static live preview url corrupt after save ([#13949](https://github.com/payloadcms/payload/issues/13949)) ([3c4f8a3](https://github.com/payloadcms/payload/commit/3c4f8a3))
* **plugin-multi-tenant:** properly localize labels ([#13943](https://github.com/payloadcms/payload/issues/13943)) ([2cc34d1](https://github.com/payloadcms/payload/commit/2cc34d1))
* **richtext-lexical:** editor re-mounting on save due to json key order not being preserved in postgres ([#13962](https://github.com/payloadcms/payload/issues/13962)) ([6a2e814](https://github.com/payloadcms/payload/commit/6a2e814))
* **ui:** query preset where field not displaying array values ([#13961](https://github.com/payloadcms/payload/issues/13961)) ([9248fc4](https://github.com/payloadcms/payload/commit/9248fc4))
* **ui:** move collection description below title in document view ([#13946](https://github.com/payloadcms/payload/issues/13946)) ([ae34b6d](https://github.com/payloadcms/payload/commit/ae34b6d))

### ⚙️ CI

* add `@payloadcms/sdk` to publish list ([#13964](https://github.com/payloadcms/payload/issues/13964)) ([f9743b4](https://github.com/payloadcms/payload/commit/f9743b4))
* add cron to activity notifications [skip ci] ([#13959](https://github.com/payloadcms/payload/issues/13959)) ([6d995ff](https://github.com/payloadcms/payload/commit/6d995ff))
* proper path for activity notifications [skip ci] ([2514e4d](https://github.com/payloadcms/payload/commit/2514e4d))
* activity-notifications debug inputs ([ba33f2f](https://github.com/payloadcms/payload/commit/ba33f2f))
* github activity slack notifications ([#13955](https://github.com/payloadcms/payload/issues/13955)) ([4562df7](https://github.com/payloadcms/payload/commit/4562df7))

### 🏡 Chores

* update templates and docs links ([#13971](https://github.com/payloadcms/payload/issues/13971)) ([d7888df](https://github.com/payloadcms/payload/commit/d7888df))
* rename activity notifications workflow ([f7b1b7b](https://github.com/payloadcms/payload/commit/f7b1b7b))
* **sdk:** add README ([#13975](https://github.com/payloadcms/payload/issues/13975)) ([2e1fb57](https://github.com/payloadcms/payload/commit/2e1fb57))

### 🤝 Contributors

- Elliot DeNolf (@denolfe)
- Sasha (@r1tsuu)
- Paul (@paulpopus)
- Patrik (@PatrikKozak)
- Alessio Gravili (@AlessioGr)
- Jacob Fletcher (@jacobsfletch)
- Jarrod Flesch (@JarrodMFlesch)
- Luke Sandberg (@lukesandberg)