What is Meta Package Manager?
- provides the
mpm
CLI, a wrapper around all package managers mpm
is likeyt-dlp
, but for package managers instead of videosmpm
solves XKCD #1654 - Universal Install Script
- Inventory and list all package managers available on the system.
- Supports macOS, Linux and Windows.
- Standalone executables for Linux, macOS and Windows.
- List installed packages.
- List duplicate installed packages.
- Search for packages.
- Install a package.
- Remove a package.
- List outdated packages.
- Sync local package infos.
- Upgrade all outdated packages.
- Backup list of installed packages to TOML file.
- Restore/install list of packages from TOML files.
- Pin-point commands to a subset of package managers (include/exclude selectors).
- Support plain, versioned and purl package specifiers.
- Export output to JSON or print user-friendly tables.
- Shell auto-completion for Bash, Zsh and Fish.
- Provides a Xbar/SwiftBar plugin for friendly macOS integration.
- Because
mpm
try to wrap all other package managers, it became another pathological case of XKCD #927: Standards
Package manager | Min. version | BSD1 | Linux2 | macOS | Unix3 | Windows | installed |
outdated |
search |
install |
upgrade |
upgrade_all |
remove |
sync |
cleanup |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
apm |
1.0.0 | 🐧 | 🍎 | 🪟 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
apt |
1.0.0 | 🐧 | >_ |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||
apt-mint |
1.0.0 | 🐧 | >_ |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||
brew |
2.7.0 | 🐧 | 🍎 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
cargo |
1.0.0 | 🐧 | 🍎 | >_ |
🪟 | ✓ | ✓ | ✓ | ✓ | ||||||
cask |
2.7.0 | 🍎 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||
choco |
2.0.0 | 🪟 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||
composer |
1.4.0 | 🐧 | 🍎 | >_ |
🪟 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
dnf |
4.0.0 | 🐧 | >_ |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||
emerge |
3.0.0 | 🐧 | >_ |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||
flatpak |
1.2.0 | 🐧 | >_ |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
gem |
2.5.0 | 🐧 | 🍎 | >_ |
🪟 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||
mas |
1.6.1 | 🍎 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||
npm |
4.0.0 | 🐧 | 🍎 | >_ |
🪟 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
opkg |
0.2.0 | 🐧 | >_ |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
pacaur |
4.0.0 | 🐧 | >_ |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
pacman |
5.0.0 | 🐧 | >_ |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
paru |
1.9.3 | 🐧 | >_ |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
pip |
10.0.0 | 🐧 | 🍎 | >_ |
🪟 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||
pipx |
1.0.0 | 🐧 | 🍎 | >_ |
🪟 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||
pkg |
1.11 | 🐧 | 🍎 | >_ |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||
scoop |
0.2.4 | 🪟 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||
snap |
2.0.0 | 🐧 | >_ |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
steamcmd |
None | 🐧 | 🍎 | >_ |
🪟 | ✓ | |||||||||
vscode |
1.60.0 | 🐧 | 🍎 | >_ |
🪟 | ✓ | ✓ | ||||||||
yarn |
1.20.0 | 🐧 | 🍎 | >_ |
🪟 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||
yay |
11.0.0 | 🐧 | >_ |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
yum |
4.0.0 | 🐧 | >_ |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||
zypper |
1.14.0 | 🐧 | >_ |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Note: Missing manager
If your favorite manager is missing or does not support an operation, you can influence its implementation: open a ticket to document its output or read the contribution guide and submit a pull request.
I can do that work for you if you purchase business support 🤝 or sponsor the project 🫶.
All installation methods are available in the documentation.
Below are the most popular ones:
mpm
is part of the official Homebrew default tap, so you can install it with:
$ brew install meta-package-manager
pipx
is the cleanest way to install mpm
from sources on any platform:
$ pipx install meta-package-manager
Standalone executables of mpm
's latest version are available as direct downloads for several platforms and architectures:
Platform | x86_64 |
arm64 |
---|---|---|
Linux2 | Download mpm-linux-x64.bin |
|
macOS | Download mpm-macos-x64.bin |
Download mpm-macos-arm64.bin |
Windows | Download mpm-windows-x64.exe |
List all packages installed on current system:
$ mpm installed
╭─────────────────────────────┬─────────────────────────────┬─────────┬────────────────────╮
│ Package name │ ID │ Manager │ Installed version │
├─────────────────────────────┼─────────────────────────────┼─────────┼────────────────────┤
│ github │ github │ apm │ 0.36.9 │
│ update-package-dependencies │ update-package-dependencies │ apm │ 0.13.1 │
│ rust │ rust │ brew │ 1.55.0 │
│ x264 │ x264 │ brew │ r3060 │
│ atom │ atom │ cask │ 1.58.0 │
│ visual-studio-code │ visual-studio-code │ cask │ 1.52.0 │
│ nokogiri │ nokogiri │ gem │ x86_64-darwin │
│ rake │ rake │ gem │ 13.0.3 │
│ iMovie │ 408981434 │ mas │ 10.2.5 │
│ Telegram │ 747648890 │ mas │ 8.1 │
│ npm │ npm │ npm │ 7.24.0 │
│ raven │ raven │ npm │ 2.6.4 │
│ jupyterlab │ jupyterlab │ pip │ 3.1.14 │
│ Sphinx │ Sphinx │ pip │ 4.2.0 │
│ ms-python.python │ ms-python.python │ vscode │ 2021.10.1317843341 │
│ ms-toolsai.jupyter │ ms-toolsai.jupyter │ vscode │ 2021.9.1001312534 │
╰─────────────────────────────┴─────────────────────────────┴─────────┴────────────────────╯
16 packages total (brew: 2, pip: 2, apm: 2, gem: 2, cask: 2, mas: 2, vscode: 2, npm: 2, composer: 0).
List all packages installed for which an upgrade is available:
$ mpm outdated
╭──────────────┬─────────────┬─────────┬───────────────────┬────────────────╮
│ Package name │ ID │ Manager │ Installed version │ Latest version │
├──────────────┼─────────────┼─────────┼───────────────────┼────────────────┤
│ curl │ curl │ brew │ 7.79.1 │ 7.79.1_1 │
│ git │ git │ brew │ 2.33.0 │ 2.33.0_1 │
│ openssl@1.1 │ openssl@1.1 │ brew │ 1.1.1l │ 1.1.1l_1 │
│ rake │ rake │ gem │ 13.0.3 │ 13.0.6 │
│ Telegram │ 747648890 │ mas │ 8.1 │ 8.1.3 │
│ npm │ npm@8.0.0 │ npm │ 7.24.0 │ 8.0.0 │
│ pip │ pip │ pip │ 21.2.4 │ 21.3 │
│ regex │ regex │ pip │ 2021.9.30 │ 2021.10.8 │
╰──────────────┴─────────────┴─────────┴───────────────────┴────────────────╯
8 packages total (brew: 3, pip: 2, gem: 1, mas: 1, npm: 1, apm: 0, cask: 0, composer: 0).
If you wonder why your package manager doesn't seems to be identified, you can list all those recognized by mpm
with:
$ mpm --all-managers managers
╭────────────┬────────────────────┬────────────────┬──────────────────────────────┬────────────┬───────────╮
│ Manager ID │ Name │ Supported │ CLI │ Executable │ Version │
├────────────┼────────────────────┼────────────────┼──────────────────────────────┼────────────┼───────────┤
│ apm │ Atom's apm │ ✓ │ ✘ apm not found │ │ │
│ apt │ APT │ ✘ Linux only │ ✓ /usr/bin/apt │ ✓ │ ✘ │
│ apt-mint │ Linux Mint's apt │ ✘ Linux only │ ✓ /usr/bin/apt │ ✓ │ ✘ │
│ brew │ Homebrew Formulae │ ✓ │ ✓ /opt/homebrew/bin/brew │ ✓ │ ✓ 3.6.3 │
│ cargo │ Rust's cargo │ ✓ │ ✓ /opt/homebrew/bin/cargo │ ✓ │ ✓ 1.64.0 │
│ cask │ Homebrew Cask │ ✓ │ ✓ /opt/homebrew/bin/brew │ ✓ │ ✓ 3.6.3 │
│ choco │ Chocolatey │ ✘ Windows only │ ✘ choco not found │ │ │
│ composer │ PHP's Composer │ ✓ │ ✓ /opt/homebrew/bin/composer │ ✓ │ ✓ 2.4.2 │
│ dnf │ DNF │ ✘ Linux only │ ✘ dnf not found │ │ │
│ emerge │ Emerge │ ✘ Linux only │ ✘ emerge not found │ │ │
│ flatpak │ Flatpak │ ✘ Linux only │ ✘ flatpak not found │ │ │
│ gem │ Ruby Gems │ ✓ │ ✓ /usr/bin/gem │ ✓ │ ✓ 3.0.3.1 │
│ mas │ Mac AppStore │ ✓ │ ✓ /opt/homebrew/bin/mas │ ✓ │ ✓ 1.8.6 │
│ npm │ Node's npm │ ✓ │ ✓ /opt/homebrew/bin/npm │ ✓ │ ✓ 8.19.2 │
│ opkg │ OPKG │ ✘ Linux only │ ✘ opkg not found │ │ │
│ pacman │ Pacman │ ✘ Linux only │ ✘ pacman not found │ │ │
│ paru │ Paru │ ✘ Linux only │ ✘ paru not found │ │ │
│ pip │ Pip │ ✓ │ ✓ ~/.pyenv/shims/python3 │ ✓ │ ✓ 22.2.2 │
│ pipx │ Pipx │ ✓ │ ✓ /opt/homebrew/bin/pipx │ ✓ │ ✓ 1.1.0 │
│ scoop │ Scoop │ ✘ Windows only │ ✘ scoop not found │ │ │
│ snap │ Snap │ ✘ Linux only │ ✘ snap not found │ │ │
│ steamcmd │ Valve Steam │ ✓ │ ✘ steamcmd not found │ │ │
│ vscode │ Visual Studio Code │ ✓ │ ✓ /opt/homebrew/bin/code │ ✓ │ ✓ 1.71.2 │
│ yarn │ Node's yarn │ ✓ │ ✓ /opt/homebrew/bin/yarn │ ✓ │ ✓ 1.22.19 │
│ yay │ Yay │ ✘ Linux only │ ✘ yay not found │ │ │
│ yum │ YUM │ ✘ Linux only │ ✘ yum not found │ │ │
│ zypper │ Zypper │ ✘ Linux only │ ✘ zypper not found │ │ │
╰────────────┴────────────────────┴────────────────┴──────────────────────────────┴────────────┴───────────╯
If your favorite manager is not supported yet, you can help! See the contribution guide.
Other subcommands and options are documented in:
- the detailed help screens
- the
list of use-cases
where you’ll find inspiration on how to leverage
mpm
power