File Uploads & Storage
Object storage, upload UIs, and image/video pipelines.
Object storage (S3-compatible)
- ★ Cloudflare R2 — S3-compatible, no egress fees, generous free tier. Default for new projects in 2026.
- ★ AWS S3 — the default if you live on AWS.
- Backblaze B2 — cheap, S3-compatible, low egress.
- Tigris — globally distributed, S3-compatible, modern.
- MinIO — self-hostable S3-compatible.
- DigitalOcean Spaces, Linode Object Storage, Wasabi — alternative cloud providers.
- Supabase Storage — bundled with Supabase.
Upload helpers (TypeScript)
- ★ UploadThing — TypeScript-native uploader with presigned URLs, free tier. Effortless integration with Next.js, React Router 7, etc.
- Edge Store — UploadThing competitor; similar shape.
aws-sdkv3 /@aws-sdk/s3-request-presigner— bring-your-own presigned URLs; free, but more wiring.- TUS protocol clients — resumable uploads. uppy (the UI) supports it natively.
Upload UIs
- ★ Uppy — open-source upload UI (drag-and-drop, image preview, webcam, screen recording). Free, Transloadit-built.
- react-dropzone — simple drag-and-drop; pair with your own logic.
- FilePond — older but lovely UI for uploads.
Images / video pipelines
- ImageKit, imgproxy, Imgix, Cloudinary — image transformation services. Cloudinary has a generous free tier.
- Cloudflare Images / Cloudflare Stream — image and video delivery as Cloudflare products.
- Mux — video-specific; free trial.
- Coconut, Bunny Stream — alternative video services.
@vercel/og— generate Open Graph images on the fly.- Satori — the engine behind
@vercel/og; generate SVG/PNG from JSX.
Self-host images
- imgproxy — single Go binary; most popular self-hosted image transformer.
- sharp (npm) — Node binding to libvips; the workhorse for any Node image work.
Pick this if…
- Default storage, fewest gotchas: Cloudflare R2 + presigned URLs.
- Want it really easy in Next.js: UploadThing.
- Need fancy upload UI: Uppy.
- OG images:
@vercel/og(or Satori directly). - Image CDN with free tier: Cloudinary.