# uppy

> Extensible JavaScript file upload widget with support for drag&drop, resumable uploads, previews, restrictions, file processing/encoding, remote providers like Dropbox, Google Drive, S3 and more :dog:

Latest version **6.0.1** (published 2026-09-07) · MIT license · 0 weekly downloads

## Install

```sh
npm install uppy
pnpm add uppy
yarn add uppy
bun add uppy
```

## Health

**Score 65/100 (B)** — status: active.

Positive: esm support; no vulnerabilities; recently updated; high maintenance score; popular repo.

Warnings: low downloads; no types.

## Facts

| | |
|---|---|
| Version | 6.0.1 |
| Published | 2026-09-07 |
| First published | 2015-11-26 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | ESM + CommonJS |
| Dependencies | 31 |
| Unpacked size | 5.6 MB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 30972 |
| Maintainers | tim-kos, kvz, mifi, murderlon, uppydev |
| Keywords | file uploader, drag-drop, progress, preview, resumable uploads, xhr, tus, s3, google drive, dropbox, box, webcam |

## Links

- npm: https://www.npmjs.com/package/uppy
- Repository: https://github.com/transloadit/uppy
- Homepage: https://uppy.io
- Issues: https://github.com/transloadit/uppy/issues
- npm.io page: https://npm.io/package/uppy

## Dependencies (31)

- [@uppy/box](https://npm.io/package/@uppy/box.md) 5.0.0
- [@uppy/tus](https://npm.io/package/@uppy/tus.md) 6.0.0
- [@uppy/url](https://npm.io/package/@uppy/url.md) 6.0.0
- [@uppy/core](https://npm.io/package/@uppy/core.md) 6.0.1
- [@uppy/form](https://npm.io/package/@uppy/form.md) 6.0.0
- [@uppy/zoom](https://npm.io/package/@uppy/zoom.md) 5.0.0
- [@uppy/audio](https://npm.io/package/@uppy/audio.md) 4.0.0
- [@uppy/aws-s3](https://npm.io/package/@uppy/aws-s3.md) 6.1.0
- [@uppy/webcam](https://npm.io/package/@uppy/webcam.md) 6.0.0
- [@uppy/webdav](https://npm.io/package/@uppy/webdav.md) 2.0.0
- [@uppy/dropbox](https://npm.io/package/@uppy/dropbox.md) 6.0.0
- [@uppy/locales](https://npm.io/package/@uppy/locales.md) 5.2.0
- [@uppy/facebook](https://npm.io/package/@uppy/facebook.md) 6.0.0
- [@uppy/onedrive](https://npm.io/package/@uppy/onedrive.md) 6.0.0
- [@uppy/unsplash](https://npm.io/package/@uppy/unsplash.md) 6.0.0
- [@uppy/dashboard](https://npm.io/package/@uppy/dashboard.md) 6.0.0
- [@uppy/drag-drop](https://npm.io/package/@uppy/drag-drop.md) 6.0.0
- [@uppy/compressor](https://npm.io/package/@uppy/compressor.md) 4.0.0
- [@uppy/status-bar](https://npm.io/package/@uppy/status-bar.md) 6.0.0
- [@uppy/xhr-upload](https://npm.io/package/@uppy/xhr-upload.md) 6.0.0
- [@uppy/drop-target](https://npm.io/package/@uppy/drop-target.md) 5.0.0
- [@uppy/transloadit](https://npm.io/package/@uppy/transloadit.md) 6.0.0
- [@uppy/google-drive](https://npm.io/package/@uppy/google-drive.md) 6.0.0
- [@uppy/image-editor](https://npm.io/package/@uppy/image-editor.md) 5.0.0
- [@uppy/remote-sources](https://npm.io/package/@uppy/remote-sources.md) 4.0.0
- [@uppy/screen-capture](https://npm.io/package/@uppy/screen-capture.md) 6.0.0
- [@uppy/image-generator](https://npm.io/package/@uppy/image-generator.md) 2.0.0
- [@uppy/golden-retriever](https://npm.io/package/@uppy/golden-retriever.md) 6.0.0
- [@uppy/google-drive-picker](https://npm.io/package/@uppy/google-drive-picker.md) 2.0.0
- [@uppy/thumbnail-generator](https://npm.io/package/@uppy/thumbnail-generator.md) 6.0.0
- [@uppy/google-photos-picker](https://npm.io/package/@uppy/google-photos-picker.md) 2.0.0

## Alternatives

- [react-native-root-siblings](https://npm.io/package/react-native-root-siblings.md) — 102.9K weekly downloads
- [@praxisui/dialog](https://npm.io/package/@praxisui/dialog.md) — 2.0K weekly downloads
- [easy-toggle-state](https://npm.io/package/easy-toggle-state.md) — 350 weekly downloads
- [ngx-lightbox-evp](https://npm.io/package/ngx-lightbox-evp.md) — 19 weekly downloads
- [react-native-modal-translucent-axton](https://npm.io/package/react-native-modal-translucent-axton.md) — 4 weekly downloads

## Recent versions

- 6.0.1 (latest) — 2026-09-07
- 3.27.4 (v3) — 2024-08-21
- 4.0.0-beta.14 (next) — 2024-07-02
- 6.0.0 — 2026-08-26
- 5.2.4 — 2026-03-25
- 5.2.3 — 2026-02-03
- 5.2.1 — 2025-12-09
- 5.2.0 — 2025-12-04
- 5.1.12 — 2025-12-02
- 5.1.11 — 2025-11-03
- 5.1.10 — 2025-10-30
- 5.1.9 — 2025-10-28
- 5.1.8 — 2025-10-22
- 5.1.7 — 2025-10-17
- 5.1.6 — 2025-10-08
- … 297 more at https://npm.io/package/uppy/versions

## README

# Uppy

Hi, thanks for trying out the bundled version of the Uppy File Uploader. You can
use this from a CDN
(`<script src="https://releases.transloadit.com/uppy/v6.0.1/uppy.min.js"></script>`)
or bundle it with your webapp.

Note that the recommended way to use Uppy is to install it with yarn/npm and use
a bundler like Webpack so that you can create a smaller custom build with only
the things that you need. More info on
<https://uppy.io/docs/#With-a-module-bundler>.

## How to use this bundle

You can extract the contents of this zip to a directory, such as `./js/uppy`.

Now you can create an HTML file, for example `./upload.html`, with the following
contents:

```html
<html>
  <head>
    <link rel="stylesheet" href="./js/uppy/uppy.min.css" />
  </head>

  <body>
    <div class="DashboardContainer"></div>
    <button class="UppyModalOpenerBtn">Upload</button>
    <div class="uploaded-files">
      <h5>Uploaded files:</h5>
      <ol></ol>
    </div>
  </body>

  <script type="module">
    import { Uppy, Dashboard, Tus } from './js/uppy/uppy.min.mjs'
    var uppy = new Uppy({
      debug: true,
      autoProceed: false,
    })
      .use(Dashboard, {
        browserBackButtonClose: false,
        height: 470,
        inline: false,
        replaceTargetContent: true,
        showProgressDetails: true,
        target: '.DashboardContainer',
        trigger: '.UppyModalOpenerBtn',
        metaFields: [
          { id: 'name', name: 'Name', placeholder: 'file name' },
          {
            id: 'caption',
            name: 'Caption',
            placeholder: 'describe what the image is about',
          },
        ],
      })
      .use(Tus, { endpoint: 'https://tusd.tusdemo.net/files/' })
      .on('upload-success', function (file, response) {
        var url = response.uploadURL
        var fileName = file.name

        document.querySelector('.uploaded-files ol').innerHTML +=
          '<li><a href="' + url + '" target="_blank">' + fileName + '</a></li>'
      })
  </script>
</html>
```

Now open `upload.html` in your browser, and the Uppy Dashboard will appear.

## Next steps

In the example you built, Uppy uploads to a demo server where files will be
deleted shortly after uploading. You’ll want to target your own tusd server, S3
bucket, or Nginx/Apache server. For the latter, use the Xhr plugin:
<https://uppy.io/docs/xhr-upload/> which uploads using regular multipart form
posts, that you’ll existing Ruby or PHP backend will be able to make sense of,
as if a `<input type="file">` had been used.

The Dashboard now opens when clicking the button, but you can also draw it
inline into the page. This, and many more configuration options can be found
here: <https://uppy.io/docs/dashboard/>.

Uppy has many more Plugins besides Xhr and the Dashboard. For example, you can
enable Webcam or video encoding support. Note that for some Plugins,
you will need to run a server side component called: Companion. Those plugins
are marked with a (c) symbol. Alternatively, you can sign up for a free
Transloadit account. Transloadit runs Companion for you, tusd servers to handle
resumable file uploads, and can post-process files to scan for viruses,
recognize faces, etc. Check: <https://transloadit.com>.

## Getting help

Stuck with anything? We’re welcoming all your questions and feedback over at
<https://community.transloadit.com/c/uppy/5>.

---
_Source: https://npm.io/package/uppy · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
