Skip to main content

Object Storage

Introduction

Object Storage is S3-compatible storage for the files your GPU work needs — datasets, checkpoints, model weights, logs and results. You put files (called objects) into buckets, and reach them with the tools you already use for Amazon S3: the aws CLI, boto3, rclone, or any other S3 client.

Unlike Shared Filesystems, Object Storage isn't mounted on an instance. You read and write it over HTTPS, from a Jarvislabs instance, your laptop, or anywhere else on the internet. You also don't pick a size up front — you pay only for what you actually store.

Object Storage is a good fit when you want to:

  • Keep data after an instance is gone. Save datasets, checkpoints and final weights to a bucket, destroy the instance, and pull them into a fresh one whenever you need them — you stop paying for GPU time without losing your work.
  • Save checkpoints while you train. Have your training script upload a checkpoint every few epochs, so a crashed or paused run can pick up from the last save on any instance.
  • Share one dataset across many instances. Upload a dataset once and download it onto as many instances as you like, in parallel — no need to attach a drive to each one.
  • Move data in and out with tools you already know. aws s3 sync, boto3 and rclone work as-is, so copying between your laptop, Jarvislabs and other clouds needs no new tools.
  • Send results to someone without an account. Create a download link for a model, report or output file that works for up to 7 days.
  • Guard against mistakes. Turn on versioning, and an accidental overwrite or delete can be undone.

Key terms

  • Bucket — a named container for your files. Every object lives in exactly one bucket.
  • Object — a single file stored in a bucket, together with its name.
  • Key — the full name of an object inside its bucket, for example checkpoints/run-7/epoch-10.pt. The / characters make keys look like folders in the console, but there are no real folders — just objects whose names share a beginning (a prefix).
  • Access key — a pair of credentials (an access key ID and a secret) that an S3 tool uses to sign its requests. Each access key has its own rules about which buckets it can read or write.
  • Endpoint — the web address your S3 tool sends requests to. You copy it from the console.

Availability

  • Region: Object Storage is available in IN2 (Noida, India). Buckets are regional — a bucket is created in one region and can't be moved to another.

Pricing

You pay for the amount of data you store. That's the only thing that's billed.

CurrencyPrice
INR₹2.27 per GB per month
USD$0.025 per GB per month

Not charged:

  • Data transfer — uploads and downloads are free, in and out.
  • Requests — listing, reading and writing objects cost nothing extra.
  • Empty buckets — a bucket with nothing in it costs nothing.

There's no minimum charge and no setup fee. The exact rate for your account is shown when you create a bucket and on the Usage page.

How billing works

Object Storage is billed once a day, on the peak of the day — the largest amount of data you had stored at any point that day:

  1. Throughout the day, Jarvislabs regularly checks how much data you have stored across all your buckets in the region.
  2. When the day ends (midnight UTC), the highest reading of that day is the day's peak.
  3. You're charged one day's share of the monthly price for that peak.
  4. The charge is taken from your account — free credits (grants) are used first, then your account balance.

Today's charge is made once today is over, so the Charged figure on the Usage page never includes today.

Examples

Storage that grows during the day. You start the day with 50 GB stored and upload more data until you reach 80 GB by the evening. That day's peak is 80 GB, so the whole day is billed as 80 GB.

A short spike counts for the whole day. You keep 10 GB stored, then one afternoon upload a 200 GB dataset, use it for an hour and delete it. That day's peak was 210 GB, so the whole day is billed as 210 GB. The next day, if you stay at 10 GB, you're billed for 10 GB again.

If your balance runs out

If a daily charge brings your balance (plus any free credits) below zero, your Object Storage is suspended:

  • Nothing is deleted. Your buckets and every object in them are kept exactly as they are.
  • Your data is still billed for the storage it uses while suspended.
  • Access stops. Your access keys stop working, so anything using them — your apps, the aws CLI, rclone — is refused.
  • You get an email letting you know.

To restore access, add balance. Once your balance is back above zero, access comes back automatically. It may take a few minutes to come back.

If your storage is suspended for another reason, the console tells you, and you'll need to contact support.

Storage limit

Each account has a storage limit. If an upload would take you over it, the upload is refused with a message saying you've used all your storage. To free space, delete objects (including old versions — see Versioning), or contact engineering@jarvislabs.ai to raise your limit.

Getting started

Getting from nothing to uploading with the aws CLI takes three steps.

1. Create a bucket

  1. Go to Object Storage and click Create bucket.
  2. Choose a Bucket name. The region is IN2.
  3. Click Create bucket.

Versioning, permissions and lifecycle rules all start with sensible defaults, and you can change them later.

2. Create an access key

  1. Click Access keys → Create access key.
  2. Give the key a Name, for example training.
  3. Under Access, choose what the key can reach:
    • One or more buckets — pick a bucket and choose Read or Write (see Access keys and permissions).
    • Everything in your storage — every bucket in the region, now and in the future.
  4. Click Create key.

A window shows the Access key, the Secret and the Endpoint.

The secret is shown only once

The secret isn't stored anywhere, so it can never be shown again. Copy it somewhere safe before you tick I have saved the secret somewhere safe and click Done. If you lose it, rotate the key.

3. Connect the aws CLI

The key window shows these commands filled in with your values. Replace <ACCESS_KEY>, <SECRET> and <ENDPOINT> if you're typing them yourself:

aws configure set aws_access_key_id     <ACCESS_KEY> --profile jarvislabs
aws configure set aws_secret_access_key <SECRET> --profile jarvislabs
aws configure set endpoint_url <ENDPOINT> --profile jarvislabs
aws configure set region us-east-1 --profile jarvislabs

Then use the bucket like any S3 bucket:

# Upload a file
aws s3 cp model.safetensors s3://my-bucket/models/ --profile jarvislabs

# Upload a whole folder
aws s3 sync ./dataset s3://my-bucket/dataset/ --profile jarvislabs

# List what's in the bucket
aws s3 ls s3://my-bucket/ --profile jarvislabs

# Download
aws s3 cp s3://my-bucket/models/model.safetensors . --profile jarvislabs
Always point your tool at a bucket

Access keys can't list all your buckets — not even keys with access to Everything in your storage. So a plain aws s3 ls fails with an Access Denied (403) error. Always include the bucket name: aws s3 ls s3://my-bucket/.

The same applies to other S3 tools: anything that starts by listing all buckets fails, such as rclone lsd remote: or opening the top level in a desktop app like Cyberduck. Point the tool at a specific bucket instead — for example rclone ls remote:my-bucket, a bookmark or path that includes the bucket, or mounting one bucket with s3fs. You can see your buckets in the console.

Connecting S3 tools

Any S3-compatible tool works. Every tool needs these four settings:

SettingValue
EndpointCopy it from the console — shown when you create a key, and on each bucket's Settings tab under Addresses
Regionus-east-1 (this value is only used to sign requests; your data stays in IN2)
Addressing stylePath-style (<ENDPOINT>/<bucket>/<key>)
CredentialsYour access key ID and secret
Use path-style addressing

Many tools default to putting the bucket name in the hostname (my-bucket.<endpoint>), which is called virtual-hosted style. Jarvislabs Object Storage needs path-style addressing, where the bucket name comes after the endpoint. Set it explicitly as shown below.

Python (boto3)

import boto3
from botocore.config import Config

s3 = boto3.client(
"s3",
endpoint_url="<ENDPOINT>",
aws_access_key_id="<ACCESS_KEY>",
aws_secret_access_key="<SECRET>",
region_name="us-east-1",
config=Config(signature_version="s3v4", s3={"addressing_style": "path"}),
)

s3.upload_file("model.safetensors", "my-bucket", "models/model.safetensors")

for obj in s3.list_objects_v2(Bucket="my-bucket", Prefix="models/").get("Contents", []):
print(obj["Key"], obj["Size"])

s3.download_file("my-bucket", "models/model.safetensors", "model.safetensors")

Working with objects in the console

Click a bucket to open it. The Objects tab lets you browse and manage files.

Browsing

  • Click a folder to open it. The path at the top takes you back up.
  • Filter by prefix shows objects whose names start with what you type (it doesn't search the middle of names).
  • Large buckets load in pages. Click Load more to see the next page.

Uploading files

  1. Click Upload.
  2. Optionally type a folder in Upload into, for example datasets/v2/. It doesn't need to exist yet — it's created by the first file you upload into it.
  3. Drag files in, or click Choose files.

Uploads keep running if you close the dialog or move to another page of the dashboard, but closing the browser tab stops them.

tip

For very large files (over 50 GB) or many files, we suggest using aws s3 cp or aws s3 sync instead of the console — they're more reliable and keep going even if your browser is closed.

Large files are uploaded in parts. If an upload is interrupted, the parts already uploaded count toward your storage until the upload is cleaned up. Jarvislabs automatically clears unfinished uploads after 1 day, so you don't pay for them for long.

There's no Create folder button — a folder appears as soon as you upload something into it.

Downloading

Select an object and click Download (or use the menu on its row). The console downloads one object at a time. For many files, use aws s3 sync or rclone.

Renaming

Select one object and click Rename. S3 storage can't rename in place, so this copies the object to the new name and then deletes the original — for a large object it takes a while. Folders can't be renamed from the console; rename the objects inside them instead.

Deleting

To delete, select one or more objects or folders, click Delete and confirm. Deleting a folder deletes everything inside it.

Whether a delete can be undone depends on the bucket's versioning setting:

  • Versioning off (the default): the objects are deleted permanently and can't be recovered. The space is freed right away.
  • Versioning on: the objects disappear from the Objects tab but aren't really gone. Every earlier version is kept, so you can bring an object back from the Versions tab. Because those versions are still stored, they're still billed — to free the space, delete the versions themselves from the Versions tab.
  • Versioning suspended: objects saved while versioning was on can still be brought back from the Versions tab. Objects uploaded before versioning was turned on, or while it's suspended, are deleted permanently.
tip

To delete a large number of objects, we suggest using an S3 tool such as the aws CLI (for example, aws s3 rm s3://my-bucket/old-data/ --recursive) instead of the console.

Sharing files

A share link lets anyone download one object, without an account or access key, until the link expires.

  1. Select an object and click Share.
  2. Choose how long the link lasts in Expires after: 1 hour, 24 hours or 7 days.
  3. Click Copy link.

Things to know:

  • A share link can't be cancelled. Anyone who has it can download the file until it expires. This is why links last at most 7 days.
  • Links only allow downloading — never uploading or deleting.

Public buckets

You can make a whole bucket readable by anyone on the internet, with no credentials:

  1. Open the bucket and go to the Permissions tab.
  2. Under Public access, click Enable.

The tab then shows the Bucket URL. Every object is available at <ENDPOINT>/<bucket>/<key>.

warning

A public bucket makes everything in it readable by anyone with the URL — including files you upload later. Anonymous visitors can only read and list; they can never upload or delete. Click Disable to make the bucket private again.

Access keys and permissions

Permissions belong to the access key, not to the bucket. Each key has a set of rules saying which buckets (and which folders inside them) it can reach, and whether it can read or write.

Permission levels

PermissionWhat the key can do
ReadList the bucket's contents and download objects
WriteEverything Read can do, plus upload, overwrite and delete objects

Access keys can't change bucket settings. Creating or deleting buckets and changing versioning, lifecycle rules or public access is done in the console.

Limiting a key to part of a bucket

Each rule has a Bucket and one or more Paths, separated by commas:

PathReaches
*Everything in the bucket
models/*Only objects whose names start with models/
exports/2026-*Only objects whose names start with exports/2026-
  • A path that's a prefix must end with * (without it, only an object with exactly that name would be allowed).
  • * can only appear once, at the end.

A rule gives a key access to one bucket. It says which paths in that bucket the key can reach, and whether it can read or write there. Rules have these limits:

  • A key can have up to 10 rules, so it can reach up to 10 different buckets. (To reach more, choose Everything in your storage instead.)
  • Each bucket can appear in only one rule per key. To give a key several folders in the same bucket, list them all as paths in that one rule — for example models/*, datasets/*.
  • A rule can have up to 10 paths.
  • One rule has one permission. So within a bucket, a key is either Read or Write for all the paths you list — you can't make one folder read-only and another writable on the same key. Use two separate keys for that.

Choosing Everything in your storage when you create a key gives it access to every bucket in the region, including buckets you create later. It still can't list your buckets, so always tell your tool which bucket to use (see Connect the aws CLI).

A key belongs to one region and can only reach buckets in that region.

Seeing which keys reach a bucket

A bucket's Permissions tab lists every access key whose rules reach it. To remove a key's access to that bucket, edit the key's permissions — there's nothing to revoke on the bucket itself.

Changing a key's permissions

On the Access keys page, click Permissions on a key's row, change its rules and save. Saving replaces the key's entire rule set. The change applies to all of that key's credentials.

Rotating a key

To replace a secret (for example, if it's lost or may have leaked) without downtime:

  1. Click Rotate on the key. A new access key ID and secret are issued with the same permissions, and the old one keeps working.
  2. Update your apps and scripts to use the new credentials.
  3. Click Revoke on the old access key ID. Anything still using it stops working immediately.

Each key name can hold up to 4 credentials at once — revoke one before rotating again.

Deleting a key

Delete removes the key and all its credentials. Anything using them stops working immediately. Your buckets and objects aren't touched.

Versioning

With versioning on, overwriting or deleting an object keeps the earlier version, so you can get it back.

Turn it on from the bucket's Settings tab → Enable versioning. Versioning has three states:

StateWhat it means
Off (default)No versions are kept. Overwrites and deletes are permanent.
OnEvery overwrite keeps the previous version. Deleting an object hides it (the console calls this a delete marker) instead of removing it.
SuspendedNo new versions are made. Versions you already have are kept and still billed.
warning

Once enabled, versioning can't be turned off again — only suspended. And every old version is billed at its full size. A file overwritten ten times is stored — and billed — eleven times. Add a lifecycle rule to clean up old versions automatically.

The Versions tab

Once versioning is on, the bucket gets a Versions tab listing every version of every object, marked Current, Previous or Delete marker. From there you can:

  • Download any version.
  • Restore a deleted object by removing its delete marker.
  • Delete this version — removes that exact version permanently.

Lifecycle rules

Lifecycle rules delete objects automatically once they reach a certain age. Set them up in the bucket's Lifecycle tab → Add rule:

  • Applies to: Current version (the object as it is today) or Previous versions (old versions kept by versioning — only available once versioning is on).
  • Prefix: limit the rule to objects whose names start with this, or leave it empty for the whole bucket.
  • Delete after (days): at least 1.

Examples:

  • Delete everything under tmp/ after 7 days.
  • Delete previous versions 30 days after they're replaced — keeps versioning's safety net without letting old versions pile up.

Things to know:

  • The age is counted from each object's last-modified date, not from when you added the rule. Adding "delete after 30 days" today also removes anything already older than 30 days.
  • Deletions run in a nightly batch between midnight and 6 AM UTC, so an object is removed some hours after it's due.
  • Up to 10 rules per bucket.
  • Every bucket has a rule marked Added by Jarvislabs that clears unfinished uploads after 1 day. It can't be edited or removed.

Deleting a bucket

A bucket can only be deleted once it's completely empty — no objects, no old versions, no delete markers and no uploads in progress. The bucket's Settings tab tells you what's left.

1. Empty the bucket with an S3 tool

We recommend emptying the bucket with an S3 tool rather than the console — it's much faster for large buckets and doesn't depend on a browser tab staying open. Use an access key with Write access to the bucket:

aws s3 rm s3://my-bucket/ --recursive --profile jarvislabs

Any other S3 client that can delete objects works too.

Uploads that were started but never finished are cleared automatically within a day.

2. Clear old versions (only if versioning was ever on)

If the bucket has ever had versioning on, the command above hides the objects but keeps their old versions and leaves delete markers behind — and access keys can't remove those. Clear them from the bucket's Versions tab in the console. For a bucket with many versions, add a lifecycle rule for Previous versions with Delete after set to 1 day and let it clean up overnight.

3. Delete the bucket in the console

On the bucket's Settings tab, click Delete this bucket, type the bucket name to confirm, and click Delete bucket.

Deleting a bucket can't be undone. Its name becomes available to other customers right away.

Limits

LimitValue
RegionsIN2
Bucket name length3–63 characters
Object key (name) lengthUp to 1024 bytes
Access key name length3–32 characters
Credentials per access key4
Permission rules per key10
Paths per rule10
Lifecycle rules per bucket10
Share link / presigned URL lifetimeUp to 7 days
Multipart upload partsUp to 10,000 parts, each at least 5 MB except the last

Supported S3 features

Supported: uploading, downloading, listing, copying and deleting objects; multipart uploads; presigned URLs; versioning; batch delete.

Managed from the console only: creating and deleting buckets, versioning, lifecycle rules, public access and access key permissions. Access keys can't change these.

Not available: custom bucket policies (beyond the public/private switch) and custom CORS rules.

FAQ

Is Object Storage the same as Shared Filesystems? No. A Shared Filesystem is a drive mounted on your instances at /home/jl_fs, billed on the size you reserve. Object Storage is reached over HTTPS with S3 tools from anywhere, and billed only on what you actually store.

Do I pay for downloads or uploads? No. Data transfer and requests are free. You pay only for stored data.

Can free credits be used for Object Storage? Yes. Free credits (grants) are used first, then your account balance.

What happens to my data if my balance runs out? Nothing is deleted. Access is suspended until you add balance, and the storage is still billed in the meantime. See If your balance runs out.

I lost my secret. Can I see it again? No — secrets are shown only once. Rotate the key to get a new one.

Can I cancel a share link I sent? No. Share links can't be revoked, which is why they last at most 7 days. Delete or overwrite the object to stop the link from working.

Why can't my bucket name contain dots, or use a name I picked? Dots aren't supported in bucket names. And bucket names are shared by every customer in the region, so a name someone else is using isn't available.

Why does aws s3 ls give me an Access Denied (403) error? Access keys can't list all your buckets, even keys with access to everything. Include the bucket name: aws s3 ls s3://my-bucket/. The same goes for other tools — point them at a specific bucket rather than the top level.

For anything else, contact engineering@jarvislabs.ai.