Loading…
Loading…
Trust Score comparison · April 2026
| Factor | Uploadthing | Cloudinary |
|---|---|---|
| License | MIT | Proprietary |
| Language | TypeScript | TypeScript / Python |
| Hosted | Self-hosted | Yes |
| Free tier | — | — |
| Open Source | — | — |
| TypeScript | — | ✓ |
import { createUploadthing, type FileRouter } from 'uploadthing/next';
const f = createUploadthing();
export const ourFileRouter = {
imageUploader: f({ image: { maxFileSize: '4MB' } })
.middleware(async ({ req }) => {
const user = await auth(req);
if (!user) throw new Error('Unauthorized');
return { userId: user.id };
})
.onUploadComplete(async ({ metadata, file }) => {
console.log('Upload complete for userId:', metadata.userId);
console.log('File URL:', file.url);
return { uploadedBy: metadata.userId };
}),
} satisfies FileRouter;
export type OurFileRouter = typeof ourFileRouter;import { v2 as cloudinary } from 'cloudinary';
cloudinary.config({
cloud_name: process.env.CLOUDINARY_CLOUD_NAME,
api_key: process.env.CLOUDINARY_API_KEY,
api_secret: process.env.CLOUDINARY_API_SECRET,
});
// Upload and auto-optimize
const result = await cloudinary.uploader.upload('path/to/image.jpg', {
folder: 'my-app',
transformation: [{ width: 800, crop: 'scale' }, { quality: 'auto', fetch_format: 'auto' }],
});
console.log(result.secure_url);Cloudinary leads on Trust Score with stronger signal data across downloads and community health. That said, the other tool is worth considering if your use case matches its specific strengths above.