Object storage · Mumbai

S3, minus the exit fee.

S3-compatible buckets behind one endpoint. Anything that speaks S3 — the aws CLI, boto3, the AWS SDKs, rclone, MinIO mc — works unchanged. Storage is ₹1.30/GiB-month, metered hourly, and moving data in or out costs ₹0. Both directions.

endpoint https://buckets.excloud.dev · SigV4 · path-style

laptop · zsh buckets.excloud.dev
$ exc buckets create my-bucket
$ exc buckets keys create laptop
# secret shown exactly once — save it

$ aws --endpoint-url https://buckets.excloud.dev \
    s3 cp ./photo.jpg s3://my-bucket/photo.jpg
upload: ./photo.jpg to s3://my-bucket/photo.jpg

The rate readout

Five line items. Two of them are zero.

Storage is metered hourly, so you pay for what you actually hold — not the high-water mark. Transfer is free in both directions today; we record usage anyway, so if transparent egress pricing ever arrives, it arrives with history instead of surprises.

Full object storage pricing
Object storage rates · Mumbai
ItemWhat it coversRate
Storage metered hourly — pay for what you actually hold ₹1.30/GiB-mo
Class A requests writes: PUT, COPY, POST, LIST ₹390/million
Class B requests reads: GET, HEAD ₹31/million
Ingress data in ₹0
Egress data out ₹0
Worked example — a real month
Storage 100 GiB held for the month ₹130
Class A 2M writes ₹780
Class B 10M reads ₹310
Transfer in + out ₹0
Total one month ₹1,220
main.py · boto3 region: auto
s3 = boto3.client(
    "s3",
    endpoint_url="https://buckets.excloud.dev",
    region_name="auto",
    aws_access_key_id="EXC...",
    aws_secret_access_key="...",
    config=Config(s3={"addressing_style": "path"}),
)

Drop-in S3

Change the endpoint. Keep the code.

Standard SigV4 signatures, path-style addressing only (forcePathStyle: true in the JS SDK, addressing_style: "path" in boto3). The region value can be anything; we recommend "auto". Access key IDs are prefixed EXC, not AKIA — and the secret is shown exactly once, at creation.

Bucket names are unique within your org, not globally — the org is resolved from your access key, not the URL, so nobody has squatted my-bucket before you. The CLI covers the rest: exc buckets list / get / update / delete / usage, exc buckets objects upload / download / list / presign / share, and exc buckets keys configure EXC... --profile excloud to wire up an AWS profile.

Full S3 compatibility matrix →

What's in the bucket

The S3 you actually use.

  • Multipart, range, conditional copy

    Multipart uploads for the big objects, range reads for the partial ones, and CopyObject with conditional source headers for the careful ones.

  • Presigned URLs

    Hand out time-limited GET and HEAD links to objects without handing out credentials. One command: exc buckets objects presign.

  • Encrypted at rest, by default

    Server-side encryption at rest is on by default. Not a checkbox you find after the audit — the starting state.

  • Public buckets

    Flip a bucket public and its objects serve from https://<org-id>.objects.excloud.dev/public/<bucket>/<key>. Flip it back with exc buckets update --public false.

Not there yet

What we don't do — yet.

There is no object versioning yet. Also missing: lifecycle policies, object lock, replication, event notifications, and presigned PUT — presigned URLs are GET and HEAD only. One region: Mumbai. If your workload depends on any of those today, check the compatibility matrix before you migrate, not after.

Point your tools at Mumbai.

One bucket, one key, one aws s3 cp — and your egress line item retires.