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:
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.