Pacman downloads from the mirrors in /etc/pacman.d/mirrorlist in the order they appear, so the first working Server line serves almost every package you install. Arch Linux and Manjaro both keep that file, but they fill it with different tools: Arch uses reflector, rate-mirrors or the web generator on archlinux.org, while Manjaro uses its own pacman-mirrors. The two lists are not interchangeable, because Manjaro mirrors carry Manjaro’s branches and Arch mirrors carry Arch’s repositories.
Below we build a country-based list with each tool, keep it fresh with a systemd timer, and measure whether a local mirror is actually faster. The tests ran from a lab in Kenya in October 2026, on Arch Linux with reflector and rate-mirrors and on a Manjaro container with Manjaro’s own pacman-mirrors, and two of the African mirrors turned out to be the wrong choice.
Pick the tool for your distribution
Each tool answers a slightly different question, and the right one depends on how often you want the list rebuilt:
| Tool | Distribution | How it ranks mirrors | Good for |
|---|---|---|---|
| archlinux.org/mirrorlist | Arch | Mirror score from the status page | A one-off list without installing anything |
reflector | Arch | Sync age, download rate, score or delay | A list rebuilt weekly by a systemd timer |
rate-mirrors | Arch (and others) | Measured speed, hopping to nearby countries | Finding the fastest mirrors from where you are |
pacman-mirrors | Manjaro | Response time, filtered by branch sync state | Every Manjaro system, it ships preinstalled |
Older guides, including the first version of this page, say the pacman-mirrorlist package installs pacman-mirrors. It does not. On Arch, pacman-mirrorlist only owns /etc/pacman.d/mirrorlist, and pacman-mirrors exists only in Manjaro’s repositories. Before you change anything, back up the file you have now:
sudo cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak
Use the Arch mirrorlist generator
The quickest way to get a country list is the generator on archlinux.org, which builds the file from the same status data reflector uses. Ask it for HTTPS mirrors in your countries with recent sync status. Two country= values give you a fallback outside your own country:
curl -s "https://archlinux.org/mirrorlist/?country=KE&country=ZA&protocol=https&ip_version=4&use_mirror_status=on" | head -14
Every server comes back commented out, so the file does nothing until you edit it:
##
## Arch Linux repository mirrorlist
## Filtered by mirror score from mirror status page
## Generated on 2026-10-16
##
## South Africa
#Server = https://archlinux.za.mirror.allworldit.com/archlinux/$repo/os/$arch
## South Africa
#Server = https://za.mirrors.cicku.me/archlinux/$repo/os/$arch
## South Africa
#Server = https://archlinux.mirror.net.za/$repo/os/$arch
## South Africa
#Server = https://johannesburg.mirror.pkgbuild.com/$repo/os/$arch
The list is ordered by score, not by country, so the four South African mirrors came ahead of Kenya’s single one. Uncomment every line with sed into a temporary file, check that it has servers, then copy it into place:
curl -s "https://archlinux.org/mirrorlist/?country=KE&country=ZA&protocol=https&ip_version=4&use_mirror_status=on" | sed 's/^#Server/Server/' > /tmp/mirrorlist
grep -c '^Server' /tmp/mirrorlist
sudo cp /tmp/mirrorlist /etc/pacman.d/mirrorlist
Our query returned 5 servers. If the count is 0, the download failed, so leave the old file in place. If a bad list ever gets through, sudo cp /etc/pacman.d/mirrorlist.bak /etc/pacman.d/mirrorlist puts the backup back.
Use the two-letter codes from the generator’s country list, such as DE or US. Germany alone returned 54 servers when we asked, so a single large country is enough without a second one. The same thing applies to the file the pacman-mirrorlist package ships: on our VM its mirrorlist.pacnew had 425 servers grouped under 70 countries plus a Worldwide section, every one of them commented out. After a pacman-mirrorlist upgrade you will find that .pacnew next to your own file, and it is safe to ignore once you generate the list with one of the tools here.
Rank mirrors by country with reflector
reflector does the same filtering locally and can sort by measured download rate instead of the status page’s score. Install it from the extra repository:
sudo pacman -S reflector
Country names with spaces need quotes on the command line, and --list-countries shows the exact spelling and how many mirrors each country has. Kenya had 3 entries, South Africa 11 and Germany 150, counting every protocol. Then build the list:
sudo reflector --country Kenya,"South Africa" --protocol https --age 12 --sort rate --save /etc/pacman.d/mirrorlist
It finished in 6.5 seconds, including the time spent rating each mirror’s download speed. The saved file records the exact command at the top, which helps when you come back to it months later:
################################################################################
################# Arch Linux mirrorlist generated by Reflector #################
################################################################################
# With: reflector --country 'Kenya,South Africa' --protocol https --age 12 --sort rate --save /etc/pacman.d/mirrorlist
# When: 2026-10-16 21:43:01 UTC
# From: https://archlinux.org/mirrors/status/json/
# Retrieved: 2026-10-16 21:42:56 UTC
# Last Check: 2026-10-16 21:36:25 UTC
Server = https://archlinux.mirror.liquidtelecom.com/$repo/os/$arch
Server = https://johannesburg.mirror.pkgbuild.com/$repo/os/$arch
Server = https://za.mirrors.cicku.me/archlinux/$repo/os/$arch
Server = https://archlinux.za.mirror.allworldit.com/archlinux/$repo/os/$arch
Server = https://archlinux.mirror.net.za/$repo/os/$arch
The options that matter most:
--protocol httpsdrops plain HTTP and rsync mirrors--age 12keeps only mirrors that synced in the last 12 hours--delay 1keeps only mirrors whose reported sync delay is an hour or less--latest 10takes the 10 most recently synced before sorting--sort rateorders the result by measured download speed
A fast mirror can still be behind
The Kenyan mirror topped the list because it was the closest, but it was the wrong first choice that evening. When we fetched the current kernel package from it, it returned a 404. Its core.db still listed linux-7.2.9.arch1-1 while the main CDN already served 7.2.10, even though the mirror had synced 37 minutes earlier. The status page reported a sync delay of 1732 seconds for it, against 255 seconds for the Johannesburg mirror. So --age 12 and even --delay 1 let it through.
This only bites when your package database and your download come from different mirrors, for example after you switched lists without a pacman -Syy, because pacman then asks the first mirror for a file it does not have yet. pacman moves on to the next Server line after a 404, so you lose time rather than the install. Refresh the databases every time you replace the list, and keep more than one country in it, so there is always a second mirror that’s current.
Refresh the list automatically
reflector ships a systemd service and a weekly timer that read their options from /etc/xdg/reflector/reflector.conf. Edit that file:
sudo vim /etc/xdg/reflector/reflector.conf
Replace its contents with your options, one per line. Use the two-letter country codes here:
--save /etc/pacman.d/mirrorlist
--protocol https
--country KE,ZA,DE
--delay 1
--latest 10
--sort rate
Our first version had --country Kenya,South Africa,Germany, and the service failed with reflector: error: unrecognized arguments: Africa,Germany. reflector parses each line like a shell command, so an unquoted space splits the value. Quoting it as --country 'Kenya,South Africa' worked when we retried, and codes avoid the question entirely. Test the service once, then enable the timer:
sudo systemctl start reflector.service
sudo systemctl enable --now reflector.timer
reflector.service is a oneshot unit, so it shows inactive with Result=success after a good run, not active. The timer runs weekly with RandomizedDelaySec=12h, and Persistent=true catches up on a missed run after the machine was off. Our next run was scheduled two days out:

With --latest 10 in the config, the Kenyan mirror dropped out entirely, because it was not among the 10 most recently synced. Johannesburg and a mix of South African and German mirrors took its place. Finish with a database refresh so pacman uses the new list straight away:
sudo pacman -Syy
Find the fastest mirrors with rate-mirrors
rate-mirrors measures speed instead of trusting status data, and it starts from one country and hops to its neighbours on the internet backbone. It is in the extra repository and runs as a normal user:
sudo pacman -S rate-mirrors
The default entry country is the US, which is a poor starting point outside North America. Our first run from Kenya started in the US, queued the UK, France and Indonesia as its neighbours, and put a Swedish mirror first. Set --entry-country to your own country, save to a temporary file, then copy it into place:
rate-mirrors --protocol https --entry-country KE --save /tmp/mirrorlist arch
sudo cp /tmp/mirrorlist /etc/pacman.d/mirrorlist
It took 33 seconds, and the list started with the local and regional mirrors:
Server = https://archlinux.mirror.liquidtelecom.com/$repo/os/$arch
Server = https://mirror.osbeck.com/archlinux/$repo/os/$arch
Server = https://johannesburg.mirror.pkgbuild.com/$repo/os/$arch
Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch
Server = https://mirror.hafeezh.com/archlinux/$repo/os/$arch
rate-mirrors put the lagging Kenyan mirror first too, because by default it ranks on speed. Its arch subcommand accepts --max-delay in seconds, the counterpart of reflector’s --delay, and the option goes after arch, as in rate-mirrors --save /tmp/mirrorlist arch --max-delay 3600. If you settle on rate-mirrors or the web generator, disable reflector.timer with sudo systemctl disable --now reflector.timer, or its weekly run replaces your list. rate-mirrors is the better tool for a machine on a slow or distant link, and reflector with --delay is the better one for a server that you want to stay on current mirrors without watching it.
Check whether a nearby mirror is faster
Country lists exist to make downloads faster, so we timed one. We downloaded the 169 MB kernel package twice from each mirror at the top of the lists above, over the same connection:
| Mirror | Location | Run 1 | Run 2 |
|---|---|---|---|
johannesburg.mirror.pkgbuild.com | South Africa | 10.6 s | 10.8 s |
geo.mirror.pkgbuild.com | GeoDNS CDN | 10.4 s | 10.9 s |
fastly.mirror.pkgbuild.com | Fastly CDN | 11.1 s | 11.7 s |
mirror.osbeck.com | Sweden | 11.3 s | 10.1 s |
archlinux.mirror.liquidtelecom.com | Kenya | 404 | 404 |
Every working mirror ran at 14.4 to 16.8 MB/s, which is the limit of the lab’s own connection, so on our line the country made no measurable difference. The two pkgbuild.com CDN entries are what a fresh Arch install already uses. A country list pays off when the CDN routes you somewhere slow or your link is faster than the mirror, so time a download before and after you change it, rather than assuming the nearest mirror wins.
Generate the mirrorlist on Manjaro
Manjaro’s pacman-mirrors comes preinstalled and writes its own mirrorlist. Our container’s list pointed at a single US mirror. --country-list prints the 45 countries Manjaro has mirrors in, with underscores instead of spaces, and --country builds the list:
sudo pacman-mirrors --country Kenya,South_Africa
It answers in about 3 seconds and writes the two mirrors it found:
::INFO Downloading mirrors from Manjaro
::INFO => Mirror pool: https://repo.manjaro.org/mirrors.json
::INFO => Mirror status: https://repo.manjaro.org/status.json
::INFO User generated mirror list
::------------------------------------------------------------
::INFO Custom mirror file saved: /var/lib/pacman-mirrors/custom-mirrors.json
::INFO Using custom mirror file
::INFO Querying mirrors - This may take some time
..... Kenya : https://manjaro.mirror.liquidtelecom.com/ 0.081
..... South_Africa : https://mirror.dimensiondata.com/mirrors/manjaro.org/ 0.548
::INFO Writing mirror list
::Kenya : https://manjaro.mirror.liquidtelecom.com/stable/$repo/$arch
::South_Africa : https://mirror.dimensiondata.com/mirrors/manjaro.org/stable/$r
::INFO Mirror list generated and saved to: /etc/pacman.d/mirrorlist
::INFO To reset custom mirrorlist 'sudo pacman-mirrors -id'
::INFO To remove custom config run 'sudo pacman-mirrors -c all'
Those two mirrors were not usable. Manjaro’s status file marks each mirror as synced or not for every branch, and both African mirrors showed [0, 0, 0] for stable, testing and unstable, so neither was up to date on any branch. --country writes the mirrors you name and does not check that. Your updates then come from a stale copy without any warning. Check a mirror’s state in the status file yourself:
curl -s https://repo.manjaro.org/status.json | python3 -c "import json,sys; [print(m['url'], m['branches'], m['last_sync']) for m in json.load(sys.stdin) if 'liquidtelecom' in m['url']]"
The three numbers are stable, testing and unstable, 1 means synced, and the last field is hours and minutes since the mirror last synced:
https://manjaro.mirror.liquidtelecom.com/ [0, 0, 0] 07:13
--fasttrack avoids the problem, because it only considers mirrors that are up to date on your branch and then ranks them by response time. Ask for five, and drop the custom country list first so it can choose from all of them. fasttrack doesn’t promise the five fastest of all mirrors, only five responsive ones that are current:
sudo pacman-mirrors --country all
sudo pacman-mirrors --fasttrack 5
--country all took 1 minute 42 seconds because it queried every mirror, and the fasttrack run took 11 seconds. From Kenya it picked France, the US and Japan rather than anything in Africa, which is the honest answer on a day when the local mirrors are behind:
## Country : France
Server = https://mirror.bakertelekom.fr/manjaro/stable/$repo/$arch
## Country : France
Server = https://mirrors.eric.ovh/manjaro/stable/$repo/$arch
## Country : United_States
Server = https://mirrors.gigenet.com/manjaro/stable/$repo/$arch
## Country : United_States
Server = https://ohioix.mm.fcix.net/manjaro/stable/$repo/$arch
## Country : Japan
Server = https://ftp.yz.yamagata-u.ac.jp/pub/linux/manjaro/stable/$repo/$arch
pacman-mirrors --get-branch printed stable, which is the branch the URLs above point at. After any mirror change on Manjaro, refresh the databases and upgrade in one step, so you never end up with new databases and old packages:
sudo pacman -Syyu
On Arch, a fresh install’s CDN entries are already fast for most people, and reflector with --delay 1, two or three countries and the weekly timer keeps a hand-picked list honest without any upkeep. On Manjaro, use --fasttrack instead of --country, because it’s the only option that checks the mirrors are current. If you are still setting up the machine, mirrors are one item on our Arch Linux post-install checklist. For the rest of the package commands, see our pacman cheat sheet, and if pacman refuses to start after an interrupted sync, the db.lck guide covers the lock file. Our Manjaro vs EndeavourOS comparison covers how the two distributions differ in where their packages come from.