# unstale

> unstale tells Claude Code, Codex and Cursor what changed upstream since their training cutoff that applies to your code: new APIs worth adopting, breaking changes for your next major upgrade, deprecations, and the security and performance fixes in each version bump.

Install: `npx @unstale/cli init` in a repository (`@unstale/cli` 0.1.1, https://www.npmjs.com/package/@unstale/cli), or `brew install vuca-dev/tap/unstale`.

- Upgrade reviews: what the next major version requires, located in the code, obligations first.
- New capabilities: features released since the code was written that could replace custom code.
- Bump digests: what each version bump fixes, security advisories included.

Every item cites its release note, guide or advisory. Matching runs locally; no code leaves the machine and there is
no telemetry. Works with npm and PyPI projects, in Claude Code, Codex and Cursor.

On 15 real Next.js, Prisma and NestJS upgrades, the catalog held 92% of the required changes that upstream sources
document: https://github.com/vuca-dev/unstale/blob/main/eval/gate/MISSES.md

## What changed, by package

- [@ai-sdk/azure](https://unstale.sh/npm/@ai-sdk/azure/index.md): 26 changes
- [@ai-sdk/openai](https://unstale.sh/npm/@ai-sdk/openai/index.md): 118 changes
- [@ai-sdk/react](https://unstale.sh/npm/@ai-sdk/react/index.md): 31 changes
- [@assistant-ui/react](https://unstale.sh/npm/@assistant-ui/react/index.md): 455 changes
- [@assistant-ui/react-markdown](https://unstale.sh/npm/@assistant-ui/react-markdown/index.md): 54 changes
- [@astrojs/mdx](https://unstale.sh/npm/@astrojs/mdx/index.md): 39 changes
- [@astrojs/react](https://unstale.sh/npm/@astrojs/react/index.md): 26 changes
- [@astrojs/rss](https://unstale.sh/npm/@astrojs/rss/index.md): 7 changes
- [@astrojs/sitemap](https://unstale.sh/npm/@astrojs/sitemap/index.md): 5 changes
- [@auth0/nextjs-auth0](https://unstale.sh/npm/@auth0/nextjs-auth0/index.md): 103 changes
- [@doist/react-interpolate](https://unstale.sh/npm/@doist/react-interpolate/index.md): 2 changes
- [@extend-ai/react-xlsx](https://unstale.sh/npm/@extend-ai/react-xlsx/index.md): 39 changes
- [@fortawesome/react-fontawesome](https://unstale.sh/npm/@fortawesome/react-fontawesome/index.md): 9 changes
- [@hookform/resolvers](https://unstale.sh/npm/@hookform/resolvers/index.md): 22 changes
- [@nestjs/core](https://unstale.sh/npm/@nestjs/core/index.md): 308 changes
- [@playwright/test](https://unstale.sh/npm/@playwright/test/index.md): 81 changes
- [@pulumi/aws](https://unstale.sh/npm/@pulumi/aws/index.md): 87 changes
- [@pulumi/awsx](https://unstale.sh/npm/@pulumi/awsx/index.md): 86 changes
- [@pulumi/command](https://unstale.sh/npm/@pulumi/command/index.md): 3 changes
- [@pulumi/docker](https://unstale.sh/npm/@pulumi/docker/index.md): 8 changes
- [@pulumi/eks](https://unstale.sh/npm/@pulumi/eks/index.md): 7 changes
- [@pulumi/kubernetes](https://unstale.sh/npm/@pulumi/kubernetes/index.md): 41 changes
- [@pulumi/pulumi](https://unstale.sh/npm/@pulumi/pulumi/index.md): 883 changes
- [@react-pdf/renderer](https://unstale.sh/npm/@react-pdf/renderer/index.md): 9 changes
- [@sentry/nextjs](https://unstale.sh/npm/@sentry/nextjs/index.md): 339 changes
- [@streamdown/cjk](https://unstale.sh/npm/@streamdown/cjk/index.md): 2 changes
- [@streamdown/math](https://unstale.sh/npm/@streamdown/math/index.md): 2 changes
- [@streamdown/mermaid](https://unstale.sh/npm/@streamdown/mermaid/index.md): 3 changes
- [@tanstack/react-query](https://unstale.sh/npm/@tanstack/react-query/index.md): 29 changes
- [@tanstack/react-query-devtools](https://unstale.sh/npm/@tanstack/react-query-devtools/index.md): 5 changes
- [@tanstack/react-table](https://unstale.sh/npm/@tanstack/react-table/index.md): 4 changes
- [@testing-library/jest-dom](https://unstale.sh/npm/@testing-library/jest-dom/index.md): 5 changes
- [@testing-library/react](https://unstale.sh/npm/@testing-library/react/index.md): 2 changes
- [@vercel/analytics](https://unstale.sh/npm/@vercel/analytics/index.md): 9 changes
- [@vitejs/plugin-react](https://unstale.sh/npm/@vitejs/plugin-react/index.md): 19 changes
- [@xyflow/react](https://unstale.sh/npm/@xyflow/react/index.md): 55 changes
- [ai](https://unstale.sh/npm/ai/index.md): 278 changes
- [aiohttp](https://unstale.sh/pypi/aiohttp/index.md): 170 changes
- [anyio](https://unstale.sh/pypi/anyio/index.md): 98 changes
- [astro](https://unstale.sh/npm/astro/index.md): 819 changes
- [asyncpg](https://unstale.sh/pypi/asyncpg/index.md): 26 changes
- [attrs](https://unstale.sh/pypi/attrs/index.md): 6 changes
- [autoprefixer](https://unstale.sh/npm/autoprefixer/index.md): 16 changes
- [axios](https://unstale.sh/npm/axios/index.md): 204 changes
- [azure-core](https://unstale.sh/pypi/azure-core/index.md): 20 changes
- [cffi](https://unstale.sh/pypi/cffi/index.md): 9 changes
- [charset-normalizer](https://unstale.sh/pypi/charset-normalizer/index.md): 29 changes
- [click](https://unstale.sh/pypi/click/index.md): 65 changes
- [date-fns](https://unstale.sh/npm/date-fns/index.md): 8 changes
- [datefinder](https://unstale.sh/pypi/datefinder/index.md): 2 changes
- [dnspython](https://unstale.sh/pypi/dnspython/index.md): 1 changes
- [docx](https://unstale.sh/npm/docx/index.md): 86 changes
- [docx-preview](https://unstale.sh/npm/docx-preview/index.md): 2 changes
- [dompurify](https://unstale.sh/npm/dompurify/index.md): 69 changes
- [elkjs](https://unstale.sh/npm/elkjs/index.md): 2 changes
- [eslint](https://unstale.sh/npm/eslint/index.md): 159 changes
- [fastapi](https://unstale.sh/pypi/fastapi/index.md): 49 changes
- [fflate](https://unstale.sh/npm/fflate/index.md): 7 changes
- [globals](https://unstale.sh/npm/globals/index.md): 18 changes
- [hono](https://unstale.sh/npm/hono/index.md): 296 changes
- [httptools](https://unstale.sh/pypi/httptools/index.md): 8 changes
- [idna](https://unstale.sh/pypi/idna/index.md): 14 changes
- [jose](https://unstale.sh/npm/jose/index.md): 52 changes
- [jotai](https://unstale.sh/npm/jotai/index.md): 26 changes
- [js-cookie](https://unstale.sh/npm/js-cookie/index.md): 5 changes
- [jsdom](https://unstale.sh/npm/jsdom/index.md): 1460 changes
- [jsonpatch](https://unstale.sh/pypi/jsonpatch/index.md): 18 changes
- [jsonpointer](https://unstale.sh/pypi/jsonpointer/index.md): 7 changes
- [knip](https://unstale.sh/npm/knip/index.md): 730 changes
- [ky](https://unstale.sh/npm/ky/index.md): 69 changes
- [lodash](https://unstale.sh/npm/lodash/index.md): 14 changes
- [marked](https://unstale.sh/npm/marked/index.md): 85 changes
- [nanoid](https://unstale.sh/npm/nanoid/index.md): 21 changes
- [next](https://unstale.sh/npm/next/index.md): 629 changes
- [openapi-typescript-codegen](https://unstale.sh/npm/openapi-typescript-codegen/index.md): 1 changes
- [papaparse](https://unstale.sh/npm/papaparse/index.md): 2 changes
- [pdfjs-dist](https://unstale.sh/npm/pdfjs-dist/index.md): 193 changes
- [pino](https://unstale.sh/npm/pino/index.md): 27 changes
- [playwright](https://unstale.sh/npm/playwright/index.md): 97 changes
- [postcss](https://unstale.sh/npm/postcss/index.md): 42 changes
- [posthog-js](https://unstale.sh/npm/posthog-js/index.md): 825 changes
- [prisma](https://unstale.sh/npm/prisma/index.md): 302 changes
- [react](https://unstale.sh/npm/react/index.md): 51 changes
- [react-day-picker](https://unstale.sh/npm/react-day-picker/index.md): 59 changes
- [react-dropzone](https://unstale.sh/npm/react-dropzone/index.md): 37 changes
- [react-hook-form](https://unstale.sh/npm/react-hook-form/index.md): 224 changes
- [react-icons](https://unstale.sh/npm/react-icons/index.md): 1 changes
- [react-resizable-panels](https://unstale.sh/npm/react-resizable-panels/index.md): 124 changes
- [reactjs-tiptap-editor](https://unstale.sh/npm/reactjs-tiptap-editor/index.md): 52 changes
- [sass](https://unstale.sh/npm/sass/index.md): 52 changes
- [sharp](https://unstale.sh/npm/sharp/index.md): 77 changes
- [shiki](https://unstale.sh/npm/shiki/index.md): 71 changes
- [sonner](https://unstale.sh/npm/sonner/index.md): 5 changes
- [streamdown](https://unstale.sh/npm/streamdown/index.md): 148 changes
- [tailwind-merge](https://unstale.sh/npm/tailwind-merge/index.md): 17 changes
- [tailwindcss](https://unstale.sh/npm/tailwindcss/index.md): 181 changes
- [tsx](https://unstale.sh/npm/tsx/index.md): 39 changes
- [turndown](https://unstale.sh/npm/turndown/index.md): 4 changes
- [typescript-eslint](https://unstale.sh/npm/typescript-eslint/index.md): 183 changes
- [valibot](https://unstale.sh/npm/valibot/index.md): 63 changes
- [vite](https://unstale.sh/npm/vite/index.md): 44 changes
- [vitest](https://unstale.sh/npm/vitest/index.md): 536 changes
- [ws](https://unstale.sh/npm/ws/index.md): 14 changes
- [zod](https://unstale.sh/npm/zod/index.md): 216 changes
