Frontend Dependency Update Assessment
Frontend/workspace dependency update assessment
Date: 2026-06-22
Baseline: docs/audits/dependency-update-baseline.md
Scope: pnpm workspace dependencies in root, apps/*, packages/*, tools/*, catalogs in pnpm-workspace.yaml, and lockfile/audit state. This assessment does not change package.json, pnpm-lock.yaml, or catalog versions.
Commands and evidence#
1$ mise exec -- pnpm outdated -r --format json > /tmp/assistance-pnpm-outdated.json2exit: 1Parsed summary:
1outdated package entries: 2502deprecated package entries: 73entries where latest is a major-version jump: 1174entries where latest is minor/patch within the same major line: 133Important outdated packages visible in the output:
1next 15.5.15 -> 16.2.92react 18.3.1 -> 19.2.73react-dom 18.3.1 -> 19.2.74typescript 5.9.3 -> 6.0.35vite 7.3.2 -> 8.0.166vitest 4.1.4 -> 4.1.97turbo 2.9.6 -> 2.9.188@opennextjs/cloudflare 1.18.0 -> 1.19.119wrangler 4.78.0 -> 4.100.010ai 5.0.52 -> 6.0.20811@ai-sdk/openai 2.0.101 -> 3.0.741$ mise exec -- pnpm audit --json > /tmp/assistance-pnpm-audit.json2exit: non-zero34metadata: low 31, moderate 137, high 91, critical 5, total dependencies 35261$ mise exec -- pnpm audit --prod --json > /tmp/assistance-pnpm-audit-prod.json2exit: 134metadata: low 23, moderate 109, high 64, critical 1Representative production audit paths:
1apps__academy>next2apps__studio>next3apps__blog>next4apps__academy>contentlayer2>@contentlayer2/utils>@opentelemetry/exporter-trace-otlp-grpc>@grpc/grpc-js>@grpc/proto-loader>protobufjs5apps__admin>axios6apps__docs>@mdx-js/loader>webpack>schema-utils>ajv>fast-uri7apps__blog>nuqs>react-router8apps__docs>react-use>js-cookieTop high/critical advisory clusters from the full audit:
1protobufjs: 1 critical, 5 high, 5 moderate2handlebars: 1 critical, 4 high, 2 moderate3form-data: 1 critical, 2 high4minimist: 1 critical, 1 moderate5shell-quote: 1 critical6next: 18 high, 11 moderate, 4 low7axios: 11 high, 9 moderate, 1 low8undici: 4 high, 3 moderate, 4 low9react-router: 3 high, 1 moderate, 1 low10vite: 2 high, 2 moderate11lodash.template: 2 high12fast-uri: 2 high13@grpc/grpc-js: 2 highAssessment#
Yes, frontend/workspace dependencies need updates. The need is primarily security-driven, not just freshness-driven.
Urgent track: security triage and targeted patching#
The production audit still reports 1 critical and 64 high advisories. These should be triaged before broad routine upgrades.
Highest-priority areas:
- Next.js advisories across
academy,studio, andblog.- The default catalog is on
next 15.5.15; latest is16.2.9. - Studio catalog pins
next 16.2.3, also behind latest. - Do not jump all apps to Next 16 in one step. First determine whether patched Next 15 and patched Next 16 lines are available for each app/deploy target.
- The default catalog is on
- Academy/contentlayer transitive protobuf stack (
protobufjs,@grpc/grpc-js).- The production audit path is through
contentlayer2/OpenTelemetry/grpc tooling. - This needs reachability review: if it is build-time only, isolate it from deployed artifacts; if runtime-reachable, patch immediately.
- The production audit path is through
- Admin axios advisories.
apps/admin>axioscarries multiple high advisories.- This is a likely narrow patch candidate if
apps/adminis still maintained/deployed.
- Blog
react-routervianuqs.- Audit reports RCE/DoS/open-redirect advisories through
apps__blog>nuqs>react-router. - Validate whether the vulnerable code is bundled or only metadata/transitive, then update
nuqs/related router dependency if possible.
- Audit reports RCE/DoS/open-redirect advisories through
- Docs
fast-uriandjs-cookiepaths.fast-uricomes through docs MDX/webpack tooling; likely build-time but still should be patched.js-cookiethroughreact-usemay be runtime-relevant.
Routine track: low-risk patch/minor batches#
Good candidates for routine update PRs after security triage:
turbo 2.9.6 -> 2.9.18vitest 4.1.4 -> 4.1.9@vitest/* 4.1.4 -> 4.1.9- Radix UI patch updates (
1.x/2.xpatch lines) @opennextjs/cloudflare 1.18.0 -> 1.19.11after a focused Cloudflare build checkwrangler 4.78.0 -> 4.100.0after confirming patched dependencies still apply
These should be batched by subsystem and verified with the narrow app/test/build surfaces rather than a single monorepo-wide lockfile churn.
Deferred major migrations#
Do not treat these as routine updates:
next 15 -> 16react/react-dom 18 -> 19typescript 5.9 -> 6.0vite 7 -> 8@vitejs/plugin-react 5 -> 6ai 5 -> 6and@ai-sdk/openai 2 -> 3
These affect multiple app runtimes, OpenNext/Cloudflare builds, package peer dependency ranges, and Studio-specific catalog constraints. They need dedicated migration plans and compatibility matrices.
Deprecated packages#
Deprecated entries should be cleaned opportunistically:
1@types/markdown-table@3.0.02mdast@3.0.03@types/mdx-js__react@1.5.84@types/react-datepicker@4.19.65@types/react-grid-layout@1.3.66@types/recharts@1.8.297@types/uuid@8.3.4Most are type packages or legacy MDX dependencies, so they are lower priority than the high/critical security advisories unless they block upgrades.
Recommendation#
Proceed with dependency updates, but in this order:
- Create a security-patch branch for high/critical pnpm audit findings. Start with Next patch-line options, axios, protobuf/grpc, react-router/nuqs, fast-uri, and js-cookie.
- Create a routine tooling patch branch for Turbo/Vitest/Radix/OpenNext/Wrangler patch-minor updates.
- Create separate major migration plans for Next 16, React 19, TypeScript 6, Vite 8, and AI SDK 6.
- Keep Studio catalog separate from the default catalog. Studio has its own pins and should not be swept into public-app dependency updates without Studio-specific verification.
Minimum verification for any frontend update branch:
1mise exec -- pnpm install --lockfile-only2mise run typecheck3mise run test4mise run build:pick -- www,docs,blog5mise run perf:cf-budgets -- --app www --app docs --app blog --allow-missingAdjust the verification set to the actual packages changed; do not claim the whole workspace is green from a narrow check.