Object Store
S3-compatible object storage with two properties the major clouds don't have: (1) zero inter-region egress on the mesh, and (2) per-byte joule cost visible in the response.
S3 drop-in
Configure your AWS SDK with our endpoint + your jc_… token as the access key. Everything else is the same.
import boto3
s3 = boto3.client(
"s3",
endpoint_url="https://api.greenjoules.cloud",
aws_access_key_id="jc_…",
aws_secret_access_key="jc_…",
region_name="auto",
)
s3.put_object(Bucket="my-bucket", Key="hello.txt", Body=b"hi")
obj = s3.get_object(Bucket="my-bucket", Key="hello.txt")
Supported operations
The core S3 surface area: CreateBucket, DeleteBucket, ListObjectsV2, GetObject, PutObject, DeleteObject, HeadObject, CopyObject, multipart uploads, pre-signed URLs, server-side encryption (SSE-S3 + SSE-C).
Not at launch: SelectObjectContent, replication APIs, lifecycle transitions to deep-archive. See API reference.
Zero egress on the mesh
Reads from a Joule Cloud Compute or Functions workload to a Joule Cloud Object Store bucket are free, regardless of region. That is the difference vs. S3 / GCS / R2 (where the model is "cheap storage, charge for moving it"). We charge for the storage and the per-byte energy of serving it; the network is not a profit centre.
Per-byte energy
Every GetObject response carries X-Energy-Joules reflecting the energy of pulling the byte range off disk (or out of memory cache, in which case the number is much smaller). For a 10 MB object served from cache that's ~0.01 J; from cold disk it's ~0.1 J.
Storage classes
| Class | Best for | Joule cost |
|---|---|---|
| Standard | active reads | baseline |
| Cool | occasional access | 0.4× storage, 1.2× retrieval |
| Cold | archive, ≥30-day reads | 0.15× storage, 4× retrieval |
Region pinning
Set region at bucket creation to constrain physical storage to a jurisdiction. Default behaviour places data in the region that minimizes carbon + latency for your account's primary region.
Migration from S3
See Migrate from AWS S3.