Back to list
first-fluke

cache-components

by first-fluke

Production-ready fullstack monorepo template with Next.js, FastAPI, Flutter, Terraform, and mise

141🍴 21📅 Jan 23, 2026

SKILL.md


name: cache-components description: Expert guidance for Next.js Cache Components and Partial Prerendering (PPR). PROACTIVE ACTIVATION when cacheComponents config is detected.

Expert guidance for Next.js Cache Components and Partial Prerendering (PPR).

PROACTIVE ACTIVATION: Use this skill automatically when working in Next.js projects that have cacheComponents: true in their next.config.ts or next.config.js.

DETECTION: At the start of a session in a Next.js project, check for cacheComponents: true in next.config. If enabled, this skill's patterns should guide all component authoring, data fetching, and caching decisions.

USE CASES:

  • Implementing 'use cache' directive
  • Configuring cache lifetimes with cacheLife()
  • Tagging cached data with cacheTag()
  • Invalidating caches with updateTag() / revalidateTag()
  • Optimizing static vs dynamic content boundaries
  • Debugging cache issues
  • Reviewing Cache Component implementations

Project Detection

When starting work in a Next.js project, check if Cache Components are enabled:

# Check next.config.ts or next.config.js for cacheComponents
grep -r "cacheComponents" next.config.* 2>/dev/null

If cacheComponents: true is found, apply this skill's patterns proactively when:

  • Writing React Server Components
  • Implementing data fetching
  • Creating Server Actions with mutations
  • Optimizing page performance
  • Reviewing existing component code

Core Concept: The Caching Decision Tree

When writing a React Server Component, ask:

  1. Does it depend on request context? (cookies, headers, searchParams)
  2. Can this be cached? (Is the output the same for all users?)
    • YES -> 'use cache' + cacheTag() + cacheLife()
    • NO -> Wrap in <Suspense> (dynamic streaming)

Philosophy: Code Over Configuration

Cache Components represents a shift from segment-based configuration to compositional code:

  • Before (Deprecated): export const revalidate = 3600

  • After: cacheLife('hours') inside 'use cache'

  • Before (Deprecated): export const dynamic = 'force-static'

  • After: Use 'use cache' and Suspense boundaries

Quick Start

1. Enable Configuration

// next.config.ts
import type { NextConfig } from "next";

const nextConfig: NextConfig = {
  experimental: {
    ppr: true,
    dynamicIO: true, // often correlated features
  },
  // Ensure basic cache components flag if required by your version
};

export default nextConfig;

2. Basic Usage

import { cacheLife } from 'next/cache';

async function CachedPosts() {
  'use cache'
  cacheLife('hours'); // Cache for hours

  const posts = await db.posts.findMany();
  return <PostList posts={posts} />;
}

Core APIs

'use cache'

Marks a function, component, or file as cacheable. The return value is cached and shared across requests.

cacheLife(profile)

Control cache duration using semantic profiles:

  • 'seconds': Short-lived
  • 'minutes': Medium-lived
  • 'hours': Long-lived
  • 'days': Very long-lived
  • 'weeks': Static-like content
  • 'max': Permanent cache

cacheTag(...tags)

Tag cached data for on-demand invalidation.

import { cacheTag } from 'next/cache';

async function getUserProfile(id: string) {
  'use cache'
  cacheTag('user-profile', `user-${id}`);
  // ... fetch logic
}

revalidateTag(tag) / expireTag(tag)

Invalidate cached data in background or immediately.

'use server'
import { expireTag } from 'next/cache';

export async function updateUser(id: string, data: any) {
  await db.user.update({ where: { id }, data });
  expireTag(`user-${id}`); // Invalidate specific cache
}

Score

Total Score

75/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

+5
最近の活動

1ヶ月以内に更新

+10
フォーク

10回以上フォークされている

+5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

+5

Reviews

💬

Reviews coming soon