What is Meta Package Manager?
mpm
CLI, a wrapper around all package managersmpm
is like yt-dlp
, but for package
managers instead of videosmpm
solves XKCD #1654 - Universal Install Scriptmpm
try to wrap all other package managers, it became another
pathological case of XKCD #927: StandardsPackage manager | Min. version | BSD[^bsd_without_macos] | Linux[^linux] | macOS | Unix[^unix] | 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 | 🅱️ | 🐧 | 🍎 | >_ |
🪟 | ✓ | ||||||||
uv |
0.1.45 | 🅱️ | 🐧 | 🍎 | >_ |
🪟 | ✓ | ✓ | ✓ | ✓ | |||||
vscode |
1.60.0 | 🅱️ | 🐧 | 🍎 | >_ |
🪟 | ✓ | ✓ | |||||||
winget |
1.7 | 🪟 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
yarn |
1.20.0 | 🅱️ | 🐧 | 🍎 | >_ |
🪟 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
yay |
11.0.0 | 🅱️ | 🐧 | >_ |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||
yum |
4.0.0 | 🅱️ | 🐧 | >_ |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
zypper |
1.14.0 | 🅱️ | 🐧 | >_ |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
[^bsd_without_macos]: BSD: FreeBSD, NetBSD, OpenBSD, SunOS.
[^linux]: Linux: Linux, Windows Subsystem for Linux v2.
[^unix]: Unix: AIX, Cygwin, GNU/Hurd, Solaris, Windows Subsystem for Linux v1.
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
mpm
is available in the main
repository of Scoop, so you just need to:
> scoop install main/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 |
---|---|---|
Linux[^linux] | 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:
mpm
power[^bsd_without_macos]: BSD: FreeBSD, NetBSD, OpenBSD, SunOS.
[^linux]: Linux: Linux, Windows Subsystem for Linux v2.
[^unix]: Unix: AIX, Cygwin, GNU/Hurd, Solaris, Windows Subsystem for Linux v1.