Most upload libraries are JavaScript front ends: they handle the browser half well and leave the PHP half to you. This compares the five you are most likely to shortlist, on the things that actually decide the choice — licence, maintenance, whether a server component is included, and what each is genuinely best at.
The shortlist at a glance
| Library | Licence | Stars | Latest release | Server side |
|---|---|---|---|---|
| Dropzone | MIT | 18.4k | v6.0.0-beta.2, Nov 2021 | None — you write it |
| Uppy | MIT | 30.9k | Rolling, actively released | Companion (Node) for remote sources |
| FilePond | MIT | 16.4k | 4.28.2, Jun 2021 | Community PHP adapters |
| Plupload | AGPL-3.0 | 5.6k | v3.1.5, 2021 | Example PHP handler |
| jQuery-File-Upload | MIT | 30.7k | Archived | PHP class included |
| PHP File Uploader | Commercial | — | Maintained | Included, PHP-native |
Dropzone
The default choice for years, and still the fastest way to get a drag-and-drop area on a page. The API is small, the styling is easy to override, and there are examples for everything.
The thing to know before adopting it: the last tagged release is v6.0.0-beta.2 from November 2021. The repository still sees commits, but a project on a beta tag for that long is a judgement call for production. Most teams pin the older stable 5.x line.
Dropzone is also client-only. It posts multipart requests and stops there — the PHP that validates, names and stores the file is entirely yours, along with the size-limit configuration that trips most people up. See the security checklist and the size limits guide for what that half involves.
Choose it when you want a small MIT dependency, you are comfortable owning the server code, and a beta tag does not bother you.
Uppy
The most capable open-source option, and the most actively developed of the five. Modular: you add the pieces you need — dashboard UI, webcam, screen capture, Google Drive and Dropbox imports, image editor, golden-retriever session recovery.
Two properties stand out. It supports tus for genuinely resumable uploads, which matters for large files on unreliable connections — the same problem chunked uploads solve by hand. And remote sources (importing straight from Dropbox rather than via the user's machine) work through Companion, a Node service. That is the catch for a PHP shop: it is another runtime to deploy and keep patched. Plain browser-to-PHP uploads need no Companion at all.
Choose it when you want the richest free feature set, need resumability or remote sources, and can live with a larger dependency — and, if you want remote sources, a Node service alongside PHP.
FilePond
The best-looking of the group, with genuinely polished interaction: drop, reorder, per-file progress, image preview, crop and resize before upload. MIT, and small if you use the core without plugins.
The server contract is defined by FilePond and implemented by you or by a community adapter. The PHP adapters are third-party, so their quality and maintenance vary — read the one you pick before trusting it with a public endpoint. Note also the latest tagged release is 4.28.2 from June 2021, though the repository remains active.
Choose it when the upload experience is part of the product's polish, particularly for images, and you are happy owning the PHP side.
Plupload
The old workhorse, and the one with a licence question. Plupload is AGPL-3.0. For an internal application that is usually fine; for anything you distribute or run as a hosted service, the AGPL's network clause is a genuine legal question for your organisation, not a technicality. Historically a commercial licence has been available — if you are considering Plupload commercially, resolve that first.
Technically it is showing its age: the runtime abstraction existed to paper over Flash and Silverlight, both long dead, and the latest release is v3.1.5 from 2021 with the last repository activity in mid-2024.
Choose it when you are maintaining something that already uses it. For new work the licence alone usually decides it.
jQuery-File-Upload
30.7k stars, in thousands of legacy PHP applications, and archived by its author — no further fixes of any kind. If you are running it, you are running unmaintained upload code that accepts files from the public internet. Its bundled PHP handler was also the subject of a well-known remote-code-execution advisory (CVE-2018-9206) affecting old versions and many forks.
Choose it when — do not, for new work. If you have it in production, see the migration guide.
Where a commercial component fits
Every option above is a browser library. The gap they share is the same: the PHP half is yours — the temporary file handling, the size and time limits, the validation, the storage, and the chunking if files are large. That code is not hard, but it is easy to get subtly wrong, and it is the part with the security consequences.
PHP File Uploader is the other shape: one server-side component that renders the browser UI and handles the PHP side together, so upload_max_filesize and post_max_size stop being the binding constraint and large files are chunked without you writing the reassembly.
The honest trade-offs: it is commercial, so there is a licence cost the MIT options do not have; it is a single vendor rather than a community project; and if all you need is a drop zone on one form, Dropzone or FilePond will do that for free. It earns its place when uploads are central — large files, many files, or a team that would rather not own the server-side upload path at all.
Choosing quickly
- Small MIT dependency, you own the server code — Dropzone, or FilePond if the interface matters.
- Richest free feature set, resumable, remote sources — Uppy, plus Companion if you want the remote imports.
- Migrating off jQuery-File-Upload — anything maintained; the migration guide covers the options.
- AGPL is a problem for you — not Plupload.
- You want the PHP side handled too — a component like this one; try the demos before paying for anything.
Whichever you pick, the server-side rules do not change: validate content rather than the extension, generate your own stored filename, and keep the upload directory non-executable. The checklist applies to all of them equally.
If you are not on PHP
This comparison is scoped to PHP back ends. The client-side libraries above are language-agnostic and apply anywhere; what changes is the server half. For .NET the equivalent options are set out on the ASP.NET upload guides, and for Classic ASP in the Classic ASP article index.
