Skip to content

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.

FeaturePutPutSupabase Storage
Signup required No Yes (account + project)
Free tier storage10 GB1 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 MB50 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

PutPut
// 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 });
Supabase Storage
// 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.

Get started for free

No signup required. No credit card.

v0.4.77