Works with any backend npm install Zero dependencies

Table Layout

Display the file queue as a structured table with columns for name, size, status, and actions.

Drag & drop files here
var uploader = new MultipleUpload(el, {
 uploadUrl: '/api/upload',
 onFileAdded: function(task) {
 addTableRow(task);
 },
 onTaskProgress: function(task, pct) {
 updateRowStatus(task.id, pct + '%');
 },
 onTaskComplete: function(task) {
 updateRowStatus(task.id, 'Done');
 },
 onQueueRemove: function(task) {
 removeTableRow(task.id);
 }
});

The queue as table rows

The callbacks give you every event; where you render them is your choice. A table fits an admin screen because uploads then sort, align and filter alongside everything else on the page instead of sitting in a control of their own.

Columns that carry state

Name, size and progress are the obvious columns; status is the one that matters. A row stopped at 40% with nothing distinguishing “uploading” from “failed and gave up” is exactly the ambiguity the built-in queue was resolving for you.