Media library

Pro and above. In beta.

Turbo proxies media uploads to any S3-compatible bucket — AWS S3, Cloudflare R2, Bunny Storage, others — so editors browse and upload without your storage credentials reaching the browser. Credentials live in site variables, not in config.yml; the CMS calls a Turbo edge function, which reads them server-side and forwards the request.

Configure

On the site’s Variables tab:

KeyValueSecret
s3_endpointS3 API endpoint — https://<account-id>.r2.cloudflarestorage.com (R2), https://s3.<region>.amazonaws.com (AWS), https://<region>-s3.storage.bunnycdn.com (Bunny)No
s3_regionRegion to sign for. auto for R2; for Bunny, the storage zone’s region codeNo
s3_bucketBucket name — for Bunny, the Storage Zone nameNo
s3_access_key_idAccess key ID — for Bunny, the Storage Zone name againNo
s3_secret_access_keySecret access key — for Bunny, the Storage Zone passwordYes
s3_force_path_styletrue for most providers including R2 and Bunny; false usually works on AWSNo

Then in config.yml:

media_library:
  name: s3

Reload the CMS. A missing key returns a “missing storage configuration” error rather than failing silently.

Bunny Storage

Bunny’s S3-compatible API means there’s no Bunny-specific integration any more — configure it as above. S3 compatibility can only be enabled when a storage zone is created, never on an existing one, so an existing zone has to be recreated.