snpmv2026.5.16

Comparison

How snpm compares to npm, yarn, pnpm, and Bun

snpm aims for pnpm-style ergonomics with npm-compatible commands, plus first-class workspace tooling and a security-conscious default.

Feature matrix

Featuresnpmnpmyarnpnpmbun
Shared package storeyesnoyesyesyes
node_modules/.snpm virtual storeyesnolinker-dependentyeslinker-dependent
Lockfile formatYAMLJSONYAML (custom)YAMLtext
Lockfile imports (pnpm / Bun / yarn / npm)yespartialpartialpartial
Workspacesyesyesyesyesyes
Catalog protocol (catalog:)yesnonoyesno
Graph-aware filters (pkg..., [git-ref])yesnopartialyespartial
Install scripts blocked by defaultyesnonooptionalno
Minimum package age (SNPM_MIN_PACKAGE_AGE_DAYS)yesnononono
Tarball auth scoped to registry originyespartialpartialpartialpartial
Audit (audit, audit --fix, SARIF)yesyesyesyespartial
Built-in patching (patch edit/commit)yesnoyesyesyes
Publish (pack, publish, OTP, dry-run)yesyesyesyesyes
Built-in Node version manager (snpm node ...)yesnononono
dlx / npx shortcutyes (dlx, spx, snpx, pnpx)yes (npx)yes (dlx)yes (dlx, pnpx)yes (bunx)
Implementation languageRustJavaScriptJavaScriptJavaScriptZig

Command crosswalk

Tasknpmsnpm
Install everything from lockfilenpm cisnpm install --frozen-lockfile
Install / refreshnpm installsnpm install
Add a packagenpm install reactsnpm add react
Add a dev dependencynpm install --save-dev typescriptsnpm add -D typescript
Add a globalnpm install -g pnpmsnpm add -g pnpm
Remove a packagenpm uninstall reactsnpm remove react
Update within rangenpm updatesnpm upgrade
Check outdatednpm outdatedsnpm outdated
Run a scriptnpm run buildsnpm run build or snpm build
Run a binarynpx eslint .snpm exec eslint . or snpm dlx eslint
Explain a depnpm explain reactsnpm why react
Auditnpm auditsnpm audit
Auto-fix auditnpm audit fixsnpm audit --fix
Packnpm packsnpm pack
Publishnpm publishsnpm publish
Linknpm linksnpm link
Rebuildnpm rebuildsnpm rebuild
Login / Logoutnpm login / npm logoutsnpm login / snpm logout
Initnpm init -ysnpm init
Clean cachenpm cache clean --forcesnpm clean -y

What snpm adds on top

Lockfile imports. Switching from pnpm/Bun/yarn/npm doesn't require deleting anything. snpm reads pnpm-lock.yaml, bun.lock, yarn.lock, npm-shrinkwrap.json, or package-lock.json to seed the first install, then writes snpm-lock.yaml as the source of truth.

Graph-aware workspace filters. --filter "[origin/main]" selects every project whose files changed since origin/main. --filter api... selects api and everything it depends on; --filter ...api selects everything that depends on api. The same grammar applies to every workspace-aware command.

Catalog + overrides built in. Define versions once in snpm-catalog.yaml (or inline in snpm-workspace.yaml) and reference them with catalog:. Pin transitive versions with snpm-overrides.yaml or snpm.overrides / pnpm.overrides in package.json.

Security-first defaults. Install scripts blocked unless allow-listed, minimum-package-age protection, tarball auth scoped to the announcing registry origin, integrity-hashed lockfile.

Built-in Node version manager. snpm node install 20 --default, snpm node use, automatic .node-version / .nvmrc / engines.node discovery, and snpm node env --shell zsh for shell hooks. No separate nvm/fnm/volta install required.

Multicall aliases. Invoking the binary as spx, snpx, pnpx, or snpr rewrites argv to call snpm dlx / snpm run — handy for shells where you already aliased npx to something else.

Migration

# from npm
rm -rf node_modules
snpm install        # reads package-lock.json once

# from pnpm
rm -rf node_modules
snpm install        # reads pnpm-lock.yaml once

# from yarn
rm -rf node_modules
snpm install        # reads yarn.lock once

# from bun
rm -rf node_modules
snpm install        # reads bun.lock once

After the first successful install, commit the new snpm-lock.yaml and (optionally) delete the old lockfile. Your package.json is unchanged.

Pin the version in package.json so everyone on the team is on the same build:

{ "packageManager": "snpm@2026.5.16" }

Combined with snpm-switch, every contributor and CI job picks up the same snpm build automatically.

On this page