| name | syncpack-configuration |
| user-invocable | false |
| description | Use when setting up or configuring syncpack for a monorepo. Covers configuration files, workspace detection, and custom rule definitions for dependency version management. |
| allowed-tools | ["Read","Write","Edit","Bash","Grep","Glob"] |
Syncpack Configuration
Syncpack is a tool for managing consistent dependency versions across JavaScript/TypeScript monorepos. This skill covers configuration best practices.
Configuration File Locations
Syncpack searches for configuration in these locations (in order):
syncpack.config.js / .cjs / .mjs / .ts
syncpack.config.json / .yaml / .yml
.syncpackrc / .syncpackrc.json / .syncpackrc.yaml / .syncpackrc.yml
Basic Configuration
export default {
source: [
'package.json',
'packages/*/package.json',
'apps/*/package.json',
],
};
Workspace Detection
Syncpack automatically detects workspaces:
- npm/Yarn: Reads
workspaces from ./package.json
- pnpm: Reads
packages from ./pnpm-workspace.yaml
- Lerna: Reads
packages from ./lerna.json
Override with explicit source patterns when needed.
Dependency Types
Control which dependency types to check:
export default {
dependencyTypes: [
'dev',
'local',
'overrides',
'peer',
'pnpmOverrides',
'prod',
'resolutions',
],
};
Semver Groups
Define rules for semver range consistency:
export default {
semverGroups: [
{
dependencies: ['react', 'react-dom'],
range: '',
},
{
dependencyTypes: ['dev'],
range: '^',
},
],
};
Range Options
| Range | Example | Meaning |
|---|
'' | 1.2.3 | Exact version |
^ | ^1.2.3 | Compatible with |
~ | ~1.2.3 | Approximately equivalent |
>= | >=1.2.3 | Greater than or equal |
* | * | Any version |
Version Groups
Partition dependencies into groups with separate version policies:
export default {
versionGroups: [
{
dependencies: ['typescript'],
pinVersion: '5.3.3',
},
{
dependencies: ['moment'],
isBanned: true,
},
{
dependencies: ['@myorg/*'],
preferVersion: 'highestSemver',
},
],
};
Formatting Options
Control package.json formatting:
export default {
formatBugs: true,
formatRepository: true,
sortAz: [
'contributors',
'dependencies',
'devDependencies',
'keywords',
],
sortFirst: [
'name',
'version',
'description',
'main',
],
};
Common Patterns
Single Version Policy
Enforce one version per dependency across all packages:
export default {
versionGroups: [
{
label: 'Use highest version everywhere',
preferVersion: 'highestSemver',
},
],
};
Allow Development Exceptions
export default {
versionGroups: [
{
label: 'Ignore dev dependencies',
dependencyTypes: ['dev'],
isIgnored: true,
},
{
label: 'Consistent versions for production',
dependencyTypes: ['prod', 'peer'],
preferVersion: 'highestSemver',
},
],
};
Scoped Package Source of Truth
export default {
versionGroups: [
{
label: 'Internal packages use local version',
dependencies: ['@myorg/**'],
dependencyTypes: ['local'],
preferVersion: 'local',
},
],
};
Best Practices
- Start with defaults - Syncpack works well without configuration
- Add rules incrementally - Only add rules as you encounter issues
- Document exceptions - Use
label field to explain why rules exist
- Commit config file - Keep version policy in version control
- Run in CI - Use
syncpack list-mismatches --fail-fast in CI pipelines