Build

File storage, signed and private.

Upload images, video, and files to private buckets and hand out signed URLs — no S3 account required.

await shovelbase.storage.from("uploads")
.upload(path, file)
await shovelbase.storage.from("uploads")
.createSignedUrl(path, 60)
Private by default

Buckets stay locked down until you say otherwise. Share with signed URLs.

Any file

Images, video, uploads — stored right beside the project that uses them.

No separate account

Storage comes with the project. One console, one bill.

1Storage

Private until you decide otherwise

Files stay locked down by default. When you want to share one, hand out a link that works for as long as you say — and no longer.

  • Locked by default Nothing is public unless you make it so.

  • Share with a link Give out a signed link that expires on your terms.

uploads · private
avatar.png48 KB
clip.mp412 MB
invoice.pdf92 KB
2Storage

Any file, right beside your app

Images, video, PDFs, uploads from your users — all stored with the project that uses them, no separate account to set up.

  • Images to video Whatever your app needs to store, it stores.

  • One console, one bill No AWS account, no IAM policies. It comes with the project.

Drop files to upload

What you'd build with it

The kind of problem Storage is there to solve.

Use case
Let users set a profile photo

Your app lets someone upload an avatar; it’s stored privately and served back with a signed link — no S3 account in sight.

Use case
Uploads from your users

A receipt photo in an expense app, a progress pic in a fitness app — stored beside the project that uses them.

Use case
Share a file on your terms

Hand a user a link to their exported PDF that works for an hour and then quietly stops.

No AWS console, no IAM policies. Uploads work the moment the project exists.

Compare shovelbase →

The rest of the stack