Works with any backend npm install Zero dependencies

Custom Queue Renderer

Use onQueueRender to completely replace the built-in queue HTML with your own.

(function() {
 new MultipleUpload('#demo', {
 uploadUrl: '/api/upload',
 multiple: true,
 autoUpload: false,
 onQueueRender: function(tasks, queueEl) {
 queueEl.innerHTML = '' +
 tasks.map(function(t) {
 return '';
 }).join('') +
 '
FileSizeStatus
' + t.fileName + '' + MultipleUpload.formatSize(t.fileSize) + '' + t.status + '
'; } }); })();

Replacing the queue UI entirely

onQueueRender hands rendering to you, so the queue can be rows of an existing table, cards in a grid, or entries in a list your design system already defines — without overriding the component's CSS or fighting its markup.

What you are now responsible for

Everything the built-in queue did: progress, the difference between complete and failed, a retry affordance, a remove control, and the reason a file was rejected. Those are easy to leave out and expensive to omit — a custom queue that cannot show a failure turns a recoverable problem into a silent one.