skillby putto11262002
Next.js 16 Skill
**Use this skill when working with Next.js 16-specific features, breaking changes, and modern patterns.**
Installs: 0
Used in: 1 repos
Updated: 2d ago
$
npx ai-builder add skill putto11262002/nextjs-16Installs to .claude/skills/nextjs-16/
# Next.js 16 Skill
**Use this skill when working with Next.js 16-specific features, breaking changes, and modern patterns.**
This skill captures Next.js 16-specific conventions and critical breaking changes. Assumes familiarity with Next.js fundamentals (App Router, Server Components, etc.).
---
## Documentation Lookup
**When you need Next.js documentation:**
1. Use the `mcp__context7__get-library-docs` tool with library ID: `/vercel/next.js`
2. Start with **2000 tokens**, increase if information not found
3. Specify a focused `topic` parameter (e.g., "caching", "routing", "server actions")
```typescript
// Example: Look up Next.js caching documentation
mcp__context7__get-library-docs({
context7CompatibleLibraryID: "/vercel/next.js",
tokens: 2000,
topic: "caching"
})
```
---
## Breaking Changes (CRITICAL)
### 1. Async Request APIs
**All request-scoped APIs are now async and require `await`:**
```typescript
// ❌ OLD (Next.js 15 and earlier)
export default function Page({ params, searchParams }) {
const id = params.id;
const query = searchParams.query;
}
// ✅ NEW (Next.js 16)
export default async function Page({ params, searchParams }) {
const { id } = await params;
const { query } = await searchParams;
}
```
**Applies to:**
- `params` (dynamic route segments)
- `searchParams` (URL query parameters)
- `cookies()` from `next/headers`
- `headers()` from `next/headers`
- `draftMode()` from `next/headers`
```typescript
// ✅ Correct usage
import { cookies, headers, draftMode } from 'next/headers';
export async function MyServerComponent() {
const cookieStore = await cookies();
const headersList = await headers();
const draft = await draftMode();
}
```
### 2. Parallel Routes: Explicit `default.js` Required
All parallel route slots MUST have a `default.js` file:
```
app/
├── @modal/
│ ├── default.js ← Required!
│ └── login/page.js
└── page.js
```
```typescript
// app/@modal/default.js
export default function Default() {
return null;
}
```
### 3. `proxy.ts` Replaces `middleware.ts`
The `middleware.ts` filename is deprecated. Use `proxy.ts`:
```typescript
// ✅ proxy.ts (new)
export function proxy(request: NextRequest) {
// Middleware logic
}
// ❌ middleware.ts (deprecated)
export function middleware(request: NextRequest) {
// Old approach
}
```
### 4. `revalidateTag()` Requires `cacheLife`
```typescript
// ❌ OLD
revalidateTag('posts');
// ✅ NEW
revalidateTag('posts', {
cacheLife: 'default' // or 'aggressive', 'minimal'
});
```
### 5. Images Configuration
- `minimumCacheTTL` default: 60s → **4 hours**
- `images.domains` deprecated → use `images.remotePatterns`
```typescript
// next.config.ts
export default {
images: {
remotePatterns: [
{
protocol: 'https',
hostname: 'example.com',
pathname: '/images/**',
},
],
},
};
```
---
## New Features
### Cache Components (`"use cache"`)
Opt-in caching for pages, components, and functions:
```typescript
"use cache";
export async function CachedComponent() {
const data = await fetch('/api/data');
return <div>{data}</div>;
}
```
**Note:** Detailed caching patterns are documented separately.
---
## React 19 Patterns
Next.js 16 ships with React 19.2. Key features:
### View Transitions API
```typescript
"use client";
import { useTransition } from 'react';
export function NavigationLink({ href, children }) {
const [isPending, startTransition] = useTransition();
const navigate = () => {
startTransition(() => {
// Trigger navigation with view transition
document.startViewTransition(() => {
// Navigation logic
});
});
};
return <button onClick={navigate}>{children}</button>;
}
```
### `useEffectEvent()` Hook
Separates event handlers from reactive dependencies:
```typescript
"use client";
import { useEffectEvent } from 'react';
function Component({ url, onChange }) {
const onUpdate = useEffectEvent(onChange);
useEffect(() => {
// onUpdate won't trigger re-runs when onChange changes
fetch(url).then(data => onUpdate(data));
}, [url]); // Only re-run when url changes
}
```
### `<Activity>` Component
For loading states and suspense boundaries:
```typescript
import { Activity } from 'react';
export default function Page() {
return (
<Activity fallback={<Loading />}>
<AsyncContent />
</Activity>
);
}
```
---
## Removed Features
- AMP support
- `next lint` command (use `eslint` directly)
- `serverRuntimeConfig` / `publicRuntimeConfig`
- `next/legacy/image`
- `experimental.turbopack` config (moved to top-level)
---
## Requirements
- **Node.js:** 20.9+
- **TypeScript:** 5.1+
- **React:** 19.x
---
## Resources
- [Next.js 16 Blog](https://nextjs.org/blog/next-16) - Full breaking changes and migration details
- [Next.js Docs via Context7](/) - Use library ID: `/vercel/next.js`
---
## Project-Specific Conventions
<!-- Document your project's Next.js patterns here -->
Quick Install
$
npx ai-builder add skill putto11262002/nextjs-16Details
- Type
- skill
- Author
- putto11262002
- Slug
- putto11262002/nextjs-16
- Created
- 6d ago