Measured comparison

aria2 vs wget vs curl: measured, not guessed

All three download files from the command line, but they are built for different jobs. We ran them side by side on the same machine and the same test servers, and wrote down every number.

Last updated: Tested with aria2 1.37.0

The short answer

aria2

Big files, slow servers, many downloads, torrents

  • Up to 10× faster when a server limits each connection
  • BitTorrent, Metalink and mirrors built in
  • A download server you control over RPC

wget

Simple downloads and copying whole websites

  • Smallest memory use in our test
  • Recursive mirroring with -r
  • Preinstalled almost everywhere

curl

APIs, uploads and scripting any protocol

  • 25 protocols in the build we tested
  • Uploads, forms and full HTTP control
  • Remember -L for redirects

One big file from a server that limits each connection

Mirrors and file hosts often cap the speed of a single connection. Our test server allowed 2 MiB/s per connection on a 24 MiB/s line. File size: 50 MB.

Time to download 50 MB (lower is faster)Server limit 2 MiB/s per connection, 24 MiB/s line. Measured 2026-10-27.
Show as a table
ToolCommandSeconds
wget24.0wget URL · 24.0 s
curl24.0curl -O URL · 24.0 s
aria2, 1 connection24.1aria2c URL · 24.1 s
aria2 -x16 -s1612.2aria2c -x16 -s16 URL · 12.2 s
aria2 -x16 -s16 -k1M2.3aria2c -x16 -s16 -k1M URL · 2.3 s

With one connection all three take 24 seconds; the server decides. aria2 with 16 connections took 12.2 seconds, because its default -k 20M splits a 50 MB file into only 2 pieces. With -k1M it used all 16 connections and finished in 2.3 seconds.

20 files at once

Twenty 2 MB files from a server that adds 80 ms of latency per request and caps each connection at 2 MiB/s. wget and plain curl fetch one file after another; curl --parallel and aria2 fetch several at a time.

Time to download 20 files (lower is faster)20 × 2 MB, 80 ms latency, 2 MiB/s per connection. Measured 2026-10-27.
Show as a table
ToolCommandSeconds
wget -i21.8wget -i urls.txt · 21.8 s
curl, one by one21.9xargs -n1 curl -O < urls.txt · 21.9 s
curl --parallel5.5curl --parallel --parallel-max 5 -O … · 5.5 s
aria2c -i4.5aria2c -i urls.txt · 4.5 s
aria2c -i -j16 -x42.0aria2c -i urls.txt -j16 -x4 -k1M · 2.0 s

aria2 runs 5 downloads at a time by default, a bit faster than curl --parallel with the same limit. With -j16 -x4 it reached the line limit: 2.0 seconds against 21.8 for wget. All five runs produced identical files.

When the server does not limit connections

On a local server with no limit, all three downloaded the 50 MB file in under a second, and wget and curl were a little quicker than aria2, which first reserves disk space for the file. If one connection already fills your line, extra connections cannot add speed.

Memory

Measured during the same HTTP download. "Own memory" is what the program allocated for itself; the total adds shared system libraries.

ToolOwn memoryTotal (RSS)
wget 0.7 MiB 4.7 MiB
curl 1.5 MiB 10.4 MiB
aria2 4.5 MiB 17.1 MiB

wget is the leanest. aria2 needs more because it keeps a download engine, a disk cache and the BitTorrent code ready, but 4.5 MiB is still small: the official aria2 figures are 4–9 MiB.

Resuming an interrupted download

We stopped each tool halfway through the throttled download and started it again. All three finished with a correct file: wget with -c, curl with -C -, aria2 with -c. aria2 even resumed without -c, because its .aria2 control file records which pieces are done. Note that aria2 reserves the full file size first, so a partial file already shows its final size.

Redirects: the curl trap

Many download links redirect to a mirror. wget and aria2 follow redirects by default. curl does not: without -L it saved an empty file and still exited with code 0, so a script would not notice. Always use curl -L for downloads.

What each tool can do

Checked against the documentation of each tool and, where possible, by running it.

aria2wgetcurl
One file over many connections Yes No No
One file from several mirrors at once Yes No No
BitTorrent and magnet links Yes No No
Metalink Yes Some builds No
Resume an interrupted download Yes Yes Yes
Remote control (RPC) Yes No No
Mirror a whole website No Yes No
Upload, 25+ protocols, APIs No No Yes
Preinstalled on most Linux systems No Yes Yes

The same task in all three

We ran every row except the last two against our test server, with our own values for the numbers; each produced the correct file.

Taskwgetcurlaria2c
Download a file wget URLcurl -O URLaria2c URL
Save under another name wget -O name.iso URLcurl -o name.iso URLaria2c -o name.iso URL
Save into a folder wget -P dir URLcurl --output-dir dir -O URLaria2c -d dir URL
Resume wget -c URLcurl -C - -O URLaria2c -c URL
Limit the speed to 1 MiB/s wget --limit-rate=1m URLcurl --limit-rate 1M -O URLaria2c --max-download-limit=1M URL
Retry up to 10 times wget --tries=10 URLcurl --retry 10 -O URLaria2c --max-tries=10 URL
Send a header wget --header="X-Key: 1" URLcurl -H "X-Key: 1" -O URLaria2c --header="X-Key: 1" URL
Set the user agent wget -U "Agent/1" URLcurl -A "Agent/1" -O URLaria2c -U "Agent/1" URL
HTTP login wget --user=U --password=P URLcurl -u U:P -O URLaria2c --http-user=U --http-passwd=P URL
Download a list of URLs wget -i urls.txtxargs -n1 curl -O < urls.txtaria2c -i urls.txt
Skip the certificate check wget --no-check-certificate URLcurl -k -O URLaria2c --check-certificate=false URL
Follow redirects wget URLcurl -L -O URLaria2c URL
One file over 16 connections Not possibleNot possiblearia2c -x16 -s16 -k1M URL
Download a torrent Not possibleNot possiblearia2c file.torrent
Copy a website wget -r -np URLNot possibleNot possible

Which one should you use?

  • A large file from a slow or busy serveraria2c -x16 -s16 -k1M
  • Hundreds of files from a listaria2c -i urls.txt -j16
  • A torrent, magnet link or Metalinkaria2c
  • A download queue you control from a browser or phonearia2c --enable-rpc with a WebUI
  • A whole website or directory treewget -r -np
  • An API call, an upload or a formcurl
  • A quick one-off download on a server you just logged intowget or curl -L, already installed

Questions

Is aria2 always faster than wget?
No. aria2 is faster when the server limits each connection or when many files download at once: up to 10× in our tests. When one connection already fills your line, wget and curl are just as fast, and were slightly quicker on our unlimited local server.
Can curl download one file with several connections?
Not by itself. curl --parallel downloads several URLs at the same time, but each file still uses one connection. aria2 splits one file into pieces and fetches them in parallel.
Can I use aria2 instead of wget in scripts?
For downloads, yes: aria2c -o name -d dir URL covers what wget -O and -P do, and the exit code tells the script what went wrong. aria2 cannot copy whole websites; keep wget for that.
Which uses less memory?
wget: 0.7 MiB of its own memory in our test, curl 1.5 MiB, aria2 4.5 MiB. All three are small enough for a Raspberry Pi or a router.
Does wget support BitTorrent?
No. Neither wget nor curl downloads torrents or magnet links. aria2 is a full BitTorrent client as well as an HTTP and FTP downloader.

Related