Skip to main content
Notable changes per release. For the full commit-level history, see the GitHub releases.
Beta
October 1, 2026
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 bunnyStorage in the top-level storage array instead of plugins.
  • Upload collections get a hidden prefix column. SQL databases need a migration.
  • Client uploads use Payload’s POST /api/upload-instructions endpoint. 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.access can only narrow Payload’s own access check.
  • The i18n option is removed. Override the labels in Payload’s i18n config.
  • The @seshuk/payload-storage-bunny/migrations subpath is removed.
Changes
  • The TUS upload sits inside Payload’s file panel.
  • bunny:deploy-edge-script is registered as a Payload CLI command.
October 1, 2026
This release contains security fixes for Stream TUS uploads. See the upgrade guide.Security
  • tus-auth checks 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 prefix when a document is saved with an empty prefix. 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 empty prefix.
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 videoId values are only accepted together with a server-issued videoToken.
Changes
  • @payloadcms/plugin-cloud-storage is now a peer dependency. Install it next to the plugin.
  • A dynamic prefix is placed under the collection’s static prefix.
  • The prefix field and bunnyData.stream.resolutions are 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 init wizard 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. bunnyData is now omitted from the response instead of being set to null — 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 bunnyData field, replacing bunnyVideoId / bunnyVideoMeta — needs a data migration.
  • Several config keys renamed or removed, and throw at startup until updated — see config changes.
New features
  • 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!
If this plugin saves you time, star it on GitHub or support the project. Thank you!
July 12, 2026
The final v2.x release before v3.0.0.New features
  • stream.tus.checkAccess now 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.prefix from a collection hook (for example, per-tenant folders).
Bug fixes
  • Fixed applyUrlTransform throwing 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 upload config.
October 5, 2025
Bug fixes
  • Fixed user collection hooks (beforeChange, afterRead, afterDelete, …) being lost when the plugin initialized.
  • Fixed collection-level thumbnail: false not being honored.
Other
  • 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 adminThumbnail to thumbnail for clarity (old key still accepted with a deprecation warning, removed in v2.2.0).
Bug fixes
  • Fixed thumbnailTime: 0 being treated as invalid.
September 26, 2025
Improvements - Improved build configuration (resolveFully: true) for better module resolution.
September 22, 2025
New features
  • Admin thumbnail sizeName parameter, to use a specific upload size.
  • Full internationalization across all 43 Payload-supported languages.
Bug fixes
  • 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 options wrapper — all config moves to the top level.
  • stream.libraryId is now a number; stream.mp4Fallback is now a boolean.
  • purge.enabled removed — purging is enabled by the presence of an API key.
  • Removed experimental.replaceSaveButtonComponent.
New features
  • 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.
Bug fixes
  • Fixed errors when cropping or replacing images.
  • Fixed being unable to update metadata on an existing image.
March 14, 2025
New features
  • mp4Fallback configuration (replaces the deprecated mp4FallbackQuality), with resolution detection and caching.
  • disablePayloadAccessControl for more flexible file access.
Bug fixes
  • Fixed non-video files returning 404 when disablePayloadAccessControl was 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.