MediaLit vs UploadThing
UploadThing made file uploads pleasant for a lot of TypeScript developers. If you're on Next.js and happy with its file routers, you probably don't need to switch. People usually look around when they want private files without paying, a way out of the hosted service, or somewhere AI agents can save files.
Both start free and offer a paid plan with 100 GB. MediaLit includes private files on Free, ships a hosted MCP server and CLI, and is fully self-hostable. UploadThing has a bigger free tier (2 GB), typed file routers, and a clear usage-based path past 100 GB.
Read the longer write-up| Feature | MediaLit | UploadThing |
|---|---|---|
| Signup required | Yes, free account | Yes |
| Free plan | Basic: 1 GB storage, 50 MB max file, unlimited uploads and downloads | 2 GB storage shared across all apps, unlimited uploads and downloads |
| Paid plan price | Pro: $10/mo or $100/yr for 100 GB storage and a 2 GB max file (see current pricing) | $10/mo for 100 GB (Private Files + regions). Usage-based from $25/mo for 250 GB, then $0.08/GB |
| Max file size | 50 MB (Basic), 2 GB (Pro) | UnclearSet per file route (defaults: 4 MB images, 16 MB video). Plan-level cap: Unclear |
| Setup time (est.) | ~5 min | ~5 to 10 min |
| Lines of code (upload a file, get a URL) | 7 lines | 10 lines |
| SDK needed | No. REST API, or the optional medialit Node SDK | Recommended (uploadthing). A REST API is documented |
| Presigned / browser uploads | Yes: Yes. Short-lived upload signatures; browser uploads are resumable (tus) | Yes: Yes. File routes with ready-made upload components |
| Signed private URLs | Yes: Yes on every plan, including Free. Private by default until you make a file public | Partly: Paid plans only (100GB App and Usage Based). generateSignedURL up to 7 days |
| CDN included | Yes: Yes. Delivery through a CDN | UnclearNot stated on the pricing page |
| Egress / bandwidth | Unlimited uploads and downloads listed. No separate egress rate published | Unlimited uploads and downloads listed. No separate egress rate published |
| Image / video processing | Partly: Thumbnails on upload, optional WebP conversion | No: None built in. Docs suggest resizing before upload |
| AI-agent access | Yes: Hosted MCP with OAuth, plus the medialit CLI | Partly: Canary @uploadthing/mcp-server from an open draft PR. No official CLI found |
| Open source / self-host | Yes: Yes. AGPL server, MIT clients, self-hostable on any S3-compatible storage | Partly: SDK is MIT. Storage service is hosted only |
| File versioning / overwrite | No: No versioning. Upload a new file and delete the old one | No: No. Overwrite/dedupe request open since April 2024 |
Sources: UploadThing pricing, file routes, regions and ACL, MediaLit pricing. USD, checked 6 November 2026. Cells marked Unclear are not documented on the public pricing page.
import { MediaLit } from "medialit";
const medialit = new MediaLit(); // reads MEDIALIT_API_KEY
const { mediaId } = await medialit.upload("./photo.jpg", {
access: "public",
});
const media = await medialit.seal(mediaId); // keep it
console.log(media.file);Works from any backend. Browser uploads use a short-lived signature from your server.
import { readFile } from "node:fs/promises";
import { UTApi, UTFile } from "uploadthing/server";
const utapi = new UTApi(); // reads UPLOADTHING_TOKEN
const file = new UTFile(
[await readFile("./photo.jpg")],
"photo.jpg",
);
const { data, error } = await utapi.uploadFiles(file);
if (error) throw new Error(error.message);
console.log(data.ufsUrl);Server-side upload via UTApi. Most apps use file routes and <UploadButton> instead.
Both offer a 100 GB paid tier. MediaLit Pro is $10/mo or $100/yr. The bigger differences are private files on MediaLit's free plan, self-hosting, and agent access. See MediaLit pricing.
MediaLit yes: the code behind medialit.cloud is the same code you can run on your own S3-compatible storage. UploadThing's SDK is open source, but the storage service is hosted only.
Yes. REST API, Node SDK, React component and a framework-free uploader. UploadThing is strongest in TypeScript/Next.js stacks.
Assistants connect to the hosted MCP server with OAuth. Coding agents use the CLI. MCP uploads are limited to about 1.5 MB per file; larger files go through the CLI or API.
We'd rather you pick the right tool than migrate twice. UploadThing wins in clear cases:
Add a signature route, swap the upload button, seal uploads on save, then move existing files with the CLI or SDK.
mediaId)<UploadButton> / <UploadDropzone> componentsStore the mediaId, because public URLs change when a file is sealed and private URLs are generated fresh each time. MediaLit docs.
Try MediaLit
Start free. Pro adds 100 GB and 2 GB uploads for $10/mo or $100/yr, with private files and MCP from day one. See current pricing.
Also comparing? All MediaLit comparisons · MediaLit vs Cloudinary · Longer write-up
Prices and limits checked 6 November 2026 from UploadThing and MediaLit. Setup time is an estimate. Lines of code are counted from the samples above. Spotted something out of date? Open an issue.