Documentation menu

upup vs react-dropzone

react-dropzone is a small, focused React hook (useDropzone) — with a matching wrapper component — for building an HTML5-compliant drag-and-drop file-selection zone. It is a primitive, not a full uploader: it hands you the selected or dropped File objects and leaves the upload, UI, progress, previews, cloud sources, and everything else to you. That's exactly what you want when you only need drag-and-drop in React and will build the rest yourself. upup is a full uploader — a headless core, native UI for six frameworks, and an optional server — so the two really solve different problems. This page is here because teams often start with the primitive and later need the whole flow.

At a glance

Featurereact-dropzoneupup
ScopeDrag-and-drop file-selection primitive (hook + component)Full uploader: selection, UI, upload pipeline, and server
Native first-party UINo — you render your own; React onlyReact, Vue, Svelte, Angular, Vanilla JS, Preact
Headless coreYes (a hook) — but file selection only, no uploadingYes (@upupjs/core) — a full upload engine
License / pricingMIT, free & open sourceMIT, free & open source
Uploading / self-hostYou implement uploads yourself, to any backend@upupjs/server presigns and proxies to any S3-compatible storage
Cloud-drive sourcesNoGoogle Drive, OneDrive, Dropbox, Box
Camera / screen captureNoYes (both)
Image editorNoYes — React/Preact only
Resumable uploadsNoYes — optional (tus or S3 multipart)
i18nNoYes (ICU locale bundles)

Choose react-dropzone if

  • You only need a drag-and-drop zone in React and will build the upload, UI, and progress yourself.
  • You want the smallest, most unopinionated primitive, with no upload logic baked in.
  • You already have an upload backend and UI and just need clean file selection.

Choose upup if

  • You want the drag-and-drop and the progress bar, previews, cloud drives, camera, resumable uploads, and a server — without assembling them yourself.
  • You need more than React: Vue, Svelte, Angular, Vanilla JS, and Preact, all sharing one DOM contract.
  • You'd rather configure a complete uploader than build one from a primitive.