{"id":51682199,"url":"https://github.com/mxcl/package-manager-manager","last_synced_at":"2026-07-15T15:00:56.171Z","repository":{"id":368865152,"uuid":"1287201866","full_name":"mxcl/package-manager-manager","owner":"mxcl","description":"How many Packages would a Package Manager manage if a Package Manager could manage Package Managers?","archived":false,"fork":false,"pushed_at":"2026-07-14T12:30:00.000Z","size":52400,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-14T14:23:40.692Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://mxcl.dev/package-manager-manager/","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mxcl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"github":"mxcl","patreon":"mxcl"}},"created_at":"2026-07-02T13:23:09.000Z","updated_at":"2026-07-14T12:30:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mxcl/package-manager-manager","commit_stats":null,"previous_names":["mxcl/pmm","mxcl/package-manager-manager"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/mxcl/package-manager-manager","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mxcl%2Fpackage-manager-manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mxcl%2Fpackage-manager-manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mxcl%2Fpackage-manager-manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mxcl%2Fpackage-manager-manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mxcl","download_url":"https://codeload.github.com/mxcl/package-manager-manager/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mxcl%2Fpackage-manager-manager/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35509496,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-15T02:00:06.706Z","response_time":131,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-15T15:00:21.770Z","updated_at":"2026-07-15T15:00:56.160Z","avatar_url":"https://github.com/mxcl.png","language":"Swift","funding_links":["https://github.com/sponsors/mxcl","https://patreon.com/mxcl"],"categories":[],"sub_categories":[],"readme":"![Package Manager Manager screenshot](www/pmm-promo-1@dark.png)\n\n# Package Manager Manager\n\nThe time when one package manager was all you needed is long gone. pkg⋅mgr²\ninventories your package managers and their packages, so you can see what you\nhave, what’s outdated, and what’s taking up space.\n\nUse whatever you want without compromising visibility into what’s going on.\n\n\u003e [!TIP]\n\u003e No need to remember to `npx ***@latest` anymore. We update `npx`’d stuff too.\n\n## Quickstart\n\n```sh\nbrew install --cask mxcl/made/package-manager-manager\n```\n\n\u003e No brew? [Download the `.dmg` from `./releases/`](https://github.com/mxcl/pmm/releases/latest).\n\n![Package Manager Manager screenshot](www/pmm-promo-2@dark.png)\n\n\u0026nbsp;\n\n## Manage Your Other Macs\n\npkg⋅mgr² can update and uninstall packages on any Mac you already reach over\nSSH, including Macs on your local network or Tailscale network.\n\n1. Install Package Manager Manager in `/Applications` on each Mac.\n2. Make sure SSH works non-interactively and the host key is trusted:\n\n   ```sh\n   ssh pangolin true\n   ```\n\n3. Choose **Package Manager Manager → Add / Edit Hosts…** and add the SSH host\n   or an alias from `~/.ssh/config`.\n\nEach Mac gets its own Installed and Outdated sections in the sidebar. You can\nupdate one package, update everything outdated, or uninstall a package from the\nremote Mac.\n\npkg⋅mgr² uses OpenSSH directly. Your keys, agent, host aliases, and\n`known_hosts` stay where they already live; the app stores no SSH credentials.\n\n\n## What It Finds\n\npkg⋅mgr² currently inventories:\n\n- Homebrew formulae and casks\n- tools and runtimes installed with `mise`\n- global npm packages\n- npx cache entries\n- global agent skills installed with `skills` or `npx skills`\n- `uv tool` tools and `uv` Python installs\n- `uvx` cached environments\n- `cargo install` binaries\n- `rustup` and installed Rust toolchains\n\nIt also pulls package summaries, categories, URLs, and latest-version metadata\nwhere the project has a source for it. If metadata is missing, the package still\nshows up. It just looks less informed.\n\n## Adding New Package Managers\n\nGet your agent to add new package managers and give us a PR.\n\n\u003e [!NOTE]\n\u003e\n\u003e We want to support everything! Yes! Everything!\n\n### Instructions to Agents\n\nKeep new manager support boring and off the main thread. The menu bar helper\nruns `PackageScanner.inventory(database:)` in the background, writes a\n`PackageHostSnapshot`, and the main app renders that snapshot. Do not add package\nmanager scans, network loads, or shell commands to SwiftUI views or main-window\nmodels.\n\nChecklist:\n\n- Add the manager to `PackageManagerKind` in `Sources/PMMCore/Models.swift`.\n- Add one `scanX(database:)` method to `Sources/PMMCore/PackageScanner.swift`\n  and call it from `inventory(database:)`. Return `[]` when the tool is missing\n  or the manager has no local state.\n- Build `ManagedPackage` values with stable `identifier` prefixes, readable\n  `displayName`, `installedVersion`, optional `latestVersion`, and install or\n  binary paths when cheap to find.\n- Wire update/uninstall only when the native command is obvious:\n  `PackageUpdater`, `PackageUninstaller`, and their `supports(_:)` methods.\n  Inventory-only support is fine.\n- Put the manager in a sidebar group in `MainWindowModel.swift` and give it a\n  dashboard SF Symbol in `MainWindowDashboardView.swift`.\n- Map it in `PackageDossierClient.provider(for:)` only if AutomIC Vault has a\n  matching provider.\n- Update the README lists under \"What It Finds\" and \"Updating and Removing\".\n- Add focused tests beside the touched code: scanner parsing in\n  `PackageScannerTests`, action commands in `PackageUpdaterTests` or\n  `PackageUninstallerTests`, and UI grouping in `MainWindowModelTests` when a\n  new section changes.\n\n## Caveats\n\npkg⋅mgr² shells out to your package managers. It does not replace them, normalize\ntheir data perfectly, or pretend their caches are a coherent database.\n\nHomebrew metadata requires `brew update` in the helper refresh path. Network\nmetadata is best-effort; local inventory should still work when that data is\nunavailable.\n\nRemote management requires a compatible version of Package Manager Manager in\n`/Applications` on the other Mac. Interactive SSH passwords and first-connection\nhost-key prompts are not supported inside the app; connect once in Terminal\nbefore adding the host.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmxcl%2Fpackage-manager-manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmxcl%2Fpackage-manager-manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmxcl%2Fpackage-manager-manager/lists"}