meta-package-manager
meta-package-manager copied to clipboard
🎁 wraps all package managers with a unifying CLI
What is Meta Package Manager?
- provides the
mpmCLI, a wrapper around all package managers mpmis likeyt-dlp, but for package managers instead of videosmpmsolves XKCD #1654: Universal Install Script
Features
- Inventory and list all package managers available on the system.
- Supports macOS, Linux and Windows.
- List 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).
- Export results in JSON or user-friendly tables.
- Shell auto-completion for Bash, Zsh and Fish.
- Provides a Xbar/SwiftBar plugin for friendly macOS integration.
- Because
mpmtry to wrap all other package managers, it became another pathological case of XKCD #927: Standards
Supported package managers and operations
| Package manager | Min. version | Linux | macOS | 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 |
0.10.4 | 🪟 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
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 | 🐧 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||
pacman |
5.0.0 | 🐧 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||
paru |
1.9.3 | 🐧 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||
pip |
10.0.0 | 🐧 | 🍎 | 🪟 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
pipx |
1.0.0 | 🐧 | 🍎 | 🪟 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
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 | 🐧 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Quickstart
Easiest way is to install mpm with pipx:
$ pipx install meta-package-manager
Other alternatives installation methods are available in the documentation.
List managers
List all supported package managers and their status on current system (macOS in this case):
$ mpm --all-managers managers
╭────────────────────┬──────────┬────────────────┬───────────────────────────┬────────────┬──────────────╮
│ Package manager │ ID │ Supported │ CLI │ Executable │ Version │
├────────────────────┼──────────┼────────────────┼───────────────────────────┼────────────┼──────────────┤
│ Atom's apm │ apm │ ✓ │ ✓ /usr/local/bin/apm │ ✓ │ ✓ 2.6.2 │
│ APT │ apt │ ✘ Linux only │ ✓ /usr/bin/apt │ ✓ │ ✘ │
│ Linux Mint's apt │ apt-mint │ ✘ Linux only │ ✓ /usr/bin/apt │ ✓ │ ✘ │
│ Homebrew Formulae │ brew │ ✓ │ ✓ /usr/local/bin/brew │ ✓ │ ✓ 3.2.16 │
│ Rust's cargo │ cargo │ ✓ │ ✓ /opt/homebrew/bin/cargo │ ✓ │ ✓ 1.59.0 │
│ Homebrew Cask │ cask │ ✓ │ ✓ /usr/local/bin/brew │ ✓ │ ✓ 3.2.16 │
│ Chocolatey │ choco │ ✘ Windows only │ ✘ choco not found │ │ │
│ PHP's Composer │ composer │ ✓ │ ✓ /usr/local/bin/composer │ ✓ │ ✓ 2.1.8 │
│ DNF │ dnf │ ✘ Linux only │ ✘ dnf not found │ │ │
│ Emerge │ emerge │ ✘ Linux only │ ✘ emerge not found │ │ │
│ Flatpak │ flatpak │ ✘ Linux only │ ✘ flatpak not found │ │ │
│ Ruby Gems │ gem │ ✓ │ ✓ /usr/bin/gem │ ✓ │ ✓ 3.0.3 │
│ Mac AppStore │ mas │ ✓ │ ✓ /usr/local/bin/mas │ ✓ │ ✓ 1.8.3 │
│ Node's npm │ npm │ ✓ │ ✓ /usr/local/bin/npm │ ✓ │ ✓ 7.24.0 │
│ OPKG │ opkg │ ✘ Linux only │ ✘ opkg not found │ │ │
│ Pacman │ pacman │ ✘ Linux only │ ✘ pacman not found │ │ │
│ Pip │ pip │ ✓ │ ✓ /usr/local/bin/python3 │ ✓ │ ✓ 21.2.4 │
│ Pipx │ pipx │ ✓ │ ✓ /opt/homebrew/bin/pipx │ ✓ │ ✓ 1.0.0 │
│ Snap │ snap │ ✘ Linux only │ ✘ snap not found │ │ │
│ SteamCMD │ steamcmd │ ✓ │ ✓ /opt/local/bin/steamcmd │ ✓ │ ✓ 1648077083 │
│ Visual Studio Code │ vscode │ ✓ │ ✓ /usr/local/bin/code │ ✓ │ ✓ 1.61.0 │
│ Node's yarn │ yarn │ ✓ │ ✘ yarn not found │ │ │
│ 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 contibution guide.
List installed packages
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 outdated packages
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 │
│ [email protected] │ [email protected] │ 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 │ [email protected] │ 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).
Usage
More documentation is available in:
- the detailed help screens
- the
list of use-cases
where you’ll find inspiration on how to leverage
mpmpower