The Epochs: A Complete Version History

"This is the only framework where in dev I'm scared to mousehover anything." — A frustrated developer, circa Next.js 13 launch

Understanding Next.js's version history isn't about memorizing release dates. It's about understanding which problems each version solved—and which new problems it created.

Era 1: The Foundation Years (2016-2019)

Next.js 1.0 (October 2016)

The beginning. Created to solve a specific problem: building React applications with server-side rendering without drowning in configuration.

What it introduced:

For the first time, developers could build SSR React apps without fighting build tools. This was revolutionary.

Next.js 2.0 (March 2017)

The first significant update focused on making Next.js viable for small websites.

Key improvements:

Next.js 3.0

A major milestone that introduced dynamic imports.

What it introduced:

This dramatically improved performance for large applications. You no longer had to ship your entire app in one bundle.

Next.js 4.0

Enterprise-grade improvements.

What it introduced:

Next.js 5.0 & 6.0

Incremental improvements to performance and developer experience. The framework was maturing.

Next.js 7.0 (September 2018)

The first version to upgrade to Webpack 4.

Key improvements:

Next.js 8.0 (February 2019)

The serverless revolution begins.

What it introduced:

This was the first version where Next.js explicitly targeted the serverless deployment model that Vercel would perfect.


Era 2: The Pages Router Matures (2019-2021)

Next.js 9.0 (July 2019)

One of the most significant releases in Next.js history.

What it introduced:

Tim Neutkens and the team had hit their stride. The API was crystallizing.

Next.js 9.3 (March 2020)

The data fetching patterns that defined an era.

What it introduced:

These three functions (getStaticProps, getServerSideProps, getStaticPaths) became the canonical way to think about rendering in Next.js. Every tutorial, every course, every interview question focused on these.

Next.js 9.5 (July 2020)

What it introduced:

ISR was a game-changer. You could now have the speed of static generation with the freshness of server rendering.

Next.js 10 (October 2020)

The image optimization era begins.

What it introduced:

The Image component would become one of Next.js's most-used features—and one of its most confusing for newcomers.

Next.js 11 (June 2021)

What it introduced:

Next.js 12 (October 2021)

The Rust revolution begins.

What it introduced:

The move to Rust-based tooling made compilation significantly faster. This was the first hint of Turbopack.


Era 3: The App Router Revolution (2022-Present)

Next.js 13 (October 2022)

The most controversial release in Next.js history.

What it introduced:

The App Router was a complete paradigm shift. Everything developers had learned about the Pages Router—the mental models, the data fetching patterns, the file structure—was now "legacy."

The Controversy:

The community reaction was... intense.

The core criticism: the App Router was marked "stable" before it was truly stable.

Next.js 13.4 (May 2023)

The stability patch.

What it introduced:

Vercel acknowledged the issues: "We've received lots of valuable feedback and increased adoption has inevitably revealed bugs and opportunities for further improvement. We want you to know that we are not yet satisfied with the experience of using the App Router and it is our top priority moving forward."

Next.js 14 (October 2023)

The caching controversy.

What it introduced:

The Caching Drama:

Next.js 14 cached fetch() requests by default. This led to faster response times—and developer fury.

"Next.js invisibly overrides the fetch() call with their own caching version that's on by default and causes stale state in unexpected places."

"Yeah the automatic caching of third party libraries using fetch as well causes many issues and there isn't a way to disable it without disabling all the other fetch in a page."

Next.js 15 (2024)

The mea culpa release.

What it introduced:

"Next.js version 14 and below cached fetches and GET route handlers by default. This resulted in unintuitive default behaviors. Because of developer confusion, version 15+ does not cache fetches or route handlers by default."

Vercel published a blog post titled "Our Journey with Caching" acknowledging the missteps.

Next.js 16 (2025)

The current era.

What it introduced:


The Big Picture: What Each Era Represents

Era Years Focus Key Pattern
Foundation 2016-2019 Basic SSR + routing File-based routes
Pages Router 2019-2021 Data fetching patterns getStaticProps / getServerSideProps
App Router 2022+ React Server Components async components + fetch()
Cache Components 2025+ Explicit caching use cache

What This Means for Vibe Coders

Know Which Era Your Code Is From

AI tools will generate code from all eras. You need to recognize:

The Upgrade Path

If you're working on an existing project:

Breaking Changes to Watch For

  1. Caching behavior — Different between v14 and v15+
  2. Data fetchinggetStaticPropsfetch() in async components
  3. Client components — Must explicitly mark with 'use client'
  4. Middleware runtime — Edge vs. Node.js support

Key Takeaways


Sources