A secure package manager for Arch Linux and the AUR, written in Haskell.

Latest on Hackage:2.0.0

This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow to host generated Haddocks.

GPL-3.0-only licensed by Colin Woodbury
Maintained by

Build Status Join the chat at

What is Aura?

Aura is a package manager for Arch Linux. It’s main purpose is as an “AUR helper”, in that it automates the process of installating packages from the Arch User Repositories. It is, however, capable of much more.

The Aura Philosophy

Aura is Pacman

Aura doesn’t just mimic pacman… it is pacman. All pacman operations and their sub-options are allowed. Some even hold special meaning in Aura as well.

Arch is Arch. AUR is AUR.

-S yields pacman packages and only pacman packages. This agrees with the above. Thus in Aura, the -A operation is introduced for obtaining AUR packages. -A comes with sub-options you’re used to (-u, -s, -i, etc.).

All together

Dependencies and packages are not built and installed one at a time. Install order is as follows:

  1. All pacman dependencies (all at once).
  2. All AUR dependencies (one at a time).
  3. All AUR packages (all at once).

Quiet Building

By default makepkg output is suppressed. If you want the people behind you to think you’re a badass hacker, then this suppression can be disabled by using -x alongside -A.

Run as Root, Build as a User

makepkg gets very upset if you try to build a package as root. That said, a built package can’t be handed off to pacman and installed if you don’t run as root. Other AUR helpers ignore this problem, but Aura does not. Even when run with sudo, packages are built with normal user privileges, then handed to pacman and installed as root.

Know your System

Editing PKGBUILDs mid-build is not default behaviour. An Arch user should know exactly what they’re putting into their system, thus research into prospective packages should be done beforehand. However, for functionality’s sake, the option --hotedit used with -A will prompt the user for PKGBUILD editing. Regardless, as a responsible user you must know what you are building.


Built AUR package files are moved to the package cache. This allows for them to be easily downgraded when problems arise. Other top AUR helper programs do not do this. The option -B will save a package state, and -Br will restore a state you select. -Au also automatically invokes a save, to help you roll back from problematic updates.

No Orphans

Sometimes dependencies lose their required status, but remain installed on your system. Sometimes AUR package “makedepends” aren’t required at all after install. Packages like this just sit there, receiving upgrades for no reason. Aura helps keep track of and remove packages like this. Learn more here.

Arch Linux for Everyone

English is well established as the world’s Lingua Franca, and is also the dominant language of computing and the internet. That said, it’s natural that some people are going to be more comfortable working in their native language. From the beginning Aura has been built with multiple-language support in mind, making it very easy to add new ones.


Aura is written in Haskell, which means easy development and pretty code. Please feel free to use it as a simple Haskell reference. Aura code demonstrates:

  • Parser Combinators (megaparsec)
  • CLI Flag Handling (optparse-applicative)
  • Extensible Effects (freer-simple)
  • Concurrency (async)
  • Shell Interaction (shelly)


Arch Linux

It is recommended to install the prebuilt binary of Aura:

git clone
cd aura-bin
sudo pacman -U <the-package-file-that-makepkg-produces>


You will need the stack tool for Haskell to compile Aura yourself. Then:

git clone
cd aura
stack install -- aura

This may take a while to initially build all of Aura’s dependencies. Once complete, your aura binary will be available in ~/.local/bin/.

Sample Usage

Installing Packages

Install an AUR package:

aura -A (package)

Author’s favourite (upgrades, removes make deps, shows PKGBUILD diffs):

aura -Akuax

Just upgrade all installed AUR packages:

aura -Au

Look up information on an AUR package:

aura -Ai (package)

Search the AUR via a regex:

aura -As (regex)

Display an AUR package’s PKGBUILD:

aura -Ap (package)

Display an AUR package’s dependencies (and those deps’ deps too):

aura -Ad (package)

Install with makepkg output unsuppressed:

aura -Ax (package)

Install and remove make dependencies afterwards:

aura -Aa (package)

Install and show PKGBUILD differences:

aura -Ak (package)

Working with Package Records

Store a record of all installed packages:

aura -B

Restore a saved record. Rolls back, uninstalls, and reinstalls packages as necessary:

aura -Br

Working with the Package Cache

Downgrade a package (this is interactive):

aura -C (package)

Search the package cache for package files via a regex:

aura -Cs (regex)

Backup the package cache:

aura -Cb (/path/to/backup/location/)

Reduce the package cache to contain only ‘x’ of each package file:

aura -Cc x

Working with the Pacman Log

View the Pacman Log:

aura -L

Display install / upgrade history for a package:

aura -Li (package)

Search the pacman logfile via a regex:

aura -Ls (regex)

Working with Orphan Packages

Display orphan packages:

aura -O

Adopt an orphan package:

aura -O --adopt (package)

Uninstall all orphan packages:

aura -Oj

More information is available in aura’s manpage.


As mentioned in the Philosophy above, adding new languages to Aura is quite easy. If you speak a language other than those available and would like it added to Aura, please consult

Aura is currently translated by these generous people:

Language Translators
Chinese Kai Zhang
Croatian Denis Kasak and “stranac”
French Ma Jiehong and Fabien Dubosson
German Lukas Niederbremer and Jonas Platte
Indonesian “pak tua Greg”
Italian Bob Valantin
Japanese Colin Woodbury and Onoue Takuro
Norwegian “chinatsun”
Polish Chris Warrick
Portuguese Henry Kupty, Thiago Perrotta, and Wagner Amaral
Russian Kyrylo Silin, Alexey Kotlyarov
Serbian Filip Brcic
Spanish Alejandro Gómez and Sergio Conde
Swedish Fredrik Haikarainen and Daniel Beecham


Aura Changelog


This is a large update representing about a month of full-time effort. Aura is now much faster, solves dependencies more reliably, has a few new features, and many fewer bugs. This is all while modernizing the code and seeing a ~15% decrease in overall code size.


Dependency Handling

  • Dependency resolution is now much faster and handles split packages correctly. As such, the following troublesome packages now build correctly:
    • android-sdk
    • backintime
    • clion
    • libc++
    • mysql-connector-c++
    • telegram-desktop-dev
    • zoom
  • Dependency provider selection for AUR packages.
    • Example: cron is a legal dependency to specify, but there exists no package with that name. cronie and fcron both “provide” cron, and now the user can manually make a selection.
    • Including --noconfirm will have Aura make its best guess.
  • If the exact version of an AUR package is available in the package cache, it will be used automatically instead of being rebuilt. You can instead force a rebuild with --force.


  • In light of the recent compromise of the Acroread package, Aura nows performs static PKGBUILD analysis before building, and warns the user if potentially malicious terms like curl are found.
    • This feature can be disabled with --noanalysis. Caveat emptor!
    • This feature is a supplement in checking PKGBUILD safety, not a fool-proof replacement. It is always your responsiblity to understand what build scripts are running on your machine.

Saved Package State

  • -Su and -Au automatically save a package state before updating (unless you’re doing --dryrun). This lets you more easily roll back from problematic updates.
  • Saved package states can now be “pinned”, which will protect them from removal via -Bc. To pin a certain state, open its JSON file (see below in Breaking Changes) and edit the pinned field from false to true.

CLI Flags

  • Various CLI flag improvements:
    • -A --json <packages>. Query the AUR directly for a package’s raw JSON data. Great for debugging.
    • -Br has been restored as short-hand for -B --restore.
    • Added -Bl to list all saved package state filenames.
    • -Cb added as a short-hand for -C --backup.
    • The Pacman flags --ignoregroup, --cachedir, --config, and --logfile also now affect Aura.
    • --dryrun no longer requires sudo.
    • --color never turns off all text colouring. Further, by default, Aura will only automatically colour text when it detects that the output device is a terminal (and not a Unix pipe, say). These behaviours match Pacman.


  • Improved Japanese translations thanks to Onoue Takuro.
  • Improved Portuguese translations thanks to Wagner Amaral.
  • Improved Russian translations thanks to Alexey Kotlyarov.


  • Packages that aren’t interdependent will be built in succession without prompting the user, only calling down to pacman once per group.
  • Modernized the Haskell code:
    • Removed custom CLI flag handling in favour of optparse-applicative.
    • Removed custom package version number parsing in favour of versions.
    • Removed custom text colouring code in favour of prettyprinter.
    • Removed the Aura Monad in favour of Extensible Effects via freer-simple.
    • Removed custom shell interaction code in favour of typed-process.
    • Used async to make AUR and pacman calls concurrent.
    • megaparsec parsers used in place of hacky Regexes.
  • aura is now a library as well, and can be pulled into other Haskell projects.

Breaking Changes

  • -B now saves package states as JSON. This makes them readable by other tools, and also improves internal code quality. All old package state files are no longer readable by Aura.
    • The "time" field in these files is now a Haskell ZonedTime.
  • Various CLI flag changes:
    • --auradebug is now just --debug, matching Pacman.
    • --aurignore is now just --ignore, matching Pacman.
    • -Aw has been removed.
    • -y no longer works with -A. Perform an -Sy ahead of time instead.
    • -O no longer accepts arguments to adopt packages, it only displays current orphans. Use -O --adopt instead for the old behaviour.
    • -Ccc is now -C --notsaved.
  • Help messages (-h) are no longer localised.
  • Support for powerpill removed.
  • Support for customizepkg removed.

Bug Fixes

  • Aura no longer returns an exit code of 1 if no packages are available to upgrade.
  • -Aq no longer fails at the package installation step.
  • Ctrl+C at certain moments no longer preserves the Pacman lock file.
  • makepkg output is no longer coloured green.


  • Dependency resolution vastly improved. We removed the Bash parser that used to poorly handle the bulk of this.
  • Chinese translations thanks to Kai Zhang.
  • -M operator and associated code fully removed.


  • Updated Swedish translations
  • Disabled -M operator due to the abs tool being deprecated by Arch Linux


  • Fixed behaviour of -B flags. For restoring of saved states, use the long form: aura -B --restore. Cache backups also need to take their long form: aura -C --backup.
  • Fixed handling of language flags. Thanks to Doug Patti!


  • Aura now uses version 5 of the aur package, to fix a critial bug
  • Updated Spanish and Polish


  • Bash parser bug fix. Fixes some packages.


  • Bash parser extended to be able to handle bash array expansions. This enables packages with more (Bash-wise) complex PKGBUILDs to build properly.

  • -Ai and -As show popularity values.
  • aur4 is no longer referenced.
  • Yes/No prompts are now localized.
  • Aura can be built with stack.
  • Updated German translation.

  • Aura builds against GHC 7.10.
  • Updated German and Russian translations.

  • Must use --builduser when building as root.
  • Bug fix regarding --needed.
  • Updated Portuguese translation.

  • Pacman flags --ignore and --ignoregroup now work.
  • Bug fixes.

  • (Bug fix) If a user tries to install a package in IgnorePkg, they will now be prompted.
  • Man page updated.
  • Dependencies updated.

  • (Bug fix) Tarballs are now downloaded from a URL provided by the RPC.

  • Last major version of Aura 1! We have entered the design phase for Aura 2, the implementation of which will transform Aura into a multi-distro package management platform.

  • Aura 1 itself has entered “legacy” mode. The only releases to be made on Aura 1 after this will be of 1.3.0.x. You’ll likely never see 1.3.1.x.

  • Befitting a major release, we have:

    • New AUR interaction layer via the aur package. This fixes nasty “AUR lookup failed” errors.
    • http-conduit dropped for wreq, which is much easier to use.
    • Better version number parsing/comparison on installation/upgrading.
    • Package state backups have had their format changed. This BREAKS all previously saved states. Please delete your old ones!
    • Implemented extended --needed functionality for the AUR side of Aura. AUR packages won’t build if they’re already installed.
    • Indonesian translations!
    • Other updated translations.

  • zsh completions completely redone (thanks to Sauyon Lee!) Having aur-git installed will let you auto-complete on AUR packages.

  • -As --{head,tail} can now be passed numbers to truncate the results to any number you want. The default is 10.
  • Updated Russian translation.

  • Expanded Bash completions: Aura Only * Expanded completion for all options and search sub-options * Package completion for -M/–abssync * Completion for orphans using self-generated list Pacman * Include completion for all pacman options * Directory or file completion for some common options
  • Use --dryrun with -A and -M install options to test everything up until actual building would occur (dependency checks, etc.)

  • Network.HTTP.Conduit errors are now caught properly and don’t crash aura.
  • customizepkg usage corrected.
  • zsh completions slightly expanded.

  • Moved to Network.HTTP.Conduit from Network.Curl This fixes the AUR connection issues. Binary size has increased by quite a bit.

  • -Ai now shows dependencies.

  • Happy New Year!
  • makepkg’s --ignorearch flag is now visible to Aura. This allows users to build AUR packages on ARM devices without worrying about architecture restrictions in PKGBUILDs.
  • Use --head and --tail to truncate -As results.
  • -B now uses local time.
  • Bug fixes and translation updates

  • -As results now sort by vote. Use --abc to sort alphabetically.
  • “[installed]” will now be shown in -As results if you have it.
  • Fixed Bash parsing bug involving \\ in arrays
  • Fixed broken -C
  • Updated Italian translation
  • Updated French translation

  • Happy Canadian Thanksgiving
  • Bug fixes

  • Norwegian translation added!
  • Dependency checks slightly faster
  • --hotedit and --custom can now be used together
  • Bug fixes

  • New builduser option
  • Prelude.head bug fixed
  • Dependency checking is faster
  • New -k output
  • --absdeps works properly now
  • Other bug fixes

  • Bug fixes and spelling corrections.

  • Fixes dependency build order bug.

  • New operator -M for building ABS packages. Has its own family of options.
  • Pre-built binary package available (x86_64 only)
  • Updates to Aura are now prioritized like pacman updates.
  • Dependency checking is now faster.
  • Use -Ccc to clean the cache of only packages not saved in any package record.
  • -Ai now shows Maintainer name.
  • Extensive API changes.

  • New option --no-pp. Disables use of powerpill, even if you have it.
  • This is a light release, as major work is being done on version 1.2 on another development branch.

  • Compatable with pacman 4.1
  • All pacman-color support removed
  • -As output slightly altered to match pacman.
  • Bug fixes.

  • New option --build for specifying AUR package build path.
  • Vote number now shown in -As output.
  • Fixed Repo/AUR name collision bug.
  • API Change: Argument order for functions in Aura/Languages changed.

  • customizepkg now usable with Aura. Activate with the --custom option.
  • API Change: Aura/Pkgbuilds now a set of libraries as Aura/Pkgbuild/*

  • Fixed flaw in -Br.
  • Fixed repititious -Ad output.
  • API Change: Aura/AurConnection renamed to Aura/AUR
  • API Change: function names in Aura/Languages now have better names.

  • Haskell deps have been moved back to makedepends.
  • haskell-http removed as dependency.
  • API Change: function naming conventions in Aura/Languages.hs has been changed. The localisation guide was also updated to reflect this.

  • Support for the $LANG environment variable.
  • Aura will now pause before post-build installation if the package database lock exists. This means you can run multiple instances of Aura and avoid crashes.

  • Serbian translation added. Thank you, Filip Brcic!
  • Fixed bug that was breaking aura -Ss.

  • Changed --save and --restore to -B and -Br. --save is now just an alias for -B, but --restore must be used with -B.
  • New option -Bc for removing old unneeded package states.
  • -Br output is now sorted better and makes more sense.
  • Bash Parser can now properly parse if blocks, meaning packages that have conditional dependencies based on architecutre will now build properly.
  • API Change: Aura.General is now Aura.Core
  • Dep Change: haskell-url no longer needed.

  • Added message to --save.

  • Bash parser completely rewritten.
  • Bug fixes (thanks to the new parser)

  • New option --devel. Rebuilds all devel packages installed.
  • Italian translation added! Thank you Bob Valantin!
  • Support for powerpill added. It will be used if installed, unless the PACMAN variable is specifically set to something different.
  • Aura can now handle PKGBUILDs that produce multiple .pkg.tar files.
  • Bug fixes

  • New --save and --restore options.
  • New option -Ak for showing PKGBUILD diffs when upgrading.
  • New option --aurignore for ignoring AUR packages.
  • Aura now reads color.conf.
  • Massive breaking API changes everywhere.
  • Aura now runs on the Aura Monad.
  • Code is quite cleaner now.

  • Bash completions added.
  • zsh completions added.
  • Changed --conf to --viewconf
  • Fixed bug involving “symlink” Haskell error.

  • Moved certain general functions to Aura.Utils
  • Moved -L, -O, -A functions out of aura.hs.
  • --hotedit functionality altered (fix).
  • The license message is now more badass.

  • New libraries: Aura.Time, Aura.State
  • Moved -C functionality to Aura.C
  • New secret option you don’t get to find out about until 1.1
  • Fixed manually alignment stupidity with -Li.
  • Bug fixes

  • New libraries: ColourDiff, Data.Algorithm.Diff, Aura.Pkgbuilds
  • Aura.AuraLib split into Aura.General, Aura.Build, Aura.Dependencies
  • New secret option you don’t get to find out about until 1.1

  • Fixed bug where packages with + in their name couldn’t be searched or built.
  • -As now allows multi-word searches, as it always should have.
  • pacman-color integration is more complete. Still does not read the color.conf directly.

  • Added French translation. Thanks to Ma Jiehong!
  • Added Russian translation. Thanks to Kyrylo Silin!
  • Fixed bug where packages with dots in their name wouldn’t build.

  • Moved haskell dependencies out of makedepends field and into depends field in PKGBUILD. Makedepends can usually be ignored after building, but haskell packages are a pain to rebuild and reregister at every build. It’s more realistic to just keep them installed. This is what other haskell packages in the AUR do as well.
  • Fixed pacman-color issues.

  • Added --auradebug option.

  • Compatibility with AUR 2.0 added.
  • Portuguese translation added. Thanks to Henry “Ingvij” Kupty!
  • Support for pacman-color added. Run sudo with -E a la: sudo -E aura -Ayu
  • Fixed backslash parsing bug in Bash.

  • Fixed parsing bug in Bash. If one package fell victim, a whole -Au session would fail.

  • Added License info to source files.
  • Fixed virtual package recognition bug.
  • Altered version conflict error message.
  • Fixed bug in Bash parser that would occasionally break parsing.

  • Bug fixes.
  • Extended the Bash parser. PKGBUILDs that had bash variables in their dependency arrays will now be parsed correctly.

  • German translation (use with –german). Thanks to Lukas Niederbremer!
  • Spanish translation (use with –spanish) Thanks to Alejandro Gómez!
  • Replaced regex-posix with regex-pcre.
  • -As now highlights properly.
  • Moved a number of modules to Aura/

  • Fixed -V message in terminals other than urxvt.
  • New haskell-ansi-terminal library to do this.

  • Internet access moved to Network.Curl library.

  • Bash.hs library created to help with PKGBUILD parsing. Can currently handle string expansions a la::

    “this-is-{awesome,neat}” => [“this-is-awesome”,“this-is-neat”]

  • Dependency determining speed up.
  • Added AUR URL to -Ai.

  • Swedish translation. Thanks to Fredrik Haikarainen!

  • -Ai and -As!

  • -Au is about 20 times faster.


  • Polish translation. Thanks to Chris “Kwpolska” Warrick!
  • Croatian translation. Thanks to Denis Kasak!

  • New -O operation for dealing with orphan packages.
  • A man page!

  • Help message now supports multiple languages.
  • Broke “no overlapping options” convention.
  • -Cz is now -Cb.
  • New option -Ad. Lists all dependencies of an AUR package. This is to aid pre-building research. This option shows information you can’t get from looking at PKGBUILDS!

  • New option --conf. Lets you quickly view your pacman.conf.

  • --log is now -L.
  • New option -Ls. Search the log file via a regex.
  • New option -Li. Reports information on a given package that has had any appearance in the log file.

  • --hotedit option added.
  • Shell library added.

  • Aura passes proper exit codes to the shell upon completion.
comments powered byDisqus