Open-source project
moson-mo/pacseek avatar
moson-mo/pacseek

pacseek: a terminal interface for searching and installing Arch packages

A terminal user interface for searching and installing Arch Linux packages

668 stars19 forksGoMIT

At a glance

What is it?
pacseek is a Go terminal user interface that browses the Arch repositories and the AUR, with fuzzy search, sortable results, cached lookups, a PKGBUILD viewer and a news feed, and it delegates the actual installation to an AUR helper such as yay. It is a front end rather than a package manager, which is both its design and its main limitation.
Who is it for?
pacseek suits an Arch user who installs from the AUR often and wants to search, inspect and install without memorising pacman flags, and it suits a Debian, Fedora or Ubuntu user not at all, since it is built on the Arch package database and the AUR RPC interface.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 46 days ago.
What is it written in?
Mainly Go, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A search interface over pacman and the AUR

pacseek is a terminal user interface for browsing and searching the Arch Linux package databases and the Arch User Repository, and packages can be installed or uninstalled with the ENTER key. The framing matters: it is a front end to the package databases, not a replacement for pacman.

The search model is straightforward. You can search by name or by name and description, and the matching method is either contains or starts-with. On top of that sits auto-suggest, which is disabled by default. Results are sortable by package name, by source, by installed state, by modified date, and by popularity, and the README notes that popularity applies only to AUR packages, which is the detail that tells you the two databases are treated differently rather than merged into one list.

The results also carry the metadata you would otherwise query separately. There is a display for the PKGBUILD file, a list of all installed packages, a search for upgrades and a list of upgradable packages, and a news feed that is shown on the upgrades screen, with the feed URLs configurable and clicking an item using xdg-open to open the article. Lookups are cached, both search results and package information.

The Go dependencies explain how the pieces are assembled. tview provides the terminal user interface widgets, fuzzysearch provides the fuzzy matching, go-alpm is the binding to the ALPM library that pacman itself uses, go-cache is the cache, goaurrpc talks to the AUR RPC endpoint, chroma does the syntax highlighting that makes a PKGBUILD readable, and gofeed parses the news feed. The AUR RPC endpoint URL is configurable, so a mirror can be pointed at if the default one is slow or blocked.

Installing is delegated to an AUR helper, not to pacseek

The single most important thing to understand about pacseek is that it does not install software itself. Package installation and removal is done with an AUR helper, and in the default configuration that helper is yay. You can change this in the settings under Install command and AUR Install command, and the project links to examples for configuring other helpers, or even makepkg, in the wiki.

That design choice has consequences. pacseek handles discovery, display and the decision to install, and the helper handles the build, the review of the PKGBUILD and the transaction. It also means the tool inherits the helper's behaviour, its flags and its prompts. A user who is comfortable with yay and wary of an unfamiliar helper will still be running the helper they already trust.

Several other actions are configurable in the same way. The commands for installing and removing packages and for updating all packages are customizable, as is the command to update repository packages. Showing a PKGBUILD is done with curl and less by default, and both can be changed in the settings. The upgrade search is marked in the README as requiring fakeroot to be installed, which is a small but real dependency: without it, the upgradable list is the one feature that will not work.

The news feed is worth a second look, because it is the feature that has the least to do with package management. It is shown on the upgrades screen, the feed URLs can be changed, and clicking an item opens the URL with xdg-open. For an Arch user who wants to read about system changes before running an upgrade, that is a genuinely useful addition to a terminal workflow.

Building from source with Go 1.25, or taking a binary

The build instructions are three commands:

code
$ git clone https://github.com/moson-mo/pacseek.git
$ cd pacseek
$ go build .
$ ./pacseek

The module requires Go 1.25.0, as the go.mod file records, and the project ships a go.sum, so the build is a plain go build with no code generation step.

go
module github.com/moson-mo/pacseek

go 1.25.0

The direct dependencies in go.mod are the ones the feature list implies, Jguer's go-alpm v2 for the ALPM binding, Morganamilo's go-pacmanconf for reading the pacman configuration, chroma for syntax highlighting, gdamore's tcell v2 as the terminal layer under tview, lithammer's fuzzysearch, mmcdole's gofeed for the news feed, and patrickmn's go-cache for the cache. The rest of the list is indirect, including the goaurrpc fork used for the AUR.

You do not have to build it. Binaries are published on the Releases page, and there is an AUR package, and the README badges point at both pacseek and pacseek-bin in the Arch User Repository, which is the usual split between a source package and a binary package. The repository also carries a build.sh, a test.sh, a test_coverage.out file and a scripts directory, and there is a GitHub Actions workflow for the build.

For a Go project of this size, a single go build producing one binary with no runtime configuration beyond a JSON file is a pleasant deployment story on Arch, where you are already comfortable with packages.

Keyboard driven, with a JSON config and a manpage

The interface is meant to be driven from the keyboard, though the mouse works too. While the search bar is focused, ENTER runs the search. TAB moves to the package list, the cursor keys move within it, and ENTER on a row installs or removes that package. CTRL and S together open the settings form, and quitting is CTRL and Q, CTRL and C, or ESC.

All configuration lives in the settings screen and is written to a JSON file at ~/.config/pacseek/config.json. The appearance is configurable too, with colour schemes, border styles, component sizes and proportions, and glyph styles, and there is an ASCII mode for terminals that cannot handle Unicode, which is a small detail that shows the tool has been used on other people's machines.

The documentation is split three ways. The wiki holds the detailed usage and configuration notes, including the examples for other AUR helpers, and there is a manpage, man pacseek, for the command line. The README itself is mostly the feature list, the build steps and the key bindings.

That arrangement is reasonable for a tool whose settings are discoverable in the app itself. The one thing missing from the README is a list of the individual configuration keys, since the file is generated rather than hand written, so reading the config file or the wiki is the way to find out what can be changed.

What pacseek cannot do, and what a fuzzy finder does differently

The limitation is structural rather than a missing feature. pacseek does not install packages itself, so a user without an AUR helper gets a search tool and nothing more. It is also specific to Arch: the ALPM binding and the AUR RPC interface have no equivalent on other distributions, so the tool is not portable even though the source is a single Go module. The upgrade search needs fakeroot, and the PKGBUILD viewer needs curl and less unless you change the commands.

There is also the caching. Search results and package information are cached, which is what makes the interface feel fast, and the trade-off is that a cached result can lag behind a database that has just been synchronised. For a tool that drives installation decisions, that is worth keeping in mind rather than assuming the list on screen is the state of the repository.

The alternative is to use pacman's own search and a generic fuzzy finder. pacman can search the sync databases and the AUR through a helper, and a fuzzy finder such as fzf can match over a list you pipe into it. The difference in approach is that a generic matcher knows nothing about packages. It matches text, so the ranking ignores whether a package is installed, whether it comes from the AUR, how popular it is, or when it was last modified. pacseek queries the package databases and the AUR RPC endpoint directly, so a result carries its source, its installed state, its popularity and its PKGBUILD, and ENTER turns into an action rather than a line of text you then have to copy.

The other alternative is to stay in the command line entirely, learning the flags. That is faster for someone who already knows them, and it avoids a TUI for what is ultimately a query and a transaction.

Editorial conclusion

pacseek suits an Arch user who installs from the AUR often and wants to search, inspect and install without memorising pacman flags, and it suits a Debian, Fedora or Ubuntu user not at all, since it is built on the Arch package database and the AUR RPC interface. Before adopting it, check that you already have an AUR helper, because the default configuration drives yay and every install and removal goes through it, and note that searching for upgrades requires fakeroot to be installed. The tool is MIT licensed, the last push was on 2026-09-07, and the newest release is v1.8.7 from the same day.

Frequently asked questions

How do I install pacseek?

Build it with Go 1.25 or newer using git clone, cd pacseek, go build . and then run ./pacseek, or take a prebuilt binary from the Releases page. An AUR package is also available, as pacseek and pacseek-bin.

Which AUR helper does pacseek use?

By default yay is used to install, remove and upgrade packages. You can change the install command and the AUR install command in the settings, and the wiki has examples for other helpers or for makepkg.

What do I need for the upgrade search in pacseek?

The upgrade search and the list of upgradable packages requires fakeroot to be installed. The PKGBUILD view uses curl and less by default, and both commands are configurable.

Where does pacseek store its configuration?

All options are changed from the settings screen opened with CTRL and S, and the configuration file is written in JSON format at ~/.config/pacseek/config.json.

Can pacseek be used on distributions other than Arch Linux?

No. It is built on the Arch package database through the ALPM binding and on the AUR RPC interface, so the search and install paths are specific to Arch Linux.

Official sources

  1. Issues
  2. License: MIT
  3. moson-mo/pacseek on GitHub
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/moson-mo-pacseek.svg)](https://hysenlabs.com/projects/moson-mo-pacseek)

Was this useful?