1. Disclaimer

This program comes with no warranty. You must use this program at your own risk.

2. Introduction

aria2 is a utility for downloading files. The supported protocols are HTTP(S), FTP, BitTorrent, and Metalink. aria2 can download a file from multiple sources/protocols and tries to utilize your maximum download bandwidth. It supports downloading a file from HTTP(S)/FTP and BitTorrent at the same time, while the data downloaded from HTTP(S)/FTP is uploaded to the BitTorrent swarm. Using Metalink's chunk checksums, aria2 automatically validates chunks of data while downloading a file like BitTorrent.

Here is a list of features.

3. Dependency

Table: External Library Dependency
features dependency
HTTPS GnuTLS or OpenSSL
BitTorrent GnuTLS+Libgcrypt or OpenSSL
Metalink libxml2 or Expat.
Checksum GnuTLS+Libgcrypt or OpenSSL
gzip, deflate in HTTP zlib
Async DNS C-Ares
Firefox3 cookie libsqlite3
Note

GNU TLS has precedence over OpenSSL if both libraries are installed. If you prefer OpenSSL, run configure with --without-gnutls.

Note

libxml2 has precedence over Expat if both libraries are installed. If you prefer Expat, run configure with --without-libxml2.

You can disable BitTorrent, Metalink support by providing --disable-bittorrent, --disable-metalink respectively to configure script.

In order to enable async DNS support, you need c-ares.

4. How to build

In order to build aria2 from the source package, you need following development packages(package name may vary depending on the distribution you use):

You can use libssl-dev instead of libgnutls-dev,libgpg-error-dev,libgcrypt-dev:

You can use libexpat1-dev instead of libxml2-dev:

The quickest way to build aria2 is just type following commands:

$ ./configure
$ make

The configure script checks available libraries and enables the features as much as possible because all the features are enabled by default.

Since 1.1.0, aria2 checks the certificate of HTTPS servers by default. If you build with HTTPS support, I recommend to supply the path to the CA bundle file. For example, in Debian the path to CA bundle file is /etc/ssl/certs/ca-certificates.crt (in ca-certificates package). This may vary depending on your distribution. You can give it to configure script using --with-ca-bundle option:

$ ./configure --with-ca-bundle='/etc/ssl/certs/ca-certificates.crt'
$ make

Without --with-ca-bundle option, you will encounter the error when accessing HTTPS servers because the certificate cannot be verified without CA bundle. In such case, you can specify the CA bundle file using aria2's --ca-certificate option. If you don't have CA bundle file installed, then the last resort is disable the certificate validation using --check-certificate=false.

The executable is aria2c in src directory.

aria2 uses CppUnit for automated unit testing. To run the unit test:

$ make check

5. BitTorrrent

5.1. About filename

The filename of the downloaded file is determined as follows:

single-file mode

If "name" key is present in .torrent file, filename is the value of "name" key. Otherwise, filename is the basename of .torrent file appended by ".file". For example, .torrent file is "test.torrrent", then filename is "test.torrent.file". The directory to store the downloaded file can be specified by -d option.

multi-file mode

The complete directory/file structure mentioned in .torrent file is created. The directory to store the top directory of downloaded files can be specified by -d option.

Before download starts, a complete directory structure is created if needed. By default, aria2 opens at most 100 files mentioned in .torrent file, and directly writes to and reads from these files. The number of files to open simultaneously can be controlled by --bt-max-open-files option.

5.2. DHT

As of release 0.13.0, aria2 supports DHT. By default, the routing table is saved to $HOME/.aria2/dht.dat.

5.3. Other things should be noted

The current implementation supports HTTP(S)/FTP/BitTorrent. The other P2P protocols are ignored.

For checksum verification, MD5, SHA1, and SHA256 are supported. If multiple hash algorithms are provided, aria2 uses SHA1. If whole file checksum verification fails, aria2 doesn't retry the download and just exits with non-zero return code.

The supported user preferences are version, language, location, protocol and os.

If chunk checksums are provided in Metalink file, aria2 automatically validates chunks of data during download. This behavior can be turned off by a command-line option.

If signature is included in a Metalink file, aria2 saves it as a file after the completion of the download. The filename is download filename + ".sig". If same file already exists, the signature file is not saved.

7. netrc

netrc support is enabled by default for HTTP(S)/FTP. To disable netrc support, specify -n command-line option. Your .netrc file should have correct permissions(600).

8. References