CoachnestCoachnest
Sign InGet Started
Back to course

Next.js 16: The Complete Developer Guide

…
—
Contents
1

What's New in Next.js 16

Reading14mFree
2

Installation, CLI & Your First Project

Reading12mFree
3

Project Structure & Conventions Deep Dive

Reading16m
4

Turbopack — The New Default Bundler

Video18m
5

Configuring TypeScript, ESLint & next.config.ts

Reading14m
6

Chapter 1 — Quiz

Quiz10m
7

App Router Fundamentals

Reading16m
8

Dynamic Routes, Catch-Alls & Type-Safe Params

Reading14m
9

Route Groups & Parallel Routes

Reading16m
10

Intercepting Routes & Modal Patterns

Reading12m
11

Loading, Error & Not-Found UI

Reading12m
12

Chapter 2 — Routing Quiz

Quiz12m
13

Understanding the Server/Client Boundary

Reading18m
14

Choosing When to use "use client"

Reading14m
15

Composing Server & Client Components

Reading14m
16

server-only, client-only & Code Splitting

Reading12m
17

Chapter 3 — Quiz

Quiz10m
18

Fetching Data in Server Components

Reading14m
19

The Next.js 16 Cache Model

Reading16m
20

Revalidation: revalidateTag, revalidatePath & On-Demand

Reading12m
21

Cache Components — Building Reusable Cached Functions

Reading14m
22

Search Params, Cookies & Dynamic APIs

Reading12m
23

Chapter 4 — Quiz

Quiz12m
24

Server Actions From First Principles

Reading16m
25

Forms with useActionState & Progressive Enhancement

Reading14m
26

Optimistic UI with useOptimistic

Reading12m
27

Validation with Zod + Server Actions

Reading12m
28

Chapter 5 — Quiz

Quiz10m

Static vs Dynamic vs Streaming

Reading14m
30

generateStaticParams & Pre-Rendering Dynamic Routes

Reading12m
31

Incremental Static Regeneration (ISR)

Reading12m
32

Partial Prerendering (PPR)

Reading16m
33

Edge Runtime vs Node.js Runtime

Reading12m
34

Rendering Strategies Deep Dive

Video22m
35

Chapter 6 — Quiz

Quiz12m
36

Tailwind CSS v4 with Next.js 16

Reading14m
37

CSS Modules, Global Styles & Scoped CSS

Reading10m
38

next/image — Smart, Fast Images

Reading14m
39

Fonts, Icons & Metadata

Reading12m
40

Chapter 7 — Quiz

Quiz10m
41

Middleware Fundamentals

Reading14m
42

Sessions, JWTs & Cookies

Reading16m
43

Protecting Server Components & Server Actions

Reading12m
44

Chapter 8 — Quiz

Quiz10m
45

Prisma with Next.js — The Production Setup

Reading14m
46

Mutations: Server Actions + Database Writes

Reading12m
47

Route Handlers & REST APIs

Reading12m
48

Chapter 9 — Quiz

Quiz10m
49

Unit & Component Testing with Vitest

Reading12m
50

End-to-End Testing with Playwright

Reading14m
51

Deploying to Vercel

Reading12m
52

Self-Hosting with Docker

Reading14m
53

Production Performance Checklist

Reading12m
54

Final Assessment — Next.js 16 Mastery

Quiz20m
←→navigate lessons
Chapter 6 of 10·Chapter 6 — Rendering Strategies: SSG, SSR, ISR & PPR
Lesson 29 of 54Reading14 min

Static vs Dynamic vs Streaming

#Static vs Dynamic vs Streaming¶

Next.js gives you four ways to render a page. Pick the right one and you get amazing performance for free. Pick the wrong one and you serve stale data or slow requests.

The Four Strategies¶

StrategyWhen RenderedProsCons
Static (SSG)At build timeFastest, cacheable on a CDNStale until rebuild or revalidation
ISRAt build, then in background on demandFast + can update without redeployPer-page revalidation only
Dynamic (SSR)Every requestAlways freshSlowest TTFB; needs warm servers
Streaming (with PPR)Static shell + per-request fragmentsBest of bothNewest API surface

How Next.js Picks for You¶

Next.js infers the strategy from what your page does:

  • If your page only reads cached data and doesn't touch cookies() / headers() / searchParams → static.
  • If it reads dynamic APIs but you've enabled "use cache" + tags → ISR-style.
  • If it reads dynamic APIs and no caching is opted in → dynamic.
  • If you've enabled experimental_ppr and used <Suspense> for dynamic islands → PPR.

Explicit Overrides¶

You can force a strategy from any page.tsx or layout.tsx:

ts
8 lines
1// Force static (build will fail if anything dynamic is used)
2export const dynamic = "force-static";
3
4// Force dynamic (every request)
5export const dynamic = "force-dynamic";
6
7// Allow Next.js to decide (default)
8export const dynamic = "auto";
ts
2 lines
1// Revalidate this segment every 60s
2export const revalidate = 60;

A Worked Example¶

A blog has three routes:

RouteBest strategy
/blog (listing)Static or ISR (changes occasionally)
/blog/[slug] (post)Static — prerendered with generateStaticParams
/blog/[slug]/comments (recent comments)Streaming — static shell + dynamic comments island
/dashboardDynamic — per-user content

A real app mixes all four routinely. Next.js doesn't make you choose one for the whole app.

How to See What Next Chose¶

After next build, you'll see a table like:

Route (app) Size First Load JS ┌ ○ / 1.5 kB 87 kB ├ ○ /about 150 B 85 kB ├ λ /dashboard 320 B 88 kB └ ● /blog/[slug] 450 B 86 kB ○ (Static) prerendered as static content ● (SSG) prerendered as static HTML (uses getStaticParams) λ (Dynamic) server-rendered on demand

If you expected /blog to be ○ and you're seeing λ, something on the page is dynamic.

Common Surprises¶

  • Calling new Date().toISOString() directly in JSX → dynamic in some cases. Wrap in a Client Component or a cached function.
  • Importing a library that reads env at module top → can dynamicize routes by accident.
  • Calling fetch with cache: "no-store" → forces dynamic.

Use the next build output as the ground truth for what's static and what isn't.

Previous

Chapter 5 — Quiz

Next

generateStaticParams & Pre-Rendering Dynamic Routes

Use ← → arrow keys to navigate between lessons