Skip to main content
Updated May 8, 2026 Raff Object Storage speaks the standard S3 API. Point any AWS-S3 SDK or compatible tool at Raff’s endpoint with your access keys and you’re connected — no Raff-specific library needed. This page is the practical “drop into your code” guide. For the conceptual side (which AWS features port and which don’t), see S3 compatibility.

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.
Set region to us-east explicitly. SDKs default to us-east-1 (AWS naming) and SigV4 signs with that — Raff rejects signatures from the wrong region. Skipping this step is the #1 reason first-time integrations fail.

Python — boto3

The de facto S3 client for Python.
For bucket names with dots, force path-style addressing:
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:
Then point every command at Raff’s endpoint:
To avoid repeating --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).
For multipart uploads above ~5 MB, use the high-level @aws-sdk/lib-storage package — it handles chunking and parallelism automatically.

Go — AWS SDK v2

For multipart, use 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:
Then:
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:
Then:

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:
  1. Open Cyberduck → Open Connection.
  2. Choose Amazon S3 from the dropdown.
  3. Server: s3.raffusercloud.com
  4. Access Key ID and Secret Access Key from your Raff access key.
  5. More Options → set the region to us-east.
  6. Connect.
Drag-and-drop uploads, presigned URL generation (right-click → Share), folder mirroring all work out of the box.

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.
You don’t have to think about this for normal use — 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
Aborted multipart uploads keep their parts billed as storage until cleaned up. Use the Abort Multipart Upload template in bucket policies, or call 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:
  1. Generate a Raff access key.
  2. Create the destination bucket(s) on Raff.
  3. Use rclone with both providers configured as remotes:
  4. Update your application’s endpoint, region, and credentials.
  5. Remove any code that calls AWS-only features — see S3 compatibility.
If you have a sizable migration coming, support can help — we can run the migration end-to-end and hand you a working Raff bucket with your data in place.

Next steps

S3 compatibility

What’s universal, what’s AWS-only.

Set public or private

ACLs, policies, presigned URLs.

Troubleshooting

SignatureDoesNotMatch, 403s, slow uploads.
Last modified on May 8, 2026