Skip to main content

Uppy 4.0 is here: TypeScript rewrite, Google Photos, React hooks, and much more.

Choosing the uploader you need

Versatile, reliable uploading is at the heart of Uppy. It has many configurable plugins to suit your needs. In this guide we will explain the different plugins, their strategies, and when to use them based on use cases.

Use cases

I want worry-free, plug-and-play uploads with Transloadit services

Transloadit’s strength is versatility. By doing video, audio, images, documents, and more, you only need one vendor for all your file processing needs. The @uppy/transloadit plugin directly uploads to Transloadit so you only have to worry about creating a template. It uses Tus under the hood so you don’t have to sacrifice reliable, resumable uploads for convenience.

You should use @uppy/transloadit if you don’t want to host your own server, (optionally) need file processing, and store it in the service (such as S3 or GCS) of your liking. All with minimal effort.

I want reliable, resumable uploads

Tus is a new open protocol for resumable uploads built on HTTP. This means accidentally closing your tab or losing connection let’s you continue, for instance, your 10GB upload instead of starting all over.

Tus supports any language, any platform, and any network. It requires a client and server integration to work. You can checkout the client and server implementations to find the server in your preferred language. You can store files on the Tus server itself, but you can also use service integrations (such as S3) to store files externally.

If you want reliable, resumable uploads: use @uppy/tus to connect to your Tus server in a few lines of code.


If you plan to let people upload a lot of files, @uppy/tus has exponential backoff built-in. Meaning if your server (or proxy) returns HTTP 429 because it’s being overloaded, @uppy/tus will find the ideal sweet spot to keep uploading without overloading.

I want to upload to AWS S3 (or S3-compatible storage) directly

When you prefer a client-to-storage over a client-to-server-to-storage (such as Transloadit or Tus) setup. This may in some cases be preferable, for instance, to reduce costs or the complexity of running a server and load balancer with Tus.

Uppy has two plugins to make this happen @uppy/aws-s3 and @uppy/aws-s3-multipart, but we are planning to merge the two plugins in the next major. You should use @uppy/aws-s3 with the new shouldUseMultipart option.


You can also save files in S3 with the /s3/store robot while still using the powers of Transloadit services.

I want to send regular HTTP uploads to my own server

@uppy/xhr-upload handles classic HTML multipart form uploads as well as uploads using the HTTP PUT method.