Releases: kdeldycke/meta-package-manager
Releases Β· kdeldycke/meta-package-manager
v6.5.1
Immutable
release. Only release title and notes can be modified.
- [mpm] Define
mpm's ownOK_GLYPH(β) andKO_GLYPH(β) constants inmeta_package_manager.outputinstead of importing them fromclick-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
Immutable
release. Only release title and notes can be modified.
- [pwsh-gallery] Add PowerShell Gallery package manager with
installed,outdated,search,install,upgrade, andremovesupport. DrivesMicrosoft.PowerShell.PSResourceGet(bundled with PowerShell 7.4+) throughpwsh -NoProfile -NonInteractive -Command, parses JSON viaConvertTo-Json -AsArray, and targets-Scope CurrentUserfor installs so no elevation is required. Cross-platform on Linux, macOS, and Windows. Non-zeropwshexits raiseCLIErrorimmediately viamust_succeed=Trueon allrun_cli()calls;json.loads()is guarded with aJSONDecodeErrorcatch as a second layer, so mpm logs a warning and skips the manager instead of crashing. Closes {issue}1760. - [topgrade] Add
topgradeitself as a supported package manager, in the spirit of XKCD #927. Onlyupgrade --allis implemented (the only operationtopgradeexposes);mpm upgrade --topgraderunstopgrade --yesnon-interactively. Requirestopgrade>=17.0.0. Selecting bothtopgradeand a managertopgradealready drives (brew,apt,pacman, etc.) in the samempm upgrade --allwill 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 targetingbug-report.ymlwith the manager ID, override value, and pre-overridecli_pathalready populated. Silence via--no-suggest-contribs,MPM_SUGGEST_CONTRIBS=false, or[mpm] suggest_contribs = falsein 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
Optionkey runs the upgrade silently. Reverses the previous behavior introduced in3.3.0. - [mpm] Remove automated publishing of the Chocolatey package: the
π« Chocolateyjob is gone fromrelease.yaml, and thechocojob that installed from the community repository is gone fromtests-install.yaml. Submission6.4.2was rejected because the Windows x64 binary is flagged by more than 10 antivirus engines on VirusTotal, the cutoff for community-repository approval. The in-treepackaging/choco/meta-package-manager/nuspec and thechoco-sourcebuild-from-source job intests-install.yamlare kept; install instructions indocs/install.mdnow point only at the local build path. - [mas] Bump minimum required
masversion from1.8.7to7.0.0, switchinstalled,outdated, andsearchto parse the new--jsonoutput instead of regex-matching the tabular format (avoids column-alignment ambiguities from app names with parentheses or extra whitespace), updatehomepage_urltohttps://github.com/mas-cli/mas(the project moved fromargon/mas), and drop the explicitsudowrapper aroundmas uninstall(mas4.1.0+ requests root privileges itself when not already running as root). - [mpm] Fix Windows subprocess handling: spawn subprocesses with
CREATE_NO_WINDOW | SW_HIDEto prevent console signal broadcasts; catchKeyboardInterruptinrun()to absorbCTRL_C_EVENTsignals from winget's finalizer processes; onTimeoutExpired, runtaskkill /F /Tagainst the PID and named cleanup processes likeWindowsPackageManagerServer.exebefore callingproc.communicate(), since grandchild installer processes inherit pipe write handles and keep them open afterproc.kill(); extend theOSErrorhandler to catchFileNotFoundError(WinError 2 / ENOENT), treating a missing executable as the manager being unavailable rather than a fatal crash; passstdin=subprocess.DEVNULLto prevent interactive prompts from hanging indefinitely; and decode subprocess output witherrors="replace"to avoidUnicodeDecodeErrorfrom Windows cp1252 package descriptions. - [yarn] Fix
searchto parse NDJSON output line by line. Newer versions of Yarn with--jsonemit multiple JSON objects on separate lines rather than a single JSON blob; the previousjson.loads()raisedJSONDecodeErrorwhen Yarn appended a trailing status line after theinspectobject. Lines are now parsed individually and onlyinspect-type entries are collected, matching the pattern already used inoutdated(). - [mpm] Fix Nuitka onefile builds: remove the invalid
nuitka = "False"entry from[tool.uv] exclude-newer-package(uv rejected it as an invalidexclude-newervalue, printing a TOML parse error on every invocation), and configure the binary through the standard[tool.nuitka]section. repomatic6.20.0'srepomatic run nuitkareads 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 bundlesclick_extra'sthemes.toml(loaded viaimportlib.resources) so it can start, and carries product metadata and native per-platform icons (docs/assets/icon.png/icon.icns/icon.icofor Linux/macOS/Windows, all rendered fromicon.svg). Native formats are required: Nuitka would otherwise need theimageiopackage to convert a non-native image and fail the build.file-version/product-versionare kept numeric, since Nuitka rejects PEP 440.devNsuffixes, 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 thempmbranch 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
Immutable
release. Only release title and notes can be modified.
- [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
Immutable
release. Only release title and notes can be modified.
- [mpm] Compile
version_regexeswithre.MULTILINEonly, droppingre.VERBOSE. Underre.VERBOSE, unescaped whitespace in the pattern is silently ignored, so patterns liker"guix \(GNU Guix\) (?P<version>...)"would never matchguix --versionoutput and the manager was reported as unavailable withcould not parse version from <path> output. Affectedguix,nix, andstew, 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
Immutable
release. Only release title and notes can be modified.
Note
6.4.1 is available on π PyPI and π GitHub.
- [guix] Drop the
>=1.0.0version 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.0specifier rejected as not satisfying the requirement and madempmskip the manager. The newversion_regexeschain 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 workingguixregisters as available. - [mpm] Add
PackageManager.unavailable_reasonand use it in the pool's "Skip" log line. Whenmpmdrops 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, orversion <X> does not satisfy '<spec>' requirement. Replaces the previous opaqueSkip unavailable <id> manager.line. - [mpm] Move
--covand--cov-report=termfrompyproject.toml[tool.pytest].addoptsinto the CI workflow. Removespytest-covas an unconditional test-time dependency for downstream packagers. - [mpm] Move
--numprocesses=auto,--dist=loadgroup, and--maxschedchunk=1frompyproject.toml[tool.pytest].addoptsinto the CI workflow. Removespytest-xdistas an unconditional test-time dependency for downstream packagers. - [zypper] Loosen
xmltodictfloor from>=1to>=0.12. Theparse()API I rely on inmanagers/zypper.pyhas 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-itertoolsdependency. The singlepeekableuse site inpool.pyis replaced with anext(iterator, None)empty-check using stdlib only. Removes one transitive dependency for downstream packagers. - [choco] Move Chocolatey package files from
packaging/choco/intopackaging/choco/meta-package-manager/so the directory name matches the nuspec basename, as required by Chocolatey-AU'sUpdate-Package. Fixes theπ« Chocolateyrelease job that was failing withNo nuspec file found in the package directory. - [mpm] Add
choco-source,nix-source, andguix-sourcejobs totests-install.yamlthat 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 touchingpackaging/{choco,nix,guix}/**, so changes to in-repo specs are validated before merge. - [mpm] Render the
chocolatey,guix, andnixrelease-PR bodies throughrepomatic 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 acrosskdeldycke/*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
Immutable
release. Only release title and notes can be modified.
Note
6.4.0 is available on π PyPI and π GitHub.
- [apk] Add Alpine Linux's
apkpackage manager withinstalled,outdated,search,install,upgrade,remove,sync, andcleanupsupport. - [guix] Add GNU Guix package manager with
installed,outdated,search,install,upgrade,remove,sync, andcleanupsupport. - [macports] Add MacPorts package manager with
installed,outdated,search,install,upgrade,remove,sync, andcleanupsupport. - [ports] Add FreeBSD ports tree manager with
installed,outdated,install,upgrade,upgrade_all,remove,sync, andcleanupsupport. Drivesmake-based source builds out of/usr/ports, delegates registry queries topkg, and usesgitfor tree updates. - [sfsu] Add sfsu (Scoop alternative) package manager with
installed,outdated,search,install,upgrade,remove,sync, andcleanupsupport. Mutating operations delegate to Scoop. - [xbps] Add XBPS (Void Linux) package manager with
installed,outdated,search,install,upgrade,remove,sync, andcleanupsupport. - [apm,apt,choco,composer,emerge,flatpak,opkg,sdkman,snap,zypper] Add
removeoperation. Closes {issue}1775. - [composer] Fix
installoperation: usecomposer global requireinstead ofcomposer global install. - [apm,npm,pip] Add
cleanupoperation. - [gem,winget] Add
syncoperation. - [mpm] Add
Delegatedescriptor tocapabilities.pyfor declarative cross-manager method delegation. - [mpm] Add Python version and platform to
--versionoutput. - [mpm] Add typed
config_schemato the CLI group for configuration file validation. - [mpm] Document
pyproject.tomlauto-discovery for per-project[tool.mpm]configuration. - [mpm] Extend
--table-formatstructured 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/-oback 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 intopackaging/choco/,packaging/guix/, andpackaging/nix/subdirectories. - [pip] Filter mpm's own dependency tree from
outdatedresults to fix false positives in Homebrew-installed environments. Closes {issue}1767. - [scoop] Fix CLI invocation in
outdatedoperation. - [winget] Fix
searchcrash when no results are returned. - [zypper] Skip install and remove tests on Linux CI runners: the RPM database at
/var/lib/rpmis inaccessible on Ubuntu-based runners.
Full changelog: v6.3.0...v6.4.0
v6.3.0
Immutable
release. Only release title and notes can be modified.
Note
6.3.0 is available on π PyPI and π GitHub.
- [cpan] Add CPAN package manager for Perl modules with
installed,outdated,install, andupgradesupport. Closes {issue}602. - [deb-get] Add deb-get package manager with
installed,outdated,search,install,upgrade,remove,sync, andcleanupsupport. Closes {issue}1609. - [nix] Add Nix package manager with
installed,outdated,search,install,upgrade,remove,sync, andcleanupsupport. - [pacstall] Add Pacstall package manager with
installed,outdated,search,install,upgrade,remove, andsyncsupport. Closes {issue}1610. - [sdkman] Add SDKMAN! package manager with
installed,outdated,install,upgrade,sync, andcleanupsupport. 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, andremovesupport. Closes {issue}1681. - [uvx] Implement
outdatedoperation. Bump minimal requirement to0.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
searchandcleanupsupport. - [winget] Switch
installedandoutdatedtowinget list --detailsstructured output; filter toOrigin Source: wingetpackages 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 managerrequirementfield. Refs {issue}1548. - [mpm] Add
must_succeedparameter torun_clifor 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 recognizepost/patchas post-release tags. - [mpm] Fix version comparison accuracy: integer tokens now rank above string tokens (e.g.,
3.12.0 > 3.12.0a4), trailing.0segments are treated as padding, the cosmeticvprefix 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
wingetand similar tools installed via the Microsoft Store. - [gem] Remove
--user-installflag frominstall,upgrade, andupdatecommands so all operations target the same gem scope aslistandoutdated. Closes {issue}389. - [pip] Remove
--userflag fromupgradecommand so upgrades target the same scope aslistandoutdated. - [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
upgradeandremovecommands, 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-armexclusion 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
Immutable
release. Only release title and notes can be modified.
Note
6.2.1 is available on π PyPI and π GitHub.
- [brew,cask] Remove
--quietfromoutdatedcommand where it conflicts with--json. Closes {issue}1703. - [npm] Fix crash on
installedwhen no global packages are present. Closes {issue}1603. - [mpm] Fix
--no-colorhaving 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
Immutable
release. Only release title and notes can be modified.
Note
6.2.0 is available on π PyPI and π GitHub.
- [mpm] Upgrade from reusable workflows to
repomatic. - [mpm] Inline
replace_contentutility fromclick-extrawhich was removed in7.6.2. - [mpm] Simplify
uvxinvocation fromuvx --from meta-package-manager -- mpmtouvx meta-package-manager. - [brew,cask] Add
--quietoption to allbrewinvocations to reduce log verbosity. - [composer] Add
--no-ansioption to allcomposerinvocations. - [composer] Fix search regex to strip whitespace-only descriptions.
- [dnf,dnf5,yum] Add
--quietoption to all invocations to reduce log verbosity. - [emerge] Add
--quiet,--color nand--nospinnertopre_args. Refactor inline flags. - [pacaur,pacman,paru,yay] Add
--color neveroption to all invocations. - [pkg] Add
--quietoption to allpkginvocations to reduce log verbosity. - [yarn] Add
--silentoption to allyarninvocations 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
Changes
- [choco] Add
--retry-count=3option to allchocoinvocations. - [mpm] Upgrade to
extra-platforms8.0.0. Remove usage of deprecated functions. - [mpm] Remove direct dependency on
tabulate.