- feat: broaden Next.js peer dependency to
^15.0.0 || ^16.0.0so the plugin can be installed alongside Next.js 16
- fix:
getAdminThumbnailnow returnsundefinedinstead offalseif thecloudinaryPublicIdormimeTypefield is missing in the getAdminThumbnail function (e.g. during the upload process).
- fix:
thumbnailURLnow correctly points to Cloudinary in Payload 3.7X- The
adminThumbnailfunction now generates URLs directly fromcloudinaryPublicIdinstead of relying ondoc.url - This ensures the thumbnail URL is correct even when Payload's
thumbnailURLhook runs before theurlfield is regenerated
- The
- fix:
generateURLnow does not throw an exception if thecloudinaryPublicIdfield is missing.- Instead, it returns
undefinedwhich is handled by Payload's default URL handling. This is necessary because in Payload 3.7XgenerateURLis called during upload, therefore its not possible to throw an exception, otherwise the upload would fail.
- Instead, it returns
- add support for chunked uploads for files larger than 100MB
- update peer dependencies to support any minor version of Next.js 15 and Payload 3
⚠️ Warning: This release includes major breaking changes. Please read this carefully before upgrading.
- the plugin now implements the Payload Storage Adapter
- a new
clientUploadsconfig option has been added to allow for client-side uploads to bypass server-side upload limits on Vercel
- the
useFilenameconfig option now defaults totrue(instead offalse) - the custom
cloudinaryUrlfield previously added by the plugin is removed in favor of Payload's built-inurlfield. A migration might be needed to update your existing data. - the
uploadOptionsconfig option has been removed.useFilenameis now a top-level config option. - the
cloudinaryconfig option has been removed. ThecloudNameandfolderare now top-level config options. - the
uploadCollectionsconfig option has been renamed tocollectionsto match the Storage Adapter API. - To replicate the previous behavior of using direct URLs to Cloudinary, you must now set
disablePayloadAccessControl: trueon the collection options in your plugin configuration.
Plugin config migration example:
Before:
payloadCloudinaryPlugin({
uploadCollections: ['images', 'videos'],
credentials: {
apiKey: process.env.CLOUDINARY_API_KEY!,
apiSecret: process.env.CLOUDINARY_API_SECRET!,
},
cloudinary: {
cloudName: process.env.CLOUDINARY_CLOUD_NAME!,
folder: 'uploads',
},
uploadOptions: {
useFilename: true,
},
}),After:
payloadCloudinaryPlugin({
collections: {
images: {
disablePayloadAccessControl: true,
}
videos: {
disablePayloadAccessControl: true,
}
},
cloudName: process.env.CLOUDINARY_CLOUD_NAME!,
folder: 'uploads',
credentials: {
apiKey: process.env.CLOUDINARY_API_KEY!,
apiSecret: process.env.CLOUDINARY_API_SECRET!,
},
useFilename: true,
}),- Initial release