PutPut vs the Alternatives
Developers waste hours evaluating file upload services. We did the work for you. Each comparison breaks down pricing, setup time, lock-in, and what actually matters when you just need to upload a file and get a URL.
PutPut vs Supabase Storage
Supabase Storage is solid if you're already all-in on Supabase. But for standalone file uploads, it comes with baggage: project setup, RLS policies, and a free tier that pauses after 7 days of inactivity. PutPut is a standalone upload API with zero egress fees and no strings attached.
| Feature | PutPut | Supabase Storage |
|---|---|---|
| Signup required | No | Yes (account + project) |
| Free tier storage | 10 GB | 1 GB |
| Free tier expiry | No expiry | Pauses after 7 days inactive |
| Egress fees | $0 | $0.09/GB after 2 GB |
| Requires project setup | No | Yes (Supabase project + RLS) |
| Max file size (free) | 100 MB | 50 MB |
| SDK required | No (plain HTTP) | Yes (@supabase/supabase-js) |
| AI-friendly docs | docs.putput.io | No |
| Guest tokens (no auth) | Yes | No |
| Direct-to-storage uploads | Yes (R2 presigned) | Yes |
Code comparison
// Works anywhere — no SDK, no project setup
const tok = await fetch('/api/v1/auth/guest',
{ method: 'POST' }).then(r => r.json());
const pre = await fetch('/api/v1/upload/presign',
{ method: 'POST',
headers: { Authorization: `Bearer ${tok.token}` },
body: JSON.stringify({ filename: 'photo.jpg',
content_type: 'image/jpeg' }) }
).then(r => r.json());
await fetch(pre.upload_url,
{ method: 'PUT', body: file });// 1. Install SDK
// npm install @supabase/supabase-js
// 2. Create a Supabase project + bucket
// 3. Configure RLS policies
import { createClient } from
'@supabase/supabase-js';
const supabase = createClient(
'https://xyz.supabase.co',
'your-anon-key'
);
const { data, error } = await supabase
.storage
.from('avatars')
.upload('photo.jpg', file, {
cacheControl: '3600',
upsert: false
});The 7-day pause problem
Supabase free-tier projects automatically pause after 7 days without activity. When that happens, your storage API returns errors and uploaded files become inaccessible. You have to manually log in and unpause the project. For hobby projects, weekend experiments, or anything that isn't used daily, this is a dealbreaker. PutPut never pauses — your files stay online no matter what.
Frequently asked questions
Does Supabase Storage really pause after 7 days?
Yes. Supabase free-tier projects pause after 7 days of inactivity. When paused, your storage API stops working and files are inaccessible until you manually unpause the project. PutPut has no inactivity timer — your files stay available indefinitely.
How do egress fees compare?
PutPut has zero egress fees — files are served from Cloudflare R2, which has no bandwidth charges. Supabase Storage includes 2 GB of free egress per month, then charges $0.09/GB. For a moderately popular app, that can add up quickly.
Do I need a Supabase project to use Supabase Storage?
Yes. Supabase Storage is part of the Supabase platform — you need to create a project, set up a storage bucket, and configure Row Level Security (RLS) policies before you can upload files. PutPut is standalone: get a token, upload, done.
Can I use Supabase Storage without the JS SDK?
Supabase has a REST API, but the documented path is through their SDK. PutPut is plain HTTP by design — curl, fetch, or any language with an HTTP client works out of the box.
Is Supabase Storage bad?
Not at all. If you're already building on Supabase (database, auth, edge functions), their storage integrates well. But if you just need file uploads without buying into a platform, PutPut is simpler and cheaper.
No signup required. No credit card.