Skip to content

Releases: kdeldycke/meta-package-manager

v6.5.1

28 May 22:33
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

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

Full changelog: v6.5.0...v6.5.1


πŸ›‘οΈ VirusTotal scans

Binary Detections Analysis
mpm-6.5.1-linux-arm64.bin 0 / 63 View scan
mpm-6.5.1-linux-x64.bin 1 / 60 View scan
mpm-6.5.1-macos-arm64.bin 1 / 62 View scan
mpm-6.5.1-macos-x64.bin 1 / 62 View scan
mpm-6.5.1-windows-arm64.exe 2 / 69 View scan
mpm-6.5.1-windows-x64.exe 5 / 71 View scan

v6.5.0

25 May 10:02
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

  • [pwsh-gallery] Add PowerShell Gallery package manager with installed, outdated, search, install, upgrade, and remove support. Drives Microsoft.PowerShell.PSResourceGet (bundled with PowerShell 7.4+) through pwsh -NoProfile -NonInteractive -Command, parses JSON via ConvertTo-Json -AsArray, and targets -Scope CurrentUser for installs so no elevation is required. Cross-platform on Linux, macOS, and Windows. Non-zero pwsh exits raise CLIError immediately via must_succeed=True on all run_cli() calls; json.loads() is guarded with a JSONDecodeError catch as a second layer, so mpm logs a warning and skips the manager instead of crashing. Closes {issue}1760.
  • [topgrade] Add topgrade itself as a supported package manager, in the spirit of XKCD #927. Only upgrade --all is implemented (the only operation topgrade exposes); mpm upgrade --topgrade runs topgrade --yes non-interactively. Requires topgrade >= 17.0.0. Selecting both topgrade and a manager topgrade already drives (brew, apt, pacman, etc.) in the same mpm upgrade --all will run that manager twice.
  • [mpm] Add [mpm.managers.<id>] configuration sections for per-manager attribute overrides. Closes {issue}945. Recognized fields: cli_names, cli_search_path, deprecated, dry_run, extra_env, ignore_auto_updates, post_args, pre_args, pre_cmds, requirement, stop_on_error, timeout, version_cli_options, version_regexes. List-valued overrides use replace semantics, and per-manager values take precedence over the matching global [mpm] settings or --<flag> command-line values. Unknown manager IDs and field names log a warning and are skipped; type mismatches raise an error.
  • [mpm] Print an upstream contribution invitation on <stderr> when a user override targets a detection-related field (cli_names, cli_search_path, requirement, version_cli_options, version_regexes). The invitation includes a pre-filled GitHub new-issue URL targeting bug-report.yml with the manager ID, override value, and pre-override cli_path already populated. Silence via --no-suggest-contribs, MPM_SUGGEST_CONTRIBS=false, or [mpm] suggest_contribs = false in the config file.
  • [mpm] Add mpm dump-toml [manager-ids...] subcommand that prints every overridable attribute of each requested manager as a ready-to-paste [mpm.managers.<id>] TOML block. With no positional argument, every maintained manager is dumped. Doubles as the canonical reference for what each manager exposes: users can pipe the output into a config file and prune the rows that don't apply.
  • [bar-plugin] Swap the default and alternate actions on package-upgrade entries: a regular click now opens a visible terminal that shows the upgrade output, and holding the Option key runs the upgrade silently. Reverses the previous behavior introduced in 3.3.0.
  • [mpm] Remove automated publishing of the Chocolatey package: the 🍫 Chocolatey job is gone from release.yaml, and the choco job that installed from the community repository is gone from tests-install.yaml. Submission 6.4.2 was rejected because the Windows x64 binary is flagged by more than 10 antivirus engines on VirusTotal, the cutoff for community-repository approval. The in-tree packaging/choco/meta-package-manager/ nuspec and the choco-source build-from-source job in tests-install.yaml are kept; 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 the new --json output instead of regex-matching the tabular format (avoids column-alignment ambiguities from app names with parentheses or extra whitespace), update homepage_url to https://github.com/mas-cli/mas (the project moved from argon/mas), and drop the explicit sudo wrapper around mas uninstall (mas 4.1.0+ requests root privileges itself when not already running as root).
  • [mpm] Fix Windows subprocess handling: spawn subprocesses with CREATE_NO_WINDOW | SW_HIDE to prevent console signal broadcasts; catch KeyboardInterrupt in run() to absorb CTRL_C_EVENT signals from winget's finalizer processes; on TimeoutExpired, run taskkill /F /T against the PID and named cleanup processes like WindowsPackageManagerServer.exe before calling proc.communicate(), since grandchild installer processes inherit pipe write handles and keep them open after proc.kill(); extend the OSError handler to catch FileNotFoundError (WinError 2 / ENOENT), treating a missing executable as the manager being unavailable rather than a fatal crash; pass stdin=subprocess.DEVNULL to prevent interactive prompts from hanging indefinitely; and decode subprocess output with errors="replace" to avoid UnicodeDecodeError from Windows cp1252 package descriptions.
  • [yarn] Fix search to parse NDJSON output line by line. Newer versions of Yarn with --json emit multiple JSON objects on separate lines rather than a single JSON blob; the previous json.loads() raised JSONDecodeError when Yarn appended a trailing status line after the inspect object. Lines are now parsed individually and only inspect-type entries are collected, matching the pattern already used in outdated().
  • [mpm] Fix Nuitka onefile builds: remove the invalid nuitka = "False" entry from [tool.uv] exclude-newer-package (uv rejected it as an invalid exclude-newer value, printing a TOML parse error on every invocation), and configure the binary through the standard [tool.nuitka] section. repomatic 6.20.0's repomatic run nuitka reads that section and translates it to CLI flags at build time (Nuitka itself reads it only for setuptools build-backend builds), so the binary now bundles click_extra's themes.toml (loaded via importlib.resources) so it can start, and carries product metadata and native per-platform icons (docs/assets/icon.png/icon.icns/icon.ico for Linux/macOS/Windows, all rendered from icon.svg). Native formats are required: Nuitka would otherwise need the imageio package to convert a non-native image and fail the build. file-version/product-version are kept numeric, since Nuitka rejects PEP 440 .devN suffixes, and are kept in sync by [tool.bumpversion].
  • [xbps] Add Void Linux build-from-source installation instructions to docs/install.md. The package is pending upstream review at void-linux/void-packages#60532; until that merges, users can build from the mpm branch of the fork.

Full changelog: v6.4.3...v6.5.0


πŸ›‘οΈ VirusTotal scans

Binary Detections Analysis
mpm-6.5.0-linux-arm64.bin 0 / 58 View scan
mpm-6.5.0-linux-x64.bin 0 / 63 View scan
mpm-6.5.0-macos-arm64.bin 0 / 60 View scan
mpm-6.5.0-macos-x64.bin 1 / 58 View scan
mpm-6.5.0-windows-arm64.exe 1 / 66 View scan
mpm-6.5.0-windows-x64.exe 3 / 62 View scan

v6.4.3

11 May 11:10
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

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

Full changelog: v6.4.2...v6.4.3


πŸ›‘οΈ VirusTotal scans

Binary Detections Analysis
mpm-6.4.3-linux-arm64.bin 0 / 63 View scan
mpm-6.4.3-linux-x64.bin 0 / 63 View scan
mpm-6.4.3-macos-arm64.bin 5 / 62 View scan
mpm-6.4.3-macos-x64.bin 0 / 63 View scan
mpm-6.4.3-windows-arm64.exe 2 / 69 View scan
mpm-6.4.3-windows-x64.exe 23 / 70 View scan

v6.4.2

11 May 09:33
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

  • [mpm] Compile version_regexes with re.MULTILINE only, dropping re.VERBOSE. Under re.VERBOSE, unescaped whitespace in the pattern is silently ignored, so patterns like r"guix \(GNU Guix\) (?P<version>...)" would never match guix --version output and the manager was reported as unavailable with could not parse version from <path> output. Affected guix, nix, and stew, all of which now correctly detect their installed version. steamcmd, which used \ escapes to work around the same flag, is unaffected.

Full changelog: v6.4.1...v6.4.2


πŸ›‘οΈ VirusTotal scans

Binary Detections Analysis
mpm-6.4.2-linux-arm64.bin 0 / 63 View scan
mpm-6.4.2-linux-x64.bin 0 / 62 View scan
mpm-6.4.2-macos-x64.bin 1 / 63 View scan
mpm-6.4.2-windows-arm64.exe 2 / 69 View scan
mpm-6.4.2-windows-x64.exe 23 / 71 View scan

v6.4.1

04 May 15:08
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

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. Guix is a rolling-release distribution: guix pull-managed installs and in-tree dev wrappers (./pre-inst-env guix, ./scripts/guix) report a git commit hash as the "version", which the previous >=1.0.0 specifier rejected as not satisfying the requirement and made mpm skip the manager. The new version_regexes chain accepts stable releases (1.4.0), git describe-style versions (1.4.0-7-gabc1234), and bare 7–40-char lowercase hex hashes, so any working guix registers as available.
  • [mpm] Add PackageManager.unavailable_reason and use it in the pool's "Skip" log line. When mpm drops a manager from selection, the message now spells out why it was dropped: not supported on '<sysname>', no executable named '<names>' found in PATH, '<path>' is not executable, could not parse version from '<path>' output, or version <X> does not satisfy '<spec>' requirement. Replaces the previous opaque Skip unavailable <id> manager. line.
  • [mpm] Move --cov and --cov-report=term from pyproject.toml [tool.pytest].addopts into the CI workflow. Removes pytest-cov as an unconditional test-time dependency for downstream packagers.
  • [mpm] Move --numprocesses=auto, --dist=loadgroup, and --maxschedchunk=1 from pyproject.toml [tool.pytest].addopts into the CI workflow. Removes pytest-xdist as an unconditional test-time dependency for downstream packagers.
  • [zypper] Loosen xmltodict floor from >=1 to >=0.12. The parse() API I rely on in managers/zypper.py has been stable since 0.12, so the bump to 1.0 was cosmetic and forced downstream packagers to ship a newer release than necessary.
  • [mpm] Drop more-itertools dependency. The single peekable use site in pool.py is replaced with a next(iterator, None) empty-check using stdlib only. Removes one transitive dependency for downstream packagers.
  • [choco] Move Chocolatey package files from packaging/choco/ into packaging/choco/meta-package-manager/ so the directory name matches the nuspec basename, as required by Chocolatey-AU's Update-Package. Fixes the 🍫 Chocolatey release job that was failing with No nuspec file found in the package directory.
  • [mpm] Add choco-source, nix-source, and guix-source jobs to tests-install.yaml that build and install from the in-repo packaging specs (packaging/choco/meta-package-manager/, packaging/nix/, packaging/guix/). The workflow now also triggers on pushes and pull requests touching packaging/{choco,nix,guix}/**, so changes to in-repo specs are validated before merge.
  • [mpm] Render the chocolatey, guix, and nix release-PR bodies through repomatic pr-body --template-file .github/pr-templates/update-package-spec.md.noformat. PRs now include the standard <details> workflow-metadata block (trigger, actor, ref, commit, job, workflow, run links), the refresh-tip admonition pointing at the workflow's dispatch URL, and the attribution footer, matching every other PR opened by repomatic-driven jobs across kdeldycke/* repositories.

Full changelog: v6.4.0...v6.4.1


πŸ›‘οΈ VirusTotal scans

Binary Detections Analysis
mpm-6.4.1-linux-arm64.bin 0 / 62 View scan
mpm-6.4.1-linux-x64.bin 0 / 62 View scan
mpm-6.4.1-macos-arm64.bin 4 / 61 View scan
mpm-6.4.1-macos-x64.bin 1 / 62 View scan
mpm-6.4.1-windows-arm64.exe 2 / 68 View scan
mpm-6.4.1-windows-x64.exe 23 / 69 View scan

v6.4.0

27 Apr 08:34
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

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 {issue}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 {issue}1767.
  • [scoop] Fix CLI invocation in outdated operation.
  • [winget] Fix search crash when no results are returned.
  • [zypper] Skip install and remove tests on Linux CI runners: the RPM database at /var/lib/rpm is inaccessible on Ubuntu-based runners.

Full changelog: v6.3.0...v6.4.0

v6.3.0

09 Apr 17:41
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

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 {issue}602.
  • [deb-get] Add deb-get package manager with installed, outdated, search, install, upgrade, remove, sync, and cleanup support. Closes {issue}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 {issue}1610.
  • [sdkman] Add SDKMAN! package manager with installed, outdated, install, upgrade, sync, and cleanup support. Closes {issue}729.
  • [stew] Add Stew package manager for installing pre-compiled binaries from GitHub Releases. Closes {issue}1680.
  • [zerobrew] Add ZeroBrew manager with installed, outdated, install, and remove support. Closes {issue}1681.
  • [uvx] Implement outdated operation. Bump minimal requirement to 0.10.10. Closes {pr}1704.
  • [yarn] Split into Yarn Classic and Yarn Berry managers. Restrict Classic to <2.0.0. Closes {issue}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 {issue}1214.
  • [mpm] Support version range specifiers (e.g. >=1.20.0,<2.0.0) in manager requirement field. Refs {issue}1548.
  • [mpm] Add must_succeed parameter to run_cli for structured-output calls, preventing silent data loss on CLI failures. Refs {issue}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 {issue}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.

Full changelog: v6.2.1...v6.3.0


πŸ›‘οΈ VirusTotal scans

Binary Analysis
meta-package-manager-6.3.0-linux-arm64.bin View scan
meta-package-manager-6.3.0-linux-x64.bin View scan
meta-package-manager-6.3.0-macos-arm64.bin View scan
meta-package-manager-6.3.0-macos-x64.bin View scan
meta-package-manager-6.3.0-windows-arm64.exe View scan
meta-package-manager-6.3.0-windows-x64.exe View scan
mpm-6.3.0-linux-arm64.bin View scan
mpm-6.3.0-linux-x64.bin View scan
mpm-6.3.0-macos-arm64.bin View scan
mpm-6.3.0-macos-x64.bin View scan
mpm-6.3.0-windows-arm64.exe View scan
mpm-6.3.0-windows-x64.exe View scan

v6.2.1

26 Mar 12:54
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

Note

6.2.1 is available on 🐍 PyPI and πŸ™ GitHub.

  • [brew,cask] Remove --quiet from outdated command where it conflicts with --json. Closes {issue}1703.
  • [npm] Fix crash on installed when no global packages are present. Closes {issue}1603.
  • [mpm] Fix --no-color having no effect on CSV output. Closes {issue}1004.
  • [mpm] Fix version reported by compiled (Nuitka) binaries. Closes {issue}1145.

Full changelog: v6.2.0...v6.2.1

v6.2.0

25 Mar 20:59
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

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.

Full changelog: v6.1.1...v6.2.0

v6.1.1

06 Feb 06:24

Choose a tag to compare

Changes

  • [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.

🐍 Available on PyPi.