Pushduck
Own your file uploads. The most comprehensive upload solution for Next.js.
Own Your File Uploads
File uploads in Next.js have been overcomplicated for too long. Developers shouldn't need to cobble together multiple libraries, write custom middleware, and manage complex state just to handle file uploads. We believe the TypeScript ecosystem deserves better—hence, Pushduck.
The most comprehensive file upload solution for Next.js. Guided setup, full TypeScript support, and everything you need out of the box.
// It's really this simple
const upload = createUploadClient();
export function MyComponent() {
const { uploadFiles, uploadedFiles, isUploading } = upload.imageUpload();
return (
<input
type="file"
onChange={(e) => uploadFiles(e.target.files)}
disabled={isUploading}
/>
);
}
🎬 Interactive Demo
Try uploading files to see the enhanced type-safe client in action
Live Demo: Files are uploaded to Cloudflare R2. Don't upload sensitive information.
Drag & drop files or click to browse
Maximum 5 files allowed
Drop files above or click to browse
💻 Code powering this demo:
// Enhanced type-safe client
const imageUpload = upload.imageUpload();
// Upload with full type safety
await imageUpload.uploadFiles(files);
// Access state with TypeScript inference
const {
files, // Individual file progress
isUploading, // Upload status
errors, // Any errors
progress, // Overall progress (0-100)
uploadSpeed, // Overall bytes/sec
eta // Overall time remaining
} = imageUpload;
🎯 Pushduck Init
Interactive CLI guides you through setup with sensible defaults. Minimal configuration required.
🔒 Type-Safe
Full TypeScript inference from server router to client components. Catch errors at compile time.
☁️ Provider Agnostic
Cloudflare R2, AWS S3, DigitalOcean Spaces, MinIO. Switch providers without changing code.
⚡ Production Ready
Built-in validation, overall progress tracking, error handling, and security features.
Why Pushduck?
File uploads should be simple, secure, and scalable. Other solutions make you choose between ease of use and control, or require vendor lock-in and ongoing costs.
Pushduck gives you:
- Full ownership of your upload infrastructure
- Zero vendor lock-in with provider-agnostic design
- Production-grade features without the complexity
- Type-safe development with full TypeScript inference
- Community-driven with real-world usage patterns
Get Started
⚡ CLI Setup
Interactive setup with npx @pushduck/cli@latest init - guided configuration in one command
🔧 Manual Setup
Step-by-step manual setup for developers who prefer full control
☁️ Providers
Provider-specific setup guides for Cloudflare R2, AWS S3, and more
💡 Examples
See it in action with real-world examples and demo components
Loved by Developers
"Finally, an upload solution that just works. The TypeScript inference is incredible - I get autocomplete for everything and catch errors before they hit production."
— React Developer, SaaS Startup
"We migrated from Uploadthing to pushduck and cut our upload costs by 80%. The provider-agnostic design means we can switch S3-compatible providers anytime."
— CTO, E-commerce Platform
"The property-based client approach is genius. No more passing route names as strings - everything is type-safe and the DX is outstanding."
— Full-Stack Developer, Agency
Framework Agnostic
While optimized for Next.js, it works seamlessly across the JavaScript ecosystem:
Next.js
App Router & Pages Router
Remix
Full-stack support
SvelteKit
Coming soon
Nuxt
Coming soon
What's Included
Everything you need for production file uploads:
- ✅ Validation & Security - File type, size, and custom validation
- ✅ Overall Progress Tracking - Real-time aggregate progress, speed, and ETA across all files
- ✅ Error Handling - Comprehensive error states and recovery
- ✅ Middleware System - Custom logic for authentication, metadata, and processing
- ✅ Type Inference - Full TypeScript safety from server to client
- ✅ Provider Support - Cloudflare R2, AWS S3, DigitalOcean, MinIO, and more
- ✅ Image Processing - Built-in Sharp integration for optimization
- ✅ Drag & Drop - Ready-to-use components and hooks
- ✅ Multi-file Support - Concurrent uploads with progress aggregation