Help us improve
Share bugs, ideas, or general feedback.
From syncpack
Configures syncpack for JavaScript/TypeScript monorepos including workspace detection, dependency types, semver groups, version groups, and package.json formatting.
npx claudepluginhub thebushidocollective/han --plugin syncpackHow this skill is triggered — by the user, by Claude, or both
Slash command
/syncpack:syncpack-configurationThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Syncpack is a tool for managing consistent dependency versions across JavaScript/TypeScript monorepos. This skill covers configuration best practices.
Defines syncpack version groups for monorepo dependency management: pin/ban versions, prefer highest/lowest semver, filter by deps/packages/types/locations.
Guides monorepo design including structure patterns, package organization, polyrepo tradeoffs, dependency management, and scalable workspace configs.
Manages NPM packages, configures Node.js projects, handles dependencies, and troubleshoots issues using npm, yarn, or pnpm.
Share bugs, ideas, or general feedback.
Syncpack is a tool for managing consistent dependency versions across JavaScript/TypeScript monorepos. This skill covers configuration best practices.
Syncpack searches for configuration in these locations (in order):
syncpack.config.js / .cjs / .mjs / .tssyncpack.config.json / .yaml / .yml.syncpackrc / .syncpackrc.json / .syncpackrc.yaml / .syncpackrc.yml// syncpack.config.js
export default {
// Glob patterns to find package.json files
source: [
'package.json',
'packages/*/package.json',
'apps/*/package.json',
],
};
Syncpack automatically detects workspaces:
workspaces from ./package.jsonpackages from ./pnpm-workspace.yamlpackages from ./lerna.jsonOverride with explicit source patterns when needed.
Control which dependency types to check:
export default {
dependencyTypes: [
'dev', // devDependencies
'local', // workspace: protocol dependencies
'overrides', // npm overrides / yarn resolutions
'peer', // peerDependencies
'pnpmOverrides', // pnpm overrides
'prod', // dependencies
'resolutions', // yarn resolutions
],
};
Define rules for semver range consistency:
export default {
semverGroups: [
{
// Require exact versions for React
dependencies: ['react', 'react-dom'],
range: '', // exact version
},
{
// Allow caret ranges for dev tools
dependencyTypes: ['dev'],
range: '^',
},
],
};
| 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 |
Partition dependencies into groups with separate version policies:
export default {
versionGroups: [
{
// Pin specific dependencies
dependencies: ['typescript'],
pinVersion: '5.3.3',
},
{
// Ban certain packages
dependencies: ['moment'],
isBanned: true,
},
{
// Use workspace version as source of truth
dependencies: ['@myorg/*'],
preferVersion: 'highestSemver',
},
],
};
Control package.json formatting:
export default {
formatBugs: true,
formatRepository: true,
sortAz: [
'contributors',
'dependencies',
'devDependencies',
'keywords',
],
sortFirst: [
'name',
'version',
'description',
'main',
],
};
Enforce one version per dependency across all packages:
export default {
versionGroups: [
{
label: 'Use highest version everywhere',
preferVersion: 'highestSemver',
},
],
};
export default {
versionGroups: [
{
label: 'Ignore dev dependencies',
dependencyTypes: ['dev'],
isIgnored: true,
},
{
label: 'Consistent versions for production',
dependencyTypes: ['prod', 'peer'],
preferVersion: 'highestSemver',
},
],
};
export default {
versionGroups: [
{
label: 'Internal packages use local version',
dependencies: ['@myorg/**'],
dependencyTypes: ['local'],
preferVersion: 'local',
},
],
};
label field to explain why rules existsyncpack list-mismatches --fail-fast in CI pipelines