In the Next.js App Router fetch is not cached by default. You opt in with cache: 'force-cache'.
Since Next.js 15 a fetch request in the App Router is not cached by default. A request is cached only when you opt in, for example with cache: 'force-cache' or a positive next.revalidate. The official caching guide states plainly that fetch requests are not cached by default.
Related claims
In the Next.js App Router fetch is cached by default. You opt out with cache: 'no-store'.
Same question with opposite answers about the current default. The official docs say fetch is not cached by default while a popular tutorial says it is cached by default. The official source is current so it wins.
supersedesIn Next.js 14 fetch defaults to force-cache so responses are cached by default.
The fetch default flipped in Next.js 15 from cached to uncached. The v14 force-cache default was accurate for its time so it is superseded not wrong.
is supported byGET Route Handlers are not cached by default. You opt in with route segment config such as dynamic = 'force-static'.
Both reflect the Next.js 15 shift to uncached by default. GET Route Handlers and fetch each stopped caching without an explicit opt in.