Next.js 16 trae varios cambios de los que rompen build si migras a ciegas. Ninguno es difícil de resolver, pero conviene conocerlos antes de lanzar next dev y encontrarte con una pantalla roja. Este es el checklist que sigo al migrar un proyecto.
Antes de tocar nada a mano:
npx @next/codemod@latest upgrade latest
Actualiza next, react y react-dom a las versiones compatibles, y aplica automáticamente varias de las transformaciones que necesitas (incluyendo el rename de middleware.ts a proxy.ts). No lo hace todo, pero elimina la mayoría del trabajo mecánico.
Next.js 16 requiere Node.js 20.9 o superior y React 19. Si tu proyecto sigue en React 18, el codemod lo actualiza, pero revisa después las librerías de tu package.json que dependan de una versión concreta de React (algunas UI libraries tardan en dar soporte).
params y searchParams ya son 100% asyncNext.js 15 los volvió asíncronos pero mantuvo un modo de compatibilidad que permitía acceso síncrono con warning. Next.js 16 elimina ese modo: acceder a params.slug directamente sin await ahora es un error, no un warning.
// ❌ Ya no funciona
export default function Page({ params }: { params: { slug: string } }) {
return <h1>{params.slug}</h1>;
}
// ✅ Next.js 16
export default async function Page({
params,
}: {
params: Promise<{ slug: string }>;
}) {
const { slug } = await params;
return <h1>{slug}</h1>;
}
Lo mismo aplica a searchParams en páginas y a cookies() / headers() en Server Components y Route Handlers.
next dev y next build usan Turbopack sin necesidad de flags. Si tu proyecto dependía de un loader de Webpack muy específico (algunos plugins de SVG, workers, o configuración custom en next.config.js bajo webpack: () => {}), revisa que tenga equivalente en Turbopack o vuelve a Webpack explícitamente con next dev --webpack mientras migras esa pieza.
middleware.ts → proxy.tsCubierto en detalle en otro post, pero el resumen: renombra el archivo y la función exportada de middleware a proxy. El codemod del paso 1 ya se encarga si tu middleware es estándar.
next.config.jsVarias opciones marcadas como experimentales en Next.js 15 (experimental.ppr, experimental.after, algunas relacionadas con imágenes) cambiaron de nombre o se estabilizaron fuera de experimental. next build avisa con un mensaje claro de qué clave está obsoleta y cuál es su reemplazo.
| Paso | Comando / acción |
|---|---|
| Actualizar dependencias | npx @next/codemod@latest upgrade latest |
| Verificar Node | node -v ≥ 20.9 |
| Buscar accesos síncronos a params | Grep por params. sin await |
| Probar build con Turbopack | next build (por defecto) |
| Revisar middleware | Renombrar a proxy.ts |
Limpiar next.config.js | Revisar warnings de opciones obsoletas |
La mayoría de proyectos migran en menos de una hora si siguen este orden: codemod primero, luego build, y arreglar lo que el propio compilador señale. Los errores de Next.js 16 son bastante específicos sobre qué cambió y cómo arreglarlo, así que la migración es más un ejercicio de paciencia que de investigación.
React 19.2 trae el componente <ViewTransition> y Next.js 16 lo conecta con las navegaciones del App Router: transiciones animadas entre páginas sin librerías externas ni CSS manual.
Next.js 16 renombra middleware.ts a proxy.ts: mismo runtime edge, pero un nombre que refleja lo que realmente hace — interceptar y reescribir peticiones antes de llegar a tus rutas.