Requirements
Zero dependencies and no build step required. The baseline is any evergreen browser; a few advanced features lean on specific web APIs, and degrade rather than break where those are missing.
Browsers
Current Chrome, Edge, Firefox and Safari (desktop and mobile). The core upload path uses long-standing APIs — XMLHttpRequest, fetch, Blob.slice, FormData — so it also works on considerably older evergreen releases.
Feature-specific APIs
| Feature | Needs | Without it |
|---|---|---|
| Cross-session resume | IndexedDB (persistBlobs) | Uploads still work; resume needs re-picking the file. |
| SHA-256 hashing, encryption-at-rest, tus checksums | crypto.subtle — HTTPS or localhost only | Feature is skipped; upload proceeds. |
| Webcam / screen / audio capture | getUserMedia / getDisplayMedia + MediaRecorder — HTTPS | Capture buttons unavailable; file picking unaffected. |
| Cross-tab coordination | BroadcastChannel | Silently disabled (each tab uploads independently). |
| Off-thread image work | Web Workers + OffscreenCanvas | Falls back to the main thread automatically. |
| Folder upload | webkitdirectory / drag-and-drop entries | Individual file selection. |
Backend
- Any language. The contracts are plain HTTP: a multipart POST, a chunk POST with
X-Chunk-*headers, and a JSON completion call. Reference servers: Node (shipped in the npm package), plus ASP.NET Core via our sibling CoreUpload. - Direct-to-cloud needs a small signing endpoint (S3/Azure/GCS) — credentials stay server-side.
- tus works against any tus 1.0 server.
Licensing
No licence needed on localhost / 127.0.0.1 / ::1. Production domains use multipleupload.lic — see deployment.