Before you start
- Access key + secret — see Generate access keys. The secret is shown once at creation; if you don’t have it, generate a new key.
- At least one bucket — see Create a bucket.
- The Raff connection details below.
Connection details
These are the same for every SDK and tool:
Plug those into any of the SDK examples below.
Python — boto3
The de facto S3 client for Python.upload_file and download_file use multipart automatically for files above 8 MB. Configure thresholds via boto3.s3.transfer.TransferConfig.
Command line — aws-cli
The official CLI works against any endpoint with--endpoint-url. Configure once:
--endpoint-url, set it via env var:
AWS_ENDPOINT_URL is supported in AWS CLI v2.13+.)
JavaScript / TypeScript — AWS SDK v3
The current AWS SDK for JS (the modular@aws-sdk/client-s3).
@aws-sdk/lib-storage package — it handles chunking and parallelism automatically.
Go — AWS SDK v2
s3manager.NewUploader(client) from github.com/aws/aws-sdk-go-v2/feature/s3/manager.
rclone — best for syncs and mass copies
Add a remote once, then use it like a local path:rclone is excellent for migrating from AWS / DO / Vultr to Raff — point one remote at the source, another at Raff, and rclone sync.
s3cmd — long-standing Python CLI
~/.s3cfg:
mc (MinIO Client) — fast, scriptable
mc is the fastest CLI for bulk operations and has good defaults for parallelism.
Cyberduck — GUI
For Mac / Windows users who want a Finder-style file browser:- Open Cyberduck → Open Connection.
- Choose Amazon S3 from the dropdown.
- Server:
s3.raffusercloud.com - Access Key ID and Secret Access Key from your Raff access key.
- More Options → set the region to
us-east. - Connect.
Multipart upload — what every SDK does
Every modern SDK transparently switches to multipart upload for files above ~5-10 MB:- The file is split into parts (typically 5-25 MB each).
- Parts upload in parallel.
- Failed parts retry individually — the whole file doesn’t restart.
- The server assembles parts on
CompleteMultipartUpload.
boto3.upload_file, aws s3 cp, rclone copy, and the JS / Go transfer managers all handle multipart automatically.
When hand-rolling multipart (rare), respect the protocol limits:
- Minimum part size: 5 MiB (except the last part)
- Maximum part size: 5 GiB
- Maximum parts per upload: 10,000
AbortMultipartUpload from your code, to clean up after failures.
Presigned URLs — share without sharing keys
Every SDK can generate a presigned URL: a time-limited HTTPS link that lets anyone download (or upload) without having Raff credentials. The recipient just opens the URL.
See examples above for
boto3, the AWS SDK v3 (getSignedUrl), aws-cli (s3 presign), and mc share. The mechanism and signing semantics are identical to AWS S3.
Migrating from another provider
Moving from AWS / DigitalOcean Spaces / Vultr / Cloudflare R2 to Raff is mostly a config swap:- Generate a Raff access key.
- Create the destination bucket(s) on Raff.
- Use rclone with both providers configured as remotes:
- Update your application’s
endpoint,region, and credentials. - Remove any code that calls AWS-only features — see S3 compatibility.
Next steps
S3 compatibility
What’s universal, what’s AWS-only.
Set public or private
ACLs, policies, presigned URLs.
Troubleshooting
SignatureDoesNotMatch, 403s, slow uploads.