All pages

Data

File storage

An S3-compatible bucket per project, for uploads, exports and generated files.

Why you need it

An application's own disk is replaced by every deployment. Anything that must survive — a user's upload, a generated report — belongs in file storage. (For software that can only write to a local directory, there is a permanent disk.)

Creating it

On the project's Data tab, or arrah storage create my-api. The project gets a bucket and a key pair that can read and write that bucket only. After the next deployment the AWS SDKs work with no configuration:

Python
import boto3, os

s3 = boto3.client("s3")
s3.upload_file("report.pdf", os.environ["S3_BUCKET"], "reports/2026-10.pdf")

Uploads and downloads from a browser

Sign a presigned link against S3_PUBLIC_ENDPOINT and hand it to the browser. Requests are path-style (/bucket/key). Nothing is public without a signature.

Limits

  • 1 GB per project. A write over the quota fails; the dashboard shows how much is used.
  • Files are not versioned: a deleted or overwritten file is gone, apart from what a backup holds.
  • If the project sets any AWS_* variable itself, the platform leaves those alone, so an application that talks to real AWS is not redirected.