Skip to content
Shipping

Storage (R2)

S3-compatible object storage per project. Buckets, signed URLs, CORS — all from the Studio sidebar.

What you get

Every Loor project can attach object storage. We provide Cloudflare R2 (S3-compatible) under the hood, with sane defaults for image upload, file CDN, and backup workflows.

Adding a bucket

Two ways:

  • Ask Vibe Chat: "add a private bucket for user uploads" — it edits loor.json.
  • Open Storage in the sidebar → New bucket.

Loor creates the bucket, wires an env var into your services (e.g. R2_UPLOADS_URL), and exposes a temporary credentials endpoint.

Credentials

Apps should call Loor's signed-URL endpoint for short-lived credentials rather than holding a permanent secret. Studio gives you a one-liner SDK example in JS, Python, Go.

const url = await loor.storage("uploads").signedPut("avatar.png", { ttl: "10m" });

CORS & visibility

Public buckets serve directly from your project's domain. Private buckets only respond to signed URLs. CORS rules are edited per-bucket in the sidebar (origin, methods, max-age).