Arch Linux

Yay vs Pacman vs Paru: Which One to Use on Arch Linux

Pacman can’t install a single package from the AUR, and that is the whole answer to most yay vs pacman searches. Pacman handles the official Arch repositories. Yay and paru wrap pacman and add the Arch User Repository on top, so you don’t pick one instead of pacman. You pick one to run alongside it.

Original content from computingforgeeks.com - post 172463

The harder choice is yay vs paru. We built both AUR helpers from source and from their prebuilt -bin packages on the same Arch Linux VM, timed the same commands under all three tools, and pushed paru’s build onto a 2 GB VM to find where it breaks. Two results surprised us: paru-bin installs cleanly but no longer starts, and paru’s own build needs about 3.4 GiB of RAM. If you only want the command list, the pacman and yay cheat sheet covers that. This page is about which tool to run.

Current as of October 2026.

Yay vs pacman vs paru at a glance

Every number below comes from one VM and one test session. The method is in the next section.

pacmanyayparu
Installs fromOfficial repos onlyRepos + AURRepos + AUR
Written inCGoRust
Version tested7.1.013.0.12.1.0
Latest releaseShips with Arch2026-06-192025-07-08
Prebuilt -bin packagen/ayay-bin works, 7.9 s to installparu-bin broken (libalpm.so.15)
Build from sourcen/a27 s, 282 MiB peak RAM3 m 45 s to 4 m 20 s, 3.4 GiB peak RAM
Build deps left installedn/ago, 226 MiBrust + LLVM, 535 MiB
Builds on 2 GB RAMn/aYesNo (OOM), yes with LTO off
-Ss nginx median0.16 s, 39 results1.55 s, 193 results0.87 s, 193 results
AUR install (downgrade)Not supported7.16 s7.29 s
Default before buildingn/aAsks which diffs to showPrints the full PKGBUILD for review
Run with sudoRequired for installs and removalsWarns, half-installs, failsRefuses up front

For most people, yay-bin is the one to install. It is maintained, it installs in seconds, and the binary actually runs. Paru is the better pick if you want PKGBUILD review forced on you, but you will have to build it yourself right now.

How we tested

All three tools ran on a single Proxmox VM: Arch Linux fully upgraded on kernel 7.2.8, 4 vCPU (host CPU type), 4 GB RAM and the 512 MB swapfile our Arch template ships with. Build times are wall clock for makepkg -si under /usr/bin/time -v, with the Go and Cargo caches wiped first, and peak RAM is the max resident set size that tool reports, which is the largest single process in the build (rustc or go), not total system memory. Command timings are the median of five runs each. The AUR install test removed the package and its dependencies between three runs per helper. For the low-memory test we cut the same VM to 2 GB and kept the swap. To build a matching VM, the archinstall walkthrough gets you a base system in a few minutes.

Every build used Arch’s stock /etc/makepkg.conf, which matters later. Its OPTIONS line includes debug and lto.

1. pacman

Pacman is the package manager, and nothing on Arch replaces it. Yay and paru both link against its library, libalpm, and hand every repo transaction back to it. What pacman won’t do is talk to the AUR. Ask it for an AUR package and it says so plainly:

sudo pacman -S yay-bin

The AUR is not one of its repositories, so the target doesn’t exist as far as pacman’s concerned:

error: target not found: yay-bin

You can still use the AUR with pacman alone. You clone the package’s git repo, build it with makepkg, and makepkg calls pacman -U on the result. That is exactly how every AUR helper gets bootstrapped, so you will do it at least once anyway. Install the build tools first:

sudo pacman -S --needed git base-devel

Then clone and build. Here it is yay-bin, which took 7.9 seconds on our VM:

git clone https://aur.archlinux.org/yay-bin.git
cd yay-bin
makepkg -si

Doing that by hand for every AUR package gets old fast. You also lose dependency resolution across AUR packages and an easy upgrade path, since pacman -Syu never checks the AUR for newer versions. Those are the gaps a helper fills. To see what you’ve installed from outside the repos, pacman -Qm lists every foreign package.

“Running makepkg as root is not allowed”

Prefixing makepkg with sudo fails straight away:

==> ERROR: Running makepkg as root is not allowed as it can cause permanent,
catastrophic damage to your system.

Run makepkg as your normal user. It calls sudo itself when it’s time to install, so a fresh install needs a regular sudo user before any AUR work (one of the first Arch post-install steps).

2. yay

Yay has twice paru’s votes on the AUR (2,653 against 1,259), and it is the one still shipping releases. Version 13 landed in June 2026 with a Lua config file and install hooks, and a point release followed two days later. Its default flow asks every question up front, then builds without stopping.

The binary package is the quick route. It’s the yay-bin build from the pacman section above, and it ran first time:

yay and paru versions with pacman -Qm on Arch Linux

Notice the -debug packages in that pacman -Qm list. That is the debug option in the stock makepkg.conf, and makepkg -si installs the debug package alongside the real one.

Building from source takes longer but is not painful. The yay package pulls Go in as a make dependency:

git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si

That build finished in 27 seconds and peaked at 282 MiB of RAM. It also left Go installed (226 MiB) plus a 22.9 MiB yay-debug package. Neither is needed once yay runs, so drop them. The -debug package only exists when debug is in your makepkg.conf, so leave its name out if pacman -Q doesn’t list it, or pacman stops with “target not found”:

sudo pacman -Rns go yay-debug

Pacman freed 249.34 MiB on our VM, and yay still reported in afterwards:

yay v13.0.1 - libalpm v16.0.1

The diff menu, and switching it off with init.lua

Before it builds anything, yay asks which PKGBUILD diffs you want to read:

==> Diffs to show?
==> [N]one [A]ll [Ab]ort [I]nstalled [No]tInstalled or (1 2 3, 1-3, ^4)

Answer A on anything new to you. A PKGBUILD is a shell script that runs on your machine, and the AUR does not vet it. If you’d rather skip the prompt for scripted installs, --answerdiff None --answerclean None does it per command. Yay 13 also reads a Lua file at ~/.config/yay/init.lua. One line turns the diff menu off for good:

mkdir -p ~/.config/yay
echo 'yay.opt.diff_menu = false' | tee ~/.config/yay/init.lua

With that file in place, our next yay -S downgrade skipped the diff prompt entirely. It still asked about clean builds, because the build files were already cached. The yay Lua manual lists the other options and the hook events v13 added.

“Avoid running yay as root/sudo”

Yay prints that warning when you run sudo yay -S downgrade, but it does not stop. Makepkg refused to run as root on the first step (downloading sources), and yay carried on anyway. It installed the repo dependencies (fzf and pacman-contrib) as root, hit the same makepkg check a second time, and gave up:

==> ERROR: Running makepkg as root is not allowed as it can cause permanent,
catastrophic damage to your system.
 -> error making: downgrade-exit status 10
 -> Failed to install the following packages. Manual intervention is required:
downgrade - exit status 10

The AUR package never installed, but its two dependencies stayed behind, marked as installed for another package. Rerun yay as your own user, and clean up orphans with yay’s own command:

yay -Yc

On our VM it found both strays plus the Rust toolchain left from a paru build, 540.29 MiB in total:

Packages (8) compiler-rt-23.1.1-1  fzf-0.74.4-1  libgit2-1:1.9.7-1  lld-23.1.1-1  llhttp-9.3.1-1  llvm-libs-23.1.1-1  pacman-contrib-1.13.1-1  rust-1:1.98.1-2

Total Removed Size:  540.29 MiB

Where yay falls short: it’s the slowest of the three at searching (1.55 s for -Ss nginx, against 0.87 s for paru) and uses the most memory (about 77 MiB peak, against paru’s 67 MiB). You will never notice either at a terminal. Yay’s -Gc also just downloads the PKGBUILD, while paru’s prints the AUR comments. For a longer walk through yay’s flags, see the yay install guide.

3. paru

Paru comes from Morganamilo, yay’s second-biggest contributor (730 commits to yay), and it is the stricter of the two. It shows you the PKGBUILD before it builds, refuses to run as root, and has extras yay lacks, like AUR comments in the terminal and a --chroot build mode. The catch is maintenance pace. The last paru release is 2.1.0 from July 2025, and the last commit to the repo was a batch of translation merges in January 2026.

That gap is why the prebuilt package is broken. In late 2025, pacman bumped libalpm’s shared-library version to 16. The source package was rebuilt in December 2025, but paru-bin is still the July 2025 binary linked against libalpm.so.15. Pacman installs it without complaint, because the package only declares libalpm.so>=14. Then it fails the first time you run it:

paru-bin libalpm.so.15 shared library error on Arch Linux

“error while loading shared libraries: libalpm.so.15”

If you see that line, remove paru-bin and build paru from source instead, which links against the libalpm your system has:

sudo pacman -Rns paru-bin paru-bin-debug

The source build uses the same three steps as yay:

git clone https://aur.archlinux.org/paru.git
cd paru
makepkg -si

Expect it to take a while. Makepkg pulled 535 MiB of build dependencies (Rust, LLVM libraries, lld, compiler-rt), and Cargo compiled 219 crates. Our two runs took 3 m 45 s and 4 m 20 s, and the slower one included a stalled crate download. Both peaked at about 3.4 GiB, because paru’s release profile builds with full LTO and a single codegen unit. Once it is done, it reports the right library:

paru v2.1.0 - libalpm v16.0.1

Now remove the toolchain and the debug package (same caveat: skip paru-debug if it isn’t installed), which freed 535.93 MiB here:

sudo pacman -Rns rust paru-debug

paru build killed on a 2 GB VM: “could not compile paru (bin “paru”)”

With 2 GB of RAM and 512 MB of swap, the same build died at the final link step after 1 m 53 s:

error: could not compile `paru` (bin "paru")

Caused by:
  process didn't exit successfully: `rustc --crate-name paru --edition=2021 src/main.rs ... -C opt-level=3 -C lto -C codegen-units=1 ...` (signal: 9, SIGKILL: kill)
==> ERROR: A failure occurred in build().
    Aborting...

The kernel log names the culprit:

Out of memory: Killed process 6919 (rustc) total-vm:2758728kB, anon-rss:1598132kB, file-rss:16kB, shmem-rss:0kB, UID:1000 pgtables:4656kB oom_score_adj:0

Cargo lets environment variables override a crate’s release profile, so you can switch LTO off without editing anything. On the same 2 GB VM, this built cleanly in 2 m 11 s and peaked at 1.04 GiB:

CARGO_PROFILE_RELEASE_LTO=false CARGO_PROFILE_RELEASE_CODEGEN_UNITS=16 makepkg -si

What you give up is binary size: 10.8 MB instead of 7.9 MB. It started and reported libalpm v16.0.1 like the LTO build. On a small VM or an old laptop, that’s the cheapest way to get paru today.

Review by default

Paru’s default flow is the reason people switch. It lists the repo and AUR packages it will install, asks to proceed to review, then prints every file in the package before anything builds:

paru PKGBUILD review prompt before an AUR install on Arch Linux

Yay shows diffs by default, but it only opens the full PKGBUILD if you add --editmenu. Paru also reads AUR comments for you, which is often where you learn a package is broken before you try it:

paru -Gc downgrade

Its orphan cleanup is paru -c, the equivalent of yay -Yc. We marked fzf as a dependency to test it, and paru removed fzf plus a leftover pacman-contrib (5.60 MiB) in one go. paru -Ps has one quirk: it lists the -debug packages as “packages not in the AUR”. That’s harmless, and it goes away once you remove them.

Yay vs paru speed on the same commands

Speed should not decide this. Every gap below is under a second and a half, and the one job that takes real time is a tie. Medians of five runs:

Commandpacmanyayparu
-Ss nginx (search)0.16 s1.55 s0.87 s
-Si nginx (repo package info)0.15 s0.36 s0.34 s
-Syu with nothing to update1.09 s1.80 s1.89 s
-Qua (AUR updates)n/a0.85 s0.83 s
Install downgrade from the AURn/a7.16 s7.29 s
Peak RAM during a search56 MiB77 MiB67 MiB

Pacman’s search returned 39 results for nginx. Both helpers returned 39 repo results plus 154 AUR packages, so they do more work per search than pacman does. The AUR install is a dead heat, which makes sense: makepkg does the building for both. If you also run a GUI store, our roundup of AUR package managers covers the front ends that sit on top of these.

Which one to install

You will keep pacman no matter what, and it stays the tool for the official repos. If you only ever install from core and extra, you do not need a helper at all. For the AUR, pick by situation:

  • Most desktops and laptops: install yay-bin. It’s the actively maintained helper, its binary runs against current libalpm, and it was set up in 7.9 seconds.
  • You want review forced on every install: build paru from source. Plan on about 4 minutes and 3.4 GiB of free RAM, then remove the 535 MiB toolchain afterwards.
  • Paru on a 2 GB machine: build it with CARGO_PROFILE_RELEASE_LTO=false, which fit in 1.04 GiB.
  • Skip for now: paru-bin. It installs and then cannot find libalpm.so.15.

Whichever you pick, run it as your own user and read the PKGBUILD of anything new. The Arch wiki’s AUR page is blunt about it: AUR packages are user-produced, not thoroughly vetted, and any use is at your own risk. That holds for yay and paru equally, because both just hand the PKGBUILD to makepkg.

Keep reading

Install KVM and Virt-Manager on Arch Linux Virtualization Install KVM and Virt-Manager on Arch Linux Things to Do After Installing CachyOS Arch Linux Things to Do After Installing CachyOS How to Install CachyOS: Step-by-Step Guide Arch Linux How to Install CachyOS: Step-by-Step Guide CachyOS Kernel Guide: Kernel Manager, Schedulers and Tuning Arch Linux CachyOS Kernel Guide: Kernel Manager, Schedulers and Tuning KDE Plasma 6.8 Drops X11: Switch to Wayland and Keep X11 Apps Arch Linux KDE Plasma 6.8 Drops X11: Switch to Wayland and Keep X11 Apps Fixing “/usr/bin/pacman: unrecognized option ‘–color never'” on Arch | Manjaro Arch Linux Fixing “/usr/bin/pacman: unrecognized option ‘–color never'” on Arch | Manjaro

Leave a Comment

Press ESC to close