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