Manager augmentationsΒΆ

Package managers are not comparable: some ship advanced features others lack. Rather than expose that unevenness, mpm backfills the missing pieces on top of the native tools, so every manager gains a consistent baseline.

Managers gaining featuresΒΆ

Each βœ… below is a capability mpm synthesizes for a manager that does not provide it natively. The table renders straight from the capability declarations in the manager implementations, so it never drifts from the code. The rest of this page explains each column.

Manager

Full upgrade --all

Orphan sweep

Exact search

Extended search

apk

βœ…

apm

βœ…

apt-cyg

βœ…

βœ…

apt-mint

βœ…

asdf

βœ…

βœ…

βœ…

cargo

βœ…

βœ…

chromebrew

βœ…

βœ…

composer

βœ…

conda

βœ…

βœ…

deb-get

βœ…

βœ…

dnf

βœ…

βœ…

dnf5

βœ…

βœ…

eopkg

βœ…

fink

βœ…

βœ…

flatpak

βœ…

βœ…

gem

βœ…

gh-ext

βœ…

βœ…

guix

βœ…

βœ…

mas

βœ…

βœ…

mise

βœ…

nix

βœ…

βœ…

npm

βœ…

opkg

βœ…

βœ…

pacaur

βœ…

βœ…

pacman

βœ…

βœ…

pacstall

βœ…

βœ…

paru

βœ…

βœ…

pip

βœ…

pkcon

βœ…

βœ…

pkg-tools

βœ…

βœ…

pkgin

βœ…

βœ…

pnpm

βœ…

pwsh-gallery

βœ…

scoop

βœ…

βœ…

sfsu

βœ…

βœ…

slapt-get

βœ…

βœ…

snap

βœ…

βœ…

soar

βœ…

βœ…

sorcery

βœ…

βœ…

swupd

βœ…

βœ…

tazpkg

βœ…

βœ…

tlmgr

βœ…

βœ…

urpmi

βœ…

βœ…

uv

βœ…

xbps

βœ…

βœ…

yarn

βœ…

βœ…

yarn-berry

βœ…

βœ…

yay

βœ…

βœ…

yum

βœ…

βœ…

zypper

βœ…

Free upgrade --allΒΆ

Some managers cannot upgrade every outdated package in a single command. pip, for instance, has no full-upgrade subcommand. When a manager only knows how to upgrade one package at a time, mpm synthesizes the bulk operation: it lists the outdated packages and upgrades them one by one, so mpm upgrade --all works everywhere.

$ mpm --pip upgrade --all
Updating all outdated packages from pip...
warning: pip doesn't seems to implement a full upgrade subcommand. Call
single-package upgrade CLI one by one.

Collecting boltons
  Using cached boltons-20.1.0-py2.py3-none-any.whl (169 kB)
Installing collected packages: boltons
Successfully installed boltons-20.1.0

Collecting graphviz
  Using cached graphviz-0.14-py2.py3-none-any.whl (18 kB)
Installing collected packages: graphviz
Successfully installed graphviz-0.14
(...)

The Full upgrade --all column above lists the managers relying on this backfill.

Free orphan sweepΒΆ

Some managers can list their orphaned dependencies but have no verb to remove them all in one go. pacman is the canonical case: Arch users chain the two native primitives by hand, with the classic pacman -Rns $(pacman -Qtdq) idiom. When a manager implements the orphans listing and per-package removal but no native sweep, mpm cleanup --orphans synthesizes the sweep in-process: list the orphans, remove each one (recursively where the manager supports it, so every listed root takes its own now-orphaned subtree along), then re-query and repeat until the listing settles, since removing an orphan can orphan its own dependencies.

$ mpm --pacman cleanup --orphans

The Orphan sweep column above lists the managers relying on this backfill.

Universal augmentationsΒΆ

The table above is selective: each βœ… backfills a capability only some managers lack. A second class of augmentation applies to every manager mpm drives, whether or not its native CLI cooperates.

Safe --dry-run everywhereΒΆ

mpm intercepts each state-changing call and logs it instead of running it, so any manager becomes previewable even when its own CLI has no dry-run mode:

$ mpm --dry-run --apt upgrade --all
warning: Dry-run: (...)

Inspect the plan before runningΒΆ

mpm --plan <operation> prints the exact package-manager commands a state-changing operation would run, without running them. Unlike --dry-run, which simulates every call and so leaves install, remove and upgrade --all unable to resolve what they would do, plan mode still runs the read-only lookups those operations need, then captures only the mutations, one copy-pasteable line per command on stdout:

$ mpm --plan --brew upgrade --all
HOMEBREW_NO_ANALYTICS=1 HOMEBREW_NO_ENV_HINTS=1 HOMEBREW_NO_AUTO_UPDATE=1 /opt/homebrew/bin/brew upgrade --quiet --yes --formula

Each line carries the resolved binary path and the forced environment, so the plan doubles as an audit trail and pipes straight into a shell.

Comparable versions across schemesΒΆ

Package managers report versions in mutually incompatible schemes: semver, PEP 440, calendar versioning, Debian epochs, Gentoo suffixes, and more. Rather than a parser per format, mpm runs every version through a single tokenizer that yields a good-enough ordering, so outdated shows a meaningful installed-to-latest comparison even for managers whose native output never could.

Standard package URLs (purl)ΒΆ

Every package mpm reports carries a purl identifier that the native tools do not emit. It is the same identifier that powers mpm sbom, giving every manager a portable, tool-agnostic package name.

One sudo prompt, uniform policyΒΆ

Managers disagree on whether an operation needs root. mpm applies a consistent policy: system managers (apt, dnf, pacman, …) escalate, user-level managers do not. Before a state-changing command it probes the sudo credential cache and silently keeps a warm one alive; only a cold cache on an interactive terminal draws a single up-front password prompt, naming the escalating managers and branded [mpm], instead of letting each manager prompt mid-run. Off a terminal, managers that need root fail fast rather than hanging on a hidden prompt.

Managers that run sudo from inside their own commands (cask, fink) reuse the warm cache too; on a cold one, a mutating call that goes silent on a terminal draws a warning pointing at the possibly hidden password prompt. See privilege escalation for the full story.