Next.js App Router Caching: revalidate, dynamic, and no-store Without the Folklore
There's a very specific moment in App Router development that I know all too well: someone adds export const dynamic = 'force-dynamic' to a page, the build passes, and everyone breathes again. The data is fresh. The problem... is that nobody knows exactly why it works, or when it stops being the right answer.
That's folklore. And folklore in caching is expensive — you pay for it either with stale data when you don't want it, or with renders that skip the cache when they could've used it.
My thesis is this: the problem isn't memorizing the caching flags in Next.js. It's deciding how fresh each piece of data needs to be before you even open the docs. If you start from the flag, you're solving the problem backwards.
What the Official Docs Say — and What They Don't






