Pushduck
Pushduck// S3 uploads for any framework

Pushduck

Own your file uploads. The most comprehensive upload solution for Next.js.

Simple S3 Uploads, Zero Vendor Lock-in

Upload files directly to S3-compatible storage. Lightweight (6KB), type-safe, and works everywhere. No monthly fees, no vendor lock-inβ€”just 3 files and ~50 lines of code.

// Create your upload client
const upload = createUploadClient<AppRouter>({
  endpoint: '/api/upload'
});

// Use anywhere in your app
export function MyComponent() {
  const { uploadFiles, files, isUploading } = upload.imageUpload();

  return (
    <input
      type="file"
      onChange={(e) => uploadFiles(Array.from(e.target.files || []))}
      disabled={isUploading}
    />
  );
}

🎬 Try It Live

Upload a file to see it in action (using Cloudflare R2)

πŸ“€

Drop files above or click to browse

Why Choose Pushduck?

Alternative to UploadThing - Own your infrastructure, zero recurring costs.

FeaturePushduckUploadThing
Cost$0 (use your S3)$10-25/month
Bundle Size6KBManaged client
Vendor Lock-inNone - S3 compatibleLocked to their service
File OwnershipYour S3 bucketTheir storage
Type SafetyFull TypeScriptTypeScript support
Setup Time~2 minutes~2 minutes

Key benefits:

  • βœ… 6KB bundle - No heavy AWS SDK
  • βœ… Type-safe - Compile-time route validation
  • βœ… Own your files - Any S3-compatible provider
  • βœ… No monthly fees - Use your own S3
  • βœ… Focused library - Does uploads, nothing else

More Resources

What's Included

  • βœ… Progress Tracking - Real-time progress, speed, and ETA
  • βœ… Type Safety - Full TypeScript from server to client
  • βœ… Multi-Provider - AWS S3, Cloudflare R2, DigitalOcean, MinIO
  • βœ… Validation - File type, size, and custom rules
  • βœ… Storage Operations - List, delete, and manage files
  • βœ… Framework Support - Next.js, Remix, Express, Fastify, and more
  • βœ… Drag & Drop Components - Copy-paste UI components via CLI

πŸ“– What we don't do - File processing, analytics, team management. See Philosophy for our focused scope.