File uploads that work with any backend
A standalone JavaScript file upload component with the self-hosted Companion broker that keeps cloud tokens server-side, 6 cloud sources (Drive, Dropbox, OneDrive, Box, Unsplash, Companion), headless hooks for React, Vue, Svelte, and Angular, a content-aware image editor with smart-crop, overlays, filters, and AVIF/WebP output, 7 transport strategies (chunked, direct-to-S3 / Azure / GCS, tus 1.0, URL import), and 28 built-in locales. Drop it into any project, any backend, in minutes.
npm install multipleupload Or use the CDN:
https://unpkg.com/multipleupload
Transport strategies
Cloud sources
Built-in locales (incl. RTL)
Required runtime deps
Works with every stack
Try it now
This is a fully working upload demo. Drag files or click to browse.
Drag & drop files here or click to browse
Everything you need for file uploads
Built-in features that cover every upload scenario, out of the box.
Drag & Drop
Intuitive drag-and-drop zone with visual feedback. Users can drop single or multiple files.
Chunked Uploads
Large files are split into chunks and uploaded sequentially. Handles files of any size reliably.
Image Previews
Instant thumbnail previews for image files before upload. Built-in, no extra libraries needed.
Clipboard Paste
Paste images directly from the clipboard. Perfect for screenshots and quick image sharing.
Custom Headers
Send custom HTTP headers with every upload request. Built-in CSRF token and auth header support.
Zero Required Deps
Pure JavaScript core. Framework wrappers (React/Vue/Svelte/Angular) and the server middleware are optional peer deps - install only what you use.
What's new in 1.3
Headline releaseServer-side cloud tokens, headless UI, and a pro image editor.
The Companion broker, two new cloud sources, headless hooks for all four major frameworks, and a content-aware image editor with AVIF/WebP output. All additive - no breaking changes from 1.2.
A self-hosted Node/Express OAuth and file-proxy broker (multipleupload/server/companion), modeled on Uppy Companion, with zero new dependencies. Provider client secrets and access tokens stay server-side. Built-in Dropbox, Box, Drive, OneDrive; proxy and server-to-destination transfer modes; HMAC-signed OAuth state.
useUploader() for React and Vue, a use:uploader action for Svelte, and an UploaderService for Angular return { files, progress, status, addFiles, upload } for fully custom UI.
Content-aware focal-point smart-crop (edge-energy, no ML), draggable text and sticker overlays, filter presets (Mono/Sepia/Warm/Cool/Vivid), an EXIF info panel, crop-ratio chips, and AVIF/WebP output with a quality slider and graceful fallback.
Drive, Dropbox, OneDrive, Box (now first-class), Unsplash (search and import, no OAuth popup), and the Companion broker. Built-in pickers, lazy-loaded, one line to configure.
PBKDF2 (200k iter), per-file salt + IV. Your server only ever sees ciphertext. Unique among major upload libraries.
Client hook integrates ClamAV / VirusTotal / Defender. Server-side /scan endpoint in multipleupload/server.
Files queue to IndexedDB while offline; uploads auto-resume on reconnect. Register a Service Worker for background sync.
iPhone HEIC auto-converts to JPEG. 5 presets bundle resize + crop + auto-orient. Slack-style 6-tool markup (pen, arrow, rect, text, blur, eraser) before upload.
BroadcastChannel prevents duplicate uploads across tabs. A "manager" tab can aggregate every tab's progress via subscribeAllTabs().
Extractable progress chrome you can mount anywhere on your page - in your app header, sidebar, or sticky footer.
enableQueueReorder for drag-drop priority. Arrow Up/Down for keyboard accessibility (WCAG 2.1). cameraCapture for direct mobile camera launch.
Locale auto-detect from navigator.language across ~28 locales. Arabic + Hebrew with right-to-left layout. registerLocale() for everything else.
Ready to add file uploads?
Get started in minutes with npm or CDN. Works with your existing backend.