Changelog

8.1.0.dev0 (unreleased)

Warning

This version is not released yet and is under active development.

  • [mpm] Raise the click-extra floor to 9.3, the release mpm already needs: below it every manager call died on a TypeError.

  • [mpm] Raise the extra-platforms floor to 13.10, whose new shell_from_path() resolves the login shell --shell-env runs, replacing mpm’s own PowerShell special case.

  • [scoop] Raise the Scoop floor to 0.6.0, which fixes its --version output. Run scoop update to upgrade an older install.

  • [scoop] Install the requested version on mpm install <package>@<version> and mpm restore. Scoop pins such a package, so outdated and upgrade skip it.

  • [sfsu] Note on its page that upstream looks for new maintainers and now ships only fixes.

  • [mpm] Record hok as unsupported: its listing drops every app that Scoop 0.6.0 installed.

  • [mpm] Record three tools topgrade gained as unsupported: adless refreshes a hosts-file blocklist, while antigravity-cli and zed only update themselves.

  • [app-manager] Add the AppManager AppImage manager with outdated, install, remove and full upgrade support. install and remove take the AppImage’s file path, and nothing lists the installed apps.

  • [antigravity-cli-plugins] Add the plugin manager of the Antigravity CLI, agy, with installed, install and remove support.

  • [whalebrew] Add Whalebrew, which installs Docker images as commands, with installed, search, install and remove support. Packages are keyed on their image.

  • [mpm,sheldon,zeroinstall] Fix remove exiting on “No manager selected” when the only manager selected keeps no inventory: that manager now gets the package as is.

  • [mpm] Drop upt from the benchmark comparison: its last commit dates from 2024-10, and its owner has answered nothing since 2024-12.

  • [mpm] Refresh the benchmark against topgrade 17.12.2, pacaptr 0.23.2, metapac 0.10.2 and Homebrew 7.0.7, citing evidence for every competitor cell: four new topgrade steps, Homebrew’s vulns scan and its dropped parallel installs.

  • [mpm] Link each mpm glyph of the benchmark’s support table to the manager’s page instead of its source code.

  • [mpm] List every manager queued for a wrap, with what it waits on, on the managers page and the todo list.

  • [bar-plugin] Fix the preview screenshot Xbar’s website shows for the plugin, which named a renamed file.

  • [mpm] Close install, remove, upgrade, restore and cleanup --orphans on a report of every package upgraded, downgraded, installed, removed, held or still outdated, with its versions, as a table honoring --table-format and --columns.

  • [mpm] List the privileged operations of every manager on its page, not only those of the bundled definitions.

  • [mpm] Ask for the sudo password up front only for managers whose commands in the run need root: a gem forced to escalate no longer prompts on sync.

8.0.2 (2026-09-28)

Note

8.0.2 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Publish mpm for Ubuntu 22.04 and later at ppa:kdeldycke/mpm, carrying its Python dependencies in a private directory so nothing system-wide changes.

  • [gnome-shell] Publish the extension on extensions.gnome.org, for GNOME Shell 46 to 50.

  • [mpm] Link each manager’s own documentation from its page, through a new documentation_url attribute that manager definitions accept too.

  • [mpm] Mark each manager page’s Operations table with ✅/❌ glyphs and a Notes hint, moving the implementation detail out of the page’s introduction.

  • [mpm] Skip the tests needing a real host, a login shell or a sudo policy in a hermetic build sandbox, so packagers run a plain pytest.

  • [mpm] Ship the bundled add-manager skill in the source distribution, so the two documentation tests reading it pass for a packager.

  • [mpm] Ship the bundled manager definitions and yay_cooldown.lua in setuptools-built packages, which distributors substituting that backend were silently dropping.

  • [mpm] Keep the ✓/✘ trail and its finisher on a pipe or a CI log, where the animated indicator cannot draw. --no-progress is now the only thing that silences them.

  • [bar-plugin,gnome-shell] Keep the sync progress trail out of the host app’s log, by turning it off on the refresh cycle.

  • [mpm] Name the SBOM writer library that is missing or too old when sbom refuses, instead of advising an extra that is already installed.

  • [mpm] Rename the Version probe section of each manager page to Version check.

8.0.1 (2026-09-23)

Note

8.0.1 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Stop counting a failed manager version probe as a run error, so an unrelated binary shadowing a manager’s name no longer warns on every command.

  • [mpm] Reshape each manager page: Configuration replaces Selecting and configuring <id> and prints the config-template block, Version probe nests under Reference traces, and purl types read pkg:<type>/.

  • [pixi] Record the global exclude-newer gate pixi merged, which stays declarative-only, so mpm has no knob to inject.

8.0.0 (2026-09-20)

Note

8.0.0 is available on 🐍 PyPI and 🐙 GitHub.

  • Breaking: [mpm] Replace the --require-cooldown-support and --allow-unsupported-managers flags with enforce, best-effort and off keywords on --cooldown. Configuration moves to a [mpm.cooldown] table with period and policy keys; the former [mpm] cooldown string still sets the period, with a deprecation warning.

  • Breaking: [mpm] Move the per-manager overrides to [mpm.overrides.<id>], from [mpm.managers.<id>], which collided with the managers subcommand’s own options. A stale section is named in a warning and ignored.

  • Breaking: [mpm] Pair each manager’s selectors on one help-screen line, as --brew / --no-brew. Their no_<id> configuration keys and MPM_NO_<ID> variables are gone: spell them <id> = false and MPM_<ID>=false.

  • Breaking: [mpm] Layer the discovered configuration files instead of applying only the first: a project’s [tool.mpm] now wins key by key over a machine-wide config. An explicit --config still pins one file.

  • Breaking: [bar-plugin,gnome-shell] Rename the grouped-layout setting to VAR_GROUP_BY_MANAGER in the plugin and group-by-manager in the extension, from VAR_SUBMENU_LAYOUT and submenu-layout, and turn it on by default. A configuration still using the old name gets the default.

  • Breaking: [bar-plugin] Rename the VAR_TABLE_RENDERING variable to VAR_ALIGN_COLUMNS, matching the GNOME Shell extension’s own setting.

  • [mpm] Add --shell-env to adopt the environment of the login shell before looking for managers, so a run started by a menu bar plugin, a desktop extension or a scheduled job sees the same managers as a terminal.

  • [mpm] Add --sudo-command and its [mpm] sudo_command key to name the privilege escalator, and escalate through doas on a host carrying no sudo, as OpenBSD, Alpine and NetBSD do, or through run0 on a systemd host carrying neither.

  • [mpm] Accept pkexec as a --sudo-command choice on hosts whose polkit rule grants org.freedesktop.policykit.exec, declining the run where the rule is missing.

  • [mpm] Escalate on Windows through gsudo, or Microsoft’s sudo.exe behind it, for a manager asked to with --sudo or a [mpm.overrides.<id>] sudo = true entry.

  • [mpm] Escalate through doas where sudo is Alpine’s doas-sudo-shim, which rejects every option the credential probes send and so reported a cold cache.

  • [mpm] Override the cooldown policy per manager with a cooldown_policy key under [mpm.overrides.<id>], pinning it to enforce, best-effort or off whatever --cooldown and [mpm.cooldown] resolve to.

  • [flatpak,mpm] Gate flatpak under --cooldown with a per-app probe reading the publication date of each app’s latest build from its remote, holding back any release younger than the window.

  • [mas] Gate the Mac App Store under --cooldown with the same per-app probe, reading each app’s release date from mas lookup --json.

  • [paru] Gate paru’s AUR half under --cooldown: too-fresh AUR packages, dated by the RPC’s LastModified, are held out of the --sysupgrade transaction with --ignore.

  • [mpm] Report only the detected managers in mpm managers, dropping the Supported and Executable columns. --view supported restores the previous listing, --view all reports every manager mpm implements.

  • [mpm] Detect managers concurrently in mpm managers, behind a spinner, and probe the version of managers sharing a CLI once instead of once each, brew/cask, uv/uvx and yarn/yarn-berry among them.

  • [mpm] Draw the brand mark as ANSI art on the --version screen, beside the interpreter, the platform, the number of managers usable here and, for a downloaded binary, when and for what target it was compiled.

  • [mpm] Name the running command in the progress spinner, and the operation on every ✓/✘ trail line, which now closes on its duration: ✓ brew.install: jq (1.2s). Lines logged during an operation carry the same warning:brew.install: label.

  • [mpm] Hold the spinner still during a call whose manager may prompt for a sudo password, naming it on a static line, and run a manager that escalates internally after the concurrent batch, so its prompt gets a quiet terminal.

  • [mpm] Print the command to copy-paste in the end-of-run error summary, narrowed to the managers that reported errors, in place of the bare --verbosity DEBUG pointer.

  • [mpm] Add an Examples section to mpm --help and every subcommand’s, rendered in the man pages too, and order the subcommand sections from the broadest to the narrowest.

  • [mpm] Rename the Output options help section to Reporting options, shrink the --table-format and --config entries, and close an unmaintained manager’s selector help with (unmaintained) in place of Click’s (DEPRECATED).

  • [mpm] Wrap the name and version columns of mpm installed, mpm outdated and mpm search, and the Supported and CLI columns of mpm managers, inside their cell, measuring tables against the terminal width. package_id never wraps.

  • [mpm] Load the SPDX and CycloneDX writer libraries only when mpm sbom runs, cutting about 300 ms off the startup of every other command for anyone carrying the [sbom-offline] extra.

  • [brew] Scan formulae for vulnerabilities: mpm --network sbom now queries OSV with the upstream registry purl Homebrew records for a formula, instead of the pkg:brew/… coordinate no advisory database indexes.

  • [apt,apt-mint,aptitude,aura,dkp-pacman,dnf,dnf5,nala,pacaur,pacman,pamac,paru,pikaur,pkg,shelly,trizen,xbps,yay,yum] Mark a package already installed as a dependency as explicitly installed when mpm install or mpm restore names it, so mpm cleanup --orphans keeps it.

  • [flatpak] Pin a runtime already installed as a dependency when mpm install or mpm restore names it, so mpm cleanup --orphans keeps it. This raises the flatpak floor to 1.9.1.

  • [winget] Silence progress spinners by passing --no-progress on every invocation, which raises the winget floor to 1.29.280.

  • [gem,npm,pip] Report each manager’s install root and its owner in mpm doctor.

  • [cpan,gem,npm,pip] Warn with the [mpm.overrides.<id>] sudo = true remedy when an operation carrying a dormant privileged marker fails on a permission error, like a global install into a root-owned prefix.

  • [conda,dotnet,go,haxelib,pixi] Resolve the pkg:conda, pkg:golang, pkg:haxe and pkg:nuget pURL types to these managers, which raised instead of routing.

  • [dkp-pacman,emacs,mamba,micromamba,nala,pikaur,pipxu,trizen,urpmi,uvx] Resolve pkg:alpm, pkg:conda, pkg:deb, pkg:melpa, pkg:pypi and pkg:rpm pURLs to these managers too, alongside the ones already handling each type.

  • [mpm] Detect CRUX and NuTyX, two source-based Linux distributions.

  • [eopkg,mpm] Detect Solus, where every run reported an unrecognized platform and selected no manager at all.

  • [am,miktex,nala,pamac,pkcon] Declare support for the Linux compatibility layers, WSL included, in place of the Linux distributions alone, so the readme’s operation matrix reports their platforms.

  • [sun-tools] Activate on illumos as well as Solaris, and report each package’s human-readable name, which was parsed from pkginfo -l and then dropped.

  • [am] Add the AM AppImage manager with installed, upgrade, remove and cleanup support. It declares no install, which blocks on an escalation prompt, no outdated and no search.

  • [antidote] Add the Antidote Zsh plugin manager with installed, outdated, install, upgrade and remove support, executed through Zsh since Antidote ships as a sourced shell function.

  • [antigen] Add the Antigen Zsh plugin manager with installed, upgrade and remove support. It declares no install: antigen bundle loads a bundle for the current shell only.

  • [aptitude] Add aptitude with inventory, outdated, search, orphans, install, remove, upgrade, sync and cache cleanup.

  • [aura] Add the aura AUR helper, reporting repository and AUR upgrades together.

  • [basalt] Add the Basalt Bash package manager with installed, install and remove support, every operation going through its global subcommand tree.

  • [bin] Add the bin binary manager with installed, outdated, upgrade and remove support, keyed on the installed binary’s absolute path. It declares no install, since bin installs from a source spec no listing reports back.

  • [bob] Add the bob Neovim version manager with installed, search, install, remove and upgrade support, a version token being what it calls a package, nightly included.

  • [bpkg] Add the bpkg Bash package manager with install support, forced --global. It exposes no inventory and no removal verb.

  • [bun] Add bun, covering what it installs globally into its own prefix, invisible to npm, pnpm and yarn. Upgrades force --latest, without which a package held at its recorded range reports success while changing nothing.

  • [choosenim] Add the choosenim Nim toolchain installer with inventory, catalog search, install, remove and single-version upgrade.

  • [claude-code-plugins] Add the Claude Code plugins manager with inventory, install, remove, single-plugin upgrade, marketplace sync and orphan cleanup.

  • [clib] Add the clib C package manager with search, install and remove support, install forced --global. It ships no listing command, so no inventory is declared.

  • [dkp-pacman] Add devkitPro’s pacman fork, covering the console homebrew toolchains, with the full operation set inherited from pacman.

  • [dotnet] Add the .NET global tool manager with installed, search, install, upgrade and remove support, including version pinning, its localized listings pinned to one language.

  • [elan] Add the elan Lean toolchain manager with installed, install, remove, orphans and cleanup support, a toolchain name being what it calls a package.

  • [emacs] Add the GNU Emacs package manager, driving package.el headlessly for inventory, install, remove and archive refresh.

  • [fisher] Add the Fisher Fish plugin manager with installed, install, upgrade and remove support, executed through Fish since Fisher ships as an autoloaded shell function.

  • [gcloud] Add the Google Cloud CLI’s component manager with installed, outdated, install, upgrade and remove support. It declares no single-package upgrade, naming components expanding the selection through their dependencies.

  • [getnf] Add the getnf Nerd Fonts installer with installed, search, install, remove and upgrade support, a font being what it calls a package.

  • [gext] Add gext, covering the GNOME Shell extensions installed from extensions.gnome.org, the inventory forcing --all so disabled extensions are reported too.

  • [ghcup] Add the Haskell ghcup toolchain installer with installed, search, install, remove, sync and cleanup support, every tool keyed as <tool>-<version>. It declares neither upgrade operation, ghcup upgrade replacing the ghcup binary itself.

  • [go] Add the Go package manager, listing and installing the commands go install puts on the machine.

  • [gup] Add the gup package manager, reporting, removing and upgrading the binaries go install leaves under $GOBIN.

  • [haxelib] Add the Haxe haxelib package manager with installed, search, install, upgrade and remove support, every call forced --global. It declares no outdated, haxelib computing staleness only while upgrading.

  • [hyprpm] Add the hyprpm Hyprland plugin manager, listing, installing, removing and upgrading plugin repositories.

  • [ips] Add the Image Packaging System of Solaris and illumos, with inventory, search, install, remove, upgrade, catalog sync and history purge.

  • [jpm] Add the jpm Janet package manager with install, remove, upgrade --all, sync and cache cleanup support. No listing command exists, so no inventory is declared.

  • [julia] Add the Julia Pkg package manager, with inventory, outdated, install, remove, upgrade and registry refresh.

  • [juliaup] Add the juliaup Julia version manager with installed, outdated, search, install, upgrade, remove and cleanup support, channels being the packages. It declares no sync, only the mutating operations refreshing its versions database.

  • [krew] Add the krew kubectl plugin manager with installed, search, install, upgrade, remove and sync support. Its piped listing carries no version.

  • [lazy] Add the lazy.nvim Neovim plugin manager with installed and upgrade support. It declares no install or remove: lazy.nvim materializes only the plugin set the user’s own Lua configuration names.

  • [luarocks] Add the LuaRocks package manager with installed, outdated, search, install, upgrade and remove support, every call forced --no-project so the inventory answers for the machine.

  • [lure] Add the LURE package manager with inventory, catalog search, install and repository refresh.

  • [mamba,micromamba] Add mamba and micromamba, reading the inventory from list --json and synthesizing outdated from the dry-run transaction the way the conda wrapper does. Search matches package names exactly.

  • [mason] Add mason, the Neovim installer for LSP servers, DAP adapters, linters and formatters, its inventory read off mason’s install tree by a --clean Neovim.

  • [micro] Add the micro editor’s plugin manager with installed, search, install, upgrade and remove support, run headlessly. micro exits zero from every plugin command whatever the outcome, so failures are read from its output.

  • [microdnf] Add microdnf, the package manager of RHEL-family minimal images, with inventory, outdated, name search, version-pinned install and upgrade, remove, sync and cache cleanup.

  • [miktex] Add the MiKTeX TeX package manager with installed, install, upgrade, remove and sync support, queries disabling its on-the-fly installer. It declares no outdated.

  • [nala] Add the Nala front-end to Debian’s apt with installed, outdated, search, install, upgrade, remove, sync and cleanup support, every call forced LC_ALL=C. It joins the dpkg lock family.

  • [nimble] Add the Nimble Nim package manager with installed, search, install, remove and sync support, the inventory forcing --ver so every package carries its version.

  • [oh-my-fish] Add the Oh My Fish framework with installed, install, upgrade and remove support, executed through Fish since Oh My Fish ships as a sourced shell function.

  • [ollama] Add the Ollama model manager with installed, install, upgrade and remove support, models keyed on their name:tag pair. It declares no outdated, nothing reporting a stale model without downloading it. Listing models starts ollama’s daemon on macOS and Windows.

  • [opam] Add the OCaml opam package manager with installed, search, install, upgrade, remove and sync support.

  • [pamac] Add Manjaro’s pamac package manager with installed, outdated, orphans, search, install, upgrade, remove and cleanup support, scoped to the official repositories, escalation left to polkit.

  • [pear] Add the PEAR package manager with inventory, outdated, install, remove, upgrade, channel sync and cache cleanup.

  • [pearl] Add the Pearl package manager with inventory, search, install, remove and single-package upgrade.

  • [pi] Add the Pi extensions manager with inventory, install, remove and upgrade of the packages that extend the Pi coding agent.

  • [pikaur] Add the pikaur AUR helper with the full operation set inherited from pacman.

  • [pipxu] Add the pipxu package manager with inventory, install, remove and upgrade support.

  • [pixi] Add the pixi global tool manager with installed, install, upgrade, remove and cleanup support, packages keyed on the global environment pixi global addresses.

  • [pkgit] Add the pkgit package manager with inventory, search, install and full upgrade of the packages it compiles from git repositories.

  • [pkgm] Add the pkgm package manager with inventory, outdated, install, remove and full upgrade support.

  • [platformio-core] Add the PlatformIO Core package manager, listing and upgrading the platforms, tools and libraries it installs machine-wide.

  • [prt-get] Add the CRUX ports front-end with inventory, outdated, catalog search, install, remove, single-port upgrade, full upgrade and ports-tree sync.

  • [pyenv] Add the pyenv Python version manager with installed, search, install and remove support, virtualenvs excluded since pyenv uninstall would delete their base version instead.

  • [raco] Add Racket’s raco pkg with installed, install, remove and upgrade support, the listing forcing --all and --long so auto-installed packages and their full checksums are reported.

  • [roswell] Add the Roswell package manager, listing and installing the Common Lisp implementations it manages.

  • [rustup] Add the rustup Rust toolchain installer with installed, outdated, install, upgrade and remove support, toolchains being the packages. Every mutating call forces --no-self-update.

  • [sheldon] Add the Sheldon shell plugin manager with upgrade and remove support. It declares no installed, Sheldon printing no listing, and no install, sheldon add needing both a local name and a source flag.

  • [shelly] Add the Shelly package manager with inventory, outdated, search, install, remove, upgrade, database sync and cache and orphan cleanup.

  • [skills] Add the Agent Skills manager, listing, removing and upgrading the skills installed for the coding agents on a machine.

  • [spack] Add the Spack package manager with installed, search, install, remove, sync and cleanup support, every call forced --no-env. No outdated and no upgrade: installing over a package adds a second build rather than replacing the first.

  • [trizen] Add the trizen AUR helper with the full operation set inherited from pacman.

  • [vagrant] Add Vagrant’s box manager with installed, outdated, search, install, upgrade, remove and cleanup support, one package per box name.

  • [vcpkg] Add the vcpkg C and C++ library manager, covering its classic mode: every call forces --classic, and packages are keyed on the name:triplet specification vcpkg addresses them by.

  • [xcodes] Add the xcodes Xcode version manager with installed, remove and sync support. It declares no install: downloading an Xcode always authenticates against an Apple ID, with no non-interactive path.

  • [yazi] Add yazi, the package manager of the ya companion to the Yazi file manager, reporting plugins and flavors as one inventory keyed on their Git coordinates.

  • [zef] Add the Zef Raku package manager with installed, search, install, upgrade, remove and sync support, both listings reduced to one entry per distribution name.

  • [zeroinstall] Add the Zero Install package manager with search, remove and cache cleanup support.

  • [zim] Add the Zim Zsh module manager with installed and upgrade support. It declares no install or remove: Zim materializes only the module set the user’s own .zimrc names.

  • [zplug] Add the zplug Zsh plugin manager with installed and upgrade support. It declares no install or remove: zplug materializes only the plugin set the user’s own .zshrc names.

  • [zvm] Add the zvm Zig version manager with inventory, catalog search, install, remove and build-cache cleanup.

  • [bar-plugin,gnome-shell] Pass --shell-env to mpm 8.0.0 and newer, so the menu lists the managers installed under the home directory and pnpm’s global packages.

  • [bar-plugin,gnome-shell] Name the package of each upgrade action with a pURL of its manager, so mpm no longer looks it up in the installed packages first.

  • [bar-plugin,gnome-shell] Offer uv tool install --upgrade meta-package-manager when no mpm is found, beside an entry opening the installation page for the systems uv does not answer for.

  • [bar-plugin,gnome-shell] Split a version diff at the same point in both frontends, and highlight only the new token when one version is the other plus a whole token: 14ubuntu6 → 14ubuntu6.1 highlights .1 alone.

  • [bar-plugin] Add VAR_ALWAYS_VISIBLE: set it to false to hide the menu bar icon while no package is outdated and no manager reported an error.

  • [bar-plugin] Add VAR_MPM_OPTIONS, extra options spliced into every mpm call before the subcommand, and an About row naming the plugin’s version, the mpm release it resolved and the command that answered.

  • [bar-plugin] Cap how wide a version renders in a menu line, tunable with VAR_MAX_VERSION_WIDTH, so an over-long one no longer blanks the target version of its own row.

  • [bar-plugin] Fold each manager section into an inline accordion carrying a native badge for its outdated count on SwiftBar 2.1.0 and above, in the grouped layout. Xbar keeps its sub-menus.

  • [bar-plugin] Align the version arrows across every manager in the table rendering, so they line up down the whole menu instead of only within a section.

  • [bar-plugin] Quote the default values of the plugin variables and declare the font variables as swiftbar.var, so SwiftBar 2.1.0 and above exposes all of them in its settings UI.

  • [gnome-shell] Center the menu’s version pairs around their arrow, mirroring the plugin’s VAR_ALIGN_COLUMNS, with an align-columns setting to switch it off.

  • [gnome-shell] Add an mpm-options setting, extra options spliced into every mpm call the extension makes, and report the resolved mpm release and command in the preferences window.

  • [gnome-shell] Render every panel state and menu marker with a stock symbolic icon, in place of four bundled SVGs and the 🆙 and ⚠️ emoji, and mark a running check with a refresh icon and a greyed Checking… row.

  • [gnome-shell] Render each package row’s version diff as one label instead of five, so a report of a thousand packages scrolls smoothly, and each version as one string, closing the gap that split 5.0.0~beta1-0ubuntu7.

  • [gnome-shell] Refresh the package list as soon as a background upgrade exits, instead of waiting out the re-check delay.

  • [gnome-shell] Scroll the package list with the wheel while a manager’s submenu is expanded, drop the expander arrow from a manager with nothing to report, and drop the blank band shown above Checking… before the first report.

  • [gnome-shell] Pack the extension from the commit being released, and bundle the license in it: v7.6.1 shipped a zip advertising 7.6.2.dev0 as its version-name.

  • [mpm] Raise the click-extra floor to 9, whose wrap --help-format man renders the man pages each release attaches. --man no longer writes roff.

  • [mpm] Stop silencing log messages in serialized output: a fatal error like No manager selected. now reaches <stderr>, and an ignored --columns selection is reported at INFO.

  • [mpm] Narrate the sudo priming decisions at --verbosity INFO, and expose the probe’s raw answer and every cache refresh at DEBUG.

  • [mpm] Warn before escalating a manager whose binary is not owned by the user or root, and when the sudo credentials primed for a run are dropped mid-flight, as every Homebrew command does on startup.

  • [mpm] Skip the up-front password prompt when sudo reports the user is not authorized to run it at all, and recognize a NOPASSWD policy that sudo --validate reports as a cold cache.

  • [mpm] Ask for the password of the account sudo accepts it from, which is root under openSUSE’s default targetpw policy.

  • [mpm] Recognize sudo-rs, Ubuntu’s default sudo since 25.10: its version banner, its interactive authentication is required failure, and its denial of a user no sudoers rule matches.

  • [mpm] Exit quietly on a Ctrl+C pressed while a run is already shutting down, instead of printing a threading traceback.

  • [mpm] Skip a manager whose CLI cannot be executed instead of aborting the run: a wrong-architecture or non-program binary anywhere on PATH used to crash every subcommand.

  • [conda,mamba,micromamba] Stop running conda, mamba and micromamba concurrently: they act on one environment prefix and one package cache.

  • [pacaur,pacman,pamac,paru,pikaur,trizen,yay] Stop running the AUR helpers concurrently with pacman and with each other, all of them driving the same pacman database.

  • [pkg,ports] Stop running ports concurrently with pkg, which holds the advisory lock on the install database both register into.

  • [scoop,sfsu] Stop running sfsu concurrently with scoop, whose buckets and cache its own update and cleanup reach.

  • [urpmi] Stop running urpmi concurrently with the other RPM front-ends, which reach one database on the same host.

  • [pacstall] Serialize pacstall against the apt family rather than against pacman, since it installs through dpkg.

  • [cargo,gem,mamba,micromamba] Record that each tool’s shipped release-age gate never reaches the commands mpm drives, in place of a pending upstream proposal.

  • [vscode,vscodium] Point the cooldown status at the open request covering extension installs: the delay VS Code shipped holds back automatic updates only.

  • [winget] Record the optional ReleaseDate its manifests carry as author-supplied, so it cannot back a release-age gate.

  • [mpm] Package mpm for openSUSE: the spec builds on Tumbleweed against the dependencies the distribution ships, and installs today from a personal Open Build Service project while the submission to system:packagemanager is prepared.

  • [mpm] Bump the in-repo packaging specs: Alpine builds mpm 7.6.1, click-extra 8.9.1 and extra-platforms 13.8.0, MacPorts and Nix build click-extra 8.9.0.

  • [mpm] Fix the Nix package build on macOS, where the Darwin sandbox cut click-extra’s tests off from localhost, and nix run github:kdeldycke/meta-package-manager?dir=packaging/nix failing in cloup’s patch phase.

  • [mpm] Regroup the GitHub manager labels: conda-based now covers mamba, micromamba and pixi beside conda, dpkg-based covers nala, and a bash-based group collects basalt and bpkg.

  • [mpm] Fix every escalated command failing for want of a password on a warm sudo credential cache: commands were detached into a session of their own, losing the terminal sudo keys its cache on.

  • [mpm] Fix pURLs losing part of the package ID: pkg:npm/%40angular/animation now resolves to @angular/animation rather than the unrelated animation, pkg:npm/JSONStream keeps its case, and a manager ID like julia resolves as a type.

  • [mpm] Fix a crash rendering tables to a non-UTF-8 stream, which broke every table subcommand on Windows as soon as its output was redirected.

  • [mpm] Fix comparison of the Gentoo and Alpine post-release suffixes: 1.0_p1 and 1.0_git20240101 now rank above 1.0, not below it.

  • [mpm] Fix mpm --tree, which drew every subcommand’s short help off the screen.

  • [mpm] Fix mpm crashing at startup with click-extra 9.3.0 and 9.3.1.

  • [ips,mpm,sun-tools] Fix mpm crashing on every illumos host, where the platform probe matched Solaris too and the i86pc machine string went unrecognized.

  • [ports,sdkman] Fix --plan for the operations that query before they act: they reported every package as missing instead of printing the command.

  • [pkg,vagrant,vcpkg,yarn] Warn and report no package, instead of crashing, when a JSON listing cannot be parsed.

  • [apk] Read the installed inventory from the structured apk query applet on apk-tools 3, and parse its search output, which appends each package’s description. Every result was dropped on Alpine edge.

  • [choco] Fix installed, outdated and search, which returned nothing at all because of a --retry-count=3 option Chocolatey does not have, and escalate install, remove and both upgrade paths, which failed unprivileged.

  • [cpan] Stop reading cpan’s index-refresh progress lines as packages, and list the core modules Debian and Ubuntu reach through symlinked @INC directories, which cpan -l skips.

  • [dnf,dnf5,yum] Fix version detection against dnf5, whose banner was read as the version dnf5, dropping every RPM front-end from the pool on Fedora 41 and later.

  • [dnf,dnf5,yum] Fix search on dnf5, which returned no results at all, and outdated, which reported the upgrade candidate’s own version as the installed one.

  • [dnf] Decline a dnf5 binary reached through the dnf name, leaving it to the dnf5 manager instead of reporting the same RPM database twice.

  • [emerge] Fix outdated and search, which reported nothing on Gentoo: the global --quiet they sent strips the fields their parsers read.

  • [eopkg] Fix version detection on eopkg 5.0.0, which calls itself eopkg.bin in its banner: the manager left the pool on every Solus host running it.

  • [eopkg] Fix installed and outdated, which silently dropped the last two packages of every listing, and report the upgrade target in outdated, which had none.

  • [eopkg] Fix search, which passed an empty argument to eopkg in extended mode, and decode the character references its descriptions carry.

  • [flatpak] Fix search reporting only its first result and silently dropping every other match.

  • [fwupd] Fix every query aborting on a host with no updatable device, which fwupd answers with an Error object in place of its device list, or with a device carrying no flags, name or version. Refs #1528.

  • [pip] Skip an interpreter carrying no pip, so an mpm installed by uv tool or pipx drives a real Python instead of its own virtualenv, and skip a Windows python3.exe app-execution alias with no Python behind it.

  • [pkg] Fix every operation on FreeBSD, where pkg rejects the global --quiet it was passed, and repair search, which omitted its subcommand and mis-parsed the results.

  • [ports] Fix the FreeBSD ports manager, which reported no version and so never activated, and repair installed, outdated, install and upgrade, the last of which hung on the port options dialog until it timed out.

  • [winget] Fix installed and outdated leaving out applications installed without winget, like a vendor’s own MSI, although upgrade --all upgrades them.

  • [xbps] Fix version detection, whose XBPS: banner was read as the version, dropping the manager from the pool on every Void Linux host. Closes #2074.

  • [xbps] Fix search, which returned no results: the long --repository option takes a URL and was consuming the --search that followed it.

  • [yarn] Fix search and install reading a failed registry request as a missing package: the failure now prints as a warning naming the registry’s answer.

  • [yarn] Fix outdated reporting an error instead of the packages whenever an update exists.

  • [zypper] Fix installed, outdated and search, which crashed whenever the query matched exactly one package.

  • [bar-plugin,gnome-shell] Mark a package check as failed on the exit code of mpm only, so a --verbosity raised in the options no longer replaces the package list with log lines.

  • [bar-plugin] Fix the plugin rendering a version error instead of its menu on every released SwiftBar: the minimum requirement was pinned on an unreleased 2.1.2 test build.

  • [bar-plugin] Follow the symlink both hosts are installed through when looking for the mpm the plugin ships with, probe a virtualenv interpreter as itself, and stop a menu action from importing a source checkout it is spawned from.

  • [bar-plugin] Stop the plugin’s virtualenv search at the user’s home folder, as its comment always claimed.

  • [bar-plugin] Separate a package name from its version diff by two spaces, and render an error line at the same size as every other monospace row.

  • [gnome-shell] Fix a gnome-shell crash when a setting changed while a manager’s submenu was open in the grouped layout.

  • [gnome-shell] Fix a check still in flight outliving disable(), which left a main loop source free to fire on a locked session.

  • [bar-plugin,gnome-shell,mpm] Publish the documentation at https://mpm.run, hosted on Cloudflare Pages. Every link in the readme, the benchmark, the packaging specs and both frontends points at the new origin, and the former kdeldycke.github.io URLs redirect to it.

  • [mpm] Publish every documentation page at an extension-less URL, https://mpm.run/managers/apk/ instead of https://mpm.run/managers/apk.html, and redirect every URL retired since the first Sphinx build in 2016 to the page that inherited it.

  • [mpm] Publish an index of every man page at https://mpm.run/man/, a canonical URL on every page, a sitemap.xml and a robots.txt.

  • [mpm] Regroup the documentation sidebar under ten topical sections, give every module its own API reference page, and drop the API sections the guide pages repeated at their foot.

  • [mpm] Add an upstream contributions page at mpm.run/upstream, tracking the fixes, reports and workarounds sent to the managers, frontends and toolchain mpm builds on.

  • [mpm] Document concurrency on a page of its own: how far --jobs spreads a command, a per-subcommand table of what runs at once, and a diagram of the managers queuing on a shared backend.

  • [mpm] Add a Concurrency section to each manager’s page, naming the managers mpm never runs it alongside and what they contend for, rendered from the lock families themselves.

  • [mpm] Link a manager’s source repository and Wikipedia article from its page, and a declined tool’s article from its unsupported verdict. Manager definitions accept repository_url and wikipedia_url keys.

  • [mpm] Report each manager’s upstream stars, newest release or tag and newest commit on the manager index and its card, sampled weekly by repomatic’s sample-metrics into one committed CSV through the new metrics.yaml workflow.

  • [nala] Sample the upstream project from GitLab, so the manager page gains the upstream stars and commit facts, and its live badges.

  • [mpm] Link the tracker badge of each manager card to the open issues and pull requests carrying its label, rather than to every one ever filed.

  • [mpm] Merge the manager index into a single table opening on a proportion bar of the support states: wrapped managers first, then the declined ones grouped by verdict, every row clickable, with one legend label per state.

  • [mpm] Split the unsupported-managers page into one section per declined tool, titled by the tool and its verdict glyphs so the manager ID is the anchor, and close each verdict on the release that first published it.

  • [mpm] Fold the tools sharing a verdict word for word into family sections on the unsupported page. Those tools’ anchors move to the family name.

  • [mpm] Record 47 more unsupported managers, covering the JetBrains IDE plugin updaters, the dotfile syncers, the self-updating applications, the container runtimes and the system-database refreshers, so every tool assessed lands in the pool or on the unsupported page.

  • [mpm] Record as unsupported zgenom, zr, app-man, bash-it, oh-my-bash, oh-my-zsh, pip-review, pipupgrade, home-manager, pkgfile, windsurf, antigravity, cursor, cursor-agent, dpp.vim, nh, opi, osc, myrlyn and transactional-update, each with its verdict on the page.

  • [mpm] Mark with 🛟 the unsupported managers topgrade still reaches, on the unsupported page and the benchmark: 56 of the 69 are upgradable through mpm upgrade --topgrade.

  • [mpm] Queue cards, pkgman and slackpkg as wrap candidates, each waiting on a NuTyX, Haiku or Slackware host, and rpm-ostree on an ostree-booted host, leaving the benchmark with no unassessed manager.

  • [mpm] Add 47 managers to the benchmark’s support table, covering every tool topgrade drives that had no row yet, and the GNOME Shell extension and desktop notifications to its feature matrix.

  • [mpm] Add ten features to the benchmark’s matrix: accessible output, skipping auto-updating packages, exact and fuzzy search, SBOM export, vulnerability scan, per-manager overrides, command plan, per-call timeout, offline by default and man pages.

  • [mpm] Back 177 competitor cells of the benchmark’s feature and operations tables with a link proving each verdict, mark 46 operations a tool rules out by design as ❌, and link every mpm ✅ to the page implementing it.

  • [mpm] Refresh the benchmark’s topgrade, pacaptr and metapac cells: soar and zerobrew support, the -Qo lookup, the unmanaged listing, two bundled operations demoted to 🟡 and two withdrawn refusals.

  • [mpm] Plot the star history of mpm and its benchmarked peers from the sampled database on a logarithmic axis, absolute and against each project’s age, replacing the star-history.com embeds GitHub’s API restriction broke.

  • [mpm] Highlight the hovered row, and not only its column, in the benchmark, SBOM, cooldown and augmentations tables.

  • [mpm] Redraw the brand mark flat, in two purples and their midpoint, across the logo, the banner, the social card, the favicon and the icons the binaries ship.

  • [mpm] Rework the readme: SVG terminal windows picture the headline features and upgrade --all under a cooldown, the transcripts are refreshed, and the two quick-start sections fold into the feature list.

  • [mpm] List the readme’s supported managers as one roster, instead of tabling every operation they implement, and lead its installation section with uv.

  • [mpm] Open every installation method with a command that works today: the Alpine Linux, Chocolatey, Nix and Void Linux tabs carry the condensed build recipe from their packaging section, and close on an invitation to support the upstream pull request.

  • [mpm] Fix the installation page’s vertical tabs, which a long URL in one tab widened past the page, and picture the --version screen on it.

  • [mpm] Chart the privilege-escalation decision path on the sudo page, document what each escalator can answer, and how to write the NOPASSWD rule unattended escalation needs.

  • [mpm] Rewrite the SBOM page in short plain sentences, flip its coverage matrix to one column per manager, and fix its offline install example, which used pip instead of uv.

  • [mpm] Fix three documented commands that no longer ran (the Carapace spec export, the man-page install for packagers, reading a manual with --man), and document plist among the --export-config formats.

  • [mpm] Distinguish, in the Python compatibility table, a version a release rules out (❌) from one that did not exist yet when that release was cut (–).

  • [mpm] Link every manager named in the documentation pages to its own page, at most once per paragraph, and fix the cross-references that rendered as plain text on the manager and configuration pages.

  • [composer,dnf,emerge,eopkg,pacman,pwsh-gallery,sfsu,yarn] Correct the commands shown on each manager’s page, which named fewer options than mpm actually runs.

  • [flatpak] Fix the search output shown on its page, whose tab separators had been flattened to spaces, leaving a transcript its own parser could not read.

  • [zypper] Show captured openSUSE Tumbleweed output in the manager page’s reference traces, in place of placeholder package names.

  • [bar-plugin,gnome-shell] Give each frontend page a release history of its own, built from the changelog entries scoped to it, and make each page self-contained: what a click runs, where its settings stop and mpm’s configuration starts, the version-diff colors.

  • [bar-plugin] Add screenshots of SwiftBar’s About submenu and preferences pane to the plugin page, captured at 2x on a HiDPI virtual display, and name SwiftBar ahead of Xbar wherever the pair appears.

  • [bar-plugin] Document the plugin folder of each host, SwiftBar having no default one, and where the macOS python3 comes from.

  • [gnome-shell] Illustrate the extension’s page with screenshots of its menu in both layouts and both shell appearances, captured from a real headless GNOME session by the new docs-screenshots.yaml workflow.

  • [gnome-shell] Restart the GNOME session before enabling the extension, in the documented installation steps: gnome-extensions enable asks the running shell rather than the disk.

7.6.1 (2026-08-11)

Note

7.6.1 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Fix upgrade <packages> and remove dying on an unhandled CLIError traceback when any selected manager’s installed-package query failed. The manager is now skipped with a warning, and the packages the other managers carry are still acted on.

  • [mpm] Count a manager whose failed command was raised to its caller in the end-of-run error summary, the serialized errors payload and the ✓/✗ trail. One reporting Could not list installed packages. was previously scored ✓.

  • [bar-plugin] Fix the uv launch candidate silently re-locking whatever project the plugin’s working directory landed in: it now runs frozen, pinned to the folder its lockfile was found in.

  • [mpm] Fix the Brewfile export swallowing every failure of a manager’s installed-package listing: only CLI errors are now tolerated, and unexpected crashes propagate.

  • [mpm] Fix the readme’s six standalone-binary download links and the self-installation walkthrough’s commands, which pointed at mpm-<platform>.<ext> asset names no release has published since 6.1.1. They now target the unversioned meta-package-manager-<platform>.<ext> aliases attached to every release since 7.4.0.

  • [mpm] Fix the configuration documentation claiming the --exclude parameter is advertised in the help message, where it is hidden like the --manager parameter documented beside it.

  • [pkg] Fix the pkg(8) and ports(7) man-page references rendering as broken markup on the manager’s documentation page.

  • [mpm] Give ZeroBrew its own tab in the installation methods.

7.6.0 (2026-08-10)

Note

7.6.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [vim-pack] Add Neovim’s built-in vim.pack plugin manager (Neovim 0.12 and above) with installed, install, remove and upgrade support. Plugins are keyed on their source URL, and each operation is a Lua one-liner run by a --clean --headless Neovim.

  • [zinit] Add the Zinit Zsh plugin manager with installed, install, remove and upgrade support. Zsh is the CLI mpm executes, and the plugin inventory is read from an interactive shell since Zinit tracks plugins in state the user’s .zshrc populates.

  • [mpm] Show each manager’s brand mark on its documentation page and in the manager index, from a new logo attribute naming an SVG vendored under docs/assets/managers/. 54 of the 75 managers carry one; the rest keep the default package glyph. Marks are inlined so they follow the light and dark themes.

  • [mpm] Close each manager’s documentation page on a changelog of its own: every changelog entry scoped to that manager, grouped by the release that shipped it, newest first.

  • [mpm] Add to each manager’s infobox an Issues and PRs badge carrying its GitHub label, in the label’s own color, linking to every issue and pull request filed under it. Managers sharing an ecosystem share one label, hence one search.

  • [mpm] Move how mpm invokes each tool into its infobox: CLI names, extra search paths, the arguments and environment forced on every call, and the call timeout. The How mpm drives section they came from is reduced to the version probe and moved next to the reference traces. The tracker badge and the source file close the box.

  • [mpm] Turn every URL of the manager descriptions into a proper link: bare URLs were rendering as dead text on the manager pages and in the API documentation.

  • [mpm] Reconcile the changelog’s scope tags against the git history of every manager implementation, followed through the 2016 split of the single-file plugin, the move into a dedicated folder and the later conversions to bundled definitions. 13 entries covering mpm’s own packaging, installation documentation or CI were rescoped to [mpm], where that work already sits; 6 manager fixes that had never been logged were added; the apt --yes and search fixes were extended to apt-mint, which inherits both; and the 2.3.0 empty-output fix was split into its general and gem-specific halves.

  • [mpm] Follow the documentation’s own light and dark toggle with the sidebar logo, instead of a single light-only variant that left the wordmark unreadable on the dark theme. Hide the readme banner on the front page, where it duplicated that logo and could not agree with the theme.

  • [mpm] Turn the license page into the project’s legal sink: it now also carries the trademark notice, the credits for every vendored brand mark, the documentation artwork attributions and a pointer to where dependency licenses live.

  • [gnome-shell] Add a GNOME Shell extension (GNOME 46 to 50) mirroring the SwiftBar/Xbar plugin: a top bar indicator lists outdated packages per manager, and every menu action runs mpm itself. Addresses #809.

  • [gnome-shell] Attach the packed extension to every GitHub release as an attested mpm-gnome-shell-extension.zip asset, built with gnome-extensions pack.

  • [bar-plugin] Menu actions run mpm itself instead of the manager’s native upgrade command, so manager selection, sudo policy, overrides and the cooldown all apply. A manager that cannot enforce an active cooldown is now skipped with a warning.

  • [mpm] A batch of managers running concurrently reports through a determinate progress bar (Searching [####----] 3/6 managers) instead of an indeterminate spinner. Each manager’s own CLI call keeps its per-call spinner when it runs alone.

  • [mpm] The ✓/✗ trail’s finisher carries an elapsed time only under --time, where it previously always showed one.

  • [mpm] The warnings proposing a CLI flag as their remedy now also name the configuration key that makes it stick: [mpm] require_cooldown_support for the cooldown skip, and [mpm] sudo for the two credential warnings.

  • [mpm] Raise the click-extra floor from 8.7.0 to 8.8.1, dropping mpm’s own is_stdout and prep_path helpers for the click_extra.output originals and inheriting click-extra’s own uncapped uv-build requirement.

  • [mpm] Rename the 🔌 bar-plugin GitHub label to 🔌 plugin, now covering the Xbar/SwiftBar plugin and the GNOME Shell extension alike.

  • [mpm] Fix the 🔌 plugin, 🖥 platform: macOS and 🖥 platform: Windows labels never being applied to issues: their keywords are now OR-joined into one case-insensitive pattern instead of all being required at once.

  • [mpm] Fix backup, dump and sbom dying on an unhandled FileNotFoundError when the output path points into a directory that does not exist yet: missing parent directories are now created.

  • [mpm] Fix guix install --load-path=packaging/guix failing on unbound python-pytest and python-xmltodict, whose modules were not imported, and align the definition with the upstream Guix stanza.

  • [mpm] Fix nix-env --file packaging/nix failing its runtime-dependency check on the stale click-extra 8.6.2 and extra-platforms 13.5.1 pins, bumping them to 8.8.1 and 13.6.0 to satisfy mpm 7.5.0’s raised floors.

  • [mpm] Add an Unsupported managers page documenting which tools are deliberately excluded and why, and what a manager must expose to be wrappable.

  • [mpm] Document that --cooldown replaces a stricter release-age policy already configured natively, instead of tightening it.

  • [mpm] Document the retraction path behind each package registry (yank, unpublish, relabel, index revert, flag only) and the per-version publish-date metadata it exposes, since a cooldown only protects where a compromised release can actually be withdrawn. Without one the gate can even prefer a malicious version over the fix that superseded it. Every pool manager is mapped to its registry, and its cooldown documentation page now closes on that registry’s row.

  • [gnome-shell] Lint the extension and its gjs test runner with ESLint against GNOME Shell’s own eslint-config-gnome ruleset, in a new eslint job installing the stack behind a 7-day npm --min-release-age cooldown.

  • [mpm] Drop the Codecov integration, its coverage badge and the XML report artifacts that fed it. Coverage is now gated in CI by the [tool.coverage] report.fail_under ratchet, cleared by the parallel non-destructive run; the bar-plugin and destructive slices opt out with --cov-fail-under=0.

  • [mpm] Run the project-metadata and GNOME Shell extension invariant tests on a single runner instead of on every matrix cell, behind a new once pytest marker and a once-tests job. Neither module imports package code, so the coverage floor is unaffected.

  • [mpm] Widen the test workflow’s trigger to changelog.md, readme.md, docs/** and gnome-shell/**. The suite holds all four to byte-identity with their generators, but an edit to any of them never ran the test guarding it.

  • [mpm] Declare the supply-chain cooldown window on the GNOME Shell extension and manager-logo workflows, and an explicit zero-length window on the distributor workflow, whose subject is the freshly published artifact.

  • [mpm] Drop the full Homebrew cask tap clone and the HOMEBREW_NO_INSTALL_FROM_API override from the test matrix, both left behind by a cask-version-checkout test that no longer exists.

  • [mpm] Fix the test matrix’s drift guard silently skipping for a week after every upstream toolkit bump: it resolved repomatic without the per-package cooldown exemption, so the workflow’s release-age window left the pinned version unresolvable and the failed run landed in the test’s skip branch.

  • [mpm] Scope the docs dependency group to Python 3.14 and above, the only interpreter that ever renders a page. Its members drop their marker-split floors for flat ones, and the lockfile stops carrying a second, older resolution of the documentation toolchain (myst-parser, sphinx, docutils, markdown-it-py, sphinx-autodoc-typehints, sphinx-design) for interpreters that never build the site.

7.5.0 (2026-08-03)

Note

7.5.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [volta] Add Volta package manager (installed, install, upgrade, remove), flagged unmaintained since its November 2025 retirement in favor of mise. pkg:npm/ purls now also resolve to it. Addresses #1995.

  • [mpm] Raise the click-extra floor from 8.6.1 to 8.7.0, scoping mpm’s strict-config check to its own pyproject.toml section and forcing telemetry off on a truthy DO_NOT_TRACK.

  • [mpm] Raise the extra-platforms floor from 13.5.1 to 13.6.0, whose new AlmaLinux detection stops the spurious unrecognized-platform warning mpm printed on AlmaLinux hosts.

  • [mpm] Bump the in-repo Alpine, Guix, MacPorts and Nix packaging specs to build from 7.4.1, switching Alpine to the PyPI sdist instead of the GitHub tag tarball.

  • [snap] Fix snap remove failing with error: unknown flag 'color' on recent snapd by no longer appending --color=never, which remove does not accept.

  • [mpm] Add favicon.svg and banner-social.svg (light/dark PNG exports) as the Sphinx browser-tab icon and OpenGraph image, and switch the readme banner to a dark-mode-aware <picture> element.

  • [mpm] Refresh the readme’s manager Sankey diagram and operation matrix.

7.4.1 (2026-07-28)

Note

7.4.1 is available on 🐍 PyPI and 🐙 GitHub.

  • [bar-plugin] Recolor the version-diff suffixes to match the SwiftBar menu appearance (from OS_APPEARANCE): the adaptive system red and green lose contrast on recent macOS’s translucent menus, so a light menu darkens both and a dark menu brightens the green.

  • [mpm] Raise the click-extra floor from 8.6 to 8.6.1 and the extra-platforms floor from 13.1 to 13.5.1.

  • [mpm] Drop the now-upstreamed Nix bar-plugin backport patch and bump the in-repo Alpine, Guix, MacPorts and Nix packaging specs to build from 7.4.0.

  • [mpm] Bump the in-repo Alpine, MacPorts and Nix packaging specs to build against click-extra 8.6.2 and extra-platforms 13.5.1, and correct the Alpine package license metadata from GPL-2.0-or-later to Apache-2.0.

  • [mpm] The GitHub issue and PR content-labeller no longer derives 📦 manager: labels from bare manager IDs, so a pasted mpm trace no longer tags an issue with every installed manager; only curated ecosystem keywords a human types now match.

  • [cpan] Document why cpan reports Perl’s core modules as outdated while upgrade --all never upgrades them: their versions are tied to the running Perl, cleared only by a writable Perl earlier on PATH. Addresses #1983.

  • [gem] Document that on recent macOS the system Ruby’s bundled gems surface as outdated yet cannot be upgraded in place, and point to running mpm against a writable Ruby earlier on PATH as the fix.

7.4.0 (2026-07-25)

Note

7.4.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Raise the click-extra floor from 8.4.0 to 8.6.0, the release shipping the OperationTrail batch ✓/✗ trail upstreamed from mpm’s own dispatch layer, which mpm now consumes from the published package instead of a git checkout.

  • [mpm] The Python and click-extra compatibility tables of the documentation read newest-first on both axes, following click-extra 8.6.0’s {matrix} ordering defaults: the most recent compatibility information sits in the upper-left corner.

  • [mpm] Bump the packaging pins of click-extra to 8.6.0 and the Nix pin of extra-platforms to 13.3.1 across the Nix, MacPorts and Alpine overlays, to match mpm’s dependency floors.

  • Breaking: [mpm] Remove the PackageManager.query_parts class method: Package.query_parts is the canonical query tokenizer.

  • Breaking: [mpm] The SBOM stats() dictionaries drop the components_in_document (CycloneDX) and relationships_total (SPDX) keys, which no consumer read.

  • Breaking: [mpm] Rename the manager deprecated flag to unmaintained and broaden it to cover abandoned or inactive upstreams (archived, years without a release, formally superseded, or a discontinued platform), not just officially retired projects. The deprecation_url attribute becomes an unmaintained_message markdown block rendered into the documentation, and the [mpm.managers.<id>] config override key deprecated is likewise renamed to unmaintained.

  • [mpm] Flag apt-cyg, pacaur and swupd as unmaintained, joining apm: their upstreams are archived, abandoned or belong to a discontinued platform, so they are hidden from default selection and dropped from the test matrices. Name them explicitly or pass --all-managers to still drive them.

  • [mpm] Add a maintenance_note attribute that renders a note admonition atop a manager’s documentation page for still-maintained but slowing or superseded upstreams worth watching (cave, dnf, fink, sorcery, stew, sun-tools, tazpkg, yarn, yum).

  • [mpm] Drop the unmaintained pacapt, sysget and whohas tools from the benchmark comparison and add a note pointing their users to mpm as an actively-maintained replacement covering the same cross-manager operations.

  • [mpm] Package managers gain shared parse_regex_lines and parse_json_items engines on the base class: configuration-defined operations and built-in managers now parse their listings through the same code path.

  • [mpm] The action commands (install, remove, upgrade, restore) name failed packages uniformly as id@version in their end-of-run critical: summary, instead of a mix of raw purls and bare IDs.

  • [mpm] doctor singularizes its end-of-run summary when a single manager reports problems.

  • [mpm] dump --merge and dump --update-version no longer misreport an existing target file as about to be overwritten, and only disclose the inert --overwrite flag when it was actually passed.

  • [brew,cask] cleanup invokes the cache scrub with the long-form --scrub flag.

  • [mpm] Add a --plan/-p option that prints the exact package-manager commands each state-changing operation would run, without running them. Read-only queries (installed, outdated, search) still execute, so install, remove and upgrade --all resolve to the commands they would actually run; the plan prints to stdout, one copy-pasteable command per line.

  • [mpm] Add an --orphans option to remove that also drops the dependencies the package alone pulled in, mapped to each manager’s native scoped cascade verb (apt remove --auto-remove, pacman --remove --recursive, dnf autoremove, xbps-remove --recursive, zypper remove --clean-deps). Managers with no such verb remove the package only. mpm builds no dependency graph: it delegates the reverse-dependency reasoning to the manager.

  • [mpm] cleanup decomposes into cumulative categories, each with a two-sided flag pair: --orphans/--skip-orphans (system-wide orphan sweep: apt autoremove, brew autoremove, flatpak uninstall --unused), --cache/--skip-cache (caches, downloads and left-over artifacts, the category a monolithic cleanup amounts to) and --repair/--skip-repair (local state verification, like flatpak repair). Positive flags narrow the run to the listed categories, skip flags subtract them, and a plain cleanup runs the cache and repair categories only: the orphan sweep is the one category removing packages, so it stays strictly behind --orphans, uniformly across managers, just as remove keeps its dependency cascade behind the same flag. The per-manager narration and the ✓/✗ trail name the categories dispatched to each manager (✓ brew (cache)). A manager with no native sweep verb but a native orphan listing gets the sweep synthesized from its orphans query, removing the listed orphans one by one until none are left (the in-process equivalent of Arch’s pacman -Rns $(pacman -Qtdq) idiom, covering pacman, its AUR helpers and zypper); the synthesized sweep only engages on an explicit --orphans, so a skip flag can never remove packages a plain cleanup would have left alone.

  • [mpm] Add an orphans subcommand listing the packages installed as dependencies that nothing requires anymore, without removing them. Each manager reports through its native read-only query (pacman --query --deps --unrequired, brew autoremove --dry-run, dnf repoquery --unneeded, zypper packages --unneeded, pkg autoremove --dry-run, apt autoremove --simulate, xbps-query --list-orphans, emerge --depclean --pretend, cave purge in its default pretend mode, pkg_delete -a -n). Supports the same query filtering, table projection and serialization as installed.

  • [mpm] Add a doctor subcommand (aliases check and diagnose) running each manager’s native self-diagnosis (brew doctor, pip check, pacman --database --check, npm doctor, dnf check, gem check, composer diagnose, mise doctor, apt-get check, pkg check --checksums, xbps-pkgdb --all, flatpak repair --dry-run, scoop checkup, port diagnose, tlmgr check all). Read-only: health is read from each command’s exit code, the report (merging <stdout> and <stderr>) is relayed verbatim, and the run exits non-zero when any manager reports problems, so it can gate a CI job (-0/--zero-exit opts out).

  • [mpm] Configuration-defined managers can declare remove_orphan, cleanup_orphan, cleanup_cache, cleanup_repair, doctor and orphans operations, wiring them to remove --orphans, the cleanup category flags and the orphans subcommand.

  • Breaking: [mpm] cleanup is no longer an operation managers define: every manager now declares cleanup category methods only (cleanup_orphan, cleanup_cache, cleanup_repair), and PackageManager.cleanup() composes the natively implemented ones. Monolithic cleanups across the pool were reclassified as cleanup_cache, and a configuration-defined manager declaring the old cleanup operation is rejected with an error naming the category keys.

  • [cave,pkg-tools] Their cleanup commands, both orphan sweeps (cave purge, pkg_delete -a), are re-declared as cleanup_orphan: cleanup --orphans now reaches them and cleanup --cache leaves them alone.

  • [apt,apt-mint,brew,cask,cave,dnf,dnf5,emerge,pkg,pkg-tools,xbps,yum] Plain cleanup no longer removes orphaned packages: their native sweeps moved behind cleanup --orphans. This also stops emerge’s cleanup from triggering its pre-depclean world upgrade unless --orphans is given.

  • [emerge] The cleanup steps split into cleanup_orphan (the safety upgrade plus --depclean) and cleanup_cache (eclean distfiles), giving emerge native cleanup --orphans support.

  • [uv] cleanup skips uv’s cache commands when mpm itself was launched by uv run or uvx, whose parent process locks the cache for as long as mpm lives: each uv cache command would otherwise wait on its own ancestor for UV_LOCK_TIMEOUT (300 seconds by default) and fail, stalling the cleanup for ten minutes.

  • [dnf,dnf5,xbps,yum] remove no longer cascades to orphaned dependencies by default: a plain removal keeps them. Use the new remove --orphans to restore the previous behavior.

  • [mpm] Every supported package manager gets a dedicated documentation page detailing its platforms, operations and backfilled capabilities, CLI invocation and version probe, escalation and cooldown behaviors, purl types, selection and configuration examples and the captured native outputs its parsers were written against, all rendered live from the manager declarations at Sphinx build time. A new hub page indexes the 72 pages, and manager IDs in the readme’s operation matrix, the benchmark table and the augmentations table now link to them.

  • [mpm] Each per-manager documentation page opens with a “What mpm adds to <id>” section, pitched at a reader who already knows the native tool: the capabilities mpm backfills for that manager (synthesized upgrade --all, orphan sweep, --exact/--extended search), the cross-manager reach naming its purl-ecosystem neighbors, and the universal augmentations. Derived live from the capability declarations, so it describes only what mpm does and never overstates a native limitation.

  • [winget] Documentation samples use the conventional > PowerShell prompt instead of PS C:\Users\kev>, reconnecting them to the corpus harvester: the documented commands are now validated against the constructed ones, the manager page gains its full Rosetta table and a clean version transcript, and the reference traces render under proper pwsh-session fences. The full and single-package upgrade samples show the exact winget update --all and winget install invocations mpm runs, and the agreement-prompt and different-install-technology illustrations move to non-fixture console fences.

  • [mpm] Each per-manager documentation page gains a Rosetta table mapping the manager’s own commands (uv pip list, brew install, pacman --sync, …) to their one-to-one mpm equivalents, harvested from the operation methods’ documented samples, and a recipes section with copy-paste snapshot/restore, SBOM export and CI-health-gate commands. The cooldown section now frames release-age gating as a supply-chain guard, the invocation section explains the forced arguments and environment as CI-friendly defaults, and the reference-traces section notes how the same raw output unifies through mpm.

  • [mpm] Add a MacPorts Portfile overlay under packaging/macports, carrying the port plus the dependency ports missing from the official tree, tested by a new macports-source job.

  • [mpm] Meta Package Manager is now available in MacPorts upstream, installable with sudo port install meta-package-manager and tested by a new macports job.

  • [macports,pkg,snap] Mutating operations now escalate through sudo by default, matching each tool’s canonical invocation (sudo port install, sudo pkg install, sudo snap install): MacPorts installs root-owned under /opt/local, the FreeBSD pkg frontend gains the markers its ports sibling already had, and snapd denies state changes from an unprivileged client. Opt out with --no-sudo or a per-manager sudo = false override. pkg passes IGNORE_OSVERSION as a command-line option now, which survives the sudo environment reset where the environment variable would be stripped.

  • [cpan,gem] The write operations carry dormant privileged markers like pip and npm: --sudo or a per-manager sudo = true override escalates installs into a system Perl or Ruby. Nothing escalates by default.

  • [fwupd] Mutating operations no longer escalate through sudo, aligning fwupd with the other polkit-native daemon clients (flatpak, pkcon): fwupdmgr hands firmware writes to the fwupd daemon over D-Bus, which authorizes them through polkit. Under a strict polkit policy, unattended mutations need a rule permitting them without interactive authentication, or an mpm run as root.

  • [pacstall,topgrade] Marked as internal escalators (internal_sudo): pacstall re-execs itself through sudo pacstall and topgrade runs each privileged step through its own sudo, so mpm never wraps them, keeps a warm credential cache alive for their mid-run escalations, and watches for hidden password prompts.

  • [pacman] sync now escalates through sudo like its other write commands: refreshing the sync databases writes root-owned state.

  • [dnf,dnf5] cleanup --cache now escalates through sudo: dnf clean all clears the root-owned package cache.

  • [mpm] Refresh the benchmark page operations table: new List orphaned dependencies row, the autoremove row re-scoped to the remove --orphans cascade, and mpm’s new orphans and doctor capabilities credited. Every competitor column is re-audited at its current release (topgrade 17.8.0, pacaptr 0.23.1, brew 6.0.12): capabilities only reachable bundled inside another operation are downgraded to 🟡, Homebrew’s concurrent-execution cell flips to supported (brew bundle install --jobs now installs across backends in parallel), and the negative-evidence links are re-verified, two of them pinned to the maintainer’s exact comment.

  • [mpm] Add an Alpine Linux APKBUILD overlay under packaging/alpine, carrying the package plus the 4 dependency packages missing from the official aports tree, tested by a new apk-source job.

  • [mpm] Regroup all downstream packaging knowledge on a new packaging.md documentation page: the test-suite wiring for distribution packagers, the dependency graph, the click-extra compatibility matrix, and a per-channel catalog with the build-from-spec instructions previously spread across the install page tabs. The install page now targets end users only, and the binaries catalog moves to the development section of the documentation.

  • [mpm] Ship tests/, docs/ and the .github/ workflow files in the PyPI sdist (kept out of the wheel), so distribution packagers can build and run the suite straight from the sdist instead of fetching a GitHub tag tarball.

  • [mpm] Split the test suite with a new integration marker: writable-$HOME builders run the hermetic layer with pytest -m "not integration" instead of a per-module ignore list. Repo-maintenance sync guards skip outside a git checkout, and the SBOM test modules skip when their optional extras are absent, so a lean build no longer needs to ignore them.

  • Breaking: [mpm] Rename the --show-params introspection flag to --params, and its environment variable from MPM_SHOW_PARAMS to MPM_PARAMS, following click-extra’s own rename.

  • [mpm] Manager invocations now run in their own POSIX session and process group: a timeout or Ctrl+C kills the whole process tree, so a wedged manager CLI leaves no orphaned grandchildren behind. The mutating call of an internal escalator on a cold sudo credential cache is the exception: it keeps the terminal, leaving its password prompt answerable.

  • [mpm] managers now honors the global --timeout for the version probes feeding its table: its selection bypassed the option plumbing, so the probes always ran at the 120-second read-only default and a wedged binary held its row for that long regardless of the option.

  • [mpm] The benchmark manager-support table and the augmentations table keep a generated copy in their Markdown sources, between <!-- mirror --> markers below their python:render blocks: reviewable in raw diffs and rendered on GitHub, refreshed by click-extra refresh-directives, while Sphinx builds keep rendering the live output.

  • [mpm] Convert every docstring and comment of the code base from reStructuredText to MyST markdown, rendered through click-extra’s myst_docstrings Sphinx extension, which converts them back to reST at build time so autodoc keeps working. The CLI-session fixtures documented in manager docstrings now live in ```{code-block} shell-session fences, the corpus harvester reads the fence form, and the manager documentation pages inline the MyST class docstrings directly instead of wrapping them in an {eval-rst} block.

  • [mpm] The binaries download table of the install page is now generated from the binaries catalog at Sphinx build time, restoring working links after binary assets gained versioned filenames.

  • [bar-plugin] Fix a crash when probing an mpm invocation whose binary does not exist: the failed probe now reports the error instead of raising UnboundLocalError.

  • [bar-plugin] Version-diff colors now reach SwiftBar and Xbar: the highlighting introduced in 7.3.0 never rendered in the menu bar, because the plugin captures mpm outdated --plugin-output through a pipe, where the automatic color detection stripped every ANSI code. Plugin output now keeps its colors on any output stream, unless colorization is explicitly disabled (--color=never, NO_COLOR). ANSI codes captured inside relayed error messages are stripped instead, since error lines are marked ansi=false. The unchanged-version prefix also moves from bright-black to a theme-neutral xterm-256 mid-gray on menu lines only: SwiftBar maps bright-black to a fixed dark gray, near-invisible on dark-mode menus, while the mpm outdated table keeps the terminal-themed bright-black.

  • [bar-plugin] An outdated package whose manager provides no single-package upgrade command no longer crashes the rendering: its menu line simply carries no upgrade action.

  • [pacaur,paru,yay] The AUR helpers are no longer wrapped in sudo: they refuse or break under root (makepkg rejects root builds, paru aborts AUR transactions, pacaur aborts its sync operations) and escalate through their own internal sudo pacman calls, which mpm now tracks with the internal_sudo marker (warm credential-cache keepalive, hidden-prompt watchdog). This also lets yay’s cooldown environment overlay reach the process, where the sudo wrap used to strip it.

  • [pkg] installed now lists every package registered in the pkg database instead of only explicitly-requested ones: the %a = 0 automatic-flag filter is dropped, and the query invocation loses the literal quote characters it carried, aligning it with the ports invocation reading the same database.

  • [mpm] A failed manager command now relays the tail of its captured <stderr> (or <stdout> when <stderr> is empty) as a warning: tagged with the manager ID, at the moment of failure and across every operation, instead of keeping it at DEBUG only. A successful command’s <stderr> chatter stays at DEBUG, version probes and doctor are exempt, and the end-of-run error summary now points at --verbosity DEBUG for the full transcript only, no longer as the way to see why a command failed. Closes #1968.

7.3.0 (2026-07-17)

Note

7.3.0 is available on 🐍 PyPI and 🐙 GitHub.

  • Breaking: [mpm] Move the declarative-manager schema, validation and class factory into the new meta_package_manager.definitions module, out of meta_package_manager.config (which keeps the loading policy: trust gate, override application, registration passes) and meta_package_manager.manager (which keeps the base class only).

  • Breaking: [mpm] Move the cross-manager fan-out machinery (collect_from_managers, collect_per_package, OperationTrail, the shared-lock families and the jobs policy) into the new meta_package_manager.dispatch module, out of meta_package_manager.execution (which keeps the single-subprocess engine).

  • Breaking: [mpm] Move the per-command column registries and the table-projection and serialization helpers into the new meta_package_manager.tables module, which also absorbs the meta_package_manager.sorting module and its SortableField vocabulary.

  • Breaking: [mpm] meta_package_manager.sbom no longer re-exports the SBOM writers: import them from meta_package_manager.sbom.base, meta_package_manager.sbom.spdx and meta_package_manager.sbom.cyclonedx.

  • [mpm] Manager definitions gain three schema features: per-refinement search argument templates (exact_args, extended_args and id_name_only_args, spliced at their {marker} position when the matching mpm search flag is active, and advertising native support), a [N] list-index suffix on JSON field selectors, and sudo = true on query operations for tools that gate even their read-only listings behind root.

  • [mpm] Malformed JSON output from a manager’s query now logs a warning tagged with the manager ID and yields no packages, instead of crashing the command; built-in managers and config-defined operations share the same parse_json implementation.

  • [choco] Convert from a Python class to a bundled configuration definition, the native exact and ID-restricted search switches declared through the new refinement templates.

  • [macports] Convert from a Python class to a bundled configuration definition, the native exact/extended search switches declared through the new refinement templates. The optional description column of its search results is no longer populated.

  • [stew] Convert from a Python class to a bundled configuration definition, its two installed-listing regexes merged into one alternation, with no functional change.

  • [zerobrew] Convert from a Python class to a bundled configuration definition, its installed-versions array read through the new [N] field selector, with no functional change.

  • [mpm] The --query, --exact and --overwrite options of dump and sbom now share a single definition and help text.

  • [mpm] Fix the bar-plugin labeller file rule, whose glob targeted a directory and could never match the plugin’s module files.

  • [bar-plugin] The <xbar.version> header tracks the package version again: it fell out of the version-bump configuration during the bump-my-version migration and was stuck at 7.0.0.dev0.

  • [mpm] Sudo priming now probes the credential cache before any prompt: found warm (a prior sudo --validate, a NOPASSWD rule), it is silently kept alive for the whole run. The password notice names the escalating managers and the subcommand (apt needs administrator rights to upgrade: enter your password.), the sudo prompt is branded ([mpm] password for apt:), and the no-terminal warning names the managers left to fail fast. A host whose sudo is missing or cannot be run logs a warning instead of crashing.

  • [mpm] Add an internal_sudo marker for managers whose CLI runs sudo itself mid-run and is never wrapped by mpm: cask and fink adopt it, and manager definitions may set it as a config field. A warm credential cache found at priming time is now kept alive for internal escalators too.

  • [mpm] A mutating call of an internal escalator that goes silent for 30 seconds on a terminal, with no warm credential cache, now logs a warning that it may be waiting on a hidden password prompt, quoting its last output line. Addresses #1938.

  • [mpm] --verbosity INFO now discloses every package manager CLI invocation as a reproducible $-prompt line, forced environment variables included. Version-detection probes stay at DEBUG.

  • [mpm] The output of package manager CLIs now streams to DEBUG logs live, line by line and tagged with the manager ID, instead of being dumped once the call completes. Closes #528.

  • [mpm] Streamed CLI output and manager-scoped log lines glue the manager ID into their level prefix (debug:mas: ..., warning:gem: Could not list installed packages.), making logs grep-able by manager. Closes #530.

  • [mpm] Disclosed CLI invocations are themed by token family: dim prompt sigil, environment name/value assignment pairs, highlighted binary name (directory plain, in the $-prompt and spawn-trace lines), option-styled flags.

  • [mpm] --no-color now also strips the color of log lines emitted from background threads (streamed subprocess output, concurrent fan-outs).

  • [mpm] The capability probe logs one answered DEBUG line per manager (brew implements installed.) instead of an unanswered question exposing the raw class repr.

  • [mpm] Add -0/--zero-exit: action commands then report per-package failures without gating automation on a non-zero exit code. Usage and configuration errors keep exiting 2.

  • [mpm] Add a --columns option to the table-rendering subcommands (managers, installed, outdated, search, which): a comma-separated list of column IDs restricts and reorders the table, SQL-SELECT-style, validated against each command’s column registry. mpm search’s description column joins the registry: --description is now a shorthand for selecting it, and an explicit --columns selection wins. Serialized formats keep the full structured payload.

  • [mpm] The mpm managers table’s binary-path highlighting is delegated to click-extra’s highlight_bin_name, the same renderer as the $-prompt and spawn-trace log lines.

  • [mpm] Log lines emitted while a progress spinner animates now print on their own line above it, instead of garbling the in-progress frame.

  • [mpm] Delegate subprocess spawning, output streaming, timeout enforcement and Ctrl+C child termination to click-extra, raising its floor from 8.3.0 to 8.4.0.

  • [mpm] Authenticate the GitHub API release lookups in the Guix, Nix and yay cooldown workflow jobs, which flaked on the anonymous rate limit.

  • [mpm] The per-manager table of the augmentations page now renders live at Sphinx build time, derived from the capability declarations in the manager implementations. Drops steamcmd’s stale full-upgrade --all row.

  • [mpm] The PyPI keywords and the labeller file/content rules in pyproject.toml are now generated from the manager pool by docs/docs_update.py. Every bundled manager gains labeller coverage, definition-file globs are anchored on their full stem, and the chocotaley keyword typo is fixed.

  • [mpm] Bundled manager definitions now embed their version-probe and parser output samples in a [samples] table of their own TOML file; the test suite derives its checks from the shipped files instead of hardcoded per-manager fixtures.

  • [bar-plugin] Version differences are now highlighted in the outdated-package menu lines, with the same coloring as mpm outdated: common prefix gray, installed suffix red, latest suffix green. Package lines carry ansi=true so both SwiftBar and Xbar render the colors.

  • [mpm] Delegate --cooldown duration parsing and the cross-command --sort-by machinery to click-extra, keeping the same per-table sorting semantics. -s/--sort-by now renders at the end of its option group in help screens.

  • [mpm] mpm which joins the sortable-table commands instead of ignoring --sort-by, its manager column leading the default sort.

  • [mpm] docs/docs_update.py now renders the pyproject.toml label arrays in pyproject-fmt’s canonical style, ending the pull-request ping-pong between the update-docs and format-pyproject autofix jobs. A new test asserts the rewritten sections stay a pyproject-fmt fixpoint.

  • [mpm] The dump and Brewfile provenance headers and the bar-plugin upgrade notice now write the bare package version, dropping their v prefix.

  • [cask] upgrade --all now passes --greedy to brew upgrade when auto-updating packages are included, matching the outdated behavior. Auto-updating casks reported as outdated were never upgraded. Closes #1940.

  • [pipx] outdated now relies on pipx’s native pipx list --outdated query on pipx 1.16.0 and newer: all venvs are checked in a single call, each by its own backend (pip or uv). Older pipx keeps the previous per-venv pip probes.

7.2.0 (2026-07-09)

Note

7.2.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Config-defined managers gain multi-binary support: a per-operation cli key runs an operation through a sibling binary, and version_cli probes an alternate binary for tool suites exposing no version flag.

  • [mpm] Config-defined managers gain privilege support: sudo = true marks an operation privileged, the new default_sudo field sets the manager-wide default, and both honor the global --sudo/--no-sudo policy.

  • [mpm] Manager definitions gain Brewfile export mappings: the new definition-only brewfile_entry_type and brewfile_skip_warning fields mirror the class attributes consumed by mpm dump --brewfile.

  • [mpm] Relax and harden the definition schema: an installed query may capture no version, a search may omit the {query} placeholder and rely on client-side refiltering, and unrecognized {placeholder} tokens in operation args are rejected at load time.

  • [apt-cyg] Add apt-cyg (Cygwin) package manager with installed, search, install, remove and sync support on Windows/Cygwin; a bundled configuration-defined manager.

  • [cave] Add cave (Exherbo’s Paludis client) with installed, install, upgrade, remove, sync and cleanup support; a bundled configuration-defined manager.

  • [chromebrew] Add Chromebrew (crew) package manager with installed, search, install, upgrade, remove and sync support on ChromeOS; a bundled configuration-defined manager.

  • [fink] Add Fink package manager with installed, search, install, upgrade, remove, sync and cleanup support on macOS; a bundled configuration-defined manager.

  • [pkcon] Add PackageKit’s console client (pkcon) with installed, outdated, search, install, upgrade, remove and sync support on Linux. Requires PackageKit >=0.7.0.

  • [pkg-tools] Add OpenBSD’s pkg tools (pkg_add/pkg_info/pkg_delete) with installed, search, install, upgrade, remove and cleanup support; a bundled configuration-defined manager.

  • [pkgin] Add pkgin (NetBSD pkgsrc) package manager with installed, outdated, search, install, upgrade, remove, sync and cleanup support; a bundled configuration-defined manager.

  • [slapt-get] Add slapt-get (Slackware) package manager with installed, search, install, upgrade, remove, sync and cleanup support; a bundled configuration-defined manager.

  • [sorcery] Add Sorcery (Source Mage GNU/Linux) package manager with installed, search, install, upgrade, remove, sync and cleanup support; a bundled configuration-defined manager.

  • [sun-tools] Add Solaris’ SVR4 package tools (pkginfo/pkgrm) with installed and remove support: SVR4 packages come from local media, so there is no repository to search, install from or upgrade against.

  • [swupd] Add Clear Linux’s swupd with installed, search, install, upgrade --all, remove and cleanup support, operating on bundles; a bundled configuration-defined manager.

  • [tazpkg] Add TazPkg (SliTaz GNU/Linux) package manager with installed, search, install, upgrade, remove, sync and cleanup support.

  • [tlmgr] Add TeX Live Manager (tlmgr) with installed, outdated, search, install, upgrade, remove, sync and cleanup support, cross-platform; a bundled configuration-defined manager. Requires TeX Live >=2018.

  • [urpmi] Add urpmi (Mageia and the Mandriva lineage) with installed, outdated, search, install, upgrade, remove, sync and cleanup support; a bundled configuration-defined manager.

  • [mpm] mpm is now a strict superset of pacaptr, pacapt, sysget and whohas: every package manager those tools support is now wrapped.

  • [mpm] Convert the cargo and opkg managers from Python classes to bundled configuration definitions; the optional description column of their search results is no longer populated.

  • [mpm] Convert the cpan, steamcmd, topgrade, vscode and vscodium managers from Python classes to bundled configuration definitions, with no functional change.

  • [gh-ext] Report installed extensions by their owner/repo slug instead of the bare extension name, so the ids returned by mpm installed and mpm backup feed back into install, remove, upgrade and restore.

  • [mpm] Require click-extra 8.3 and extra-platforms 13.1 or newer.

  • [mpm] Rename the stats configuration key to summary, matching the --summary option; add sudo, jobs and network to the typed configuration schema; stop advertising a flat 500 default for timeout, which is resolved per operation.

  • [mpm] Render the configuration reference, the CLI reference and the benchmark’s manager-support table live at documentation build time, through click-extra’s click:config, click:tree and python:render directives; drop sphinx-click.

  • [mpm] Fix benchmark data: merge the duplicate OpenBSD (pkg-mgr/pkg-tools), gh-ext and pwsh-gallery rows; add missing pkcon, fink, sorcery and urpmi rows; fix winget, dnf, scoop and cask competitor flags.

  • [mpm] Make the binaries catalog table searchable and sortable, with relative-age hints on release dates.

  • [mpm] Exercise every subcommand’s --help screen against the compiled binaries in the CLI test plan.

  • [mpm] Extend the destructive install/remove test round-trip to the bundled configuration-defined managers; CI exercises it for real against gh-ext.

7.1.0 (2026-07-07)

Note

7.1.0 is available on 🐍 PyPI and 🐙 GitHub.

  • Breaking: [mpm] Split the [sbom] extra into [sbom-offline] (CycloneDX and SPDX document rendering) and [sbom-online] (the --network vulnerability lookups). pip install meta-package-manager[sbom] no longer resolves: use [sbom-offline] for the previous behavior, adding [sbom-online] for vulnerability scanning.

  • [mpm] Define brand-new package managers from the configuration file: a [mpm.managers.<id>] section declares a manager’s platforms, CLI and version detection, and per-operation commands with regex or JSON parsers. Defined managers get --<id> / --no-<id> selectors and join the default set.

  • [mpm] Manager definitions load only from a trusted local config file (owned by you, not world-writable, never a remote --config URL), and a command-redirecting override (pre_cmds, cli_names, cli_search_path) read from an untrusted source now warns: see the new Security model page.

  • [mpm] Ship package managers as bundled configuration definitions: TOML files under meta_package_manager/managers/, built through the same schema as a user’s [mpm.managers.<id>] section but loaded at startup like built-ins and exempt from the config-file trust gate.

  • [gh-ext] Add GitHub CLI extensions (gh extension) manager with installed, search, install, upgrade, and remove support, cross-platform on Linux, macOS, and Windows; mpm’s first bundled configuration-defined manager. Requires gh >=2.0.0.

  • [soar] Add Soar (pkgforge) package manager with installed, search, install, upgrade, remove, sync, and cleanup support on Linux; a bundled configuration-defined manager. Requires soar >=0.12.0.

  • [conda] Add Conda package manager with installed, outdated, search, install, upgrade, remove, and cleanup support, cross-platform on Linux, macOS, and Windows; requires conda >=4.6.0.

  • [mpm] Add a global --network / --no-network flag (default off) that opts into network calls during a run.

  • [mpm] mpm --network sbom queries OSV.dev for known vulnerabilities across OSV’s indexed ecosystems (pip, npm, cargo, gem, composer): CycloneDX gains a vulnerabilities array, SPDX per-package SECURITY external references, and the end-of-run summary a vulnerability count.

  • [mpm] OSV responses are cached on disk; network failures, a missing extra, or an unwritable cache degrade gracefully to an SBOM without vulnerability data.

  • [mpm] Privilege escalation is now per-manager: system package managers still run state-changing operations through sudo by default, and a new global --sudo / --no-sudo flag or per-manager [mpm.managers.<id>] sudo config key overrides that either way. Resolves #1295 and #33.

  • [mpm] Escalating commands authenticate sudo once up front and run through sudo -n, so a password prompt no longer stalls the concurrent fan-out; off a terminal, managers needing root fail fast with a message pointing at --sudo instead of hanging.

  • [yay] Honor --cooldown by overlaying a generated init.lua through a private XDG_CONFIG_HOME, holding back AUR upgrades and installs newer than the release-age floor while preserving the user’s own yay config. Requires yay 13.0.0 for its Lua hooks.

  • [mpm] The CLI gains a global --export-config FORMAT option that prints the fully-resolved configuration (config file, environment, and defaults merged) as toml, yaml, json, json5, jsonc, hjson, or xml, then exits.

  • [mpm] Managers sharing a backend lock (brew/cask, apt/apt-mint/deb-get, the RPM and pacman families) now run serially within their family during state-changing commands; members resolving to an identical command run it once. Fixes spurious cask failures when syncing alongside brew.

  • [mpm] A single Ctrl+C now aborts a concurrent command promptly: the first interrupt terminates in-flight package-manager subprocesses, so the thread pool drains and the run exits cleanly instead of hanging until a second Ctrl+C and a threading-shutdown traceback.

  • [mpm] --timeout now also bounds the manager version-detection probes, not just the operation that follows, so a wedged binary cannot outlast the limit during startup detection.

  • [bar-plugin] Cap each mpm call the plugin makes at 60 seconds via --timeout, so a wedged package manager fails the menubar refresh in about a minute instead of stalling it for several.

  • [mpm] Raise the click-extra floor from 8.1.1 to 8.2.0, the first release shipping the concurrency primitives, the --export-config option, and the compatibility-matrix machinery mpm relies on.

  • [mpm] Meta Package Manager is now available in GNU Guix upstream, installable with guix install meta-package-manager.

  • [mpm] Rename the reference package to meta-package-manager, fetch its source from the tagged git commit, build it with setuptools.build_meta, drop the now-optional SBOM and more-itertools inputs, and fix the python-packageurl input name so guix install --load-path=packaging/guix resolves.

  • [mpm] Drop the now-optional SBOM and more-itertools dependencies from the reference package definition.

  • [pip] Only target a Python the user can actually install into: mpm’s own bundled virtualenv and externally-managed interpreters (PEP 668) are skipped, so distro-managed packages no longer surface as bogus outdated pip upgrades. Supersedes the dependency-tree filter from #1767.

  • [pip] Probe the Python interpreter version under the short read-only timeout instead of the long state-changing default.

  • [mpm] The --cooldown help now shows [default: (disabled)] instead of the bare [default: ""], so the unset state reads as a word rather than an empty string.

  • [dnf] upgrade and upgrade --all now pass --assumeyes, as the other dnf operations already did, so upgrades no longer hang on an interactive confirmation prompt.

  • [eopkg] upgrade --all now passes --yes-all, matching the single-package upgrade, so it no longer hangs on an interactive confirmation prompt.

  • [fwupd] Fix version-pinned installs: the device ID and release version were joined into a single CLI argument that fwupdmgr could not parse.

  • [npm] install no longer passes --no-fund and --no-audit twice.

  • [mpm] The installation page now documents which Python and click-extra versions each mpm release accepts, in tables regenerated from the release tags and guarded by a drift test.

  • [mpm] Catalog every released standalone binary on a new documentation page, linking each platform build to its download and public VirusTotal analysis, with a detection-rate trend chart.

  • [mpm] Add a hermetic test replaying each manager’s documented CLI samples through its own parsers and command builders, covering installed, outdated, --version, and the mutation commands; corrected the stale samples flagged across a dozen managers. Toward #1023.

7.0.1 (2026-06-27)

Note

7.0.1 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Fix ParameterSource import from older Click dependency.

7.0.0 (2026-06-26)

Note

7.0.0 is available on 🐍 PyPI and 🐙 GitHub.

  • Breaking: [mpm] Rename the --allow-no-cooldown flag to the --require-cooldown-support/--allow-unsupported-managers pair, and its allow_no_cooldown config to require_cooldown_support (default true).

  • Breaking: [mpm] The sort_by configuration option is now a list of fields, matching the repeatable --sort-by. Wrap an existing scalar value in brackets: sort_by = "package_id" becomes sort_by = ["package_id"].

  • [pnpm] Add the pnpm package manager (installed, outdated, search, install, upgrade, remove, cleanup), enforcing --cooldown via pnpm’s native minimumReleaseAge gate.

  • [mpm] Filter the package listing by a query: installed and outdated take an optional QUERY argument and dump/backup/sbom a --query option, fuzzy by default with --exact/--fuzzy to control it.

  • [mpm] --sort-by/-s is now repeatable, ordering result tables by several fields in priority order (like --sort-by package_id --sort-by manager_id).

  • [mpm] Run managers in parallel via a new --jobs/-j option (default: CPU count minus one), covering the read-only queries, the maintenance commands, the inventory exporters, and the state changers; DEBUG verbosity forces sequential runs. Closes #529.

  • [mpm] Show a progress spinner with elapsed time on <stderr> while manager CLI calls run, toggled with click-extra’s --progress/--no-progress.

  • [mpm] install, remove, upgrade, restore, sync, and cleanup now print a per-attempt ✓/✗ trail and a finisher on an interactive terminal: per-package for the package commands, per-manager for sync/cleanup/upgrade --all.

  • [mpm] The standalone binary now reads configuration in all six formats (toml, yaml, json5, jsonc, hjson, xml), matching the source distribution.

  • [mpm] Lower the default verbosity from INFO to WARNING, leaving only the ✓/✗ trail, finishers, and genuine warnings on screen; per-operation narration moves to INFO and raw technical detail to DEBUG.

  • [mpm] --timeout now defaults per-operation (120s for read-only queries, 500s for state-changing operations) instead of a flat 500s; an explicit --timeout still overrides.

  • [mpm] install, remove, upgrade <packages>, and restore now exit non-zero when a target fails or no manager can fulfill the request, instead of always reporting 0.

  • [mpm] Fix install/remove/upgrade dropping all but one target when the same package is given with several explicit managers; install now acts on every requested package instead of stopping at the first success.

  • [mpm] Fix install, remove, and upgrade reporting success when a manager’s CLI fails with a non-zero exit code but empty error output, like steamcmd’s anonymous-login failure on Windows.

  • [eopkg] Fix installed, outdated, and search returning no packages.

  • [mpm] Compare a leading version epoch (1:2.0, 1!2.0) as a dominant component, so epoch bumps order correctly across Debian, RPM, pacman, and PEP 440 schemes.

  • [mpm] Resolve pkg:apk purls to the apk manager and pkg:npm purls to pnpm; both were missing from the purl-to-manager map.

6.6.0 (2026-06-17)

Note

6.6.0 is available on 🐍 PyPI and 🐙 GitHub.

  • Breaking: [mpm] Rename the global --stats / --no-stats flag to --summary / --no-summary. Scripts passing the old flag must update.

  • Breaking: [mpm] Move cyclonedx-python-lib and spdx-tools into a new [sbom] extra: mpm sbom now requires pip install meta-package-manager[sbom]. packageurl-python stays in the runtime install. The standalone binary distribution keeps shipping SBOM support: [tool.repomatic] nuitka.extras = ["sbom"] syncs the extra into the build venv and [tool.nuitka] include-package = ["cyclonedx", "spdx_tools"] forces Nuitka to bundle the try/except-guarded imports.

  • [asdf] Add asdf package manager (installed, outdated, search, install, upgrade, upgrade_all, remove, sync) on Linux and macOS; requires asdf >=0.16.0.

  • [mise] Add mise package manager (installed, outdated, search, install, upgrade, upgrade_all, remove, sync, cleanup), cross-platform; requires mise >=2025.5.10.

  • [mpm] Add the --man (roff man page) and --accessible (no ANSI or Unicode, for screen readers) global options from click-extra, and attach an mpm-manpages.tar.gz asset to each release.

  • [mpm] Add a --cooldown DURATION option and [mpm] cooldown config to refuse installing or upgrading package versions newer than a given release age, as a supply-chain mitigation; unsupported managers are skipped unless --allow-no-cooldown.

  • [brew] Adapt to Homebrew 6.0.0: pass --yes to brew upgrade to suppress the new interactive prompt, and trust tap-qualified installs before installing to avoid tap trust is required aborts. Bumps minimum brew from 2.7.0 to 6.0.0.

  • [zerobrew] Add upgrade and upgrade_all support via zb upgrade, and bump minimum zb from 0.2.0 to 0.3.0.

  • [mpm] Make mpm sbom maximalist by default, collecting rich per-package metadata (license, supplier, homepage, checksums, dependency graph) into SPDX and CycloneDX exports, with --minimal for the bare inventory.

  • [mpm] Attach canonical SPDX URLs to each identifier inside compound license expressions in CycloneDX 1.7 output (licenses[].expressionDetails[]).

  • [mpm] Reduce default-verbosity noise on operational subcommands: captured stderr and implicit-selection Skip messages drop to DEBUG, with a one-line error summary at the end of any subcommand whose CLIs accumulated errors.

  • [mpm] Fix pkg:cpan/…, pkg:guix/…, and pkg:nix/… pURL specifiers raising Unrecognized pURL type even though those managers are implemented.

6.5.1 (2026-05-28)

Note

6.5.1 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Define mpm’s own OK_GLYPH (✓) and KO_GLYPH (✘) constants in meta_package_manager.output instead of importing them from click-extra.

6.5.0 (2026-05-25)

Note

6.5.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [pwsh-gallery] Add PowerShell Gallery package manager with installed, outdated, search, install, upgrade, and remove support. Drives Microsoft.PowerShell.PSResourceGet (PowerShell 7.4+), installs to -Scope CurrentUser, cross-platform on Linux, macOS, and Windows. Closes #1760.

  • [topgrade] Add topgrade itself as a supported manager; only upgrade --all is implemented (mpm upgrade --topgrade runs topgrade --yes). Requires topgrade >= 17.0.0. Beware running a manager twice if both are selected.

  • [mpm] Add [mpm.managers.<id>] config sections for per-manager attribute overrides, taking precedence over global [mpm] settings and --<flag> values. Closes #945.

  • [mpm] Print an upstream contribution invitation on <stderr> with a pre-filled GitHub issue URL when an override targets a detection-related field. Silence via --no-suggest-contribs, MPM_SUGGEST_CONTRIBS=false, or [mpm] suggest_contribs = false.

  • [mpm] Add mpm config-template [manager-ids...] subcommand that prints every overridable manager attribute as a ready-to-paste [mpm.managers.<id>] TOML block.

  • [mpm] Add mpm dump to export the installed-package inventory as TOML (--toml) or a Brewfile (--brewfile); mpm backup, mpm lock, mpm freeze, and mpm snapshot are aliases.

  • [bar-plugin] Swap default and alternate actions on package-upgrade entries: a regular click now opens a visible terminal, and holding Option runs the upgrade silently. Reverses the 3.3.0 behavior.

  • [mpm] Remove automated publishing of the Chocolatey package; install instructions in docs/install.md now point only at the local build path.

  • [mas] Bump minimum required mas version from 1.8.7 to 7.0.0, switch installed, outdated, and search to parse --json output, update homepage_url to https://github.com/mas-cli/mas, and drop the explicit sudo wrapper around mas uninstall.

  • [mpm] Fix several Windows subprocess issues: hidden console windows, winget CTRL_C_EVENT handling, grandchild-process cleanup on timeout, missing-executable detection, and interactive-prompt hangs.

  • [yarn] Fix search to parse NDJSON output line by line, collecting only inspect-type entries, since newer Yarn emits multiple JSON objects with a trailing status line.

  • [mpm] Fix Nuitka onefile builds by configuring the binary through the standard [tool.nuitka] section, bundling click_extra’s themes.toml, and carrying product metadata and native per-platform icons.

  • [mpm] Add Void Linux build-from-source installation instructions to docs/install.md.

6.4.3 (2026-05-11)

Note

6.4.3 is available on 🐙 GitHub.

Warning

6.4.3 is not available on 🐍 PyPI.

  • [mpm] Re-release to fix PyPI upload issues.

6.4.2 (2026-05-08)

Note

6.4.2 is available on 🐙 GitHub.

Warning

6.4.2 is not available on 🐍 PyPI.

  • [mpm] Compile version_regexes with re.MULTILINE only, dropping re.VERBOSE, so patterns with unescaped whitespace match again; fixes version detection for guix, nix, and stew.

6.4.1 (2026-05-04)

Note

6.4.1 is available on 🐍 PyPI and 🐙 GitHub.

  • [guix] Drop the >=1.0.0 version requirement and add a hex-hash regex variant, so guix pull installs and dev wrappers reporting a git commit hash register as available.

  • [winget] Fix the parsing of winget tables: the package-block split no longer fires on indented upgrade rows, and the table width is read from the separator line, which stays full-width even when winget trims the trailing spaces of the header. Microsoft Store entries are recognized from their 12-character product ID or their XP-prefixed extension ID.

  • [mpm] Add PackageManager.unavailable_reason and surface it in the pool’s “Skip” log line, spelling out why a manager was dropped from selection.

  • [mpm] Move --cov and --cov-report=term out of pyproject.toml addopts into the CI workflow, dropping pytest-cov as an unconditional test dependency.

  • [mpm] Move --numprocesses=auto, --dist=loadgroup, and --maxschedchunk=1 out of pyproject.toml addopts into the CI workflow, dropping pytest-xdist as an unconditional test dependency.

  • [zypper] Loosen the xmltodict floor from >=1 to >=0.12.

  • [mpm] Drop the more-itertools dependency, replacing the single peekable use with stdlib next(iterator, None).

  • [mpm] Move Chocolatey package files into packaging/choco/meta-package-manager/ so the directory name matches the nuspec basename, fixing the release job.

  • [mpm] Add choco-source, nix-source, and guix-source jobs to tests-install.yaml that build and install from the in-repo packaging specs.

  • [mpm] Render the chocolatey, guix, and nix release-PR bodies through repomatic pr-body, adding the standard workflow-metadata block and attribution footer.

6.4.0 (2026-04-27)

Note

6.4.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [apk] Add Alpine Linux’s apk package manager with installed, outdated, search, install, upgrade, remove, sync, and cleanup support.

  • [guix] Add GNU Guix package manager with installed, outdated, search, install, upgrade, remove, sync, and cleanup support.

  • [macports] Add MacPorts package manager with installed, outdated, search, install, upgrade, remove, sync, and cleanup support.

  • [ports] Add FreeBSD ports tree manager with installed, outdated, install, upgrade, upgrade_all, remove, sync, and cleanup support. Drives make-based source builds out of /usr/ports, delegates registry queries to pkg, and uses git for tree updates.

  • [sfsu] Add sfsu (Scoop alternative) package manager with installed, outdated, search, install, upgrade, remove, sync, and cleanup support. Mutating operations delegate to Scoop.

  • [xbps] Add XBPS (Void Linux) package manager with installed, outdated, search, install, upgrade, remove, sync, and cleanup support.

  • [apm,apt,choco,composer,emerge,flatpak,opkg,sdkman,snap,zypper] Add remove operation. Closes #1775.

  • [composer] Fix install operation: use composer global require instead of composer global install.

  • [apm,npm,pip] Add cleanup operation.

  • [gem,winget] Add sync operation.

  • [mpm] Add Delegate descriptor to capabilities.py for declarative cross-manager method delegation.

  • [mpm] Add Python version and platform to --version output.

  • [mpm] Add typed config_schema to the CLI group for configuration file validation.

  • [mpm] Document pyproject.toml auto-discovery for per-project [tool.mpm] configuration.

  • [mpm] Extend --table-format structured output to TOML, YAML, XML, JSON5, JSONC, and HJSON for all subcommands that produce machine-readable data (managers, installed, outdated, search, locate).

  • [mpm] Change JSON output indentation from 4 to 2 spaces and stop sorting keys, aligning with click-extra defaults.

  • [mpm] Rename --output-format / -o back to --table-format, aligning with the upstream click-extra default.

  • [mpm] Make Chocolatey release job idempotent: check if version already exists on Chocolatey before pushing, and open a PR to update the nuspec after a successful publish.

  • [mpm] Add Guix and Nix package definitions with automated update jobs on release; reorganize packaging/ directory into packaging/choco/, packaging/guix/, and packaging/nix/ subdirectories.

  • [pip] Filter mpm’s own dependency tree from outdated results to fix false positives in Homebrew-installed environments. Closes #1767.

  • [scoop] Fix CLI invocation in outdated operation.

  • [winget] Fix search crash when no results are returned.

  • [mpm] Skip install and remove tests on Linux CI runners: the RPM database at /var/lib/rpm is inaccessible on Ubuntu-based runners.

6.3.0 (2026-04-09)

Note

6.3.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [cpan] Add CPAN package manager for Perl modules with installed, outdated, install, and upgrade support. Closes #602.

  • [deb-get] Add deb-get package manager with installed, outdated, search, install, upgrade, remove, sync, and cleanup support. Closes #1609.

  • [nix] Add Nix package manager with installed, outdated, search, install, upgrade, remove, sync, and cleanup support.

  • [pacstall] Add Pacstall package manager with installed, outdated, search, install, upgrade, remove, and sync support. Closes #1610.

  • [sdkman] Add SDKMAN! package manager with installed, outdated, install, upgrade, sync, and cleanup support. Closes #729.

  • [stew] Add Stew package manager for installing pre-compiled binaries from GitHub Releases. Closes #1680.

  • [zerobrew] Add ZeroBrew manager with installed, outdated, install, and remove support. Closes #1681.

  • [uvx] Implement outdated operation. Bump minimal requirement to 0.10.10. Closes #1704.

  • [yarn] Split into Yarn Classic and Yarn Berry managers. Restrict Classic to <2.0.0. Closes #1548.

  • [yarn-berry] Add Yarn Berry (2.x+) manager with search and cleanup support.

  • [winget] Switch installed and outdated to winget list --details structured output; filter to Origin Source: winget packages only, excluding sideloaded and portable entries. Bump minimum required version to >=1.28.190.

  • [pip] Only report top-level packages as outdated, skipping transitive dependencies. Closes #1214.

  • [mpm] Support version range specifiers (e.g. >=1.20.0,<2.0.0) in manager requirement field. Refs #1548.

  • [mpm] Add must_succeed parameter to run_cli for structured-output calls, preventing silent data loss on CLI failures. Refs #1703.

  • [mpm] Add Chocolatey as a supported Windows installation method; automate package publishing on release.

  • [mpm] Overhaul version tokenization: preserve original separators and case, keep hex hashes as single tokens, normalize pre-release aliases (alpha/a, beta/b, c/rc), and recognize post/patch as post-release tags.

  • [mpm] Fix version comparison accuracy: integer tokens now rank above string tokens (e.g., 3.12.0 > 3.12.0a4), trailing .0 segments are treated as padding, the cosmetic v prefix is stripped, and false-positive outdated entries where parsed versions compare equal are filtered.

  • [mpm] Snap version diff highlighting to separator boundaries so the full diverging token and its preceding separator are colored.

  • [mpm] Detect Windows App Execution Aliases (reparse points) when resolving CLI paths, fixing detection of winget and similar tools installed via the Microsoft Store.

  • [gem] Remove --user-install flag from install, upgrade, and update commands so all operations target the same gem scope as list and outdated. Closes #389.

  • [pip] Remove --user flag from upgrade command so upgrades target the same scope as list and outdated.

  • [pip] Prepend the current Python executable to the list of candidates when searching for pip binaries, so the active environment is always checked first.

  • [mpm] Cache installed package IDs before the spec loop in upgrade and remove commands, avoiding redundant CLI calls per package specifier.

  • [mpm] Reduce CI matrix on pull requests: skip release builds, experimental Python versions, redundant architecture variants, and install tests. Declare windows-11-arm exclusion in [tool.repomatic.test-matrix] config instead of hardcoding it.

6.2.1 (2026-03-26)

Note

6.2.1 is available on 🐍 PyPI and 🐙 GitHub.

  • [brew,cask] Remove --quiet from outdated command where it conflicts with --json. Closes #1703.

  • [npm] Fix crash on installed when no global packages are present. Closes #1603.

  • [mpm] Fix --no-color having no effect on CSV output. Closes #1004.

  • [mpm] Fix version reported by compiled (Nuitka) binaries. Closes #1145.

6.2.0 (2026-03-25)

Note

6.2.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Upgrade from reusable workflows to repomatic.

  • [mpm] Inline replace_content utility from click-extra which was removed in 7.6.2.

  • [mpm] Simplify uvx invocation from uvx --from meta-package-manager -- mpm to uvx meta-package-manager.

  • [brew,cask] Add --quiet option to all brew invocations to reduce log verbosity.

  • [composer] Add --no-ansi option to all composer invocations.

  • [composer] Fix search regex to strip whitespace-only descriptions.

  • [dnf,dnf5,yum] Add --quiet option to all invocations to reduce log verbosity.

  • [emerge] Add --quiet, --color n and --nospinner to pre_args. Refactor inline flags.

  • [pacaur,pacman,paru,yay] Add --color never option to all invocations.

  • [pkg] Add --quiet option to all pkg invocations to reduce log verbosity.

  • [yarn] Add --silent option to all yarn invocations to suppress console logs.

  • [mpm] Pre-compile regexes at class level across all managers.

  • [mpm] Set CycloneDX SBOM lifecycle phase to operations.

6.1.1 (2026-02-06)

Note

6.1.1 is available on 🐍 PyPI and 🐙 GitHub.

  • [choco] Add --retry-count=3 option to all choco invocations.

  • [mpm] Upgrade to extra-platforms 8.0.0. Remove usage of deprecated functions.

  • [mpm] Remove direct dependency on tabulate.

6.1.0 (2026-01-18)

Note

6.1.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [uvx] Add uvx support for managing isolated Python tools via uv tool. Closes #1656, #1657.

6.0.2 (2026-01-09)

Note

6.0.2 is available on 🐍 PyPI and 🐙 GitHub.

  • [uv] Workaround uv parsing issues with package specifiers by not quoting them. Closes #1653.

6.0.1 (2026-01-02)

Note

6.0.1 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Move auto-lock time from 8:43 to 4:43.

  • [mpm] Set cooldown period via the pyproject.toml.

  • [mpm] Add Download link to project metadata.

  • [mpm] Include license file in package.

  • [mpm] Replace deprecated codecov/test-results-action by codecov/codecov-action.

  • [mpm] Remove utilization workaround for macos-15-intel.

6.0.0 (2025-12-08)

Note

6.0.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Add --no-config option inherited from Click Extra.

  • [mpm] Replace Click Extra’s default --table-format option by our --output-format option, which allows sorted table rendering and JSON output.

  • [scoop] Fix parsing of scoop version to support raw Git output.

  • [gem] Remove hard-coded gem CLI search path.

  • [mpm] Remap pURL types to managers. Closes #1460.

  • [mpm] Allow multiple regular expressions to be used for version matching.

  • [mpm] Remove maximum capped version of all dependencies (relax all ~= specifiers to >=). This gives more freedom to downstream and upstream packagers. Document each minimal version choice.

  • [mpm] Add cooldown period for dependabot and uv.lock updates.

  • [mpm] Merge all label syncing jobs into a single one.

  • [mpm] Add yaml, json5, jsonc, hjson and xml extra dependencies to support respective configuration file formats.

  • [mpm] Change the test, typing and docs extra dependency groups into development dependency groups.

  • [mpm] Add official support of Python 3.14.

  • [mpm] Re-introduce Python 3.10 support.

  • [mpm] Run tests on Python 3.10, 3.14, 3.15, 3.14t and 3.15t.

  • [mpm] Skip tests on intermediate Python versions (3.11, 3.12 and 3.13) to reduce CI load.

  • [mpm] Produce mpm-windows-arm64.exe Windows binary for arm64 architecture.

  • [mpm] Replace ubuntu-24.04 by ubuntu-slim, macos-15 by macos-26, and macos-13 by macos-15-intel in workflow jobs.

  • [mpm] Unlock a CPU core stuck at 100% utilization on macos-15-intel.

  • [mpm] Use astral-sh/setup-uv action to install uv instead of manually installing it with pip.

  • [mpm] Move all typing-related imports behind a hard-coded TYPE_CHECKING guard to avoid runtime imports.

5.21.0 (2025-05-29)

Note

5.21.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Drop support for Python 3.10.

  • [mpm] Fix parsing of package specifiers with multiple version separators.

  • [npm] Fix retrieval of installed packages.

  • [fwupd] Remove --offline parameter which has been silently disabled and has now been remove in v2.0.0 of fwupd. Refs #1511.

  • [bar-plugin] Bump minimal Python version to 3.9 to aligns it with macOS default.

  • [bar-plugin] Check minimal version of SwiftBar is 2.1.2.

  • [bar-plugin] Reduce the font size of error messages from 12 to 10 points.

  • [mpm] Remove reference to python3 command in documentation to reduce confusion.

  • [mpm] Build arm64 binary for Linux.

  • [mpm] Try to build arm64 binary for Windows but mark it as unstable.

  • [mpm] Use post-build binary test plans to check CLI behavior.

  • [mpm] Run tests on windows-2025 instead of windows-2022.

  • [mpm] Reactivates concurrency limits on tests.

  • [mpm] Uploads codecov test results.

5.20.0 (2024-11-25)

Note

5.20.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [eopkg] Add support for new eopkg manager. Closes #1093.

  • [fwupd] Add support for new fwupd manager. Closes #1289.

  • [dnf5] Add support for new dnf5 manager. Refs #1423.

  • [mpm] Hide --manager and --exclude options from help output and silence deprecation warnings. Closes #1358.

  • [mpm] Add detailed documentation on manager selection with configuration file.

  • [mpm] Fix mixing of manager selector lists and flags.

5.19.0 (2024-11-14)

Note

5.19.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [vscodium] Add support for VSCodium plugins.

  • [dnf,mas,vscode,yum] Implement remove operation.

  • [dnf,yum] Use query template instead of regex parsing to retrieve package data.

  • [flatpak] Fix parsing of descriptions with spaces.

  • [uv] Implement outdated and cleanup operation.

  • [uv] Bump minimal requirement to 0.5.0.

  • [uv] Always invoke uv with --no-progress parameter.

  • [mas] Bump minimal requirement to 1.8.7.

  • [mas] Reactivate mas tests.

  • [mpm] Add official support for Python 3.13.

  • [mpm] Drop support for Python 3.9.

  • [mpm] Replace local platform utilities by extra-platforms dependency.

  • [mpm] Run tests on Python 3.14-dev.

  • [mpm] Run tests and actions on ubuntu-24.04 instead of ubuntu-22.04.

  • [mpm] Run tests on macos-15 instead of macos-14.

  • [mpm] Add a Sankey diagram of all supported package managers.

5.18.0 (2024-08-02)

Note

5.18.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Add new command to export installed packages to a SBOM file in SPDX or CycloneDX standard. Closes #936.

  • [mpm] Add new dependencies on spdx-tools and cyclonedex-python-lib.

  • [mpm] Update list of recognized pURL scheme types.

  • [apt] Add architecture in package metadata.

5.17.0 (2024-07-08)

Note

5.17.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [uv] Add support for uv package manager for Python.

  • [mpm] Add --no-<manager-id> negative selection flags for each single manager. Closes #882.

  • [mpm] Deprecate -m/--manager and -e/--exclude options in favor of single --<manager-id>/--no-<manager-id> selectors.

  • [bar-plugin] Identify uv-based virtual envs to run mpm executable.

  • [mpm] Stop CLI execution if manager selection parameters ends up with no managers being retained.

  • [mpm] Switch from Poetry to uv.

  • [mpm] Drop support for Python 3.8.

  • [mpm] Add dependency on more-itertools.

  • [mpm] Add metadata and icon to binaries produced by Nuitka.

  • [mpm] Mark Python 3.13-dev tests as stable.

  • [mpm] Remove sys.path cleaning hack in __main__ invocation.

  • [mpm] Reactivate config file test for restore subcommand.

5.16.0 (2024-05-24)

Note

5.16.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [winget] Add support for WinGet on Windows. Closes #500 and #1241.

  • [mpm] Add mpm installation instructions with scoop.

  • [bar-plugin] Dynamiccaly search for Python, virtual envs and mpm executable instead of relying on hard-coded PATH environment variable.

  • [bar-plugin] Replace --check-mpm parameter by --search-mpm with complete results reporting.

  • [mpm] Slim down package by moving unit tests out of the main package.

  • [mpm] Split dev dependency groups into optional test, typing and docs groups.

  • [mpm] Remove direct dependency on click and mypy.

  • [mpm] Make typing-extensions dependency optional.

5.15.0 (2024-02-25)

Note

5.15.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [pkg] Add support for pkg on FreeBSD.

  • [choco] Bump minimal choco requirement to 2.0.0.

  • [bar-plugin] Keep original indention of Python traceback.

  • [mpm] Build arm64 binaries on macos-14.

  • [mpm] Run tests on macos-14 instead of macos-13.

  • [mpm] Run tests on Python 3.13-dev branch.

  • [mpm] Deactivate integration tests for mas on macOS, which always timeout.

  • [mpm] Reintroduce coloring of version. Refs #1152.

  • [mpm] Use external workflow to manage issues and PRs content-based labelling.

5.14.2 (2024-01-17)

Note

5.14.2 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Fix installation from pipx. Closes #1154.

5.14.1 (2024-01-16)

Note

5.14.1 is available on 🐍 PyPI and 🐙 GitHub.

  • [bar-plugin] Always call mpm --version without color.

  • [bar-plugin] Increase robustness of mpm version parsing, whether its colored or not.

  • [mpm] Temporary disable version output in color to fix already installed plugin/binary pairs. Closes #1152.

5.14.0 (2024-01-13)

Note

5.14.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Add a -t/--timeout option to set the maximum duration of each CLI call. Defaults to 10 minutes.

  • [mpm] Drop support of Python 3.7.

  • [scoop] Fix parsing of Scoop version.

  • [mpm] Group platforms by family in the managers subcommand.

  • [mpm] Run tests and actions on released Python 3.12 version.

  • [mpm] Run tests on macos-13. Remove tests on macos-12, macos-11, ubuntu-20.04 and windows-2019.

  • [mpm] Run bar plugin unittests in their independent, non-parallel step.

  • [mpm] Skip testing on intermediate Python versions to speed up CI. Only the oldest and latest supported.

  • [mpm] Skip configuration-related tests while we investigate test isolation.

  • [mpm] Fix fetching of full local copy of cask tap in tests to allow for checkout of past formula.

  • [mpm] Replace unmaintained bump2version by bump-my-version.

5.13.1 (2023-05-06)

Note

5.13.1 is available on 🐍 PyPI and 🐙 GitHub.

  • [apt] Fix omission of the final result in an apt (non-mint) search.

  • [mpm] Defaults to case-insensitive, lexicographical sort of package IDs in backup subcommand.

  • [mpm] Update brew installation instructions now that mpm is available in official Homebrew repository.

5.13.0 (2023-04-04)

Note

5.13.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Add new which/locate subcommand to search for CLIs in user’s environment.

  • [mpm] Allow usage of sudo for CLI invocation on all UNIXes, not Linux only. Closes #976.

  • [apt,apt-mint] Fix parsing of search results for apt and apt-mint. Closes #881 and #966.

  • [mpm] Adds --run-destructive, --skip-destructive, --run-non-destructive and --skip-non-destructive custom options to Pytest.

  • [mpm] Run non-destructive tests in parallel and destructive ones in sequential order.

  • [mpm] Move all documentation assets to assets subfolder.

5.12.0 (2023-02-25)

Note

5.12.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Refactor CLI search to allow all matching to be reported. This will open the way to future support of multiple versions of the same package manager. Refs #629.

  • [mpm] Exclude empty files for our CLI search results to skip Microsoft’s dummy placeholders on Windows. Closes #927.

  • [mpm] Fix composition of CLI search path on Windows.

  • [mpm] Deduplicate entries in the list of composed CLI search path.

  • [mpm] Do not search for CLI in current directory on Windows.

  • [mpm] Fix case-insensitive highlighting of CLI names in path on Windows.

  • [yarn] Do not test yarn on Linux and Windows.

  • [zypper] outdated returns early when zypper prints nothing, instead of handing an empty document to the XML parser.

  • [mpm] Do not force test order on Windows.

5.11.7 (2023-02-20)

Note

5.11.7 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Fix overlapping detection of linux and wsl2 platforms. Closes #944.

  • [pip] Print Python’s own version in debug logs before checking for Pip’s version.

  • [mpm] Code, comments and documentation style change to conform to new QA workflows based on ruff.

  • [mpm] Produce dependency graph in Mermaid instead of Graphviz. Add new dev dependency on sphinxcontrib-mermaid.

5.11.6 (2023-02-12)

Note

5.11.6 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Fix collection of artifact files from their folder.

5.11.5 (2023-02-12)

Note

5.11.5 is available on 🐍 PyPI.

Warning

5.11.5 is not available on 🐙 GitHub.

  • [mpm] Fix collection of artifact files from their folder.

5.11.4 (2023-02-12)

Note

5.11.4 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Fix attachment of binaries to GitHub release.

5.11.3 (2023-02-12)

Note

5.11.3 is available on 🐍 PyPI.

Warning

5.11.3 is not available on 🐙 GitHub.

  • [mpm] Fix attachment of binaries to GitHub release.

5.11.2 (2023-02-11)

Note

5.11.2 is available on 🐍 PyPI.

Warning

5.11.2 is not available on 🐙 GitHub.

  • [mpm] Refine bug report template.

  • [mpm] Fix attachment of binaries to GitHub release.

5.11.1 (2023-02-10)

Note

5.11.1 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Remove temporary direct dependency on charset-normalizer, fix has been pushed upstream to Nuitka.

  • [mpm] Rename artifacts attached to releases to benefits from stable URLs pointing to latest downloads.

  • [mpm] Fix some Windows unittests.

5.11.0 (2023-01-30)

Note

5.11.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Unlock run on any Unix-like platform. Closes #872.

  • [brew] Activate brew on Windows Subsystem for Linux v2.

  • [choco] Bump minimal choco requirement to 0.10.4.

  • [mpm] Depends on charset-normalizer < 3 to fix Nuitka compilation.

  • [mpm] Run tests on Python 3.12-dev.

  • [mpm] Reduce verbosity of pre-install steps in GitHub actions.

  • [mpm] Test mpm binaries.

  • [mpm] Force upgrade of Ruby on Windows test runners.

  • [mpm] Fix installation of old formulae in brew unittests.

  • [mpm] Force re-detection of npm CLI location on macOS subcommand unittests.

  • [mpm] Add new GitHub labels for newly supported platforms.

  • [mpm] Generates dependency graph in Graphviz format.

5.10.2 (2022-12-19)

Note

5.10.2 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Fix uploading of artifacts to GitHub release.

5.10.1 (2022-12-19)

Note

5.10.1 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Fix uploading of Nuitka binaries to GitHub release.

5.10.0 (2022-12-19)

Note

5.10.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Build standalone executable for macOS, Linux and Windows. Closes #725.

  • [mpm] Force default output encoding of Windows executable to fix issue on Windows CI agents.

  • [bar-plugin] Disable --bar-plugin-path option if CLI not installed from sources.

  • [bar-plugin] Rename and move meta_package_manager.7h.py bar plugin script to eliminate dynamic module loading.

  • [mpm] Replace dynamic loading of package manager definition by static code.

  • [mpm] Highlight package manager’s executable name when printing their path in logs.

  • [mpm] Hint at deprecation of manager in the support matrix.

  • [mpm] Execute all workflows with Python 3.11.

5.9.0 (2022-11-20)

Note

5.9.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [pacaur] Implement pacaur support. Closes #816.

  • [mpm] Allow managers to be flagged as deprecated.

  • [apm] Flag apm as deprecated.

  • [mpm] Remove Atom integration tests.

  • [mpm] Fix propagation of user selection of managers in upgrade and remove subcommands.

  • [mpm] Fix production of specifiers in restore subcommand.

  • [mpm] Fix installation of Scoop on Windows in unittests.

  • [mpm] Fix installation of brew on Ubuntu in unittests.

  • [mpm] Use form-based issue templates for bug reports and new package manager support requests.

  • [mpm] Remove use of deprecated ::set-output directives and replace them by environment files.

5.8.0 (2022-10-05)

Note

5.8.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [gem] Implement remove operation.

  • [mpm] Allow multiple packages to be fed to install, upgrade and remove subcommands.

  • [mpm] Allow for a mix of plain, @-based and pkg:-prefixed purl specifiers on install, upgrade and remove subcommands. Closes #669.

  • [mpm] Pass version specifier to install operation in restore subcommand.

  • [mpm] Output warning for install and upgrade_one_cli operations not implementing version parameter.

  • [mpm] Remove GitHub edit link workaround in documentation.

5.7.0 (2022-09-28)

Note

5.7.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [scoop] Add support for Scoop on Windows. Closes #546.

  • [mpm] Fix imports from click.extra. Closes #783.

5.6.2 (2022-09-27)

Note

5.6.2 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Fix imports from click.extra.

5.6.1 (2022-09-26)

Note

5.6.1 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Fix import from private click.extra submodule.

5.6.0 (2022-09-26)

Note

5.6.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [brew,cask] Add support for remove operation in homebrew.

  • [pacman] Fix pacman install operation. Closes #766.

  • [flatpak] A package whose version cannot be parsed now reports no version, instead of the literal string unknown.

  • [bar-plugin] Check for minimal Python version.

  • [mpm] Run tests on ubuntu-22.04 and macos-12.

  • [mpm] Remove tests on macos-10.15 and ubuntu-18.04, they’re deprecated by GitHub.

  • [mpm] Fix plugin rendering tests.

  • [mpm] Always run plugin rendering tests in Poetry venv.

  • [bar-plugin] Add a --check-mpm option to test the mpm binary search phase without running a full outdated package listing.

  • [mpm] Tests Python and plugin invocation in lots of shell configuration.

  • [mpm] Deactivate login shell tests.

  • [mpm] Force Homebrew tap repair in tests.

  • [mpm] Dynamiccaly get location of Homebrew Cask formulas in tests.

  • [mpm] Install dnf in tests as of ubuntu-22.04. Closes #563.

  • [mpm] Add upgrade_all operation in support matrix.

  • [mpm] Rely on external workflow to set Python version parameters for mypy, black and pyupgrade jobs.

5.5.1 (2022-07-11)

Note

5.5.1 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Eliminate rendering of None cells to <null> in tables.

  • [mpm] Add a --refilter/--no-refilter option to search to allow bypassing of mpm default refiltering.

  • [npm] Implements remove operation.

  • [npm] Use canonical commands for operations.

  • [npm] Reduce output verbosity with --no-fund and --no-audit options.

  • [yarn] Implements remove operation.

  • [yarn] Fix, document and cleanup all global commands.

  • [yarn] Set minimal yarn version to 1.20.0, as it should have been.

  • [bar-plugin] Silence all errors but critical ones on outdated invocation to prevent a failing manager to block rendering of the plugin output.

5.5.0 (2022-07-08)

Note

5.5.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Restore behavior of having upgrade assuming --all option on a bare call. Closes #715.

  • [cask] Fix parsing of multiple reported installed versions.

  • [emerge] Locate and validate qlist and eclean CLI availability.

  • [snap] Fix parsing of empty search results.

  • [mpm] Allow package name to be empty instead of duplicating it to package ID.

  • [mpm] Keep the operation matrix on the readme.md in sync with current code by inspecting implementation.

  • [mpm] Add type hints. Closes #655.

  • [mpm] Auto-check type hinting in CI.

  • [mpm] Render type hints in documentation.

  • [mpm] Add metadata for easy citation in academic content.

  • [mpm] Deactivate Atom install in macOS tests as it seems broken.

5.4.0 (2022-06-29)

Note

5.4.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Allow global upgrade of a subset of packages from the command line if no ambiguity is identified.

  • [mpm] Add a -A/--all option to upgrade operation.

  • [mpm] Add a -d/--duplicates option to installed operation to only show packages sharing the same ID across multiple managers.

  • [mpm] Add a global --description option but only implement it for search operation.

  • [mpm] Always show description for --extended search. Closes #503.

  • [mpm] Rename --package-name search option to --id-name-only.

  • [mpm] Add operation aliases:

    • list → installed

    • uninstall → remove

    • update → upgrade

    • lock/freeze/snapshot → backup

  • [mpm] Add a --merge option on backup operation to update target TOML file with new installed packages.

  • [mpm] Add an --update-version option on backup operation to only update version in the target TOML file.

  • [mpm] Add a --overwrite/--force/--replace option on backup operation to force TOML overwrite if destination file exists.

  • [pipx] Implement outdated operation.

  • [pip] Do not wait for user confirmation on remove operation.

  • [mpm] Switch package ID and name columns in table rendering.

  • [mpm] Rename all *-like labels to *-based to help finer identification of families.

5.3.0 (2022-06-25)

Note

5.3.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [paru] Add paru support.

  • [pacman,paru,yay] Run install, upgrade, remove and cleanup operations with sudo.

  • [brew,cask] Implement extended search on description.

  • [cargo] Implement remove operation.

  • [mas] Fix parsing of variable-length output in installed and outdated operations.

  • [npm] Apply global variables to all operations.

  • [bar-plugin] Fix rendering of package managers without outdated packages. Closes #631.

  • [mpm] Colorize version differences in outdated operation output.

  • [mpm] Add manager homepage URL metadata.

  • [mpm] Keep results matching description in --extended search mode.

  • [mpm] Simplify installed, outdated and search operation by relying on generators and a package dataclass.

  • [mpm] Disable workflow grouping and concurrency management.

5.2.0 (2022-06-16)

Note

5.2.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [yay] Add yay support. Refs #527.

  • [zypper] Fix outdated crashing when zypper reports no update at all: the XML traversal assumed the update-list element always held a mapping.

  • [mpm,pacman,pip,pipx] Add remove operation.

  • [mpm] Add description in search results. Refs #503.

  • [mpm] Always refilters search results manually to refine gross matchings.

  • [mpm] Document brew and Arch Linux installation. Refs #527.

  • [mpm] Benchmark distribution of all mpm alternatives.

  • [mpm] Group workflow jobs so new commits cancels in-progress execution triggered by previous commits.

  • [mpm] Run tests on early Python 3.11 releases.

5.1.0 (2022-05-15)

Note

5.1.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [pipx] Add pipx support. Closes #468.

  • [cargo] Add cargo support. Closes #633.

  • [mpm] Factorize search result refiltering code.

  • [mpm] Regroup dnf and yum labels.

5.0.1 (2022-04-28)

Note

5.0.1 is available on 🐍 PyPI and 🐙 GitHub.

  • [apt,apt-mint] Fix commands incompatible with --yes option. Closes #625.

  • [mpm] Add topgrade and pacaptr in the list of benchmarked alternatives.

  • [mpm] Rename alternative page to benchmark.

  • [mpm] Fix label unittests.

5.0.0 (2022-04-25)

Note

5.0.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [zypper] Add zypper support for Suse and OpenSuse. Closes #566.

  • [emerge] Add emerge support.

  • [steamcmd] Add steamcmd support. Refs #10.

  • [yum] Add dedicated yum package manager. Refs #415.

  • [bar-plugin] Add new DEFAULT_FONT and MONOSPACE_FONT variable.

  • [bar-plugin] Rename all reference of xbar to the generic bar-plugin label.

  • [bar-plugin] Improve search for Python and mpm executable.

  • [bar-plugin] Restructure the plugin ↔ mpm relationship to delegate all plugin layout and rendering logic to mpm.

  • [bar-plugin] Prevent leaks when modifying environment variables.

  • [mpm] Allow installed and outdated commands to be optionally implemented by package managers.

  • [mpm] Add new --plugin-output option to outdated command.

  • [mpm] Add tabulate as direct dependency and refactor table alignment in plugin around it.

  • [mpm] Rename --xbar-plugin-path option to --bar-plugin-path.

  • [mpm] Remove -c/--cli-format option.

  • [mpm] Use short-form selection option and fully-qualified path in mpm-based upgrade-all CLIs produced by outdated command.

  • [mpm] Add dedicated execution path for running sudo-prefixed commands.

  • [mpm] Fix local overriding of CLI parameters leading to missing sudo pre-command. Closes #579.

  • [mpm] Use string highlighting code from click-extra >= 2.1.0.

  • [mpm] Add edit links to documentation.

4.13.1 (2022-04-17)

Note

4.13.1 is available on 🐍 PyPI and 🐙 GitHub.

  • [apt] Add missing sudo pre-commands for apt calls that requires it. Closes #496 and #579.

  • [snap] Fix command argument order. Address #579.

  • [bar-plugin] Fix location of mpm binary on Apple Silicon machines.

  • [mpm] Replace sphinx_tabs by sphinx-design.

  • [mpm] Add SwiftBar plugin screenshots.

  • [mpm] Remove date-based shallowing of Homebrew git repository in unittests and considers the local runner copy to already be unshallowed.

4.13.0 (2022-04-16)

Note

4.13.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [pacman] Add support for pacman. Closes #416.

  • [apt-mint] Fix search. Closes #572 and #573.

  • [apt-mint] Fix --apt-mint shortcut option.

  • [bar-plugin] Add support for SwiftBar.

  • [bar-plugin] Add new TABLE_RENDERING option to plugin.

  • [bar-plugin] Improve alignment of labels in monospaced font rendering.

  • [bar-plugin] Tweak icons.

  • [mpm] Allow the meta_package_manager module to be directly executed.

  • [mpm] Add --xbar-plugin-path option.

  • [mpm] Fix normalization of CLI arguments.

  • [mpm] Fix file not found error on non-Windows platform during version checking.

4.12.1 (2022-04-06)

Note

4.12.1 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Make CLI path evaluation more robust on Windows. Closes #542.

4.12.0 (2022-04-04)

Note

4.12.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [dnf] Add support for dnf. Closes #516, refs #415.

  • [yum] Allow yum to act as dnf. Closes #415.

  • [brew,cask] Fix execution of sync command.

  • [mpm] Fix extraction of version. Closes #536.

4.11.0 (2022-04-03)

Note

4.11.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [brew,cask] Do not let homebrew auto-update on other commands. Refs #36.

  • [brew,cask] Disable analytics and env hints in logs.

  • [bar-plugin] Fix log verbosity of the xbar plugin.

  • [mpm] Show in debug logs the extra environment variable used for CLIs.

  • [mpm] Enforce code structure in package manager definition files.

  • [mpm] Fix documentation generation.

4.10.0 (2022-03-31)

Note

4.10.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Allow for package managers to simultaneously set a list of pre-commands and environment variables, as well as global arguments before and after the custom ones.

  • [mpm] Always run unittest in parallel. Adds development dependency on pytest-xdist and psutil.

  • [mpm] Use the tomllib from the standard library starting with Python 3.11.

  • [mpm] Cap click-extra requirement to <1.7.0 to fix regression. Closes #518.

4.9.10 (2022-03-09)

Note

4.9.10 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Fix execution error on Python 3.10 by updating click-extra. Closes #467.

  • [mpm] Reactivate all unittests on Python 3.10.

  • [mpm] Remove artificial capping of Python 3.9 to some workflows.

  • [mpm] Use external workflow for dependency graph generation and Python code modernization.

  • [mpm] Remove direct dependency on cloup, simplejson and pipdeptree.

4.9.9 (2022-01-15)

Note

4.9.9 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Fix upload of build artifacts in GitHub release.

4.9.8 (2022-01-15)

Note

4.9.8 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Fix propagation of build artifacts to GitHub release and PyPI.

  • [mpm] Fix test of labelling rules.

  • [mpm] Remove local dependency on graphviz now that fixes were pushed upstream.

4.9.7 (2022-01-11)

Warning

4.9.7 is not available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Add release version in artifacts produced by Poetry builds.

  • [mpm] Pass local PyPI token to reused workflow to fix publishing.

4.9.6 (2022-01-11)

Note

4.9.6 is available on 🐙 GitHub.

Warning

4.9.6 is not available on 🐍 PyPI.

  • [mpm] Fix detection of Poetry in build workflow.

4.9.5 (2022-01-11)

Warning

4.9.5 is not available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Use external workflow for package building and publishing via Poetry.

  • [mpm] Reused external label maintenance workflows and definitions.

  • [mpm] Add our custom labels to external syncing workflow.

  • [mpm] Auto-label sponsors.

  • [mpm] Remove changelog code left-overs.

  • [mpm] Aligns content of all PRs locally produced by workflows.

4.9.4 (2022-01-04)

Note

4.9.4 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Re-integrate artifacts in GitHub release on tagging.

4.9.3 (2022-01-04)

Note

4.9.3 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Fix GitHub release’s content update.

4.9.2 (2022-01-04)

Note

4.9.2 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Regenerate GitHub release content body dynamiccaly on tagging.

4.9.1 (2022-01-04)

Note

4.9.1 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Automate minor and major version bump.

  • [mpm] Automate release preparation workflow.

  • [mpm] Trigger tagging, build and version bump on release event.

  • [mpm] Add a debug workflow for troubleshooting.

4.9.0 (2022-01-03)

Note

4.9.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Add single manager selector aliases: --apm, --apt, --apt-mint, --brew, --cask. --choco, --composer, --flatpak, --gem, --mas, --npm, --opkg, --pip, --snap, --vscode and --yarn.

  • [brew,cask] Thorough cleanup: call autoremove commands to remove unused dependencies and use --prune=all to scrub the whole cache.

  • [mpm] Switch default table rendering to rounded_outline.

  • [mpm] Rely on click-extra for table rendering and tests.

  • [mpm] Remove direct dependencies on click-log and cli-helpers.

  • [mpm] Automate post-release version bump.

  • [mpm] Outsource some workflow definition to external repository.

  • [mpm] Fix generation of dependency graph.

4.8.0 (2021-11-01)

Note

4.8.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Add --color/--no-color (aliased to --ansi/--no-ansi) flags.

  • [mpm] Forces no color on JSON output.

  • [mpm] Group commands and options in help screen.

  • [mpm] Colorize options, choices, metavars and default values in help screens.

  • [mpm] Reintroduce coloring of --version option.

  • [mpm] Add dependency on click-extra.

  • [mpm] Use sphinx-click to auto-generate CLI documentation.

  • [mpm] Autofix Markdown content with mdformat.

  • [mpm] Simplify project management by abandoning the dual use of main/develop branches.

4.7.0 (2021-10-13)

Note

4.7.0 is available on 🐙 GitHub.

Warning

4.7.0 is not available on 🐍 PyPI.

  • [mpm] Add help screen coloring.

  • [mpm] Change documentation theme from classic RTD to furo.

  • [mpm] Move documentation from readthedocs.org to github.io.

  • [mpm] Rewrite documentation from rST to MyST.

  • [mpm] Add dependency on cloup.

  • [mpm] Removes click-help-colors dependency.

  • [mpm] Run tests on Python 3.10.

  • [mpm] Add a contribution guide stub in documentation. Closes #276.

4.6.0 (2021-10-04)

Note

4.6.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Implements XKCD 1654. Closes #10.

  • [mpm] Add -x/--xkcd option to forces manager selection.

  • [mpm] Let -m/--manager multi-option keep order.

4.5.0 (2021-09-30)

Note

4.5.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [choco] Add Chocolatey package manager.

  • [mpm] Skip by default the evaluation of package managers not supported on the user’s platform. Closes #278.

  • [mpm] Add a -a/--all-managers option to force the evaluation of all managers.

  • [mpm] Fix highlighting of substrings in search results.

4.4.0 (2021-09-27)

Note

4.4.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Add a global -d/--dry-run option.

  • [apt] Add dedicated apt-mint manager to handle the special case of apt on Linux Mint.

  • [bar-plugin] Let xbar plugin check minimal mpm version requirement.

  • [mpm] Use regexpes to extract package manager versions.

  • [mpm] Add beta windows-2022 CI/CD build target.

  • [mpm] Remove all the unused utilities to discard some table rendering on Windows.

4.3.0 (2021-09-25)

Note

4.3.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Add new install command. Closes #21.

  • [vscode] Add support for Visual Studio Code plugins.

  • [mpm] Finish complete restore command implementation. Closes #38.

  • [mpm] Remove un-enforced poetry-like caret-based version specification from TOML backup files.

  • [mpm] Forces logger state reset before each CLI call in unittests.

4.2.0 (2021-09-21)

Note

4.2.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Add support for TOML configuration file. Closes #66.

  • [mpm] Add -C/--config option to point to specific configuration file.

  • [mpm] Upgrade to Click 8.x.

  • [mpm] Add support for psql_unicode and minimal table format.

  • [mpm] Set default table format to psql_unicode instead of fancy_grid to reduce visual noise.

  • [mpm] Add support for environment variables for all parameters, prefixed with MPM_.

  • [mpm] Let Click produce default values in help screen.

  • [mpm] Replace tomlkit dependency by tomli and tomli_w.

  • [bar-plugin] Fix xbar plugin output format.

  • [bar-plugin] Rename VAR_SUBMENU_lAYOUT environment variable to VAR_SUBMENU_LAYOUT.

  • [mpm] Remove support for --cli-format bitbar option. Use xbar value instead.

4.1.0 (2021-05-01)

Note

4.1.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [bar-plugin] Add new Submenu layout boolean option in xbar plugin UI.

  • [bar-plugin] Rename XBAR_MPM_SUBMENU environment variable to VAR_SUBMENU_lAYOUT.

  • [mpm] Allow search of multiple CLI names for a package manager.

  • [pip] Fix search of python3 binary on macOS. Closes #247.

4.0.0 (2021-04-27)

Note

4.0.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [bar-plugin] Upgrade BitBar plugin to new xbar format.

  • [bar-plugin] Drop xbar plugin requirement on Python 2.x and bump it up to Python 3.7.3.

  • [bar-plugin] Update references of BitBar to xbar.

  • [bar-plugin] Rename BITBAR_MPM_SUBMENU environment variable to XBAR_MPM_SUBMENU.

  • [mpm] Rename --cli-format bitbar option to --cli-format xbar.

  • [mpm] Auto-generate API documentation via a GitHub action workflow.

  • [mpm] Only trigger dependency graph update on tagging to reduce noise.

  • [mpm] Re-introduce isort.

3.6.0 (2021-01-03)

Note

3.6.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [brew] Add support for brew on Linux.

  • [brew,cask] Bump minimal requirement of brew to 2.7.0.

  • [cask] Address deprecation of cask CLI subcommands.

  • [pip] pip search has been disabled by maintainers because of server-side high-load.

  • [mpm] Add test runs against new OSes and distributions: ubuntu-18.04 and macos-11.0.

  • [mpm] Remove pycodestyle now that we rely on black.

  • [mpm] Add emoji to issue labels.

3.5.2 (2020-10-29)

Note

3.5.2 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Run tests on Python 3.9.

  • [mpm] Upgrade to Poetry 1.1.0.

  • [mpm] Colorize version screen and add debug data.

  • [mpm] Test publishing to PyPI in dry-run mode by the way of Poetry.

  • [mpm] Make all keyword-based choice parameters (--manager, --exclude, --output-format, --sort-by and --cli-format) case-insensitive.

  • [mpm] Pin versions of OSes and distributions in CI workflows to ubuntu-20.04, macos-10.15 and windows-2019.

  • [mpm] Always print errors in unittest’s CLI calls.

  • [mpm] Slow-down tests to prevent PyPI rate-limiting on live API.

  • [mpm] Fix brew setup on macOS CI runners.

  • [mpm] Fix npm setup in Ubuntu 18.04 and 20.04 CI runners.

  • [mpm] Use latest Atom version in Ubuntu CI runners.

3.5.1 (2020-10-03)

Note

3.5.1 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Defaults to --continue-on-error instead of stopping.

  • [mpm] Force checking of CLI being a file.

  • [mpm] Auto-optimize images.

  • [mpm] Auto-lock closed issues and PRs after a moment of inactivity.

3.5.0 (2020-09-20)

Note

3.5.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Fix --stop-on-error parameter: it was never taken into account.

  • [brew,cask] Bump minimal requirement of brew to 2.5.0.

  • [brew,cask] Fix warning to deprecated options.

  • [npm] Always fix JSON parsing on error for any npm subcommand.

3.4.2 (2020-09-13)

Note

3.4.2 is available on 🐍 PyPI and 🐙 GitHub.

  • [brew,cask] Do not mix-up brew and cask upgrades.

  • [npm] Skip parsing of JSON results on error.

3.4.1 (2020-09-02)

Note

3.4.1 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Rename master branch to main.

3.4.0 (2020-08-18)

Note

3.4.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [yarn] Set minimal requirement to 1.20.0.

  • [yarn] Fix deprecated global arguments.

  • [bar-plugin] Force refresh of local package databases before fetching outdated ones.

  • [mpm] Add utilities to read a config TOML file. Refs #66.

  • [mpm] Auto-format Python code with Black.

  • [mpm] Move pytest config from setup.py to pyproject.toml.

  • [mpm] Removes isort.

  • [mpm] Auto-update Python’s dependencies.

  • [mpm] Auto-update GitHub actions.

  • [mpm] Auto-update .gitignore file.

  • [mpm] Auto-update .mailmap file.

  • [mpm] Lint all YAML files. Add dependency on yamllint package.

  • [mpm] Removes requires.io and Scrutinizer badges.

  • [mpm] Revert to pipdeptree to produce package dependency graph.

3.3.0 (2020-06-23)

Note

3.3.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [bar-plugin] Each entry in the drop-down menu can now be called into a terminal to track the execution by holding the Option key.

  • [bar-plugin] Fix rendering of upgrade CLI in Bitbar dialect.

  • [mpm] Hint for lack of sync and cleanup support by managers.

  • [mpm] Do not print table headers if there is no row to print.

  • [mpm] Always print non-fatal <stderr> output as warning mode.

  • [mpm] Skip table rendering tests if no table is printed to stdout. Fixes flacky tests.

  • [mpm] Replace internal helpers with upstreamed boltons 20.2.0 utils.

  • [mpm] Force test marked as xfail count as failure if they succeed.

  • [mpm] Always check wheel content.

  • [mpm] Automate creation of GitHub release.

  • [mpm] Automate publishing of package to PyPI on tagging.

  • [mpm] Save build artifacts on each CI runs.

  • [mpm] Auto-sort module imports.

  • [mpm] Auto-fix common typos.

  • [mpm] Lint JSON files.

  • [mpm] Automate GitHub label generation and synchronization.

  • [mpm] Automatically applies labels on PRs and issues depending on their changed files and content.

  • [mpm] Check label rules against manager definitions. Adds development dependency on PyYAML.

3.2.0 (2020-05-31)

Note

3.2.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [snap] Add support for snap on Linux.

  • [cask] Rely on JSON output to fetch outdated packages.

  • [flatpak] Fix search keying its results on the package name instead of the application ID: the two columns were swapped when unpacking a result row.

  • [brew,cask] Bump minimal requirement to 2.2.15.

  • [pip] Remove pip2/pip3 distinctions, use system’s python and call pip module.

  • [windows] Allow discarding of some table rendering on Windows.

  • [mpm] Add --time/--no-time flag to show elapsed execution time. Closes #9.

  • [mpm] Print table rendering, stats and timing in console output instead of logger to allow them to be greppable.

  • [mpm] Allow for manager-specific search path to help hunting down CLIs.

  • [mpm] Highlight CLI and indent results in debug output.

  • [mpm] Bump dependency to pylint 2.5 and cli-helpers 2.0.

  • [mpm] Use local copy of boltons utils while we wait for upstream release.

  • [mpm] Move pylint config from setup.cfg to pyproject.toml.

  • [mpm] Fail CI and QA checks if pylint score lower than 9.

  • [mpm] Add more platform definition unittests.

  • [mpm] Unittests all rendering modes in all subcommands.

  • [mpm] Randomize unittests.

  • [mpm] Drop support of Python 3.6.

  • [mpm] Use group-tabs in Sphinx docs.

3.1.0 (2020-04-02)

Note

3.1.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Add new cleanup command. Closes #5.

  • [mpm] Improve table sorting with new version-aware tokenizer.

  • [mpm] Highlight manager IDs depending on their availability in managers command.

  • [gem] Ignore default: prefix on package version parsing.

  • [mpm] Remove packaging dependency. Rely on internal version parsing.

  • [mpm] Add new --exact and --extended parameters to search command.

  • [mpm] Highlight search matches in console output.

  • [mas] Retrieve version in search results.

  • [mas] Bump minimal version to 1.6.1.

  • [mpm] Allow stats to be printed for backup command.

  • [gem] Bump minimal requirement to 2.5.0.

3.0.0 (2020-03-25)

Note

3.0.0 is available on 🐍 PyPI and 🐙 GitHub.

  • [mpm] Add new backup and dummy restore commands to respectively dump and load up list of installed packages to/from a TOML file. Refs #38.

  • [mpm] Add dependency on tomlkit.

  • [yarn] Add support for yarn package manager for Linux, macOS and Windows.

  • [yarn] Install yarn on all unittest platforms.

  • [mpm] Allow exclusion of a subset of package managers. Closes #45.

  • [pip] Collect installer metadata on listing.

  • [pip] Bump minimal requirement of pip to 10.0.*.

  • [mpm] Prepend /usr/local/bin to cli search path.

  • [npm] install package@version instead of update package.

  • [npm] Skip update notifier.

  • [brew,cask] Allow independent search for each manager.

  • [brew,cask] Bump minimal requirement of to 2.2.9.

  • [mpm] Allow sorting restuls by packages, managers or version. Closes #35 and #37.

  • [mpm] Add shell completion for Bash, Zsh and Fish.

  • [mpm] Do not force sync when calling outdated. Closes #36.

  • [apt] Fallback on apt version apt when looking for version. Closes #57 and #52.

  • [mpm] Removes all copyright dates.

  • [mpm] Replace unmaintained bumpversion by bump2version.

  • [mpm] Raise requirement to click 7.1.

  • [mpm] Raise requirement to boltons >= 20.0.

2.9.0 (2020-03-18)

Note

2.9.0 is available on 🐍 PyPI.

  • [mpm] Drop support of Python 2.7, 3.4 and 3.5. Add support for Python 3.8.

  • [windows] Add support for apm, composer, gem, npm and pip2 on Windows.

  • [linux] Add support for Flatpak and opkg package managers on Linux.

  • [gem] Force Ruby gem to install packages to user-install by default. Refs #58.

  • [pip] Force Python pip upgrade to user-installed packages. Refs #58.

  • [brew] Fix call to brew upgrade --cleanup. Refs #50.

  • [brew] Fix parsing of brew version. Closes #49 and #51.

  • [mpm] Switch from Travis to GitHub actions.

  • [mpm] Install composer in all platforms CI runners.

  • [linux] Install flatpak in Linux CI runner.

  • [windows] Install apm in Windows CI runner.

  • [mpm] Bump requirement to click-log >= 0.3.

  • [mpm] Add non-blocking Pylint code quality checks in CI.

  • [mpm] Check for conflicting dependencies in CI.

  • [mpm] Use Poetry for package and virtualenv management.

  • [mpm] Replace pipdeptree by Poetry CLI output.

  • [mpm] Remove backports.shutil_which dependency.

  • [mpm] Update .gitignore.

  • [mpm] Drop all Python 3.0 __future__ imports.

  • [mpm] Add detailed usage CLI page in documentation.

2.8.0 (2019-01-03)

Note

2.8.0 is available on 🐍 PyPI.

  • [composer] Add support for PHP composer.

  • [cask] Remove cask-specific version, sync and search command. Closes #47.

  • [brew] Vanilla brew and cask CLIs now shares the same version requirements.

  • [brew] Bump minimal requirement of brew and cask to 1.7.4.

  • [mpm] Activate unittests in Python 3.7.

  • [mpm] Drop Travis unittests on deprecated Ubuntu Precise targets and vintage Mac OS X 10.10 and 10.11.

  • [mpm] Use latest macOS 10.12 and 10.13 Travis images.

2.7.0 (2018-04-02)

Note

2.7.0 is available on 🐍 PyPI.

  • [mpm] Add new --ignore-auto-updates and --include-auto-updates boolean flags.

  • [mpm] Support even fancier table output rendering, including csv and html.

  • [mpm] Depends on cli-helpers package to render tables.

  • [mpm] Removes direct dependency on tabulate.

  • [cask] Fix minimal version check for cask. Closes #41 and #44.

2.6.1 (2017-11-05)

Note

2.6.1 is available on 🐍 PyPI.

  • [mpm] Fix Travis unittests.

2.6.0 (2017-09-10)

Note

2.6.0 is available on 🐍 PyPI.

  • [apt] Add support for apt on Linux systems.

  • [pip] Use pip 9.0 JSON output. Closes #18.

  • [pip] Bump minimal requirement of pip to 9.0.*.

  • [cask] Use new brew cask outdated command.

  • [cask] Remove usage of deprecated brew cask update command.

  • [cask] Bump minimal requirement of cask to 1.1.12.

  • [mpm] Add dependency on simplejson.

  • [mpm] Bump requirement to click_log >= 0.2.0. Closes #39.

  • [mpm] Replace nose by pytest.

  • [mpm] Only notify by mail of test failures.

2.5.0 (2017-03-01)

Note

2.5.0 is available on 🐍 PyPI.

  • [mpm] Auto-detect location of manager CLI on the system.

  • [mpm] Add new search operation. Closes #22.

  • [npm] Bump minimal requirement of npm to 4.0.*.

  • [mpm] Rename list operation to installed.

  • [apm,gem,linux,npm] Allow use of apm, gem and npm managers on Linux.

  • [mpm] Add new --stats/--no-stats boolean flags. Closes #8.

  • [mpm] Add new --stop-on-error/--continue-on-error parameters to make CLI errors either blocking or non-blocking.

  • [mpm] Allow reporting of several CLI errors by managers.

  • [mpm] Allow selection of a subset of managers.

  • [mpm] Do not force a sync before listing installed packages in CLI.

  • [mpm] Rework API documentation.

  • [cask] Add unittest to cover unicode names for Cask packages. Closes #16.

  • [cask] Add unittest to cover Cask packages with multiple names. Refs #26.

  • [mpm] Drop support of Python 3.3.

2.4.0 (2017-01-28)

Note

2.4.0 is available on 🐍 PyPI.

  • [mpm] Add new list operation. Closes #20.

  • [mas] Fix upgrade of mas packages. Closes #32.

  • [gem] Fix listing of gems installed in several versions at once (like molinillo (0.5.4, 0.4.5, 0.2.3)), reporting the latest of them.

  • [mpm] Colorize check-marks in CLI output.

  • [mpm] Decouple sync and outdated actions in all managers.

  • [mpm] Cache output of outdated command.

  • [mpm] Add global todo list in documentation.

  • [mpm] Bump requirement to boltons >= 17.0.0 for Python 3.3 compatibility.

2.3.0 (2017-01-15)

Note

2.3.0 is available on 🐍 PyPI.

  • [mpm] Add Sphinx documentation. Closes #24.

  • [mpm] Add installation instructions. Closes #19.

  • [mpm] Add a list of Falsehoods Programmers Believe About Package Managers.

  • [mpm] Add a .mailmap config file to consolidate contributor’s identity.

  • [bar-plugin] Make it easier to change the font, size and color of text in BitBar plugin.

  • [bar-plugin] Move error icon in BitBar plugin to the front of manager name.

  • [cask] Fix parsing of cask packages with multiple names. Closes #26.

  • [bar-plugin] Move BitBar plugin documentation to dedicated page.

  • [mpm] Fix exceptions when commands gives no output. Closes #31.

  • [gem] Fix the exception raised when gem returns no output. Closes #29.

  • [cask] Fix cask update deprecation warning. Closes #28.

  • [mpm] Activate unittests in Python 3.6.

  • [mpm] Replace double by single-width characters in mpm output to fix table misalignment. Closes #30.

2.2.0 (2016-12-25)

Note

2.2.0 is available on 🐍 PyPI.

  • [mpm] Rename supported property of managers to fresh.

  • [mpm] Allow restriction of package managers to a platform. Closes #7.

  • [mpm] Include supported property in mpm managers sub-command.

  • [bar-plugin] Add optional submenu rendering for BitBar plugin. Closes #23.

  • [bar-plugin] Move Upgrade all menu entry to the bottom of each section in BitBar plugin.

  • [mpm] Allow destructive unittests in Travis CI jobs.

  • [pip] Allow usage of pip2 and pip3 managers on Linux.

  • [mpm] Print current platform in debug messages.

  • [mpm] Unittest detection of managers on each platform.

2.1.1 (2016-12-17)

Note

2.1.1 is available on 🐍 PyPI.

  • [brew,cask] Fix parsing of non-point releases of brew and cask versions. Closes #15.

  • [bar-plugin] Do not render emoji in BitBar plugin menu entries.

  • [bar-plugin] Do not trim error messages rendered in BitBar plugin.

  • [mpm] Do not strip CLI output. Keep original format.

  • [mpm] Fix full changelog link.

2.1.0 (2016-12-14)

Note

2.1.0 is available on 🐍 PyPI.

  • [bar-plugin] Adjust rendering of BitBar plugin errors.

  • [mpm] Fix fetching of log level names in Python 3.4+.

  • [mpm] Print CLI output in unittests.

  • [mpm] Print more debug info in unittests when CLI produce tracebacks.

  • [macos] Drop support and unittests on Mac OS X 10.9.

  • [macos] Add new macOS 10.12 target for Travis CI builds.

  • [bar-plugin] Move BitBar plugin within the Python module.

  • [mpm] Show unmet version requirements in table output for mpm managers sub-command.

  • [mpm] Fix duplicates in outdated packages by indexing them by ID.

  • [mpm] Always print the raw, un-normalized version of managers, as reported by themselves.

  • [mpm] Fetch version of all managers.

  • [mpm] Make manager version mandatory.

  • [mpm] Bump requirement to readme_renderer >= 16.0.

  • [mpm] Always remove ANSI codes from CLI output.

  • [mpm] Fix rendering of unicode logs.

  • [mpm] Bump requirement to click_log >= 0.1.5.

  • [bar-plugin] Force LANG environment variable to en_US.UTF-8.

  • [bar-plugin,mpm] Share same code path for CLI execution between mpm and BitBar plugin.

  • [mpm] Add a -d/--dry-run option to mpm upgrade sub-command.

  • [macos] Remove hard-requirement on macOS platform. Refs #7.

  • [macos,mpm] Fix upgrade of setuptools in macOS and Python 3.3 Travis jobs.

2.0.0 (2016-12-04)

Note

2.0.0 is available on 🐍 PyPI.

  • [bar-plugin] Rewrite BitBar plugin based on mpm. Closes #13.

  • [bar-plugin] Render errors with a monospaced font in BitBar plugin.

  • [mpm] Add missing CHANGES.rst in MANIFEST.in.

  • [mpm] Make wheels generated under Python 2 environment available for Python 3 too.

  • [mpm] Only show latest changes in the long description of the package instead of the full changelog.

  • [mpm] Add link to full changelog in package’s long description.

  • [mpm] Bump trove classifiers status out of beta.

  • [mpm] Fix package keywords.

  • [mpm] Bump minimal pycodestyle requirement to 2.1.0.

  • [mpm] Always check for package metadata in Travis CI jobs.

  • [mpm] Add upgrade_all_cli field for each package manager in JSON output of mpm outdated command.

1.12.0 (2016-12-03)

Note

1.12.0 is available on 🐍 PyPI.

  • [mpm] Rename mpm update command to mpm upgrade.

  • [mpm] Allow restriction to only one package manager for each sub-command. Closes #12.

  • [mpm] Differentiate packages names and IDs. Closes #11.

  • [mpm] Sort list of outdated packages by lower-cased package names first.

  • [mpm] Add upgrade_cli field for each outdated packages in JSON output.

  • [bar-plugin,mpm] Allow user to choose rendering of upgrade_cli field to either one-liner, fragments or BitBar format. Closes #14.

  • [mpm] Include errors reported by each manager in JSON output of mpm outdated command.

  • [cask] Fix parsing of multiple versions of cask installed packages.

  • [brew,cask] Fix lexicographical sorting of brew and cask package versions.

  • [mpm] Fix fall-back to iterative full upgrade command.

  • [mpm] Fix computation of outdated packages statistics.

1.11.0 (2016-11-30)

Note

1.11.0 is available on 🐍 PyPI.

  • [mpm] Allow rendering of output data into json.

  • [mpm] Sort list of outdated packages by lower-cased package IDs.

  • [brew,cask] Bump minimal requirement of brew to 1.0.0 and cask to 1.1.0.

  • [cask] Fix fetching of outdated cask packages.

  • [cask] Fix upgrade of cask packages.

1.10.0 (2016-10-04)

Note

1.10.0 is available on 🐍 PyPI.

  • [mpm] Add optional version property on package manager definitions.

  • [mpm] Allow each package manager to set requirement on its own version.

  • [mas] Let mas report its own version.

  • [mas] Bump minimal requirement of mas to 1.3.1.

  • [mas] Fetch currently installed version from mas. Closes #4.

  • [mas] Fix parsing of mas package versions after the 1.3.1 release.

  • [mpm] Cache lazy properties to speed metadata computation.

  • [mpm] Shows detailed state of package managers in CLI.

1.9.0 (2016-09-23)

Note

1.9.0 is available on 🐍 PyPI.

  • [mpm] Fix bumpversion configuration to target CHANGES.rst instead of README.rst.

  • [mpm] Render list of detected managers in a table.

  • [macos] Use conda in Travis tests to install specific versions of Python across the range of macOS workers.

  • [macos] Drop support for PyPy while we search a way to install it on macOS with Travis.

  • [mpm] Let mpm auto-detect package manager definitions.

  • [mpm] Show package manager IDs in mpm managers CLI output.

  • [mpm] Rename package_manager.7h.py BitBar plugin to meta_package_manager.7h.py.

  • [mpm] Give each package manager its own dedicated short string ID.

  • [mpm] Keep a cache of instantiated package manager.

  • [mpm] Add unittests around package manager definitions.

  • [mpm] Do not display location of inactive managers, even if hard-coded.

  • [mpm] Split-up CLI-producing methods and CLI running methods in PackageManager base class.

  • [mpm] Add a new update CLI sub-command.

  • [mpm] Add a new sync CLI sub-command.

  • [mpm] Rename managers’ active property to available.

  • [mpm] Move all package manager definitions in a dedicated folder.

  • [mpm] Add simple CLI unittests. Closes #2.

  • [mpm] Implement outdated CLI sub-command.

  • [mpm] Allow selection of table rendering.

  • [cask] Fix parsing of unversioned cask packages. Closes #6.

1.8.0 (2016-08-22)

Note

1.8.0 is the first version available on 🐍 PyPI.

  • [mpm] Move the plugin to its own repository.

  • [mpm] Rename package-manager project to meta-package-manager.

  • [mpm] Add a README.rst file.

  • [mpm] License under GPLv2+.

  • [mpm] Add .gitignore config.

  • [mpm] Add Python package skeleton. Closes #1.

  • [mpm] Split CHANGES.rst out of README.rst.

  • [mpm] Add Travis CI configuration.

  • [mpm] Use semver-like 3-components version number.

  • [bar-plugin] Copy all BitBar plugin code to Python module.

  • [mpm] Give each supported package manager its own module file.

  • [mpm] Add minimal mpm meta CLI to list supported package managers.

  • [mpm] Add default bumpversion, isort, nosetests, coverage, pep8 and pylint default configuration.

1.7.0 (2016-08-16)

  • [brew] Fix issues with $PATH not having Homebrew/Macports.

  • [pip] New workaround for full pip upgrade command.

  • [cask] Workaround for Homebrew Cask full upgrade command.

  • [mpm] Grammar fix when 0 packages need to be upgraded.

1.6.0 (2016-08-10)

  • [pip] Work around the lacks of full pip upgrade command.

  • [mpm] Fix UnicodeDecodeError on parsing CLI output.

1.5.0 (2016-07-25)

  • [mas] Add support for mas.

  • [mpm] Don’t show all stderr as err (check return code for error state).

1.4.0 (2016-07-10)

  • [mpm] Don’t attempt to parse empty lines.

  • [npm] Check for linked npm packages.

  • [gem] Support system or Homebrew Ruby Gems (with proper sudo setup).

1.3.0 (2016-07-09)

  • [mpm] Add changelog.

  • [mpm] Add reference to package manager’s issues.

  • [cask] Force Cask update before evaluating available packages.

  • [mpm] Add sample of command output as version parsing can be tricky.

1.2.0 (2016-07-08)

  • [apm,gem,npm,pip] Add support for both pip2 and pip3, Node’s npm, Atom’s apm, Ruby’s gem.

  • [cask] Fixup brew cask checking.

  • [mpm] Don’t die on errors.

1.1.0 (2016-07-07)

  • [pip] Add support for Python’s pip.

1.0.0 (2016-07-05)

  • [mpm] Initial public release.

  • [brew,cask] Add support for Homebrew and Cask.