PARU(8)
π NAME
okay so welcome to PARU(8), bestie π«Ά β this is the manual for paru, and honestly it's giving main character energy: it's an AUR helper written in Rust and based on the design of yay. The whole goal? Be your standard pacman-wrapping AUR helper with minimal interaction. Minimal interaction, maximum slay. β¨
β¨ SYNOPSIS β¨
paru <operation> [options] [targets]
paru <search terms>
paru
like, three whole moods π
πΈ DESCRIPTION πΈ
So. Paru is an AUR helper written in Rust and based on the design of yay, and its whole thing is being your standard pacman wrapping AUR helper with minimal interaction. no cap.
It's the tool you use to easily build and install packages from the AUR, along with their dependencies. And the glow-up? Paru also expands many of pacman's options making them AUR aware. iconic behaviour tbh.
π Real talk though: this manpage only covers options unique to paru. For other options see pacman(8). iykyk.
π¦ PARU OPERATIONS π¦
these are paru's very own operations, its signature moves π
-P,--showβ printing related options. it's literally the "show me things" mode β¨-G,--getpkgbuildβ downloads PKGBUILDs from the ABS or AUR. Heads up: the ABS can only be used for Arch Linux repositories.-B,--buildβ build PKGBUILDs on disk. The targets here are directories directly containing aPKGBUILD.-L,--repoctlβ list local repos.-C,--chrootctlβ interactive shell to the chroot. get in there π
π And if no arguments are provided, paru -Syu will be performed. it just does it. no notes.
π₯ EXTENDED PACMAN OPERATIONS π₯
-R,-S,-Si,-Sl,-Ss,-Su,-Sc,-Qu,-Tβ these operations are extended to support both AUR and repo packages. AUR awareness unlocked fr fr.
now the specific little extras, one by one:
-Rβ Paru will also remove cached data about devel packages. bye bye cached devel data π«Ά-Scβ Paru will also clean cached AUR packages and any untracked files in the cache. Cleaning untracked files will wipe any downloaded sources or built packages but will keep already downloaded VCS sources. Also,-dor--deletecan be passed to delete the entire package instead of just cleaning it.-Ssβ The AUR can be searched using regex but it must be explicitly requested using-x/--regex. Regex search will only search package names and not descriptions regardless ofSearchBy. so like, don't @ me when descriptions don't show up β that's just the rules π-Sssβ Paru will also output a verbose search result when passing two-S,-Si,-Sl,-Ss,-Su,-Quβ Paru will also handle AUR packages for these operations.-Taβ Will filter a list of packages to ones that appear in the AUR. little filter, big job π
π NO OPERATION π
the "just vibes" section β what happens when you hand paru nothing but a dream β¨
<NO OPTION>β Interactive search and install. Displays a list of packages matching the search terms and prompts the user on which packages to install. a whole little menu moment π--gendbβ Generate the development package database. This tracks the latest commit for each development package, so when there is a new commit paru will know to update. This is done per package whenever a package is synced. This option should only be used when migrating to paru from another AUR helper.
Also β and this is the important bit β this also causes paru to assume all current development packages are up to date. Updates will then be detected on the next commit. so don't come crying when nothing updates immediately, bestie π
-c,--cleanβ Remove unneeded dependencies.
Make and check dependencies are considered for foreign packages. Pass this twice to ignore these. Pass -o to ignore optional dependencies. (yes, twice. two taps. the second tap is the "okay I mean it" tap π
)
π§ SHOW OPTIONS (APPLY TO -P AND --SHOW) π§
this whole stack only works when you're in show mode, k? π
-c,--completeβ Print a list of all AUR and repo packages. This allows shell completion and is not intended to be used directly by the user. so like, back away slowly, it's for the shell not for you π-s,--statsβ Displays information about installed packages and system health. If there are orphaned, or out-of-date packages, or packages that no longer exist on the AUR; warnings will be displayed. the vibe check of your whole system fr π©Ί-w,--newsβ Print new news from the Arch Linux homepage. News is considered new if it is newer than the build date of all native packages. Pass this twice to show all available news. why yes, it IS a news reader now πΈ-o,--orderβ Print buildorder for targets.
This option outputs information about how to build a package and its dependencies. Each line of output specifies an action to perform or information to take into consideration.
Each line of output will be in one of the following formats:
MISSING <DEP> [WANTED BY]...β A dependency could not be found.
<DEP> is the dependency that could not be found and [WANTED BY] is the current dependency stack. The dependency stack will be empty if the package that could not be found was a target.
β οΈ Paru will exit 1 if any packages are missing. that's a real exit status, not a drill.
CONFLICT LOCAL|INNER <PKG> <CONFLICTING PKG> [CONFLICT]β There was a package conflict.
The second arg will be LOCAL if the conflict is with an installed package and INNER if two of the to be installed packages conflict. <PKG> and <CONFLICTING PKG> are the packages in conflict and [CONFLICT] will be the conflict string if it is different from <CONFLICTING PKG>.
INSTALL TARGET|DEP|MAKE <DB> <NAME>β Install a package from the pacman repos.
The first arg will be TARGET if the package is a target, DEP if a dependency, or MAKE if the package is a build time dependency. <DB> is the name of the database the package belongs to and <NAME> is the name of the package.
AUR TARGET|DEP|MAKE <BASE> <NAMES>...β Build a package from the AUR.
The first arg will be TARGET if the package is a target, DEP if a dependency, or MAKE if the package is a build time dependency. <BASE> is the pkgbase of the package and <NAMES> are the names of the packages belonging to the pkgbase.
π tl;dr: "More options may be added in the future." so keep an eye out, bestie.
π GETPKGBUILD OPTIONS (APPLY TO -G AND --GETPKGBUILD) π
grab a PKGBUILD, peek at it, kiss it on the forehead π
-p,--printβ Prints the PKGBUILD to the terminal instead of downloading it. reading it right there in the terminal like a text message π-c,--commentsβ Print the AUR comments from the PKGBUILD's AUR page.
Pass twice to get all comments instead of the first page. yes, the double-tap strikes again π
-s,--sshβ Clone the AUR package using SSH (e.g.: a read-write remote). read-write remote = you can push, you fancy thing π
β REPOCTL OPTIONS (APPLY TO -L AND --REPOCTL) β
local repo admin hours ποΈ
-l,--listβ List packages in local repos-c,--cleanβ Remove packages that are not currently installed from repos.-d,--deleteβ Remove a package from the local repo. Pass this twice to also uninstall the package. (twice = "and take it off my system too" π₯)-y,--refreshβ Refresh local repos.-q,--quietβ Show less information. for when the output is doing Too Much π
π CHROOTCTL OPTIONS (APPLY TO -C AND --CHROOTCTL) π
-i,--installβ Install a package into the chroot.
--noconfirm can also be specified and will be forwarded to pacman. π
-u,--sysupgradeβ Upgrade the chroot.-p,--printβ Print path to currently configured chroot. just the path. that's it. that's the tweet β¨
π οΈ BUILD OPTIONS (APPLY TO -B AND --BUILD) π οΈ
-i,--installβ Also install the package once built. build it, then keep it π«Ά
π NEW OPTIONS π
the fresh stuff, the new-new π
--repoβ Assume all targets are from the repositories. Additionally, actions such as sysupgrade will only act on repository packages. commit to the repo life π-a,--aurβ Assume all targets are from the AUR. Additionally, actions such as sysupgrade will only act on AUR packages.
Note that dependency resolution will still include repository packages. so like, AUR-only acting, but deps are still invited to the party π
--pkgbuildsβ Assume all targets are from the PKGBUILD repositories. Additionally, actions such as sysupgrade will only act on AUR packages.
Note that dependency resolution will still include repository and AUR packages. same deal, broader guest list π
--mode = aur|repo|pkgbuildsβ Select what kinds of packages paru should act on. Multiple modes can be selected by separating them with a comma.
Additionally, a, r and p may be used as short hand for aur, repo and pkgbuilds respectively. Short form modes can also be combined without a comma. E.g. --mode=ar or --mode=arp. efficient queen behavior π
--interactiveβ Enable interactive package selection for-S,-R,-Ssand-Qs.
For -S/-R this allows you to pick which packages to install/remove from a list.
paru <foo> is an alias to paru -S --interactive <foo>.
For -Ss/-Qs this allows you to interactively pick packages from the sync/local repos respectively. This is intended to be chained with other package tools so paru can handle the menu work while the other tool in the pipeline just gets the packages.
For example:
paru -Ssaq --interactive ruby | paru -Gc -
will show AUR packages containing the term ruby, give the user an interactive menu to pick packages, then pipeline those packages into -Gc and display the comments.
Would allow a user to interactively choose what files to list. π
--aururlβ Set an alternative AUR URL.--aurrpcurlβ Set an alternative URL for the AUR/rpcendpoint.--clonedir <dir>β Directory used to download and run PKGBUILDs.--makepkg <command>β The command to use for makepkg calls. This can be a command inPATHor an absolute path to the file.--makepkgconf <file>β Specifies amakepkg.conffile to use in the chroot environment. The file can only be an absolute path to the file. absolute. path. only. no exceptions π--pacman <command>β The command to use for pacman calls. This can be a command inPATHor an absolute path to the file.--pacman-conf <command>β The command to use for pacman-conf calls. This can be a command inPATHor an absolute path to the file.--git <command>β The command to use for git calls. This can be a command inPATHor an absolute path to the file.--gitflags <flags>β Passes arguments to git. These flags get passed to every instance where git is called by paru. Arguments are split on whitespace before being passed to git. Multiple arguments may be passed by supplying a space separated list that is quoted by the shell.--gpg <command>β The command to use for gpg calls. This can be a command inPATHor an absolute path to the file.--gpgflags <flags>β Passes arguments to gpg. These flags get passed to every instance where gpg is called by paru. Arguments are split on whitespace before being passed to gpg. Multiple arguments may be passed by supplying a space separated list that is quoted by the shell.--fm <command>β This enables fm review mode, where PKGBUILD review is done using the file manager specified by command.
This allows the PKGBUILDs and related files to be edited. Changes won't persist unless committed. ngl that last part is the whole plot twist β edit all you want, but if you don't commit it, it never happened π
okay so we're still deep in the options list, and this whole chunk is basically "which tools does paru call, and how does it act" β customizing the group chat settings, essentially π
--fmflags <flags>β passes arguments to your file manager. these flags get handed to every instance where paru calls the file manager. arguments are split on whitespace before being passed, and you can pass multiple arguments by giving a space separated list that's quoted by the shell π«Ά--asp <command>β the command to use foraspcalls. can be a command inPATHor an absolute path to the file.--mflags <flags>β passes arguments tomakepkg. these get passed to every instance where paru callsmakepkg. split on whitespace before being passed, and multiple args can be passed with a shell-quoted space separated list β¨--bat <command>β the command to use forbatcalls. can be a command inPATHor an absolute path to the file.--batflags <flags>β passes arguments tobat. these get passed to every instance where paru callsbat. split on whitespace, multiple args via a shell-quoted space separated list π¦--sudo <command>β the command to use forsudocalls. can be a command inPATHor an absolute path to the file. heads up bestie: the--sudoloopoption is not guaranteed to work with a custom sudo command π--sudoflags <flags>β passes arguments tosudo. these get passed to every instance where paru callssudo. split on whitespace, multiple args via a shell-quoted space separated list.--chrootflags <flags>β passes arguments tomakechrootpkg. these get passed to every instance where paru callsmakechrootpkg. split on whitespace before being passed, multiple args via a shell-quoted space separated list π§--chrootpkgs <package>β installs a package into the chroot before building. multiple packages? just separate them with a comma.
this is the move when a PKGBUILD doesn't declare the dependencies it actually needs π«
note that this is only a temp fix and only applies to this one build. you should ideally patch the package yourself or report the problem to the maintainer β be a good citizen fr fr π
if you want to permanently add a package to the chroot, use paru -Ci package to install packages into the root chroot, or use --rootchrootpkgs to specify packages that should be installed when the chroot is created.
--rootchrootpkgs <packages>β comma-separated list of packages to install when creating the root chroot.
defaults to "base-devel" if not specified.
unlike --chrootpkgs (which installs packages temporarily before each build), --rootchrootpkgs packages become part of the root chroot and persist across all builds π
this only affects chroot creation. to apply changes to an existing chroot, you must delete and recreate it. no shortcuts, sorry π
--completioninterval <days>β time in days to refresh the completion cache. setting it to0refreshes the cache every time, and setting it to-1means the cache is never refreshed. defaults to7β--sortby <votes|popularity|id|baseid|name|base|submitted|modified>β sort AUR results by a specific field during search. defaults tovotes.--searchby <name|name-desc|maintainer|depends|checkdepends|makedepends|optdepends>β search for AUR packages by querying the specified field. defaults toname-desc.--skipreviewβ skip the review process.--reviewβ don't skip the review process.--upgrademenuβ show a detailed list of updates, similar in format to pacman'sVerbosePkgListsoption. (seepacman.conf(5)). upgrades can be skipped using numbers, number ranges, or repo names π
warning: it is not recommended to skip updates from the repositories, since that can lead to partial upgrades π¬ this feature is intended to easily skip AUR updates on the fly that may be broken or have a long compile time. ultimately it is up to the user what upgrades they skip.
--noupgrademenuβ do not show the upgrade menu.--removemake [yes|no|ask]β remove makedepends after installing packages. if set toask, a menu will appear during builds letting you choose then and there. defaults toyeswhen specified without an option π--noremovemakeβ don't remove makedepends after installing packages.--topdownβ print search results from top to bottom. repo packages print first. this is the default β¨--bottomupβ print search results from bottom to top. AUR packages print first.--limit <limit>β limit the number of packages returned in a search to the given amount. defaults to0(no limit). this applies separately to repo and AUR packages.-x,--regexβ enable regex for AUR search π
the regex will only be matched against pkgnames and not pkgdescs, as you would usually expect. sneaky, but that's the deal.
--nocheckβ don't resolve checkdepends or run thecheckfunction.--installdebugβ also install debug packages when a package provides them.--noinstalldebugβ don't install debug packages when a package provides them.--develβ during sysupgrade, also check AUR development packages for updates. currently only Git packages are supported π
devel checking is done using git ls-remote. the newest commit hash is compared against the hash at install time. this lets devel updates be checked almost instantly and means the original PKGBUILD doesn't need to be downloaded at all. iconic.
the slower pacaur-like devel checks can be implemented manually by piping a list of packages into paru (see examples).
--ignoredevelβ like--ignorebut for devel upgrades. packages matching this won't be tried for a devel update, but may still be upgraded if the pkgver changes π--nodevelβ do not check for development package updates during sysupgrade.--develsuffixesβ suffixes that paru will use to decide if a package is a devel package. used when determining if a pkgver bump is used when the--neededoption is set.--cleanafterβ remove untracked files after installation.
untracked files are removed with the exception of directories. this lets VCS packages easily pull an update instead of having to reclone the entire repo. big brain energy π§
--nocleanafterβ do not remove package sources after successful install.--redownload [yes|no|all]β always download PKGBUILDs of targets even when a copy is available in cache. ifallis specified, then PKGBUILDs get downloaded for all packages, not just targets. defaults toyeswhen specified.--noredownloadβ when downloading PKGBUILDs, if the PKGBUILD is found in cache and is equal to or newer than the AUR's version, use that instead of downloading a new one π--providesβ look for matching providers when searching for AUR packages. when multiple providers are found, a menu appears prompting you to pick one. this increases dependency resolve time, although it shouldn't be noticeable.
by default only targets and missing packages will be searched for providers. specifying all will enable this for all packages.
--noprovidesβ do not look for matching providers when searching for AUR packages. paru will never show its provider menu, but pacman will still show its provider menu for repo packages π€·ββοΈ--pgpfetchβ prompt to import unknown PGP keys from thevalidpgpkeysfield of each PKGBUILD.--nopgpfetchβ do not prompt to import unknown PGP keys. this is likely to cause a build failure unless you're using options such as--skippgpcheckor a customized gpg config π--newsonupgradeβ print new news during sysupgrade.--useaskβ use pacman's--askflag to automatically confirm package conflicts. paru lists conflicts ahead of time. it's possible that paru doesn't detect a conflict, which would cause a package to be removed without the user's confirmation β however, this is very unlikely π--nouseaskβ manually resolve package conflicts during the install. packages which do not conflict will not need to be confirmed manually.--savechangesβ commit changes to pkgbuilds made during review.--nosavechangesβ don't commit changes to pkgbuilds made during review.--failfastβ exit as soon as any AUR packages fail to build.
by default paru will continue and try to build the other AUR packages π«Ά
--nofailfastβ don't exit as soon as any AUR packages fail to build.--keepsrcβ keepsrc/andpkg/directories after building packages.--nokeepsrcβ don't keepsrc/andpkg/directories after building packages.--combinedupgradeβ during sysupgrade, paru will first perform a refresh, then show its combined menu of repo and AUR packages that will be upgraded. then, after reviewing the PKGBUILDs, the repo and AUR upgrade starts with no need for manual intervention. so smooth β¨
if paru exits for any reason after the refresh without upgrading, it's your responsibility to either resolve the reason paru exited or run a sysupgrade through pacman directly. no cap.
--nocombinedupgradeβ during sysupgrade,pacman -Syuwill be called, then the AUR upgrade will start. this means the upgrade menu and PKGBUILD review are performed after the sysupgrade has finished.--batchinstallβ when building and installing AUR packages, instead of installing each package right after building it, queue each package for install. then, once either all packages are built or a package in the build queue is needed as a dependency to build another package, install all the packages in the install queue π¦--nobatchinstallβ always install AUR packages immediately after building them.--rebuild [yes|no|all|tree]β bestie, this one says always build the target packages, even when there's already a copy chillin' in the cache. Pickalland literally every package gets rebuilt, not just the targets. Picktreeand the whole dependency tree gets rebuilt, even the deps that are already satisfied. Defaults tono, so by default it's not doing all that.--norebuildβ the opposite vibe: while building, if the package is found in cache and it's an equal version to the one you want, skip the build entirely and just use the existing package. Efficient queen behavior π--sudoloop [= args...]β periodically callssudoin the background so it doesn't time out mid-build on you during long builds π Optionally you can pass args to choose how the looping happens β lowkey useful fordoas, since looping works differently there.--nosudoloopβ nope, don't loopsudocalls in the background. We live dangerously.--localrepo [= Repos...]β use a local repo to build and upgrade AUR packages β¨ when this is on, paru acts on packages in the enabled repos instead of foreign packages. The repo has to already be declared inpacman.conf, but it doesn't have to exist on disk yet. Optionally you can pass a list of Repos to use β by default paru considers all local repos, builds new packages into the first listed repo, and upgrades the packages in the other enabled repos.--nolocalrepoβ don't build into a local repo. Simple as that.--chroot [= /path/to/chroot]β build packages in a chroot π«Ά this needs theLocalRepooption enabled or it's not happening. Optionally pass a directory to say where the chroot should be created.--nochrootβ don't build packages in a chroot.--sign [= key]β sign packages withgpgπ₯ optionally tell it which key to sign with.--nosignβ don't sign the package withgpg.--keeprepocacheβ okay so normally, when AUR packages get updated, the old versions get removed from the local repo. This option turns that behavior off, keeping both all the versions and only updating the DB. (That's what the manpage says, so that's what we're saying π)--nokeeprepocacheβ don't keep old packages.--signdb [= key]β sign databases withgpgβ¨ optionally indicate which key to sign with.--nosigndbβ don't sign databases withgpg.
π EXAMPLES π
Real talk, these are the ones you'll actually type every day:
paru fooβ search and install from the repos and the AUR, using interactive search and install. No flags needed, she just knows.paru -Syuβ update the package list and upgrade all currently installed repo and AUR packages. The classic.paru -Suaβ update all currently installed AUR packages only.paru -S fooβ installs packagefoofrom the repos or the AUR.paru -Ss fooβ searches for packagefooon the repos or the AUR.paru -Si fooβ gets information about packagefoofrom the repos or the AUR.paru -S foo --mflags "--skipchecksums --skippgpcheck"β installsfoowhile skipping checksums and PGP checks π«£paru -B .β build thePKGBUILDin the current directory.pacman -Qmq | grep -Ee '-(cvs|svn|git|hg|bzr|darcs)$' | paru -Ta - | paru -S --needed -β the pacaur-like devel check. Look at her go π
pacman -Qmq | grep -Ee '-(cvs|svn|git|hg|bzr|darcs)$' | paru -Ta - |
paru -S --needed -
π¦ ENVIRONMENT VARIABLES π¦
AURDESTβ can be set to configure the build directory. Overridden by--clonedir, so that flag wins if they ever beef.PARU_CONFβ overrides where paru will look for its config file.PARU_PAGERβ the pager paru uses for file review. Has higher priority thanPAGER, but lower priority thanparu.confβ¨ (yes, the priority ladder is real)
π FILES π
π CONFIG DIRECTORY
The config directory is $XDG_CONFIG_HOME/paru/. If $XDG_CONFIG_HOME is unset, she falls back to $HOME/.config/paru.
paru.conf is where all of paru's config options live. Check paru.conf(5) for the whole tea on that file β
π CACHE DIRECTORY
The cache directory is $XDG_CACHE_HOME/paru/. If $XDG_CACHE_HOME is unset, it falls back to $HOME/.cache/paru.
packages.aur holds a list of all AUR packages for shell completion. By default the completion files get refreshed every 7 days πΈ
π STATE DIRECTORY
The state directory is $XDG_STATE_HOME/paru/. If $XDG_STATE_HOME is unset, it falls back to $HOME/.local/state/paru.
devel.json tracks VCS packages and the latest commit of each source. If any of these commits change, the package gets upgraded during a devel update π
π BUILD DIRECTORY
Unless you set it otherwise, this should be the same as the CACHE DIRECTORY. This directory stores downloaded AUR packages, plus any source files and built packages from those packages.
π PACMAN.CONF
Paru uses pacman's config file to set certain pacman options, either through alpm.rs or paru itself. Options it inherits include most libalpm options and pacman options.
Notably: Databases, Color and *Path/*Dir options are used π
β SEE ALSO β
paru.conf(5), makepkg(8), makepkg.conf(5), PKGBUILD(5), pacman(8), pacman.conf(5)
Also, the arch wiki has the full lore on the AUR at https://wiki.archlinux.org/index.php/Arch_User_Repository β go read it, it's giving study session π§
π BUGS π
If something's busted, please report bugs to the GitHub page at https://github.com/Morganamilo/paru. They want to hear from you, fr fr π
π AUTHORS π
Morgan <morganamilo@archlinux.org> β the main character who made all this happen β¨
That's the whole page, bestie π«Ά now go build something iconic. No cap, you're gonna slay.
paru v1.10.0, dated 2021-03-24, page PARU(8) β that's a wrap, mwah ππ
π¦ where this page comes from
- nixpkgs unstable: paru 2.1.0-unstable-2026-01-09
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms