Storage

Your app's files, governed by RLS.

A Supabase-compatible Storage API: public and private buckets, signed URLs and access policies in SQL. Files are stored on your project's server in the region you picked.

1 GB on Free100 GB on ProFiles stay in the EUsupabase-js compatible
upload.ts
const { data } = await db.storage
  .from('avatars')
  .upload(`${user.id}/avatar.png`, file, { upsert: true })

const { data: url } = db.storage
  .from('avatars')
  .getPublicUrl(data.path)

Capabilities

What you get with Storage

Public and private buckets

Access policies are defined in SQL, just like for tables.

Signed URLs

Temporary links to private files with any expiry you choose.

File browser

Folders, browser uploads, copying public or signed links and deleting — in the dashboard.

Per-bucket limits

Maximum file size and allowed MIME types set when creating a bucket.

Uploads from the frontend

Files go straight from the browser to the bucket, and RLS decides who can write them.

S3 protocol

aws CLI, rclone and the AWS SDKs work with your Storage. On-the-fly image transformations coming soon.

Use cases

What teams use it for

Avatars and user media

Uploads straight from the browser into a bucket.

Company documents

Private files shared through signed links.

Attachments

Files on orders, tickets and messages with per-user access control.

Build in a weekend. Scale to millions.

Spin up a free project in 2 minutes. No credit card, no pausing after a week.