aria2: A Multi-Protocol Download Manager
aria2 is a command-line download manager that pulls a single file from HTTP(S), FTP, SFTP, BitTorrent, and Metalink sources at once, splitting it into segments to use more of your bandwidth. That multi-protocol design is the real selling point, since most CLI downloaders handle one protocol per run. It's worth adopting once you're comfortable driving a tool by flags and RPC instead of a GUI, less so for a one-off download.
What is aria2?
aria2 is a lightweight, cross-platform command-line utility for downloading files over HTTP(S), FTP, SFTP, BitTorrent, and Metalink. It can fetch the same file from multiple sources and protocols in parallel, for example pulling a file over HTTP while also seeding it into a BitTorrent swarm. Written in C++ and released under the GPL-2.0 license, it runs as a plain CLI binary or as a background daemon controlled over JSON-RPC or XML-RPC.
Key features of aria2
- โDownloads a single file across HTTP(S), FTP, SFTP, BitTorrent, and Metalink simultaneously, combining bandwidth from every source.
- โSegmented downloading splits a file into pieces and fetches them in parallel instead of one linear stream.
- โFull BitTorrent stack: DHT, PEX, the Fast extension, MSE/PSE encryption, multi-tracker and UDP-tracker support, plus local peer discovery.
- โMetalink version 3 and version 4 (RFC 5854) support, including Metalink/HTTP (RFC 6249) and automatic chunk-checksum validation.
- โJSON-RPC over HTTP and WebSocket, plus an XML-RPC interface, for driving aria2 as a daemon from another program.
- โLoads cookies from Firefox3, Chromium, and Netscape-format cookie files, plus custom HTTP headers and proxy support via the standard *_proxy environment variables.
- โIPv6 with Happy Eyeballs, a disk cache to cut disk activity, and configurable upload/download speed throttling.
When to use aria2
- โขDownloading a single large file faster by pulling it from several mirrors or protocols at once instead of one HTTP connection.
- โขRunning unattended downloads on a headless server or NAS, driven as a daemon over JSON-RPC instead of a desktop GUI.
- โขFetching Metalink packages where chunk checksums need to be verified automatically as the file comes down.
- โขHandling BitTorrent downloads from the same script or pipeline that also grabs plain HTTP/FTP files, without switching tools.
Installing aria2
The aria2 README documents building from source, not a package-manager install; if your distro ships an aria2 package, that path isn't covered here. To build it yourself: clone the repository with `git clone https://github.com/aria2/aria2.git`, then run `./configure` followed by `make`. You'll need a C++11-capable compiler plus development packages for the features you want: libgnutls-dev (or libssl-dev) for HTTPS, libssh2-1-dev for SFTP, libxml2-dev (or libexpat1-dev) for Metalink, libc-ares-dev for async DNS, and libsqlite3-dev for browser cookie support. After `make`, the binary lands at `src/aria2c`. For a statically linked build, configure with `ARIA2_STATIC=yes`; if you cloned from git rather than a source tarball, you also need autoconf, automake, and libtool, and must run `autoreconf -i` first.
Basic command line usage
The compiled binary is `aria2c`, invoked with a URI, or a text file or stdin full of URIs, plus flags. The README documents individual flags rather than a full walkthrough, but it calls out `-d` for the destination directory, `-o` for the output filename, and `-n` to turn off netrc support. HTTPS certificate handling is a flag too: pass a CA bundle with `--ca-certificate`, or drop verification entirely with `--check-certificate=false` if you don't have one installed. Beyond ad hoc runs, aria2 can run as a background daemon and be driven through its JSON-RPC or XML-RPC interface instead of re-invoking the CLI for every download; the exact daemon/RPC flags aren't clearly documented in the material available here.
Advantages of aria2
- โGenuinely multi-protocol: one tool covers HTTP(S), FTP, SFTP, BitTorrent, and Metalink instead of stitching wget, curl, and a torrent client together.
- โSegmented, multi-source downloading can use more of your bandwidth than a single HTTP connection.
- โJSON-RPC/XML-RPC daemon mode makes it easy to control from another program, not just a terminal.
- โMetalink chunk-checksum validation catches corrupted data mid-download rather than after the fact.
- โIPv6 with Happy Eyeballs and a configurable disk cache are built in, not bolted on.
Limitations and drawbacks
- โณNo official GUI ships with aria2. Everything runs through flags, a config file, or RPC, which is a real learning curve if you've only used browser downloaders.
- โณPackage-manager installation isn't documented in the README; building from source means installing a C++11 toolchain and the right dependency set for whichever protocols you need.
- โณThe README caps the maximum number of BitTorrent peers at 55, which can limit swarm throughput compared to a dedicated torrent client tuned for large swarms.
- โณaria2 doesn't configure port-forwarding automatically; you have to open ports on your router or firewall yourself for BitTorrent to work well.
Alternatives to aria2
Frequently asked questions
aria2 is free and open source, distributed under the GPL-2.0 license, with its source code hosted on GitHub. You can clone the repository and build it yourself with a C++11 compiler and the usual autoconf/configure/make toolchain.
aria2 supports HTTP(S), FTP, SFTP, BitTorrent, and Metalink, and it can combine several of them for a single download, for example fetching a file over HTTP while also pulling pieces from a BitTorrent swarm.
aria2 can pull the same file from multiple sources and protocols at once, splitting it into segments to use more of the available bandwidth. It can even download over HTTP(S)/FTP/SFTP and BitTorrent for the same file at the same time.
aria2 can run as a background daemon process and be controlled remotely over JSON-RPC, available over both HTTP and WebSocket, or over XML-RPC, instead of driving it through one-off CLI commands. That's what lets other programs queue and monitor aria2 downloads programmatically.
aria2 supports mainline-compatible DHT for trackerless torrents and PEX (peer exchange), alongside the BitTorrent Fast extension, multi-tracker support, and UDP trackers. The DHT routing table is saved to disk so it doesn't rebuild on every restart.
wget and curl each fetch a file over one connection and one protocol per request. aria2 downloads the same file from multiple sources and protocols simultaneously, including BitTorrent and Metalink, which wget and curl don't handle at all.
The problem it solves
Grabbing a large file from a single mirror over one HTTP connection wastes available bandwidth, and if that mirror is slow you're stuck. Juggling wget for HTTP, a separate SFTP client, and a torrent app for BitTorrent means three tools and three command sets for one job. aria2 solves that by letting a single command-line utility pull one file from several protocols and sources at once, including mixing HTTP/FTP/SFTP with BitTorrent on the same download, and by exposing that same capability over RPC so it can be automated instead of driven by hand every time.
Who should try it โ and who should skip
Try aria2 if you script downloads, run headless servers, or need one tool that handles HTTP, FTP, SFTP, BitTorrent, and Metalink without switching between wget, curl, and a torrent client, especially if you're comfortable driving it by flags, a config file, or JSON-RPC. Skip it if you just want to click a link and watch a progress bar: there's no bundled GUI, and Motrix or your browser's built-in downloader will get you there with far less setup.
Related repositories
Is aria2 worth your time?
ChatGPT, Claude and Perplexity can all read this page. Ask one of them what it makes of aria2.
