| name | dependency-upgrade |
| description | Upgrade dependencies safely using pnpm catalog, checking for breaking changes, and testing upgrades. Use when updating packages, applying security patches, or upgrading major versions. |
| allowed-tools | Read, Edit, Write, Bash, Grep, Glob |
Dependency Upgrade Skill
This skill helps you safely upgrade dependencies across the monorepo using pnpm catalog and proper testing procedures.
When to Use This Skill
- Upgrading npm packages
- Applying security patches
- Updating to latest versions
- Upgrading major versions
- Resolving dependency conflicts
- Modernizing tech stack
- Following breaking change guides
Dependency Management
The project uses pnpm with catalog for centralized dependency management:
packages:
- "apps/*"
- "packages/*"
catalog:
next: ^16.0.0
react: ^19.0.0
react-dom: ^19.0.0
typescript: ^5.3.3
drizzle-orm: ^0.30.0
Checking for Updates
List Outdated Packages
pnpm outdated
pnpm -r outdated
pnpm -F @sgcarstrends/api outdated
Interactive Update
pnpm dlx npm-check-updates --interactive
pnpm dlx taze --interactive
Upgrading Dependencies
Update Catalog Versions
catalog:
next: ^15.0.0
next: ^16.0.0
Update Package.json
{
"dependencies": {
"next": "catalog:",
"react": "catalog:"
}
}
Install Updates
pnpm install
pnpm -F @sgcarstrends/web install
pnpm -r install
Safe Upgrade Process
1. Check Current Versions
pnpm list | grep package-name
pnpm list next
2. Review Changelog
pnpm view next versions
pnpm view next --json | jq '.versions[-5:]'
open https://github.com/vercel/next.js/releases
3. Check Breaking Changes
open https://nextjs.org/docs/app/building-your-application/upgrading/version-16
pnpm dlx @next/codemod upgrade latest
4. Create Branch
git checkout -b upgrade/next-16
git checkout -b security/fix-vulnerabilities
5. Update Catalog
catalog:
next: ^16.0.0
react: ^19.0.0
6. Install and Test
pnpm install
pnpm test
pnpm tsc --noEmit
pnpm biome check .
pnpm build
pnpm dev
7. Fix Breaking Changes
export default function Page({ params }: { params: { id: string } }) {
return <div>{params.id}</div>;
}
export default async function Page({
params,
}: {
params: Promise<{ id: string }>;
}) {
const { id } = await params;
return <div>{id}</div>;
}
8. Commit Changes
git add pnpm-workspace.yaml pnpm-lock.yaml
git commit -m "chore(deps): upgrade Next.js to v16
- Upgrade Next.js 15 → 16
- Upgrade React 18 → 19
- Fix async params migration
- Run migration codemod
BREAKING CHANGE: Requires Node.js 20+"
Major Version Upgrades
Next.js Upgrade
pnpm list next
open https://nextjs.org/docs/app/building-your-application/upgrading
pnpm dlx @next/codemod@latest upgrade latest
vim pnpm-workspace.yaml
pnpm install
pnpm -F @sgcarstrends/web build
pnpm -F @sgcarstrends/web test
React Upgrade
catalog:
react: ^19.0.0
react-dom: ^19.0.0
pnpm install
pnpm test
TypeScript Upgrade
catalog:
typescript: ^5.3.3
pnpm install
pnpm tsc --noEmit
Security Updates
Check Vulnerabilities
pnpm audit
Apply Security Patches
catalog:
lodash: ^4.17.21
pnpm install
pnpm audit
pnpm audit --fix
Automated Security PRs
Enable Dependabot:
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 10
groups:
security:
patterns:
- "*"
update-types:
- "patch"
- "minor"
Dependency Conflicts
Resolve Conflicts
npm ERR! Could not resolve dependency:
npm ERR! peer react@"^18.0.0" from some-package@1.0.0
catalog:
react: ^19.0.0
some-package: ^2.0.0
{
"pnpm": {
"overrides": {
"react": "^19.0.0"
}
}
}
Deduplicate Dependencies
pnpm list --depth=0 | grep package-name
pnpm dedupe
pnpm install
Testing Upgrades
Test Checklist
pnpm tsc --noEmit
pnpm biome check .
pnpm test
pnpm test:e2e
pnpm build
pnpm dev
pnpm -F @sgcarstrends/web build
Rollback if Needed
git reset --hard HEAD
git revert <commit-hash>
git checkout main -- pnpm-lock.yaml
pnpm install
Automated Upgrades
Renovate Bot
{
"extends": ["config:base"],
"packageRules": [
{
"matchUpdateTypes": ["minor", "patch"],
"automerge": true
},
{
"matchPackagePatterns": ["^@types/"],
"automerge": true
}
],
"schedule": ["before 3am on Monday"],
"timezone": "Asia/Singapore"
}
Best Practices
1. Update Gradually
pnpm dlx npm-check-updates -u
pnpm install
2. Read Changelogs
pnpm install next@latest
pnpm view next --json | jq .versions
open https://github.com/vercel/next.js/releases
3. Test Thoroughly
pnpm test
pnpm tsc --noEmit
pnpm test
pnpm test:e2e
pnpm build
4. Commit Separately
git commit -m "feat: add feature X and upgrade deps"
git commit -m "chore(deps): upgrade Next.js to v16"
git commit -m "feat: add feature X"
Common Upgrades
Next.js 15 → 16
pnpm dlx @next/codemod@latest upgrade latest
catalog:
next: ^16.0.0
react: ^19.0.0
react-dom: ^19.0.0
pnpm install
Drizzle ORM
catalog:
drizzle-orm: ^0.30.0
drizzle-kit: ^0.20.0
pnpm install
pnpm -F @sgcarstrends/database db:generate
Biome (replacing ESLint)
pnpm remove -r eslint @typescript-eslint/*
catalog:
"@biomejs/biome": ^1.9.4
pnpm install
pnpm dlx @biomejs/biome migrate eslint --write
Troubleshooting
Lockfile Conflicts
rm pnpm-lock.yaml
pnpm install
Peer Dependency Warnings
pnpm why package-name
catalog:
package-name: ^2.0.0
Build Failures After Upgrade
rm -rf node_modules .turbo dist .next
pnpm install
pnpm build
References
Best Practices Summary
- Use Catalog: Centralize versions in pnpm-workspace.yaml
- Test Thoroughly: Run all tests after upgrades
- Read Changelogs: Review breaking changes before upgrading
- Upgrade Incrementally: Don't update everything at once
- Commit Separately: Separate dependency upgrades from features
- Automate Security: Use Dependabot or Renovate for patches
- Check Compatibility: Verify peer dependencies
- Document Changes: Note breaking changes in commit message