The first beta for Payload 4. It has breaking changes, so follow the upgrade guide. v3 keeps getting critical and high-severity security fixes.Breaking
- Requires Payload 4 and Node.js 24.15 or later.
- Register
bunnyStoragein the top-levelstoragearray instead ofplugins. - Upload collections get a hidden
prefixcolumn. SQL databases need a migration. - Client uploads use Payload’s
POST /api/upload-instructionsendpoint. The plugin’s own upload endpoint is removed. - Client upload errors use Payload’s
{ "errors": [...] }format. - Client uploads are stored under a random UUID folder inside the prefix.
clientUploads.accesscan only narrow Payload’s own access check.- The
i18noption is removed. Override the labels in Payload’si18nconfig. - The
@seshuk/payload-storage-bunny/migrationssubpath is removed.
- The TUS upload sits inside Payload’s file panel.
bunny:deploy-edge-scriptis registered as a Payload CLI command.
October 1, 2026
This release contains security fixes for Stream TUS uploads. See the upgrade guide.Security
tus-authchecks the file type and size against the collection and the Stream config. The saved document gets the signed file size and MIME type.- Stream video tokens are bound to the signed-in user and expire after 24 hours.
- A Stream video can only belong to one document in a library.
October 1, 2026
Fixes
- Files are stored under the collection
prefixwhen a document is saved with an emptyprefix. Before, the file and its image sizes went to the root of the storage zone, and deletes used the same root path. See the upgrade guide if your collections have documents with an emptyprefix.
October 1, 2026
This release contains security fixes. Upgrade as soon as possible. See the upgrade guide, and redeploy the Edge Script if you use client uploads over the HTTP API.Security
- Client uploads are bound to the declared file size and MIME type, never overwrite an existing file, and are confirmed with a server-signed receipt.
- Stream
videoIdvalues are only accepted together with a server-issuedvideoToken.
@payloadcms/plugin-cloud-storageis now a peer dependency. Install it next to the plugin.- A dynamic
prefixis placed under the collection’s static prefix. - The
prefixfield andbunnyData.stream.resolutionsare read-only over the REST and GraphQL APIs.
September 30, 2026
Fixes
- Requires Payload 3.90.2 or later. Older Payload versions now fail at install with a peer dependency error instead of crashing at runtime.
September 30, 2026
Fixes
- Bulk uploads of large videos to Stream collections no longer hit the request body limit. Videos go to Bunny over TUS (#22).
- Client-direct Stream uploads work on Payload 3.90, which rejects incomplete MP4 and MOV files.
- Stream videos are deleted when their document is never saved.
- The
initwizard shows correct replication pricing and zone name rules.
September 23, 2026
Fixes
- The admin edit view no longer crashes on non-video uploads in Stream-enabled collections.
bunnyDatais now omitted from the response instead of being set tonull— thanks @PP-Tom!
August 6, 2026
See the upgrade guide for config changes and the data migration.Breaking
- Requires Payload 3.83.0+ and Node.js 22+.
- Stream metadata moved to a stored
bunnyDatafield, replacingbunnyVideoId/bunnyVideoMeta— needs a data migration. - Several config keys renamed or removed, and throw at startup until updated — see config changes.
- Per-collection storage zones and stream libraries.
- Browser-direct client uploads (presigned S3 or a Bunny Edge Script).
- S3-compatible zone access.
- IP-locked signed URLs and absolute expiry.
- Dynamic per-document storage prefix.
- Setup wizard and edge-script deploy CLI.
- Server-side config accessors.
- Adapter for the media-preview plugin.
- New documentation site, built with Mintlify — thank you for supporting open source!
July 12, 2026
The final v2.x release before v3.0.0.New features
stream.tus.checkAccessnow receives the parsed auth body (collection,filename,filetype,filesize) as a second argument, so you can gate uploads before the video is created.- Dynamic upload prefix: the storage prefix can be set per document via
data.prefixfrom a collection hook (for example, per-tenant folders).
- Fixed
applyUrlTransformthrowing on relative (access-controlled) URLs; existing query parameters are now preserved. - Request query parameters are preserved when proxying storage files through Payload (for example, Bunny Image Optimizer params under access control).
- Fixed post-upload “saved” detection that compared the update event by object identity instead of
updatedAt. - The plugin now fails fast with a clear error when a configured collection has no
uploadconfig.
October 5, 2025
Bug fixes
- Fixed user collection hooks (
beforeChange,afterRead,afterDelete, …) being lost when the plugin initialized. - Fixed collection-level
thumbnail: falsenot being honored.
- Added Tamil (
ta) translations. - Updated development dependencies to Payload 3.57.
September 29, 2025
New features
- Stream-only support: the plugin can run with only Bunny Stream, without a Bunny Storage config.
- Renamed
adminThumbnailtothumbnailfor clarity (old key still accepted with a deprecation warning, removed in v2.2.0).
- Fixed
thumbnailTime: 0being treated as invalid.
September 26, 2025
Improvements - Improved build configuration (
resolveFully: true) for better module resolution.September 22, 2025
New features
- Admin thumbnail
sizeNameparameter, to use a specific upload size. - Full internationalization across all 43 Payload-supported languages.
- Fixed URL decoding in signed-URL generation for correct path handling.
September 5, 2025
A major release with breaking changes — see the upgrade guide.Breaking
- Requires Payload 3.53.0 or higher.
- Removed the
optionswrapper — all config moves to the top level. stream.libraryIdis now a number;stream.mp4Fallbackis now a boolean.purge.enabledremoved — purging is enabled by the presence of an API key.- Removed
experimental.replaceSaveButtonComponent.
- TUS resumable uploads.
- Signed URLs with geo-restrictions and expiration.
- Advanced URL transforms (query params or a custom function).
- Automatic cleanup of failed upload sessions.
August 15, 2025
New features - Added
experimental.replaceSaveButtonComponent as a temporary workaround for a Payload issue
causing unnecessary file re-downloads during field updates.July 16, 2025
Bug fixes - Fixed uploads hanging in a loading state (pinned
ky to 1.7.5 to avoid a hang on Node below 22). -
Fixed the main filename being set to one of the image-size filenames instead of the original.March 23, 2025
New features
- Automatic CDN cache purging after uploads and deletions, with an async option.
- Fixed errors when cropping or replacing images.
- Fixed being unable to update metadata on an existing image.
March 14, 2025
New features
mp4Fallbackconfiguration (replaces the deprecatedmp4FallbackQuality), with resolution detection and caching.disablePayloadAccessControlfor more flexible file access.
- Fixed non-video files returning 404 when
disablePayloadAccessControlwas not set and Stream was enabled. - Fixed thumbnails loading directly from the CDN instead of proxying through Payload under access control.
January 26, 2025
Initial release: Bunny Storage integration, optional Bunny Stream for video, and admin thumbnails.