Version 1.2.0

August 12, 2026

Added

  • Added presigned upload support, letting clients upload straight to the bucket instead of proxying the bytes through PHP
  • Added presigned support for replacing an existing asset's file, including transform invalidation and the beforeReplaceFile/afterReplaceFile events
  • Added a “Use Presigned URLs” filesystem setting, off by default, with a configurable size threshold below which uploads keep going through PHP
  • Added a progress readout for direct uploads whose caller doesn’t already show one, so replacing a file no longer sits on a bare spinner
  • Added a warning when navigating away from an in-progress direct upload, and a best-effort abort so abandoned multipart uploads stop costing storage
  • Added SupportsPresignedUploads, which Fs now implements
  • Added Fs::isPresignedUploadEnabled(), Fs::getPresignedUploadThreshold(), and Fs::shouldPresignUpload() so consumers can ask the filesystem rather than hardcoding the policy
  • Added Fs::getPresignedUpload() for single-request uploads
  • Added Fs::beginMultipartUpload(), Fs::getPresignedUploadParts(), Fs::completeMultipartUpload(), and Fs::abortMultipartUpload() for multipart uploads
  • Added Fs::getMultipartPartSize(), which returns a uniform part size, as R2 requires of all but the final part. Sizes scale with the file to keep the part count sane — a 626 MB upload is 40 parts, not 126
  • Added Fs::getUploadedParts(), so callers can ask the bucket which parts arrived instead of relying on the client reading ETag response headers
  • Added PresignedUpload, PresignedUploadPart, and MultipartUpload models

Version 1.1.1

June 24, 2024
  • Update variables/classes to avoid conflicts with S3 plugin

Version 1.1.0

February 10, 2024

Changed

  • Updated requirements for Craft CMS 5 compatibility
  • Updated documentation URLs

Version 1.0.1

September 2, 2023

Fixed

  • Prevent calls to GetObjectAcl when copying and moving files (#6)
  • Cleanup unused classes

Version 1.0.0

December 29, 2022

Changed

Version 0.2.0-beta

July 14, 2022

Added

  • Added $region property (fixes manual bucket selection issue)

Changed

  • Replaced instances of Craft::parseEnv() with App::parseEnv()

Removed

  • Reverted createAdapter() back to using visibility() method (reverts object visibility to be based on $makeUploadsPublic property)
  • Removed Cloudfront-related logic

Version 0.1.0-beta

July 13, 2022

Initial release