chore(deps): upgrade Next.js 14 → 15.5.21 (clears 15 Dependabot alerts) - #111
Merged
Conversation
Bumps next + eslint-config-next 14.2.35 → 15.5.21. React stays on 18
(Next 15 supports React ^18.2.0), so no forced React 19 migration.
Clears all 15 open next-related Dependabot alerts (4 high) — the highest
patched version required is 15.5.16, so jumping to Next 16 would add
breakage (React 19, Turbopack default) for zero additional security gain.
Next 15 breaking-change migration:
- Async request APIs: params/searchParams awaited in the 6 dynamic pages
that consume them as props; cookies() is now async, so
createRouteHandlerClient() became async (9 call sites awaited).
- next.config: serverComponentsExternalPackages → top-level
serverExternalPackages (renamed/destabilized in Next 15).
- typedRoutes tightening: object href {pathname, hash} is no longer
accepted → string href "/path#hash" (4 governance pages).
- eslint: ignore the Next-generated next-env.d.ts (Next 15 adds a
triple-slash routes.d.ts reference that trips no-triple-slash-reference).
Verified: `next build` green — compiles, type-checks, lints, and
prerenders all 81 pages. Client components using the useParams()
hook are unaffected and left untouched.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This was referenced Jul 23, 2026
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Upgrades Next.js
14.2.35→15.5.21(andeslint-config-nextto match). React stays on 18 — Next 15 supportsreact ^18.2.0, so no forced React 19 migration.Why Next 15, not 16
All 15 open
next-related Dependabot alerts (4 high, incl. Server-Components DoS, Pages-Router middleware bypass, SSRF, image-optimizer DoS) are patched at15.5.16. Jumping to Next 16 would force React 19 + Turbopack-default for zero additional security benefit — pure added risk. This is the smallest correct change that closes the alerts.Breaking-change migration (Next 15)
params/searchParamsare nowPromises —awaited in the 6 dynamic pages that consume them as props (blog/[slug],knowledge/guides/[slug],knowledge/guides,professionals/[slug], governanceemployees/[id]+agencies/[id]viaReact.use()since they're client components)cookies()now asynccreateRouteHandlerClient()becameasync; all 9 call sites nowawaititnext.configexperimental.serverComponentsExternalPackages→ top-levelserverExternalPackages(renamed in 15)href={{ pathname, hash }}no longer typechecks → stringhref="/path#hash"(4 governance pages)next-env.d.ts(Next 15 adds aroutes.d.tstriple-slash reference that tripsno-triple-slash-referencein raw eslint / lint-staged)Client components using the
useParams()hook are unaffected and left untouched.Verification
next buildgreen — compiles, type-checks, lints, prerenders all 81 pages (including every migrated dynamic route)tscclean on all changed files (one pre-existingSet-iteration error in a test file remains — it fails onmaintoo and is not in the build graph / CI gate)Notes / out of scope
preparescript uses husky-v8 syntax (husky install) while the dep is husky v9 — runs with a deprecation warning only, non-blocking. Worth a follow-up cleanup.@xenova/transformersML chain incl. the criticalprotobufjs) is a separate breaking migration.🤖 Generated with Claude Code