Stop remembering whether this repository wants pnpm or cargo. pmpx reads the files a project already has, decides which package manager owns it, and runs the real tool.
Zero backends in the binary. Every ecosystem is a plugin, loaded at runtime — install only the ones you need.
cargo install pmpxcurl -LsSfhttps://pmpx.dev/install.sh| shirm https://pmpx.dev/install.ps1 | iexAn animation: below the fixed command pmpx, one verb at a time is typed and erased — install, run, test — while three detected project types type the same verb in step. Node.js resolves to pnpm, Rust to cargo, and Go to go.
Lockfiles, workspace files and shape markers score each installed backend against the project root. Nothing to initialise, no config file to write first.
install, remove, run, build, test, update, exec — the same seven in every repository, translated per backend into the command that ecosystem actually spells.
Backends are cdylibs, dlopen-ed at runtime. The binary ships none, and a plugin need not share your rustc — the ABI is versioned and checked.
Ties break on two priority arrays you edit, per family and per plugin. A .pmpx.toml pins one backend for a repository, collected upward so a monorepo can override per package.
When a backend has no answer for exec, pmpx falls back to running the command itself. Every other verb reports an explicit error instead of guessing.
--json turns a run into one JSON object per line on stdout, with the backend’s own output moved to stderr so the stream stays parseable.
Install the binary, add a plugin, and run the same command you have always run.