rustpack is an ALPM-first package manager for Arch-style systems.
It uses libalpm directly for repository sync, dependency resolution, install, remove, upgrade, local package install, and package queries. There are no pacman subprocess calls in the core package workflow.
Active development project. Use carefully on production systems and always review transaction summaries.
- Package operations run through
libalpm(-S,-Q,-R,-U,-Sy,-Syu, etc.). - Repository configuration is loaded from
/etc/pacman.conf(includingInclude = ...mirrorlists). - Transaction lifecycle is ALPM-native:
- Initialize handle
- Configure repos/siglevels/cache/hook dirs
- Prepare transaction
- Print summary
- Commit (or dry-run)
- Download and transaction progress output is driven by ALPM callbacks.
- Pacman-like operation flags:
-S,-Q,-R,-U. - Full sync/upgrade path:
-Sy,-Su,-Syu. - Repo and local queries:
- Search repos / installed
- Package info
- File ownership
- Reverse dependencies
- Explicit / foreign package listings
- Transaction preflight checks:
- DB lock detection
- Keyring path and trustdb checks
- Keyring package presence checks via ALPM local DB
- Transaction history:
rustpack historyrustpack history <limit>rustpack history show <id>
- Output modes:
--compactfor minimal output--verbosefor extra context--jsonfor machine-readable output (supported onhistory,doctor,-Qi,-Qe)
- Smarter sync target resolution errors:
- Shows provider package suggestions and close repo matches when a target is not found.
doctorcommand for package-manager health diagnostics.- Optional AUR passthrough via
paru(--aur/--paru).
From source:
sudo ./install.shinstall.sh rebuilds release artifacts by default and installs rustpack.
Use --skip-build to install an already-built target/release/rustpack without rebuilding.
It also installs:
- man page:
/usr/local/share/man/man8/rustpack.8 - bash completion:
/usr/share/bash-completion/completions/rustpack - zsh completion:
/usr/share/zsh/site-functions/_rustpack - fish completion:
/usr/share/fish/vendor_completions.d/rustpack.fish
sudo rustpack -Syu
rustpack -Ss firefox
sudo rustpack -S firefox
rustpack -Qe
rustpack history
rustpack --why libvaAUR passthrough:
rustpack --aur -S spotify-Ssync/install from configured repositories-Qquery installed package database-Rremove installed packages-Uinstall local package file(s)--why <pkg>explain why a package is installed (dependency chain to explicit packages)doctorrun environment/config diagnosticshistoryshow or inspect rustpack transaction history
-Syrefresh sync databases-Superform full system upgrade-Syurefresh + full system upgrade-Sssearch repositories-Sishow repository package info-Scclean unused cache files-Sccclean all cache package files-Sd/-Sddskip dependency checks (dangerous)
-Qishow installed package info-Qssearch installed packages-Qllist files owned by package-Qmlist foreign packages (not in sync DBs)-Qofind package owning a file-Qelist explicitly installed packages-Qrshow reverse dependencies
-Rsremove package + unneeded deps-Rnremove package but keep no config files-Rd/-Rddskip dependency checks (dangerous)
-Ud/-Uddskip dependency checks (dangerous)
--test/--dry-runsimulate transaction without commit--noconfirmskip confirmation prompt--neededavoid reinstalling up-to-date packages (-S)--noscriptletdisable install scriptlets (-S,-U)--nodepsskip dependency checks (-S,-R,-U)--overwrite <glob>allow overwrite conflicts (-S)--asdepsinstall targets as dependencies (-S)--asexplicitinstall targets as explicit (-S)--root <path>override root directory--dbpath <path>override package database path--cachedir <path>override cache directory--strictenforce stronger safety policy--insecure-skip-signaturesdisable package/database signature checks (emergency recovery only)--compactreduced output--verbosemore detailed output--jsonmachine-readable output for automation (history,doctor,-Qi,-Qe)--stop option parsing
# Search and install
rustpack -Ss ripgrep
sudo rustpack -S ripgrep
# Full system upgrade
sudo rustpack -Syu
# Inspect package metadata
rustpack -Qi bash
rustpack -Qo /usr/bin/vi
rustpack -Qr glibc
rustpack --why libva
# Remove with dependencies
sudo rustpack -Rs firefox
# Install local package file
sudo rustpack -U ./example.pkg.tar.zst
# Safe simulation
sudo rustpack -Syu --testrustpack adds explicit checks before ALPM transactions:
- Rejects operations when package DB lock exists.
- Validates keyring path and trustdb presence.
- Confirms keyring packages are present in local ALPM DB.
- Supports
--strictto disallow high-risk options and weak signature policy. - Emergency escape hatch:
--insecure-skip-signaturescan temporarily bypass signature failures; repair keyrings immediately after use.
If you see CachyOS signature failures like invalid PGP database signatures, preferred recovery is:
sudo pacman-key --init
sudo pacman-key --populate archlinux cachyos
sudo pacman -Sy --needed archlinux-keyring cachyos-keyringOnly if you are blocked, run one temporary bypass sync:
sudo rustpack -Syy --insecure-skip-signaturesThen restore normal secure usage (without the bypass flag).
Additional behavior:
- Non-root users are blocked from install/remove/upgrade operations.
- Transaction summaries are shown before commit.
--testallows dry-run flow without writing transaction changes.
History is stored at:
/var/log/rustpack/history.log(or under--root)
Commands:
rustpack historyrustpack history 50rustpack history show <id>
Each entry stores operation, status, targets, summary, timestamp, and generated ID.
Read sources:
/etc/pacman.conf- Included mirrorlist files declared by
Include = ...
Supported config concepts include:
RootDir,DBPath,CacheDir,HookDir,GPGDir,LogFileArchitecture,SigLevel,LocalFileSigLevel,RemoteFileSigLevel- Repository sections and
Serverlines
- Not every pacman CLI flag is implemented yet.
- AUR is delegated to
paru(not a native ALPM operation). - History timestamps are stored as UNIX seconds.
sudo ./uninstall.shuninstall.sh options:
--dry-run--find--purge--force-unknown
- Fork and create a branch.
- Run checks locally (
cargo check). - Keep behavior aligned with ALPM semantics.
- Update docs when flags/behavior change.
GPLv2 (see repository license files).