MediaLit vs UploadThing: an open-source alternative
Pricing checked October 2026.
UploadThing made file uploads pleasant for a lot of TypeScript developers. You define a file router, drop in a button, and you're done. If you're on Next.js and happy with it, you probably don't need to switch.
People usually start looking around for one of three reasons: they want private files without paying, they want a way out if the hosted service stops working for them, or they're building AI agents that need somewhere to store files. MediaLit covers those. It's file storage for AI agents, apps and teams, it's open source, and it's priced about the same as UploadThing.
MediaLit vs UploadThing at a glance
MediaLit | UploadThing | |
|---|---|---|
Pricing | Basic: free. Pro: $10/mo or $100/yr | Free: $0. 100GB App: $10/mo. Usage Based: from $25/mo |
Free tier | 1 GB storage, unlimited uploads and downloads | 2 GB storage (shared between all apps), unlimited uploads and downloads |
Max file size | 50 MB (Basic), 2 GB (Pro) | You set it per file route. Defaults are 4 MB for images, 16 MB for video and 8 MB for blobs. The pricing page doesn't list plan caps |
Storage | 1 GB (Basic), 100 GB (Pro) | 2 GB (Free), 100 GB ($10), 250 GB included then $0.08/GB (Usage Based) |
Open source / self-host | Yes. The whole service is open source (AGPL server, MIT clients) and self-hostable on any S3-compatible storage | The SDK repo is MIT-licensed, but the storage service is hosted only |
Private files | Yes, on every plan. Private files use expiring signed URLs | Paid plans only (100GB App and Usage Based) |
AI-agent access (MCP/CLI) | Hosted MCP server with OAuth sign-in, plus the | An |
Versioning | No | No. A request to overwrite or dedupe existing files (issue #772) has been open since April 2024 |
Transforms | Thumbnails for images and videos on upload, plus optional WebP conversion | None built in. The docs suggest resizing before upload |
Where UploadThing is stronger
A bigger free tier. You get 2 GB free versus MediaLit's 1 GB.
Typed file routers. UploadThing's file-router setup is very tidy if your stack is TypeScript end to end, and it has adapters for many JS frameworks.
Usage-based scaling. If you go well past 100 GB, the Usage Based plan's $0.08/GB beyond 250 GB is a clear path. MediaLit Pro tops out at 100 GB per account on the hosted service, though you can self-host for more.
Where MediaLit is stronger
Private files on the free plan. On MediaLit, every upload is private unless you make it public. Private files get signed URLs that expire. On UploadThing, private files come with the paid plans.
Agents are a first-class client. Claude, ChatGPT, Cursor and other MCP clients connect to
https://api.medialit.cloud/mcpand sign in with OAuth, so nobody pastes an API key. MediaLit is also an official connector in the Claude directory, so Claude users can add it in a couple of clicks. Coding agents run the CLI (medialit upload chart.png --public --json). What an agent saves shows up in your dashboard and is available to your app.Not tied to a framework. MediaLit has a REST API, a Node.js SDK, a React component (
@medialit/react) and a framework-free uploader (@medialit/uploader). The browser uploads directly using a short-lived signature from your server, and uploads are resumable (tus).No orphaned files. Uploads stay temporary until your server seals them, and unsealed files are deleted after 24 hours. Files from abandoned forms clean themselves up.
A real exit. The code behind medialit.cloud is the same code you can self-host. Point
MEDIALIT_ENDPOINTat your own server and your code keeps working.Yearly billing. Pro is $100/year, which works out to two months free.
When to pick UploadThing
You're all-in on Next.js or a similar TypeScript stack and love the file-router setup.
2 GB free covers you and you don't need private files yet.
You expect to grow past 100 GB soon and want usage-based pricing on a hosted service.
When to pick MediaLit
You need private files from day one without paying.
You want the option to self-host, or you just like knowing you could.
You're building AI agents or internal tools that need to save files over MCP or the CLI.
Your backend isn't JavaScript-only, or you want a plain REST API.
Migrating from UploadThing
Sign up, create an app, and set
MEDIALIT_API_KEYon your server.Add a signature route. In Next.js,
createSignatureHandlerfrom themedialitpackage handles it in a few lines, and you plug in your own auth check.Replace
<UploadButton>with<MediaLitUploader signatureEndpoint="/api/medialit/signature" />.Seal uploads on the server when the user saves (
new MediaLit().seal(mediaId)). This takes the place of youronUploadCompletelogic.Move existing files with the CLI or SDK, then update the URLs or IDs in your database. Store the
mediaId, because public URLs change when a file is sealed and private URLs are generated fresh each time.
FAQ
Is MediaLit cheaper than UploadThing?
At 100 GB they cost the same: $10/month. MediaLit also has a $100/year option. The bigger differences are private files on the free plan, self-hosting, and agent access.
Can I overwrite or replace a file in MediaLit?
No, and MediaLit doesn't keep versions either. Upload the new file, save its mediaId, and delete the old one.
Does MediaLit work outside Next.js?
Yes. It has examples for Express and other frameworks, a framework-free uploader, and a REST API you can call from any language.
How do AI agents use MediaLit?
Assistants like Claude or ChatGPT connect through the hosted MCP server. Coding agents that run commands use the CLI, which also handles large files in resumable chunks. MCP uploads are limited to about 1.5 MB per file.
Try MediaLit
If UploadThing works for you but you want private files on the free plan, an MCP server and a self-hosting option, MediaLit is worth ten minutes. Start free, then go Pro for 100 GB and 2 GB uploads at $10/month or $100/year.
