Skip to main content
Access storage methods via client.storage. Uploaded files are served from a public CDN — no extra configuration required.
Storage operations accept both pk_live_... and sk_live_... keys. Use pk_live_... in browser code for user-initiated uploads, and sk_live_... for server-side uploads. Never expose your secret key in browser code.

upload

Upload a file to storage.
upload(file: File | Blob | Buffer, filename?: string): Promise<UploadResponse>
Parameters
NameTypeRequiredDescription
fileFile | Blob | BufferYesThe file to upload.
filenamestringNoOverride the stored filename.
Returns (UploadResponse)
FieldTypeDescription
urlstringPublic CDN URL for the uploaded file.
pathstringStorage path — required to delete the file later.
provider'internal' | 'external'Whether the file is stored on urBackend or your own Supabase.
Store the path alongside the url in your database. You need it to delete the file.
Example — browser file input
const input = document.querySelector<HTMLInputElement>('input[type="file"]');

if (!input?.files?.length) {
  throw new Error('No file selected');
}

const file = input.files[0];

const { url, path, provider } = await client.storage.upload(file);
console.log(url);  // 'https://cdn.example.com/uploads/abc123.jpg'
console.log(provider); // 'internal'

deleteFile

Delete a previously uploaded file by its storage path.
deleteFile(path: string): Promise<{ deleted: boolean }>
Parameters
NameTypeRequiredDescription
pathstringYesThe path returned by upload().

Limits

LimitValue
Max file size10 MB per file
Total storage per project100 MB (Free Tier)
Uploads that exceed 10 MB are rejected with a StorageError.