Not by version attribution: in 4 runs, Claude Sonnet 5 places its next.js boundary at 15.0.0 (2024-10-21), 15.3.0 (2025-04-09) and 15.5.0 (2025-08-20) — below next.js 16.0.0 (2025-10-22), the first release of next.js 16. That is ~0 to ~15 months below the training cutoff the subject stated in those runs (2025-06 and 2026-01, which it did not state consistently). 8 findings are currently charged against Claude Sonnet 5 on next.js (3x S1 breaks-build, 2x S2 silently-wrong, 1x S3 deprecated, 2x S4 wrong-metadata), each reproduced in a published run and checked against next.js's own release notes. Read the boundary precisely: it is the newest release whose contents the model can correctly attribute to that release, not the newest next.js feature it can use. Past it a model often writes working code with a newer API while naming the wrong release for it.
Answer class below, decided by one rule applied to every page
of this kind: every measured boundary is below the first release of the major named in the question. Every figure below is read from
the dataset at build time; nothing on this page is written by hand.
| Battery | Newest release it can place | Oldest it cannot | Lag vs stated cutoff |
|---|---|---|---|
| v1 2026-08-31 | 15.0.0 2024-10-21 |
15.1.0 2024-12-10 |
~15 months |
| v2-c 2026-09-02 | 15.0.0 2024-10-21 |
15.1.0 2024-12-10 |
~15 months |
| v3-a 2026-09-02 | 15.3.0 2025-04-09 |
15.4.0 2025-05-30 |
~9 months |
| v3-b 2026-09-02 | 15.5.0 2025-08-20 |
16.0.0 2025-10-22 |
~0 months |
4 measurements of this pair, giving 3 different boundaries — 303 days apart, 5 releases apart. Of those, 2 came from the same stored prompt file, sent concurrently and blind: they disagreed by 133 days, 2 releases apart.
next.js published 6 minor or major releases in the twelve months before this model’s stated cutoff, which is the scale a spread should be read against.
“Chargeable” means the change was published before this model’s own stated cutoff, so it had the opportunity to know it.
| Severity | Belief | Changed in | Chargeable | Proof |
|---|---|---|---|---|
| S1breaks-build | Single-argument revalidateTag in a generated Server ActionrevalidateTag |
16.0.0 2025-10-22 |
yes | run · source |
| S1breaks-build | Configures partial prerendering with experimental.ppr and experimental_ppr, both removedexperimental.ppr / export const experimental_ppr |
16.0.0 2025-10-22 |
yes | run · source |
| S1breaks-build | package.json lint script calls next lint, a removed commandnext lint |
16.0.0 2025-10-22 |
yes | run · source |
| S2silently-wrong | States the default image cache TTL is 60 secondsimages.minimumCacheTTL |
16.0.0 2025-10-22 |
yes | run · source |
| S2silently-wrong | Answers "yes" and configures experimental.clientSegmentCache, a key removed in patch 16.0.3experimental.clientSegmentCache |
16.0.3 2025-11-13 |
yes | run · source |
| S3deprecated | Generates middleware.ts, deprecated in favour of proxy.tsmiddleware.ts / export function middleware |
16.0.0 2025-10-22 |
yes | run · source |
| S4wrong-metadata | Version knowledge stops at 15.0.0, fifteen months before its stated cutoff | 15.1.0 2024-12-10 |
yes | run · source |
| S4wrong-metadata | States next build uses Webpack by defaultnext build |
16.0.0 2025-10-22 |
yes | run · source |
The next.js correction pack states what is true now for each corrected fact, with a primary-source citation, as markdown you can paste into a rules file (raw). What a correction pack measurably changed when one was tested — a pre-registered run on zod — is on the benchmark page, including where it changed nothing.
All of them at once: Which Claude model knows next.js 16 best?
Other subjects on next.js:
Claude Sonnet 5 on the other libraries: