Three ways to run xnpm

Global install

recommended
# install once, use from any folder $ npm install -g @x12i/npm ✓ xnpm available everywhere ✓ ask, undo, history, upstream included # keep it up to date $ xnpm upgrade ✓ updated to latest

CI / no install

pinned
# pinned version — fully reproducible $ npx @x12i/npm@latest --full-flow ✓ no install step in CI runner ✓ always runs the latest release ✓ structured exit codes for gating # pin a specific version $ npx @x12i/npm@1.4.2 --full-flow

Check setup

after install
# verify environment $ xnpm doctor ✓ npm 10.5.0 found ✓ git 2.44.0 found ✓ npm auth configured ✓ .npmrc readable # validate workspace + registry $ xnpm validate ✓ all local versions match registry

Flags reference

Flags compose.
Pick exactly what you need.

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.

FlagWhat it does
Lifecycle
--buildRun npm run build after install, in dependency order
--testRun npm test after build — blocks publish if tests fail
--publishPack-check → version bump → publish via real npm binary
--publish-flowShortcut: fix deps, install, publish, push, report
--full-flowShortcut: fix deps, install, build, test, publish, push, report
--pushgit add / commit / push after lifecycle completes
--reportSuppress raw output; show high-level summary with counts and version changes
--dry-runShow planned steps and order without modifying any files
--no-version-bumpPublish the current version as-is, skip the minor bump
--clean-localRemove file: overrides for discovered packages from package.json
--clean-allRemove 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
--txForce transaction journaling on a single command
--no-txDisable journaling for this run (e.g. in CI where you don't need it)
First publish & git setup (opt-in)
--new-publicFirst-publish as a public npm package — no version bump
--new-privateFirst-publish as a restricted npm package — scoped names only
--create-gitInitialize local git repo where missing, run initial commit
--repo-mode <mode>monorepo or multi-repo — required when creating git across multiple packages
--git-create-remoteCreate a new remote repo via provider API (GitHub, GitLab, Bitbucket)
--connect <url>alias: --git-link Attach local repo to an existing remote

Common commands

Copy-paste examples
for every situation.

Install only
xnpm install
Install and build
xnpm install --build
Install, build, test
xnpm --build --test
Full flow — fix, install, build, test, publish, push
xnpm --full-flow
Publish flow — fix, install, publish, push (skip build/test)
xnpm --publish-flow
Dry run — see the plan without touching anything
xnpm --full-flow --dry-run
Publish without bumping the version
xnpm --publish --no-version-bump
Target a scope only
xnpm --filter "@x12i/*" --build --publish
Target two scopes
xnpm --filter "@x12i/*" --filter "@exellix/*" --build --test
First publish as a private scoped package
xnpm --build --test --new-private --push --report
Connect to remote (monorepo)
xnpm --connect git@github.com:x12i/pkg.git --repo-mode monorepo --push
One-off via npx — no install needed
npx @x12i/npm@latest --build --test
Natural language — resolve intent to flags
xnpm ask "publish all @x12i packages and push"
Check recent runs and undo status
xnpm history
Preview what undo would restore
xnpm undo --dry-run
Undo the last run (local changes only)
xnpm undo --last
File upstream CR/FR as a GitHub issue
xnpm upstream submit --id CR-FUNCX-2 --registry funcx
Pull upstream fix and verify
xnpm upstream pull-fix --id CR-FUNCX-2
Validate workspace versions against registry
xnpm validate
Check environment and fix PATH issues
xnpm doctor

Passthrough

xnpm forwards npm and git
when automation isn't needed.

You don't need to switch binaries for everyday commands. xnpm detects native npm and git subcommands and forwards them directly.

implicit forwarding
$ xnpm run build → npm run build $ xnpm install lodash → npm install lodash $ xnpm status → git status $ xnpm push → git push $ xnpm pull → git pull
explicit passthrough
$ xnpm npm outdated $ xnpm npm list --depth 0 $ xnpm git log --oneline -5 $ xnpm git diff --stat # ask resolves to passthrough too $ xnpm ask "show git status" → git status

Disambiguation — same word, different destination

You typeRoutes toWhy
install
xnpm installxnpm automationbare install stays on xnpm
xnpm install --buildxnpm automationxnpm-only flag detected
xnpm install lodashnpm install lodashpackage name arg → native npm
xnpm install -D lodashnpm install -D lodashnpm flag (-D, --save-dev, …) → native npm
overloaded verbs
xnpm --pushxnpm lifecycle git pushxnpm flag — part of the automation run
xnpm pushgit pushbare subcommand → passthrough
xnpm --testxnpm lifecycle testxnpm flag — runs in correct order after build
xnpm testnpm testbare subcommand → passthrough
always xnpm — never passthrough
xnpm askxnpm askreserved
xnpm list / lsxnpm package discoveryreserved
xnpm historyxnpm transaction historyreserved
xnpm undoxnpm undoreserved
xnpm doctorxnpm doctorreserved

Free for personal use.
No expiry. No catch.

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.

Free for personal use, forever No account required No trial period No paid tiers No feature gates No expiry date

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.