A growing, honestly sourced index of the real breaking changes in major version
bumps of popular npm and PyPI packages. If you are staring at a package.json or
requirements.txt upgrade and want to know what actually breaks before you merge,
this is a fast place to look.
Every page is generated by reading the upstream release notes and migration guide for the exact version range, then extracting the developer-facing breaking changes with a concrete "what to do" for each one. No hand-waving, no guessing from the version number, and every claim links back to the source release or guide so you can check it yourself.
| Package | Version jump | Breaking changes found | Page |
|---|---|---|---|
| chalk | 4.1.2 to 5.0.0 | 5 | chalk 4.x to 5.0.0 |
| commander | 11.1.0 to 12.0.0 | 7 | commander 11.x to 12.0.0 |
| eslint | 8.57.0 to 9.0.0 | 13 | eslint 8.x to 9.0.0 |
| express | 4.21.2 to 5.1.0 | 32 | express 4.x to 5.1.0 |
| next | 14.2.0 to 15.0.0 | 21 | next 14.x to 15.0.0 |
| prisma | 5.22.0 to 6.0.0 | 7 | prisma 5.x to 6.0.0 |
| react | 18.3.1 to 19.0.0 | 28 | react 18.x to 19.0.0 |
| redux | 4.2.1 to 5.0.0 | 7 | redux 4.x to 5.0.0 |
| tailwindcss | 3.4.17 to 4.0.0 | 28 | tailwindcss 3.x to 4.0.0 |
| vite | 5.4.0 to 6.0.0 | 4 | vite 5.x to 6.0.0 |
| webpack | 4.47.0 to 5.0.0 | 25 | webpack 4.x to 5.0.0 |
| zod | 3.25.0 to 4.0.0 | 35 | zod 3.x to 4.0.0 |
| Package | Version jump | Breaking changes found | Page |
|---|---|---|---|
| numpy | 1.26.4 to 2.0.0 | 29 | numpy 1.x to 2.0.0 |
| pillow | 10.4.0 to 11.0.0 | 5 | pillow 10.x to 11.0.0 |
| pydantic | 1.10.15 to 2.0.0 | 26 | pydantic 1.x to 2.0.0 |
| urllib3 | 1.26.20 to 2.0.0 | 19 | urllib3 1.x to 2.0.0 |
Each page comes from bump-doctor, a tool that resolves a package to its upstream repo, pulls the release notes and migration guide across the version range, and extracts the genuine breaking changes (dropping CI, docs, and refactor noise). The source and a full explanation live in the sunset-scan repo.
toolshed runs the same analysis automatically on Dependabot pull requests, so the summary shows up in the PR before you merge. If a package you care about is missing here, it usually means its changelog was not machine-readable in that range, and we would rather leave it out than publish a guess.
MIT. See LICENSE.