Fast, disk space efficient package manager for Node.js with hard links, symlinks, and monorepo support
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Monorepo and workspace operations with filtering, recursive commands, and cross-package dependency management for complex multi-package projects.
Execute commands across all packages in a workspace with dependency awareness and parallel execution.
/**
* Run commands recursively across workspace packages
* Executes in topological order by default
*/
pnpm --recursive <command> [options]
pnpm -r <command> [options]
pnpm --multi <command> [options]
pnpm -m <command> [options]Options:
--parallel - Run commands in parallel instead of serial--stream - Stream output from parallel executions--max-workers <number> - Limit concurrent workers--workspace-concurrency <number> - Control workspace concurrency--no-bail - Continue execution despite failures--reporter <type> - Set output reporter for multi-package operationsUsage Examples:
# Install in all workspaces
pnpm -r install
# Build all packages in dependency order
pnpm -r build
# Test all packages in parallel
pnpm -r --parallel test
# Install with limited concurrency
pnpm -r --max-workers=2 install
# Continue testing despite failures
pnpm -r --no-bail testFilter workspace packages using patterns, dependencies, and change detection for targeted operations.
/**
* Filter workspace packages for targeted operations
* Supports glob patterns, dependency filtering, and change detection
*/
pnpm --filter <pattern> <command> [options]
pnpm -F <pattern> <command> [options]Filter Patterns:
package-name - Exact package name match@scope/* - All packages in scope*api* - Packages containing "api" in namefrontend-* - Packages starting with "frontend-"./packages/* - Packages in specific directory{./packages/frontend} - Specific package pathDependency Filtering:
...package-name - Package and all its dependenciespackage-name... - Package and all packages that depend on it...package-name... - Package, its dependencies, and dependentsChange Detection:
...[HEAD~1] - Packages changed since HEAD~1[HEAD~1] - Only packages changed since HEAD~1 (not dependencies)...[origin/main] - Packages changed since origin/mainUsage Examples:
# Filter by name pattern
pnpm --filter "*api*" build
pnpm --filter "@myorg/*" test
# Filter by dependencies
pnpm --filter "...@myorg/core" build
pnpm --filter "@myorg/frontend..." test
# Filter by changes
pnpm --filter "...[HEAD~1]" test
pnpm --filter "[origin/main]" build
# Combine filters
pnpm --filter "@myorg/*" --filter "...[HEAD~1]" buildDeploy workspace packages with production-optimized dependency resolution.
/**
* Deploy workspace packages for production
* Installs only production dependencies with optimized layout
*/
pnpm deploy <target-dir> [options]Options:
--filter <pattern> - Deploy specific packages only--prod - Deploy production dependencies only (default)--dev - Include development dependenciesUsage Examples:
# Deploy current package
pnpm deploy ../deploy/api
# Deploy with filtering
pnpm deploy --filter @myorg/api ../deploy/api
# Deploy multiple packages
pnpm deploy --filter "@myorg/{api,web}" ../deploy/Configure workspace behavior through pnpm-workspace.yaml and package.json settings.
# pnpm-workspace.yaml
packages:
- 'packages/*'
- 'apps/*'
- '!**/test/**'Workspace Root Management:
--workspace-root, -w - Include workspace root in operations--include-workspace-root - Include root when filtering--ignore-workspace - Ignore workspace configurationUsage Examples:
# Include workspace root
pnpm -w add -D typescript
# Install in root and all packages
pnpm -r --include-workspace-root install
# Ignore workspace configuration
pnpm --ignore-workspace installManage dependencies between workspace packages with workspace protocol.
// package.json dependencies using workspace protocol
{
"dependencies": {
"@myorg/utils": "workspace:*", // Any version from workspace
"@myorg/core": "workspace:^1.0.0", // Version range from workspace
"@myorg/api": "workspace:~2.1.0" // Specific range from workspace
}
}Control how workspace packages are linked during development.
# Configuration options
--link-workspace-packages # Link workspace packages (default: true)
--shared-workspace-lockfile # Use single lockfile for workspace (default: true)
--save-workspace-protocol # Save with workspace: protocolUsage Examples:
# Add workspace dependency
pnpm add @myorg/utils --workspace
# Update workspace dependencies
pnpm update --recursive @myorg/core
# Install with workspace protocol
pnpm add @myorg/api --save-workspace-protocolInstallation behavior differs in workspace environments with automatic recursive mode.
# Commands that auto-enable recursive mode in workspaces:
pnpm install # Installs in root and all packages
pnpm import # Imports lockfiles recursively
pnpm dedupe # Deduplicates across workspaceAdvanced filtering for complex workspace scenarios.
# Workspace-aware filtering
--changed-files-ignore-pattern <pattern> # Ignore files for change detection
--test-pattern <pattern> # Pattern for test files
--fail-if-no-match # Fail if no packages match filterUsage Examples:
# Test only packages with changes, ignoring README updates
pnpm --filter "...[HEAD~1]" --changed-files-ignore-pattern "**/README.md" test
# Build packages matching pattern, fail if none found
pnpm --filter "@myorg/web-*" --fail-if-no-match buildExecute scripts across workspace with various execution strategies.
# Serial execution (respects dependencies)
pnpm -r run build
# Parallel execution
pnpm -r --parallel run test
# Stream output from parallel runs
pnpm -r --parallel --stream run dev
# Limited concurrency
pnpm -r --parallel --max-workers=3 run buildAnalyze package relationships and dependencies within workspace.
# Show workspace package tree
pnpm list --recursive
# Show why a package is included
pnpm why --recursive lodash
# Show outdated packages across workspace
pnpm outdated --recursiveCommands for understanding workspace structure and state.
# List all workspace packages
pnpm list --recursive --depth=0
# Show workspace root
pnpm root
# Show workspace package locations
pnpm list --recursive --longControl concurrency for optimal performance in workspace operations.
# Control worker processes
--max-workers <number> # Limit concurrent workers
--workspace-concurrency <number> # Control workspace operation concurrency
# Execution strategies
--parallel # Run in parallel
--stream # Stream output
--reporter append-only # Optimized output for CIOptimize workspace operations by targeting only necessary packages.
# Target changed packages only
pnpm --filter "...[HEAD~1]" build
# Target specific package groups
pnpm --filter "@myorg/{api,web}" test
# Target by dependency relationships
pnpm --filter "...changed-package" buildApprove build permissions for packages with build scripts.
/**
* Approve builds for packages
* Manages build permissions for security
*/
pnpm approve-builds [options]Usage Examples:
# Approve builds for current package
pnpm approve-builds
# Approve builds in workspace
pnpm approve-builds --recursiveManage packages that are ignored during build operations.
/**
* Manage ignored builds
* Controls which packages skip build scripts
*/
pnpm ignored-builds [options]Usage Examples:
# Show ignored builds
pnpm ignored-builds
# Add package to ignored builds
pnpm ignored-builds add some-packageAlternative forms of recursive commands:
# Standard recursive syntax
pnpm --recursive <command>
pnpm -r <command>
# Multi command (alias for recursive)
pnpm --multi <command>
pnpm -m <command>
# Direct recursive command
pnpm recursive <command>
pnpm multi <command>
pnpm m <command>Install with Tessl CLI
npx tessl i tessl/npm-pnpm