Install
xnpm is free for personal use, forever. No account, no trial, no tiers. Install once and you get the full workflow layer — automation, safety checks, undo, ask, upstream.
Requires Node.js ≥ 20 · npm ≥ 8 · git ≥ 2
Three ways to run xnpm
Flags reference
xnpm, xnpm i, and xnpm install are equivalent. Steps 1–3 (discover, graph, install) always run. Steps 4–7 only run when you pass the flag.
| Flag | What it does |
|---|---|
| Lifecycle | |
| --build | Run npm run build after install, in dependency order |
| --test | Run npm test after build — blocks publish if tests fail |
| --publish | Pack-check → version bump → publish via real npm binary |
| --publish-flow | Shortcut: fix deps, install, publish, push, report |
| --full-flow | Shortcut: fix deps, install, build, test, publish, push, report |
| --push | git add / commit / push after lifecycle completes |
| --report | Suppress raw output; show high-level summary with counts and version changes |
| --dry-run | Show planned steps and order without modifying any files |
| --no-version-bump | Publish the current version as-is, skip the minor bump |
| --clean-local | Remove file: overrides for discovered packages from package.json |
| --clean-all | Remove the entire overrides object from package.json |
| Selection | |
| --package <name> | Select a specific package by exact name (repeatable) |
| --filter <glob> | Select packages by glob pattern, e.g. @x12i/* — multiple filters are OR-based |
| Undo & history | |
| --tx | Force transaction journaling on a single command |
| --no-tx | Disable journaling for this run (e.g. in CI where you don't need it) |
| First publish & git setup (opt-in) | |
| --new-public | First-publish as a public npm package — no version bump |
| --new-private | First-publish as a restricted npm package — scoped names only |
| --create-git | Initialize local git repo where missing, run initial commit |
| --repo-mode <mode> | monorepo or multi-repo — required when creating git across multiple packages |
| --git-create-remote | Create a new remote repo via provider API (GitHub, GitLab, Bitbucket) |
| --connect <url>alias: --git-link | Attach local repo to an existing remote |
Common commands
xnpm install
xnpm install --build
xnpm --build --test
xnpm --full-flow
xnpm --publish-flow
xnpm --full-flow --dry-run
xnpm --publish --no-version-bump
xnpm --filter "@x12i/*" --build --publish
xnpm --filter "@x12i/*" --filter "@exellix/*" --build --test
xnpm --build --test --new-private --push --report
xnpm --connect git@github.com:x12i/pkg.git --repo-mode monorepo --push
npx @x12i/npm@latest --build --test
xnpm ask "publish all @x12i packages and push"
xnpm history
xnpm undo --dry-run
xnpm undo --last
xnpm upstream submit --id CR-FUNCX-2 --registry funcx
xnpm upstream pull-fix --id CR-FUNCX-2
xnpm validate
xnpm doctor
Passthrough
You don't need to switch binaries for everyday commands. xnpm detects native npm and git subcommands and forwards them directly.
Disambiguation — same word, different destination
| You type | Routes to | Why |
|---|---|---|
| install | ||
| xnpm install | xnpm automation | bare install stays on xnpm |
| xnpm install --build | xnpm automation | xnpm-only flag detected |
| xnpm install lodash | npm install lodash | package name arg → native npm |
| xnpm install -D lodash | npm install -D lodash | npm flag (-D, --save-dev, …) → native npm |
| overloaded verbs | ||
| xnpm --push | xnpm lifecycle git push | xnpm flag — part of the automation run |
| xnpm push | git push | bare subcommand → passthrough |
| xnpm --test | xnpm lifecycle test | xnpm flag — runs in correct order after build |
| xnpm test | npm test | bare subcommand → passthrough |
| always xnpm — never passthrough | ||
| xnpm ask | xnpm ask | reserved |
| xnpm list / ls | xnpm package discovery | reserved |
| xnpm history | xnpm transaction history | reserved |
| xnpm undo | xnpm undo | reserved |
| xnpm doctor | xnpm doctor | reserved |
xnpm is free for personal use — install it, use it, keep using it. There is no trial period, no feature unlock, no expiry date, no account required.
xnpm calls your installed npm and git binaries. It uses your existing .npmrc, lockfiles, auth tokens, and git config.
It does not replace the registry, does not reimplement dependency resolution, and does not intercept or store your credentials.