Skip to content

mxcl/package-manager-manager

Repository files navigation

Package Manager Manager screenshot

Package Manager Manager

The time when one package manager was all you needed is long gone. pkg⋅mgr² inventories your package managers and their packages, so you can see what you have, what’s outdated, and what’s taking up space.

Use whatever you want without compromising visibility into what’s going on.

Tip

No need to remember to npx ***@latest anymore. We update npx’d stuff too.

Quickstart

brew install --cask mxcl/made/package-manager-manager

No brew? Download the .dmg from ./releases/.

Package Manager Manager screenshot

 

Manage Your Other Macs

pkg⋅mgr² can update and uninstall packages on any Mac you already reach over SSH, including Macs on your local network or Tailscale network.

  1. Install Package Manager Manager in /Applications on each Mac.

  2. Make sure SSH works non-interactively and the host key is trusted:

    ssh pangolin true
  3. Choose Package Manager Manager → Add / Edit Hosts… and add the SSH host or an alias from ~/.ssh/config.

Each Mac gets its own Installed and Outdated sections in the sidebar. You can update one package, update everything outdated, or uninstall a package from the remote Mac.

pkg⋅mgr² uses OpenSSH directly. Your keys, agent, host aliases, and known_hosts stay where they already live; the app stores no SSH credentials.

What It Finds

pkg⋅mgr² currently inventories:

  • Homebrew formulae and casks
  • global npm packages
  • npx cache entries
  • global agent skills installed with skills or npx skills
  • uv tool tools and uv Python installs
  • uvx cached environments
  • cargo install binaries
  • rustup and installed Rust toolchains

It also pulls package summaries, categories, URLs, and latest-version metadata where the project has a source for it. If metadata is missing, the package still shows up. It just looks less informed.

Adding New Package Managers

Get your agent to add new package managers and give us a PR.

Note

We want to support everything! Yes! Everything!

Instructions to Agents

Keep new manager support boring and off the main thread. The menu bar helper runs PackageScanner.inventory(database:) in the background, writes a PackageHostSnapshot, and the main app renders that snapshot. Do not add package manager scans, network loads, or shell commands to SwiftUI views or main-window models.

Checklist:

  • Add the manager to PackageManagerKind in Sources/PMMCore/Models.swift.
  • Add one scanX(database:) method to Sources/PMMCore/PackageScanner.swift and call it from inventory(database:). Return [] when the tool is missing or the manager has no local state.
  • Build ManagedPackage values with stable identifier prefixes, readable displayName, installedVersion, optional latestVersion, and install or binary paths when cheap to find.
  • Wire update/uninstall only when the native command is obvious: PackageUpdater, PackageUninstaller, and their supports(_:) methods. Inventory-only support is fine.
  • Put the manager in a sidebar group in MainWindowModel.swift and give it a dashboard SF Symbol in MainWindowDashboardView.swift.
  • Map it in PackageDossierClient.provider(for:) only if AutomIC Vault has a matching provider.
  • Update the README lists under "What It Finds" and "Updating and Removing".
  • Add focused tests beside the touched code: scanner parsing in PackageScannerTests, action commands in PackageUpdaterTests or PackageUninstallerTests, and UI grouping in MainWindowModelTests when a new section changes.

Caveats

pkg⋅mgr² shells out to your package managers. It does not replace them, normalize their data perfectly, or pretend their caches are a coherent database.

Homebrew metadata requires brew update in the helper refresh path. Network metadata is best-effort; local inventory should still work when that data is unavailable.

Remote management requires a compatible version of Package Manager Manager in /Applications on the other Mac. Interactive SSH passwords and first-connection host-key prompts are not supported inside the app; connect once in Terminal before adding the host.

About

How many Packages would a Package Manager manage if a Package Manager could manage Package Managers?

Resources

Stars

2 stars

Watchers

0 watching

Forks

Contributors