mrkeyoor.com_
Sun 06 Sept 13:38 UTC
Webevaluationupdated 06 Sept 2026

uppy review

Uppy is a modular TypeScript file uploader for web applications. It gives teams ready-made or headless interfaces for selecting, previewing, editing, and uploading files, including resumable transfers and remote sources.

trackingstars / 7d
Verdict

Our sandbox build completed in 59 seconds, but the full test command exited 1 after 15 seconds. Uppy is an excellent default when uploads are a product feature rather than a single form field, especially if resumability, camera input, or remote providers are real requirements. Use its individual packages in production, and budget separately for Companion operations if users must import from cloud services.

We ran it

Install✓ · 70s2030 packages · 1246 MB
Build✓ · 59s
Tests✗ · 15s120 passed · 0 failed of 120 (vitest)
Repo1208 files~79,019 lines of source · 34.2 MB · 6 CI workflows · Dockerfile

Answers from our run

Does uppy build from source?

Dependencies installed in 70 seconds (2030 packages), and the build succeeded in 59 seconds. We cloned commit 8f545d7 into a clean Debian container with 3 CPUs and no project-specific setup.

Do uppy's tests pass?

Yes: 120 of 120 passed when we ran the project's own test command (vitest). Some failures need services or credentials a bare container does not have.

Who should not use uppy?

Tiny forms that only need a basic file input and one POST request

What are the alternatives to uppy?

FilePond, Dropzone, Flow.js. Our sandbox build completed in 59 seconds, but the full test command exited 1 after 15 seconds.

Setup3/5Package use is simple; the 2,030-package monorepo is not
Docs5/5Clear examples, framework guides, plugin docs, and a live demo
Community5/530,963 stars, a recent push, and a recent major release
Maturity4/5Established since 2015, though our full test command failed

Who it’s for

Web teams that need a polished uploader without designing one from scratch
Applications handling large files that benefit from resumable tus uploads
React, Vue, Svelte, Angular, or plain JavaScript projects
Teams willing to run Companion for cloud-drive and remote-URL imports

Who it’s NOT for

Tiny forms that only need a basic file input and one POST request
Teams expecting remote Google Drive, Dropbox, or Box imports with no server component
Projects that want one minimal dependency rather than a plugin-based package set
Maintainers who require the full monorepo test command to pass in a plain fresh container today

Setup reality

Our run installed 2,030 packages in 70 seconds and used 1,246 MB, then built successfully in 59 seconds; the full test command still exited 1 after 15 seconds. Vitest reported 120 passing Companion tests and zero failed assertions there, while the @uppy/audio browser test task ended with one error and no tests executed. That makes normal package adoption look approachable, but contributing to the monorepo is heavier and less predictable than the short npm install example suggests.

Uppy solves an upload workflow, not just file transfer

Uppy is an upload toolkit rather than a decorated file input. Created in 2015 and now showing 30,963 GitHub stars, it covers local selection, webcam capture, remote sources, previews, metadata, progress, and multiple destinations through plugins. That breadth makes sense when uploading is a visible part of a product. For a basic profile-photo form, it may be more system than the job needs.

Teams can choose a ready-made Dashboard, headless components, or hooks for a custom interface. Plain JavaScript, React, Vue, Svelte, and Angular have documented integration paths. Version 6.0.0 is modular at installation time: an app can select @uppy/core, @uppy/dashboard, and @uppy/tus instead of sending the CDN bundle containing most plugins. The README sensibly warns that the broad bundle is not recommended for production.

Our build passed, but the full test command failed

In our fresh Debian container, installation succeeded in 70 seconds. Yarn installed 2,030 packages and used 1,246 MB on disk. The checkout contained 1,208 files, about 79,019 lines of source, and measured 34.2 MB before dependencies. Those numbers describe the full monorepo, not the browser weight of a three-package application, but they show that contributing is substantially heavier than copying the README's short npm command.

The build succeeded in 59 seconds. The test command then exited 1 after 15 seconds. Vitest reported 120 passing Companion tests and zero failed assertions, while the @uppy/audio browser task ended with 1 error and no tests executed. The task runner recorded 1 successful task out of 6 before stopping. The log does not identify the reason for the browser error, so we cannot fairly call it a library defect or a passing suite.

This finding separates adoption from repository development. Using a few published modules looks approachable, but a contributor inherits a large Yarn workspace and browser-oriented test machinery. The repository includes 6 CI workflow files and a Dockerfile, evidence of maintained automation rather than proof that every environment works. Our box had 3 CPUs, 8 GB RAM, Node 22, no secrets, and an unprivileged container; contributors should reproduce the complete checks in their intended CI image.

Resumability and source plugins justify the complexity

Resumable transfer through the open tus standard is Uppy's clearest advantage. For media files over 1 GB or unreliable mobile connections, recovery from an interruption can matter more than visual polish. Conventional servers can use XHR Upload, while AWS S3 and compatible services have a dedicated destination plugin. This plugin boundary lets an application choose its transfer path without replacing the selection and progress interface.

The source side is unusually broad. Local drag and drop, file input, and Webcam cover browser-native acquisition; Google Drive, Dropbox, Box, Facebook, OneDrive, and direct URLs require the server-side Companion component. That qualifier matters: remote imports are not free client features. Companion adds deployment, provider authentication, monitoring, and security work beyond a 3-line initialization example. Dashboard, meanwhile, supplies previews, progress bars, and metadata editing, with headless options available when its fixed composition is too restrictive.

Image Editor, internationalization, stated accessibility intent, and optional crash recovery through Golden Retriever make Uppy more complete than a small drop area. Yet each selected capability increases the surface a team must understand. The 1,246 MB repository install is not a production bundle measurement, but it is a useful warning against installing every plugin by habit. Start with the smallest package set that satisfies a written upload flow.

Uppy does not replace the backend controls

Uppy can transfer to tus, S3-compatible storage, XHR endpoints, Transloadit, or a self-managed pipeline, but the application still owns authorization, file validation, quotas, malware controls, retention, and post-upload processing. Companion also belongs in the server tier when remote sources are enabled. If the requirement is 1 avatar under 5 MB, a native input and signed URL may be easier to secure and maintain. Uppy earns its place when uploads require resumability, capture, editing, multiple sources, or a polished progress experience.

Current activity is strong, with an issue queue to inspect

The repository was pushed on September 4, 2026, just 2 days before this review, and Uppy 6.0.0 was released on August 26, 2026. Together, those dates show recent code and release activity. One tag cannot establish a regular long-term cadence, however. The 182 open issues are meaningful for prospective adopters, especially across many frameworks, browsers, and providers, but the count alone does not reveal response speed or resolution quality. Search the queue for your exact framework and destination combination.

It fits between your interface and an owned storage path

In a real stack, Uppy coordinates selection and transfer in the browser, then hands files to an endpoint whose credentials, limits, and object ownership your backend controls. A React media service might use headless components, a tus endpoint behind authenticated routing, object storage, and separate scanning or encoding workers; Companion joins only if remote sources justify another service. Choose FilePond or Dropzone for a narrower widget, or Flow.js when chunked transfer matters more than a finished interface. Uppy 6.0.0 is the stronger choice when the upload experience is itself a product feature, provided your own CI can pass the full development workflow.

Alternatives

ProjectWhat it isPick it when
FilePondA polished file-upload widget with image previews and a broad plugin ecosystem.pick this instead when you want a focused drop-in uploader and do not need Uppy Companion's remote-source architecture.
DropzoneA long-running drag-and-drop upload library with a comparatively direct API.pick this instead when a conventional drag-and-drop uploader is enough and modular source plugins would add needless surface area.
Flow.jsA JavaScript library centered on chunked and resumable uploads.pick this instead when transfer resilience matters more than a finished dashboard, metadata editing, or cloud-source integrations.

What people are saying

  1. [velocity-scout] transloadit/uppy

Sources

  1. Uppy GitHub repository
  2. Uppy homepage and documentation

More web reviews

Libraries.dev · FckSignups · mantine · handsontable · Web-Dev-For-Beginners · react-bits · the whole board →