UploadThing has become a popular choice in the Next.js/TypeScript community for handling file uploads without spinning up your own S3 infrastructure. It takes care of multipart uploads, file validation, CDN delivery, and access control. ChangeThisFile does something different: once you have a file, it converts it to whatever format you need. DOCX to PDF. MP4 to WebM. HEIC to JPG.
These tools are often used together in the same pipeline. This comparison helps you understand where each fits — and where ChangeThisFile is the right first stop if you don't need upload infrastructure at all.
Quick verdict
For file upload infrastructure in a Next.js app: UploadThing. It's excellent for its use case — type-safe upload routes, direct-to-CDN uploads, and framework integrations.
For converting a file from one format to another: ChangeThisFile. 690 routes, free tier, call /v1/convert with curl or any HTTP client.
For privacy-sensitive conversions without uploading to any CDN: ChangeThisFile's 161 client-side routes process files in the browser. Files never leave the device.
For a pipeline that uploads AND converts: Use both — UploadThing for the upload/storage step, ChangeThisFile API for the conversion step.
Pricing comparison
| Plan | ChangeThisFile | UploadThing |
|---|---|---|
| Free tier | 1,000 conversions/month (no card) | Free tier with 2GB storage (check uploadthing.com for current limits) |
| Entry paid | $29/mo — 10,000 conversions | Pro plans based on storage and bandwidth |
| Mid tier | $99/mo — 50,000 conversions | Scales with storage and upload volume |
| High volume | $499 Scale / $1,999 Growth | Enterprise pricing available |
| Browser tool | Free, no signup, unlimited | No standalone conversion browser tool |
UploadThing's pricing is based on storage and bandwidth — you pay to host files persistently. ChangeThisFile's pricing is per conversion — files aren't hosted, so there's no storage or bandwidth cost. These are different cost models for different problems.
Feature comparison
| Feature | ChangeThisFile | UploadThing |
|---|---|---|
| File format conversion | Yes — 690 routes | No — upload/storage only |
| File upload infrastructure | No — conversion only | Yes — core feature |
| CDN file hosting | No — 24h R2 only | Yes — persistent CDN |
| Free tier | Yes — 1,000 conversions/mo | Yes — 2GB storage |
| SDK required | No — curl/fetch/requests directly | Yes — framework-specific SDK (Next.js, Remix, etc.) |
| Client-side conversions | Yes — 161 browser routes, zero upload | No |
| Type-safe upload routes | N/A | Yes — TypeScript-first |
| Direct-to-storage uploads | N/A | Yes |
| Webhooks | HMAC-signed, stdlib verifiable | Upload callbacks supported |
Format and route coverage
UploadThing doesn't do format conversion — it uploads, stores, and delivers files as-is. You can configure it to accept only certain MIME types, but there's no conversion step. The file that goes in is the file that comes out.
ChangeThisFile covers 690 conversion routes: images (JPG, PNG, WebP, HEIC, SVG, AVIF, GIF, BMP, ICO, TIFF, PSD), documents (PDF, DOCX, ODT, RTF, HTML, Markdown), spreadsheets (XLSX, CSV, JSON, TSV), video (MP4, MKV, WebM, AVI, MOV, GIF), audio (MP3, WAV, FLAC, AAC, M4A), ebooks (EPUB, MOBI, AZW3), archives (ZIP, RAR, 7Z, TAR variants), and fonts (TTF, OTF, WOFF, WOFF2).
A common pattern: accept a file upload via UploadThing, then call ChangeThisFile's API to convert it to the format your application needs.
Privacy and data handling
ChangeThisFile client-side routes process files entirely in the browser — 161 routes for images, data files, fonts, and document formats like DOCX→HTML and HTML↔Markdown. Nothing uploads to any server.
ChangeThisFile server-side routes upload over HTTPS, convert, return, and auto-delete. Files are not retained beyond async job windows (24h max).
UploadThing stores uploaded files persistently on its CDN — that's the core value proposition. Files are accessible via URL until explicitly deleted. For user-generated content that you want to serve publicly, this is the right model. For sensitive or private file processing, the persistent storage model is worth factoring in.
Developer experience
UploadThing is designed to be used with its SDK — the type-safe upload route definitions, MIME type validation, and framework integrations (Next.js App Router, Remix, Express) are the core developer experience. For file upload infrastructure in a TypeScript app, the SDK adds real value.
ChangeThisFile removed its SDKs because the conversion endpoint doesn't benefit from a wrapper. POST a file and a target format. Receive the converted file. That's the complete API interaction. Your existing fetch or requests client handles it without any additional library.
const form = new FormData();
form.append('file', fileBlob, 'document.docx');
form.append('target', 'pdf');
const res = await fetch('https://changethisfile.com/v1/convert', {
method: 'POST',
headers: { Authorization: 'Bearer ctf_sk_your_key' },
body: form
});
const pdfBuffer = await res.arrayBuffer();
No npm install @uploadthing/core equivalent. Your TypeScript fetch types are the entire client. Get a free key at changethisfile.com/v1/keys/free.
When to choose which
| Use case | Recommended |
|---|---|
| User file uploads in a Next.js/TypeScript app | UploadThing |
| Persistent CDN file hosting and delivery | UploadThing |
| Convert a file from one format to another | ChangeThisFile |
| Free API tier, no card, no storage billing | ChangeThisFile |
| Privacy-sensitive file processing | ChangeThisFile (client-side routes) |
| Zero-dependency backend integration | ChangeThisFile |
| Upload + convert in the same pipeline | Both — UploadThing then ChangeThisFile |
If you're building a Next.js app and need file upload infrastructure, UploadThing is a well-loved choice. If you then need to convert the uploaded file — resize, reformat, transcode — that's where ChangeThisFile's API fits into the same pipeline. Or if you don't need persistent file hosting at all, ChangeThisFile's free tier handles 1,000 conversions/month with no card and no files hosted permanently.