Consistent dependency versions in large JavaScript Monorepos.
https://syncpack.dev
Syncpack is used by AWS, Cloudflare, DataDog, Electron, GoDaddy, Lottie, Microsoft, PostHog, Qwik, Raycast, Salesforce, TopTal, Vercel, VoltAgent, WooCommerce and others.
Some of the things it can do are:
- Find and fix dependency version mismatches.
- Enforce a single version policy, or create partitions with separate policies.
- Find and bump outdated versions from the npm registry.
- Ensure some dependencies always remain pinned at a specific version.
- Ban some dependencies from being used: anywhere, or in specific places.
- Define rules for where exact or loose semver ranges should be used, including in catalogs.
- Assign packages as the source of truth for specific dependencies' versions.
- Sort and format package.json files consistently.
- Auto-migrate all or parts of your repo to pnpm catalogs or bun catalogs.
- Bump outdated versions in catalogs.
Installation
npm install --save-dev syncpack
Guides
Commands
All command line options can be combined to target packages and dependencies in multiple ways.
lint
Ensure that multiple packages requiring the same dependency define the same version, so that every package requires eg. react@17.0.2, instead of a combination of react@17.0.2, react@16.8.3, and react@16.14.0.
Examples
# Find all issues in "dependencies" or "devDependencies" syncpack lint --dependency-types prod,dev # Only lint issues in "react" specifically syncpack lint --dependencies react # Look for issues in dependencies containing "react" in the name syncpack lint --dependencies '**react**' # Find issues in scoped packages only syncpack lint --dependencies '@types/**' # Find issues everywhere except "peerDependencies" syncpack lint --dependency-types '!peer' # Only look for issues where an exact version is used (eg "1.2.3") syncpack lint --specifier-types exact # Sort dependencies by how many times they are used syncpack lint --sort count # See more examples syncpack lint --help # See a short summary of options syncpack lint -h
fix
Fix every autofixable issue found by syncpack lint.
Examples
# Only fix issues in dependencies and devDependencies syncpack fix --dependency-types prod,dev # Only fix inconsistencies with exact versions (eg "1.2.3") syncpack fix --specifier-types exact # Only fix issues in "react" specifically syncpack fix --dependencies react # See more examples syncpack fix --help # See a short summary of options syncpack fix -h
update
Update packages to the latest versions from the npm registry, wherever they are in your monorepo, including pnpm catalog entries in pnpm-workspace.yaml.
Semver range preferences are preserved when updating.
Examples
# Accept any update in latest (x.x.x) syncpack update --target latest # Only update minor versions (1.x.x) syncpack update --target minor # Only update patch versions (1.2.x) syncpack update --target patch # Pick which updates to apply through an interactive prompt syncpack update --interactive # Interactively pick from patch updates only syncpack update --interactive --target patch # Interactively pick which @aws-sdk packages to update syncpack update --interactive --dependencies '@aws-sdk/**' # Check for outdated dependencies in one package syncpack update --check --source 'packages/pingu/package.json' # Update dependencies and devDependencies in the whole monorepo syncpack update --dependency-types dev,prod # Update only pnpm catalog entries in pnpm-workspace.yaml syncpack update --dependency-types pnpmCatalog # Update only the named pnpm catalog 'react18' syncpack update --dependency-types 'pnpmCatalog:react18' # Only update dependencies with a semver range specifier (^, ~, etc.) syncpack update --specifier-types range # Update dependencies where name exactly matches 'react' syncpack update --dependencies 'react' # Update dependencies where name contains 'react' syncpack update --dependencies '**react**' # Update dependencies with the '@aws-sdk' scope syncpack update --dependencies '@aws-sdk/**' # See more examples syncpack update --help # See a short summary of options syncpack update -h
format
Organise package.json files according to a conventional format, where fields appear in a predictable order and nested fields are ordered alphabetically. Shorthand properties are used where available, such as the "repository" and "bugs" fields.
Examples
# Fix every formatting issue in the monorepo syncpack format # List all formatting issues in the monorepo syncpack format --check # Check the formatting of one package syncpack format --check --source 'packages/pingu/package.json' # See more examples syncpack format --help # See a short summary of options syncpack format -h
list
Query and inspect all dependencies in your project, both valid and invalid.
Examples
# Sort dependencies by how many times they are used syncpack list --sort count # Show every instance of each dependency, not just their names syncpack list --show instances # Show dependencies ignored in your syncpack config syncpack list --show ignored # Show highest level of detail syncpack list --show all # Choose only some values syncpack list --show hints,statuses # List all "peerDependencies" syncpack list --dependency-types peer # List all types packages syncpack list --dependencies '@types/**' # List instances of an exact version being used as a peer dependency syncpack list --specifier-types exact --show instances --dependency-types peer # See more examples syncpack list --help # See a short summary of options syncpack list -h
json
Output the state of every instance of every dependency as a JSON object, one per line. This command is best used with tools like jq for filtering and processing.
Examples
# Output all dependencies as JSON syncpack json # Output only AWS SDK dependencies syncpack json --dependencies '@aws-sdk/**' # Count dependencies by type syncpack json | jq -r '.dependencyType' | sort | uniq -c # See more examples syncpack json --help # See a short summary of options syncpack json -h