Skip to content
Nawid3333Public

About

Download one file from several mirrors at once, after checking they serve the same file. Continues Firefox and aria2 downloads. WinUI 3 app + terminal, for Windows.

Topics

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

MirrorDL logo

MirrorDL

Download one file from several mirrors at once, after checking that they all serve the same file.

CI CodeQL Latest release License: GPL-3.0

MirrorDL can also continue unfinished downloads that Firefox or aria2 left behind. It runs on Windows 10 and 11, as a window app and as a terminal program.

MirrorDL downloading the Linux kernel from four mirrors at once; a fifth link to another version is skipped

Features

  • All links at once. Each link gets several connections. Faster links keep taking over work from slower ones until the end.

  • Finds the best number of connections by itself. It adds connections to a link as long as they make the whole download faster, and stops where the server or your internet line is the limit, at most 16 per link. Nothing to set.

  • Checks the links first. Links with a different size are skipped. MirrorDL also compares 64 KB pieces from several places in the file across all links and skips links whose content differs, so you never get a file stitched together from two different versions.

  • Continues unfinished downloads, also ones from other programs:

    • Firefox .part files, including Firefox's random names (setup.Ab3-xY_z.exe.part)
    • aria2 downloads: reads the .aria2 control file to find the missing pieces
    • its own downloads, even after a crash or a power cut
    • several unfinished files of the same download at once, also under other names: it puts together what they hold and downloads only the rest

    Before continuing, it compares what is already on disk with the links. A file that doesn't match is never changed. Continuing reads only the progress file and a few pieces, not the whole file, so even a 50 GB download goes on right away.

  • Verifies the result against a checksum (MD5, SHA-1, SHA-256, SHA-384 or SHA-512) if you paste one with the links.

  • Shows the details: percent, downloaded and remaining size, current and average speed, time spent and left, connections, a line per link, and a map of which parts of the file are done.

  • Copes with real servers: retries dropped connections, uses fewer connections on servers that allow only a few, and saves the progress every 10 seconds and when you pause or close the window.

Download

The window app from the Microsoft Store, which installs it and keeps it up to date:

Get it from Microsoft

or in a terminal: winget install 9P94PN403J5W

Or from the latest release: MirrorDL-win-x64.zip is the window app, mirrordl-terminal-win-x64.zip the terminal program. Unzip and start; nothing gets installed.

They need Windows 10 (1809 or newer) or Windows 11, 64-bit, and the .NET 10 Runtime. The window app brings the Windows App SDK along.

Updates: the Store version gets them from the Store. The window app from the zip tells you when a newer release is out, with a link to it. It asks GitHub once at start and sends nothing else (privacy policy).

Use

Window app

Start MirrorDL.exe, paste the links (one per line), and press Start.

A finished download: the checksum matched and the file was saved

  • Paste a checksum into the same box to have the file checked at the end.
  • Drag links, a folder (where to save) or an unfinished file (to continue it) onto the window.
  • Pause saves the progress. Closing the window during a download does the same. Press Start again later to continue.

MirrorDL.exe --start <links…> fills in the links and starts at once.

Terminal

mirrordl                                      asks you to paste the links
mirrordl "https://a/file.iso" "https://b/file.iso" -o D:\Downloads
mirrordl links.txt
mirrordl "C:\Users\me\Downloads\file.Ab12-xYz.iso.part" "https://a/file.iso"
Option Meaning
-o <folder> where to save (default: Downloads, or next to the unfinished file)
-c <n> at most n connections in total (default: no limit)
-m <n> at most n connections per link (default: 16)

Ctrl+C pauses. Run the same command again to continue.

Continuing downloads from Firefox and aria2

MirrorDL looks in the save folder for an unfinished download of the same file. You can also choose one yourself.

  • Firefox saves name.Ab12-xYz.ext.part and an empty name.ext next to it. MirrorDL continues the .part file and puts the finished file in place of the empty one. Pause the download in Firefox or close Firefox first. Don't cancel it in Firefox: that deletes the .part file.
  • aria2 writes pieces all over the file, so the file size says nothing about how much is done. MirrorDL reads the .aria2 file to find the missing pieces. Stop aria2 first.

A file you choose keeps its name and folder, also when the links give another name. Only a .part file gets its final name once it is done.

If the file you choose is complete already, MirrorDL only checks it: against the links, and against the checksum if you paste one. It doesn't write to it, rename it or move it. That makes it a quick way to check a finished download. If the links can't send parts of the file and you paste no checksum, only its size can be checked, and MirrorDL says so.

Several unfinished files of the same download

Browsers download a file from the start to the end, so of two Firefox .part files of the same download the bigger one already holds everything the smaller one has. aria2 and MirrorDL download pieces all over the file, so their unfinished files can hold different parts. MirrorDL uses them all:

  1. It finds the unfinished files of the download in the save folder, also numbered copies like name(1).ext.part. Files under other names you add yourself (several at once: one per line in Continue, or drop them on the window).
  2. It compares each one with the links. A different file is left as it is.
  3. The one holding the most is continued; what the others hold beyond it is copied into it. Copying on the disk is much faster than downloading.
  4. Only the rest is downloaded. Once the finished file checks out, the other unfinished files go to the Recycle Bin, with their progress files.

What "checks out" means: the download finished with the right size, and the file matches the checksum you pasted, or, without one, the links at every piece compared before. A file is only removed if it was found to be this download, hasn't changed since, and no other program has it open. If anything fails, a download stops, is paused or comes out damaged, nothing is removed.

Only unfinished downloads are removed: .part files, and files with a .aria2 or .mirrordl progress file. Any other file you added stays, since it may be one of your own.

MirrorDL only moves them to the Recycle Bin. Windows deletes a file that doesn't fit in the Recycle Bin for good, without asking, so MirrorDL keeps such a file where it is and tells you. (Should Windows still delete one for good, MirrorDL says so too.) The Recycle Bin of a drive holds a few percent of it at first. For big downloads, make it bigger: right-click it, Properties, Custom size.

A file from aria2 or MirrorDL needs its progress file (.aria2 or .mirrordl) next to it, since only that tells which parts are downloaded. Without it, MirrorDL doesn't use the file.

Limitations

  • Direct download links only (HTTP and HTTPS). Pages that need a login, cookies or a captcha before the download starts won't work.
  • The servers must support range requests to use more than one connection and to resume. For servers that don't, MirrorDL falls back to one connection.

Build

Needs the .NET 10 SDK. Open MirrorDL.slnx in Visual Studio, or:

.\build.ps1

This builds both programs into publish\app and publish\terminal and zips them.

In VS Code (with the recommended extensions it offers): Ctrl+Shift+B builds, F5 starts the window app or the terminal program in the debugger, and Terminal > Run Task has the unit tests, the end-to-end test, the release zips and the Store package.

Project What it is
MirrorDL.Core the downloader: link checks, segmented download, resume formats
MirrorDL.App the window app (WinUI 3)
MirrorDL the terminal program
tests/MirrorDL.Tests unit tests

Tests

dotnet test --project tests/MirrorDL.Tests/MirrorDL.Tests.csproj
pwsh tools/e2e-test.ps1 -Exe MirrorDL/bin/Debug/net10.0/win-x64/mirrordl.exe

The end-to-end test starts local test mirrors (tools/testserver.py, which needs Python) that are slow, drop connections, limit connections, serve another file or ignore range requests, downloads from them, and checks every result by its SHA-256. With aria2 installed, it also continues a download that aria2 started.

Releases

Releases are automatic. Once CI has passed on a push to main, the commit messages since the last release decide, written as Conventional Commits: fix: makes a patch release, feat: a minor one, feat!: a major one, and docs:, test:, ci: and the like release nothing. Neither does any commit that changes nothing that goes into the program (docs, tests, tools, workflows). The release gets the zips, and the Microsoft Store gets the same version (how that is set up). Each release's page shows where it is, GitHub and the Store, and a failing step opens an issue (more).

License

Copyright (C) 2026 Nawid Salehie

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. See LICENSE.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Additional permission under GNU GPL version 3 section 7: If you modify this program, or any covered work, by linking or combining it with the Windows App SDK (or a modified version of that library), containing parts covered by the terms of the Microsoft Software License Terms for the Windows App SDK, the licensors of this program grant you additional permission to convey the resulting work.

About

Download one file from several mirrors at once, after checking they serve the same file. Continues Firefox and aria2 downloads. WinUI 3 app + terminal, for Windows.

Topics

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages