Conversation
Turbopack is now the default bundler for both `next dev` and `next build`;
the app has no webpack config, so nothing to opt out of. `params` was already
awaited everywhere, and there is no middleware, no runtime config and no AMP,
so the rest of the v16 breaking changes are no-ops here. `output: "export"`
still produces the same 162 prerendered routes, `BASE_PATH` included.
`next lint` is gone in 16: `pnpm lint` runs the ESLint CLI directly, and
`.eslintrc.json` becomes `eslint.config.mjs` — `@next/eslint-plugin-next`
only ships flat config now, which needs ESLint 9.
`react-hooks/set-state-in-effect` is new in eslint-plugin-react-hooks 7 and
fires on `Nav`'s sidebar/search sync and `use-mobile`, both of which seed
state from the DOM or the URL on mount. Untangling them is a refactor of its
own, so it is a warning here rather than a blocker.
`tsconfig.json` and `apps/website/{AGENTS,CLAUDE}.md` are written by
`next dev` itself — committed so the tree stays clean. `.next/dev/types` is
where dev-mode route types live now that dev and build no longer share an
output directory, which is also what lets them run concurrently.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RWwhRu6Twf7pHHnyFm87xa
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.
Follows the official v16 upgrade guide.
apps/websiteis the only Next app in the repo — the demos are Vite.next15.5.22 → 16.3.0,eslint-config-nextto match,eslint^8 → ^9. React stays at 19.2.8 (already what 16 wants).What actually changed
Turbopack is the default for
next devandnext build. There is no webpack config to migrate and noexperimental.turbopackblock, sonext.config.mjsis untouched.next lintis removed.pnpm lintnow runs the ESLint CLI directly, and.eslintrc.json→eslint.config.mjs:@next/eslint-plugin-nextonly ships flat config as of 16, which is what pushes eslint to 9.tsconfig.jsonandapps/website/{AGENTS,CLAUDE}.mdare written bynext devitself. Committed so the tree stays clean rather than dirtying on every dev start. (agentRules: falseinnext.config.mjsturns the two md files off if you'd rather not have them — the rootAGENTS.mdis untouched either way.) The one substantive tsconfig change is.next/dev/types/**/*.tsininclude: dev and build no longer share an output directory, which is also what lets them run at the same time now.Breaking changes that turned out to be no-ops here
paramswas already awaited inexamples/[examplename]; nocookies/headers/draftMode, nosearchParamson the server.proxy), noserverRuntimeConfig/publicRuntimeConfig, no AMP, no parallel routes, norevalidateTag/unstable_*cache APIs, no sitemap or OG image generators.next/imagedefaults (qualities,imageSizes,minimumCacheTTL, local IPs, redirects) don't apply —output: "export"withimages.unoptimized.scroll-behavior: smooth, so the dropped override changes nothing.One thing left as a warning
react-hooks/set-state-in-effectis new in eslint-plugin-react-hooks 7 and fires 6 times:Nav's sidebar/search sync (5) anduse-mobile(1). Both seed state from the DOM or the URL on mount. Untangling those is a refactor of its own, not part of a framework bump, so the rule iswarnineslint.config.mjswith a comment saying why. Worth its own PR.Verified locally
next build— 162 routes prerendered, clean, with and withoutBASE_PATH;out/index.htmlstill carries the build-time--md-sys-color-*payload.tsc --noEmitclean;pnpm lint0 errors.next dev+/and/examples/aquariumboth 200.pnpm lint:versions(syncpack) clean.CI on a PR runs
lint:metadata,lint:versionsand the Playwright snapshots — none of which touch the Next build — so the build above is the local check that matters.🤖 Generated with Claude Code
https://claude.ai/code/session_01RWwhRu6Twf7pHHnyFm87xa