Works with any backend npm install Zero dependencies

Chunk Upload Progress

Track per-chunk and overall progress with live stats.

Chunks done0
Speed-
ETA-
Progress0%
new MultipleUpload('#demo', {
 chunked: true,
 chunkSize: '1MB',
 chunkConcurrency: 2,
 onChunkComplete: function(file, idx, total) { ... },
 onTaskProgress: function(task) {
 console.log(task.speed, task.eta, task.progress);
 }
});

Progress at chunk resolution

onChunkComplete defaults to null and fires as each chunk is acknowledged, which is a much better signal than overall percentage for a large file: it tells you the transfer is genuinely advancing rather than sitting in a stalled request.

Why the numbers can look odd

With chunkConcurrency above 1, chunks complete out of order, so acknowledgement count is not the same as contiguous bytes received. Treat it as a liveness signal and a count, and take the percentage from the task's own progress, which accounts for this.