Troubleshooting
Common issues and solutions for pushduck
Troubleshooting
Common issues and solutions when using pushduck.
Development Issues
Next.js Turbo Mode Compatibility
Known Issue: pushduck has compatibility issues with Next.js Turbo mode (--turbo
flag).
Problem: Uploads fail or behave unexpectedly when using next dev --turbo
.
Solution: Remove the --turbo
flag from your development script:
{
"scripts": {
// ❌ This may cause issues
"dev": "next dev --turbo",
// ✅ Use this instead
"dev": "next dev"
}
}
# ❌ This may cause issues
npm run dev --turbo
# ✅ Use this instead
npm run dev
Why this happens: Turbo mode's aggressive caching and bundling can interfere with the upload process, particularly with presigned URL generation and file streaming.
Upload Failures
CORS Errors
Problem: Browser console shows CORS errors when uploading files.
Symptoms:
Access to XMLHttpRequest at 'https://bucket.s3.amazonaws.com/...'
from origin 'http://localhost:3000' has been blocked by CORS policy
Solution: Configure CORS on your S3 bucket. See the provider setup guides for detailed CORS configuration.
Environment Variables Not Found
Problem: Errors about missing environment variables.
Symptoms:
Error: Environment variable CLOUDFLARE_R2_ACCESS_KEY_ID is not defined
Solution: Ensure your environment variables are properly set:
- Check your
.env.local
file exists in your project root - Verify variable names match exactly (case-sensitive)
- Restart your development server after adding new variables
# .env.local
CLOUDFLARE_R2_ACCESS_KEY_ID=your_access_key
CLOUDFLARE_R2_SECRET_ACCESS_KEY=your_secret_key
CLOUDFLARE_R2_ACCOUNT_ID=your_account_id
R2_BUCKET=your-bucket-name
File Size Limits
Problem: Large files fail to upload.
Solution: Check and adjust size limits:
// app/api/upload/route.ts
const uploadRouter = s3.createRouter({
imageUpload: s3
.image()
.max("10MB") // Increase as needed
.formats(["jpeg", "png", "webp"]),
});
Type Errors
TypeScript Inference Issues
Problem: TypeScript errors with upload client.
Solution: Ensure proper type exports:
// app/api/upload/route.ts
export const { GET, POST } = uploadRouter.handlers;
export type AppRouter = typeof uploadRouter; // ✅ Export the type
// lib/upload-client.ts
import type { AppRouter } from "@/app/api/upload/route";
export const upload = createUploadClient<AppRouter>({ // ✅ Use the type
endpoint: "/api/upload",
});
Performance Issues
Slow Upload Speeds
Problem: Uploads are slower than expected.
Solutions:
- Choose the right provider region close to your users
- Check your internet connection and server resources
- Consider your provider's performance characteristics
Memory Issues with Large Files
Problem: Browser crashes or high memory usage with large files.
Solution: File streaming is handled automatically by pushduck:
// File streaming is handled automatically
// No additional configuration needed
const { uploadFiles } = upload.fileUpload();
await uploadFiles(largeFiles); // ✅ Streams automatically
Getting Help
If you're still experiencing issues:
- Check the documentation for your specific provider
- Enable debug logging by setting
NODE_ENV=development
- Check browser console for detailed error messages
- Verify your provider configuration is correct
Need more help? Create an issue on GitHub with detailed information about your setup and the error you're experiencing.