Free
$0/ month
organization pool
An organization-wide pool to get started.
- Storage
- 2 GB
- Downloads
- 2 GB
- Live files
- 1,000
- Request units
- 10,000
Hosted file uploads, storage and delivery
Typed file routers, bytes that go straight to object storage, and delivery you control. Your server decides who can upload. Uploadfile handles the rest.
https://www.uploadfile.dev/f/7Hq2xK9mPqT3publicpnpm add @uploadfile/core @uploadfile/react How an upload works
Your middleware runs on your server and decides who can upload. Throw, and nothing is reserved.
Uploadfile checks file policy and capacity, reserves the upload, and issues short-lived presigned destinations.
Bytes go straight to object storage (S3), single or multipart. They never pass through your server.
Processing and your onUploadComplete callback finish it. Serve it publicly, privately, or through a signed link.
import { createUploadfile, type FileRouter } from "@uploadfile/core/next";
const f = createUploadfile();
export const fileRouter = {
imageUploader: f({ image: { maxFileSize: "4MB", maxFileCount: 4 } })
// 1 · authorize: runs on your server
.middleware(async ({ req }) => {
const user = await authenticateYourUser(req);
if (!user) throw new Error("Unauthorized");
return { userId: user.id };
})
// 4 · complete: after the bytes land in storage
.onUploadComplete(async ({ metadata, file }) => {
await saveYourFile(metadata.userId, file.key);
return { key: file.key };
}),
} satisfies FileRouter;Capabilities
Every file is public or private. Private files are served through signed delivery links that expire. Pausing delivery stops serving a file without deleting it, and you can undo it.
https://www.uploadfile.dev/f/<file-key>https://www.uploadfile.dev/f/<file-key>?expires=…&sig=…Your organization owns people, roles and billing. Each application gets its own files, scoped server API keys, home storage region, plan and limits.
Sydney is the region enabled today.
Four meters, per application. Overage is off until you opt in, with quantity limits and a spending alert. Without your consent, excess use is blocked and never charged.
Example application on Launch. The bars are illustrative.
Five roles, scoped to your organization.
| Permission | Owner | Admin | Developer | Billing | Viewer |
|---|---|---|---|---|---|
| Read | Yes | Yes | Yes | Yes | Yes |
| Read private files | Yes | Yes | Yes | No | No |
| Write files and apps | Yes | Yes | Yes | No | No |
| Manage members | Yes | Yes | No | No | No |
| Billing | Yes | No | No | Yes | No |
| Delete apps, transfer ownership | Yes | No | No | No | No |
Sign in securely, and see who did what.
Two-factor and passkeys are optional. Once you turn one on, it's checked every session.
When you deliberately delete a file, access is revoked and every copy is purged. There is no trash period, so deleted means deleted.
Typed file routers, a Next.js route handler and a dashboard. Define routes with createUploadfile and add a typed upload button.
@uploadfile/core@uploadfile/react@uploadfile/vue@uploadfile/svelte@uploadfile/solid@uploadfile/nuxt@uploadfile/expoNo capability matches that filter.
Pricing
Paid plans are per application. Free is one pool shared across your organization. Prices in USD per month.
$0/ month
organization pool
An organization-wide pool to get started.
$59/ month
per application
A focused home for your first production app.
$269/ month
per application
Room for a growing product and its customers.
$1,099/ month
per application
More capacity for an established application.
No included usage. Charged proportionally from the first unit against prepaid funds: $10 to start, and every top-up is $10. Unused funds don't expire. A one-part upload uses 5 request units (0.00075); each successful download uses 1. Stored files keep accruing storage charges while they remain stored. USD, excluding applicable taxes.
Off by default. Turn it on with quantity limits and a spending alert. Without your consent, excess use is blocked and never charged.
Full details on the pricing page.
Install the SDK, write a file router, and let Uploadfile take care of storage and delivery.