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.
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.
The rest of the platform
Every service shares the same database, authentication and permissions.
Build in a weekend. Scale to millions.
Spin up a free project in 2 minutes. No credit card, no pausing after a week.