File uploads
for developers,
done right.
Open-source TypeScript SDK, 40+ premium React components, and managed storage on Cloudflare R2 — or bring your own bucket. Ship uploads in an afternoon.
Everything between
file picker and object storage.
Stop stitching together pre-signed URLs, progress state, retry logic, and IAM policies. UploadKit is the one import.
Presigned uploads
Files go directly from the browser to storage. No proxy hop, no memory ceilings.
Multipart + resumable
Ship 5 GB video uploads with chunked transfer and pause/resume out of the box.
Type-safe file routes
Define allowed MIME types, size caps, and metadata once — get end-to-end types.
Bring your own storage
Same SDK, your bucket. AWS S3, Cloudflare R2, GCS, Backblaze B2. Credentials server-side.
MCP-native
Install an MCP server and let Claude Code, Cursor, and Windsurf wire the whole thing up.
40+ premium components
Glass, terminal, brutal, neon, aurora — themeable via CSS custom properties, dark mode default.
Pick a dropzone. Ship an hour later.
From quiet defaults to loud opinions — each component is MIT-licensed, dark-mode out of the box, and works with or without motion as a peer.
Every component, interactive.
From minimal Stripe-style dropzones to 3D envelopes and vinyl records. Themeable, accessible, motion-aware.
Drop files here or click to browse
Three ways in. Pick whichever hurts least.
Add to an existing project
Most people land here with a Next.js app already running. Install the packages, drop in a route handler, wrap your layout — done.
Use the CLI
Detects your framework, installs deps, creates the route handler, wraps your layout — one command.
Starting fresh
Scaffold a new Next.js, SvelteKit, Remix, or Vite app with UploadKit pre-wired.
Your bucket. Our SDK.
Zero vendor lock-in.
Use the same components and hooks against your own bucket. Credentials stay server-side. Switch providers by changing six lines of code.
import { createUploadKitHandler } from '@uploadkitdev/next';
import { createR2Storage } from '@uploadkitdev/next/byos';
export const { GET, POST } = createUploadKitHandler({
router,
storage: createR2Storage({
accountId: process.env.R2_ACCOUNT_ID!,
accessKeyId: process.env.R2_ACCESS_KEY_ID!,
secretAccessKey: process.env.R2_SECRET!,
bucket: process.env.R2_BUCKET!,
}),
});Your AI already knows UploadKit.
Install the official MCP server and Claude Code, Cursor, Windsurf, or Zed gain first-class knowledge of every component and scaffold. No API key. No config. Runs locally.
npx -y @uploadkitdev/mcp- Knows all 40+ components by name
- Scaffolds the Next.js route handler
- Wires the UploadKitProvider
- Generates BYOS config (S3 · R2 · GCS · B2)
Simple, transparent pricing
Free
Perfect for side projects and early-stage apps.
- 5 GB storage
- 2 GB bandwidth / mo
- 4 MB max file size
- 1,000 uploads / mo
- 2 projects
- Community support
Pro
For production apps that need reliable infrastructure.
- 100 GB storage
- 200 GB bandwidth / mo
- 512 MB max file size
- 50,000 uploads / mo
- 10 projects
- Priority email support
Team
For growing teams with higher volume and more projects.
- 1 TB storage
- 2 TB bandwidth / mo
- 5 GB max file size
- 500,000 uploads / mo
- 50 projects
- Dedicated support