Build upload UI that fits.
Keep your backend in charge.

Composable React components for choosing files, showing progress, and managing each upload. Use your existing upload() function.

Quick start
npm i uplofile
0downloads / month
0total downloads
React 16+MIT · zero deps

The whole thing

Uploader.tsx
import { Root, Dropzone, Trigger, Preview } from "uplofile";
export function Uploader() {
return (
<Root upload={putToS3}>
<Dropzone>
<Trigger>Choose files</Trigger>
<Preview />
</Dropzone>
</Root>
);
}
Explore the quick start

Boundary

Uplofile handles

File state and lifecycle
Progress, cancel, retry, remove
Drag-and-drop and file dialog
Hidden input for form posts

You handle

Transport and protocol
Storage backend and auth
Retry and resumable strategy
All styling

Composable by default

Use each primitive independently, then make the upload experience yours.

Accessible interactions

Keyboard-friendly triggers and native file input behavior are built in.

Bring your transport

Keep your backend, credentials, and upload protocol exactly where they belong.