Introduction
Welcome to snpm - the Speedy Node Package Manager
snpm is a fast, simple, and deterministic package manager written in Rust. It's designed to be a drop-in replacement for npm, yarn, and pnpm.
Status: snpm is production-ready for most workflows. Fast, secure, and feature-complete for day-to-day package management. Publishing features coming soon.
Why snpm?
Built with a strict "no cleverness" rule, snpm focuses on making the existing npm workflow faster, simpler, and easier to maintain.
Core Features
- Familiar Commands -
snpm install,snpm add,snpm runwork exactly like npm - Global Store - Download packages once, reuse them across all projects
- Parallel Operations - Network and disk operations run in parallel for speed
- Workspace Support - First-class monorepo support with
snpm-workspace.yaml - Catalog Protocol - Define dependency versions once in
snpm-catalog.yaml - Clean Lockfile - Simple, readable
snpm-lock.yamlformat - Minimum Version Age - Protect against zero-day malicious packages
- Install Script Security - All install scripts blocked by default, explicit whitelisting required
- Flexible Hoisting - Choose from none, single-version, or all hoisting modes
- Link Backend Options - Auto, hardlink, symlink, or copy strategies
- Overrides Support - Force specific versions via
snpm-overrides.yamlorpackage.json - Verbose Logging - Detailed debugging output with
--verboseflag
Quick Start
# Install snpm
npm install -g snpm
# Use it like npm
snpm install
snpm add react
snpm run buildHow It Works
Global Store - Packages are downloaded once and stored in platform-specific directories (e.g., ~/Library/Caches/snpm on macOS) and linked into your projects. This saves disk space and speeds up subsequent installs.
Parallelism - Multiple packages download simultaneously, and disk operations are optimized for speed.
Workspaces - Detects snpm-workspace.yaml or pnpm-workspace.yaml and efficiently manages dependencies across multiple packages in a monorepo.
Catalog Protocol - Define versions in snpm-catalog.yaml and reference them with catalog: in your package.json to eliminate version drift.
Security - Install scripts are blocked by default. Packages must be explicitly whitelisted via SNPM_ALLOW_SCRIPTS to run install scripts.