# What changed in react-dropzone

> 37 changes in react-dropzone 14 to 20 from its official release notes, upgrade guides and advisories: 13 breaking, 6 new APIs and options. Each one cited. Sources checked 2026-10-17. HTML: https://unstale.sh/npm/react-dropzone/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## react-dropzone 20

### Breaking changes

- Node.js 20 is no longer supported; the minimum supported Node.js version is now 22. (20.0.0) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v20.0.0)

### New APIs and options

- Exposes rejected files from drag operations so applications can access and handle drag file rejections. (20.1.0) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v20.1.0)

### Fixes and other changes

- In-flight processing is aborted when the dropzone unmounts, preventing processing from continuing after unmount. (20.1.3) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v20.1.3)
- Empty validator error arrays are now accepted. (20.1.2) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v20.1.2)

## react-dropzone 19

### Breaking changes

- acceptedFiles and onDropAccepted now return files within the limit instead of rejecting the entire batch. (19.0.0) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v19.0.0)

### New APIs and options

- MIME types can now be grouped in the accept configuration. (19.3.0) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v19.3.0)
- Adds paste-to-upload support, allowing developers to handle uploaded files pasted into the dropzone. (19.2.0) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v19.2.0)

### Behavior and default changes

- Validators can now be asynchronous, allowing validation logic that awaits results. (19.1.0) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v19.1.0)

### Fixes and other changes

- Drops on the dropzone are ignored while the file dialog is open. (19.1.1) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v19.1.1)
- Dragged files are detected via items kind when the drag event types omit Files. (19.0.2) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v19.0.2)
- The file input is hidden in-flow to prevent scroll jumps for users interacting with the dropzone. (19.0.1) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v19.0.1)

## react-dropzone 18

### Breaking changes

- The validator is skipped during drag, changing when validation logic runs. (18.3.0) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v18.3.0)
- FileWithPath now requires path or relativePath, so plain File is no longer assignable; type onDrop handlers as File[]. (18.0.0) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v18.0.0)
- The full extension-to-MIME table is no longer bundled; pass COMMON_MIME_TYPES from file-selector/mime to restore it. (18.0.0) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v18.0.0)

### New APIs and options

- Adds isDragUnknown state so developers can detect when the drag state is unknown. (18.3.0) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v18.3.0)
- Adds a prop to override file rejection messages. (18.2.0) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v18.2.0)

### Behavior and default changes

- File size errors are formatted using human-readable units, making rejection messages easier for developers and users to understand. (18.1.0) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v18.1.0)

### Tooling

- @types/react is added as an optional peer dependency for projects needing React type definitions. (18.0.2) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v18.0.2)

### Fixes and other changes

- Prevents the browser from opening files dropped on disabled or noDrag dropzones. (18.2.2) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v18.2.2)
- Falls back to the native input when the file picker is blocked. (18.2.1) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v18.2.1)
- The root receives aria-disabled when the dropzone is disabled, improving accessibility semantics. (18.0.2) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v18.0.2)
- Drop callback event types remain event-shaped, improving type accuracy for callback consumers. (18.0.2) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v18.0.2)
- The hidden file input is labeled, improving its accessibility. (18.0.2) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v18.0.2)
- Extensions are now enforced when paired with wildcard MIME types in the accept configuration. (18.0.1) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v18.0.1)

## react-dropzone 17

### Breaking changes

- defaultProps are removed and replaced by default parameter values. (17.0.0) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v17.0.0)
- prop-types support is removed in favor of TypeScript types. (17.0.0) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v17.0.0)
- The package now requires React 18 or newer. (17.0.0) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v17.0.0)

### Tooling

- Hand-written typings are replaced by declarations generated from the source. (17.0.0) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v17.0.0)

## react-dropzone 16

### Breaking changes

- The dist/es/ output path is removed, requiring consumers of old deep-import paths to migrate. (16.0.0) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v16.0.0)
- The package now uses an exports map with ESM and CJS entry points. (16.0.0) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v16.0.0)
- Building the package now requires Node 20 or newer. (16.0.0) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v16.0.0)
- The UMD build is removed, so CDN and script-tag consumers must migrate. (16.0.0) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v16.0.0)

## react-dropzone 15

### Breaking changes

- isDragReject now reflects only active drag state and clears after drop; use fileRejections or onDropRejected/onDrop for post-drop rejection UI. (15.0.0) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v15.0.0)

## react-dropzone 14

### New APIs and options

- Adds state for detecting drag activity at the document level. (14.4.0) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v14.4.0)

### Fixes and other changes

- Prevents the tarball from being included in the published package, avoiding unintended package contents for users. (14.4.1) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v14.4.1)
- The dragLeave filter logic is corrected. (14.4.0) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v14.4.0)
- Files with an empty type are now accepted during drag events. (14.4.0) — [release notes](https://github.com/react-dropzone/react-dropzone/releases/tag/v14.4.0)
