Skip to main content
skill CX Codex

incremental-static-rendering — Claude Code skill: how to install

Teaches your coding agent Incremental Static Regeneration in Next.js. It enables background page updates and lazy generation without full site rebuilds.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add PatternsDev/skills --skill incremental-static-rendering -a claude-code
Open on GitHub

What incremental-static-rendering does

The skill guides agents on handling **/*.tsx and **/*.jsx files with Incremental Static Regeneration (ISR). It instructs the model to use the stale-while-revalidate pattern, configuring revalidate in getStaticProps to refresh pages periodically and setting fallback: true in getStaticPaths to build missing routes lazily on first access.

For modern setups with Next.js 13+ App Router, it directs the agent toward generateStaticParams, async server components, and on-demand purge with revalidatePath or revalidateTag. If background regeneration fails on the server, Next.js keeps serving the cached page without crashing.

Do not apply this pattern to stock tickers or user dashboards. In real-time or personalized views, mismatched cache windows cause confusing discrepancies across visitors, making SSR the appropriate choice instead. ISR targets content like product catalogs and blogs starting from Next.js 9.5.

What it helps with

  • configure background page revalidation using revalidate
  • enable lazy generation for new routes with fallback: true
  • trigger on-demand cache purging with revalidatePath
  • migrate static pages to ISR inside Next.js App Router

Example prompts for the agent

  • Set up getStaticProps with a 60-second revalidate interval for product pages
  • Configure getStaticPaths with fallback: true to lazily generate new blog posts
  • Show how to implement ISR in Next.js App Router using generateStaticParams

How to install incremental-static-rendering

1Skills CLI (Vercel)

npx skills add PatternsDev/skills --skill incremental-static-rendering -a claude-code

2Manually: put the files in place

~/.claude/skills/incremental-static-rendering/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/incremental-static-rendering/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about incremental-static-rendering

How do I install incremental-static-rendering in Claude Code?

Run npx skills add PatternsDev/skills --skill incremental-static-rendering -a claude-code in your terminal.

What does incremental-static-rendering do?

It provides instructions and code patterns for Incremental Static Regeneration in Next.js. The skill guides AI agents on background caching, stale-while-revalidate behavior, and lazy route creation.

When should ISR be avoided?

Avoid ISR for real-time data like stock tickers or user-personalized screens. For these use cases, SSR is a better fit because revalidation delays can display mismatched content to different users.

Source text

SKILL.md · MIT
---
name: incremental-static-rendering
description: Teaches Incremental Static Regeneration (ISR) for updating static content post-build. Use when you have static pages that need periodic updates without a full site rebuild.
paths:
  - "**/*.tsx"
  - "**/*.jsx"
license: MIT
metadata:
  author: patterns.dev
  version: "1.1"
related_skills:
  - "hooks-pattern"
  - "hoc-pattern"
---

# Incremental Static Generation

Static Generation (SSG) addresses most of the concerns of SSR and CSR but is suitable for rendering mostly static content. It poses limitations when the content to be rendered is dynamic or changing frequently.

Think of a growing blog with multiple posts. You wouldn't possibly want to rebuild and redeploy the site just because you want to correct a typo in one of the posts. Similarly, one new blog post should also not require a rebuild for all the existing pages. Thus, SSG on its own is not enough for rendering large websites or applications.

## When to Use

- Use this when you have mostly static pages that need periodic data updates without full rebuilds
- This is helpful for large sites (blogs, e-commerce) where rebuilding every page on each change is impractical

## When NOT to Use

- When content changes in real-time and stale data is unacceptable (e.g., live scores, stock tickers)
- For pages that are fully dynamic and personalized per user — SSR is a better fit
- When the revalidation window creates a confusing experience where different users see different content versions

## Instructions

- Use `revalidate` in `getStaticProps` to set a time interval for background page regeneration
- Use `fallback: true` in `getStaticPaths` to lazily generate pages on first request
- Consider on-demand revalidation (`revalidatePath`, `revalidateTag`) for immediate updates after content changes
- In Next.js 13+ App Router, use `generateStaticParams` and async components for ISR

## Details

The Incremental Static Generation (iSSG) pattern was introduced as an upgrade to SSG, to help solve the dynamic data problem and help static sites scale for large amounts of frequently changing data. iSSG allows you to update existing pages and add new ones by pre-rendering a subset of pages in the background even while fresh requests for pages are coming in.

### Sample Code

iSSG works on two fronts to incrementally introduce updates to an existing static site after it has been built.

1. Allows addition of new pages
2. Allows updates to existing pages also known as Incremental Static "Re"generation

#### Adding New pages

The lazy loading concept is used to include new pages on the website after the build. This means that the new page is generated immediately on the first request. While the generation takes place, a fallback page or a loading indicator can be shown to the user on the front-end.

```js
export async function getStaticPaths() {
  const products = await getProductsFromDatabase();

  const paths = products.map((product) => ({
     params: { id: product.id }
  }));

  // fallback: true means that the missing pages
  // will not 404, and instead can render a fallback.
  return { paths, fallback: true };
}

// params will contain the id for each generated page.
export async function getStaticProps({ params }) {
  return {
    props: {
      product: await getProductFromDatabase(params.id)
    }
  }
}

export default function Product({ product }) {
  const router = useRouter();

  if (router.isFallback) {
    return <div>Loading...</div>;
  }

  // Render product
}
```

Here, we have used `fallback: true`. Now if the page corresponding to a specific product is unavailable, we show a fallback version of the page, eg., a loading indicator as shown in the Product function above. Meanwhile, Next.js will generate the page in the background. Once it is generated, it will be cached and shown instead of the fallback page. The cached version of the page will now be shown to any subsequent visitors immediately upon request.

#### Update Existing pages

To re-render an existing page, a suitable timeout is defined for the page. This will ensure that the page is revalidated whenever the defined timeout period has elapsed. The user will continue to see the previous version of the page, till the page has finished revalidation. Thus, iSSG uses the [stale-while-revalidate](https://web.dev/stale-while-revalidate/) strategy where the user receives the cached or stale version while the revalidation takes place. The revalidation takes place completely in the background without the need for a full rebuild.

```js
// This function runs at build time on the build server
export async function getStaticProps() {
  return {
    props: {
      products: await getProductsFromDatabase(),
      revalidate: 60, // This will force the page to revalidate after 60 seconds
    }
  }
}

// The page component receives products prop from getStaticProps at build time
export default function Products({ products }) {
  return (
    <>
      <h1>Products</h1>
      <ul>
        {products.map((product) => (
          <li key={product.id}>{product.name}</li>
        ))}
      </ul>
    </>
  )
}
```

The code to revalidate the page after 60 seconds is included in the `getStaticProps()` function. When a request comes in the available static page is served first. Every one minute the static page gets refreshed in the background with new data. Once generated, the new version of the static file becomes available and will be served for any new requests in the subsequent minute. This feature is available in Next.js 9.5 and above.

### Advantages

iSSG provides all the advantages of SSG and then some more:

1. **Dynamic data**: Its ability to support dynamic data without a need to rebuild the site.
2. **Speed**: iSSG is at least as fast as SSG because data retrieval and rendering still takes place in the background. There is little processing required on the client or the server.
3. **Availability**: A fairly recent version of any page will always be available online for users to access. Even if the regeneration fails in the background, the old version remains unaltered.
4. **Consistent**: As the regeneration takes place on the server one page at a time, the load on the database and the backend is low and performance is consistent. As a result, there are no spikes in latency.
5. **Ease of Distribution**: Just like SSG sites, iSSG sites can also be distributed through a network of CDN's used to serve pre-rendered web pages.

## Source

- [patterns.dev/react/incremental-static-rendering](https://patterns.dev/react/incremental-static-rendering)

© patterns.dev · MIT · PatternsDev/skills

Similar skills

Everything for Frontend and UI →

From the same set44

react-server-components A skill that teaches React Server Components: which components belong on the server and where 'use client' goes. Useful in Next.js App Router. CX Codex +1 954installs progressive-hydration A skill that tells the agent how to split hydration of a server-rendered React app and defer JavaScript for non-critical sections. CX Codex +1 952installs react-selective-hydration Guides your coding agent in setting up selective hydration and streaming SSR in React 18+. It makes interactive parts responsive before the entire JavaScript bundle downloads. CX Codex +1 943installs server-side-rendering A skill that walks your agent through server-side rendering in React and tells you when SSR pays off and when static or client rendering is the better call. CX Codex +1 942installs static-rendering A skill that walks your agent through static generation: which pages can be pre-rendered to HTML at build time and how to do it in Next.js. Useful when content stays the same across requests. CX Codex +1 910installs streaming-ssr Teaches the agent to flush HTML in chunks with renderToPipeableStream and Suspense. Useful when a large page can't wait for the full tree before the first byte. CX Codex +1 883installs js-performance-patterns Runtime performance patterns for JavaScript hot paths. Helps agents optimize tight loops, frequent event callbacks, and DOM operations across JS frameworks. CX Codex +1 687installs view-transitions Teaches your agent the View Transitions API, so page and UI state changes animate without hand-written animation code. CX Codex +1 678installs

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor