Aller au contenu
Lantorian

Next.js8 min de lecture

Nouveautés Next.js 16

Next.js 16 est sorti en octobre 2025 et la 16.3 en août 2026. Turbopack par défaut, cache explicite, proxy.ts, navigations instantanées : ce qu'il faut savoir pour lire du code récent et éviter les tutoriels périmés.

Quatre versions en un an

Clique sur une version pour voir ce qu'elle apporte.

  1. 16.021 octobre 2025
  2. 16.118 décembre 2025
  3. 16.218 mars 2026
  4. 16.33 août 2026
  • Navigations instantanées

    Partial Prefetching, Instant Insights et Navigation Inspector dans les DevTools.

  • 90 % de mémoire en moins

    next dev économe, et cache disque aussi pour next build.

  • next/root-params

    Lire [locale] depuis n'importe quel Server Component.

  • catchError et retry

    Frontières d'erreur locales capables de recharger les données serveur.

  • TypeScript 7

    Vérification des types jusqu'à 10 fois plus rapide dans next build.

Nos projets démarrent en 16.3. Les versions mineures ne cassent rien : mets à jour régulièrement.

Les changements qui piègent

Beaucoup d'exemples sur Internet datent de Next.js 13 à 15. Si un code ne compile pas, vérifie d'abord ces points. Bascule pour comparer.

middleware.ts devient proxy.ts

proxy.ts
// proxy.ts (Next.js 16): same logic, Node.js runtime
import { NextResponse, type NextRequest } from 'next/server';

export default function proxy(request: NextRequest) {
  return NextResponse.redirect(new URL('/fr', request.url));
}

params et cookies sont asynchrones

page.tsx
// Next.js 16: params, searchParams, cookies(), headers() are async
export default async function Page({ params }: PageProps<'/[locale]/invoices/[id]'>) {
  const { id } = await params;
  const theme = (await cookies()).get('theme');
}

revalidateTag prend un profil

actions.ts
revalidateTag('invoices', 'max'); // stale-while-revalidate
updateTag('invoices');            // Server Actions: read your own writes
  • Node.js 20.9 minimum et TypeScript 5.1 minimum.
  • next lint est supprimé : on lance eslint directement, et next build ne lint plus.
  • Les routes parallèles exigent un fichier default.tsx pour chaque slot.
  • next/image : les images locales avec query string demandent images.localPatterns, et images.domains est déprécié au profit de remotePatterns.

Frontières d'erreur locales

Depuis la 16.3, catchError crée une frontière d'erreur autour d'un seul bloc. Son retry() recharge aussi les Server Components, et elle laisse passer notFound() et redirect().

src/features/invoices/components/invoices-error.tsx
'use client';

import { catchError, type ErrorInfo } from 'next/error';
import { useTranslations } from 'next-intl';

function InvoicesError(_props: object, { retry }: ErrorInfo) {
  const t = useTranslations('common.errors');
  return (
    <div role="alert">
      <p>{t('loadFailed')}</p>
      <button type="button" onClick={() => retry()}>{t('retry')}</button>
    </div>
  );
}

export default catchError(InvoicesError);

Outils du quotidien

Pour déboguer côté serveur, analyser le poids du bundle et mettre à jour un projet.

terminal
next dev --inspect            # attach the Node.js debugger (16.1)
next start --inspect          # same in production (16.2)
next experimental-analyze     # bundle analyzer for Turbopack (16.1)
terminal
npx next upgrade                              # Next.js 16.1+
npx @next/codemod@canary upgrade latest       # from 15: async APIs, proxy, lint...
npx @next/codemod@canary next-lint-to-eslint-cli .  # next lint was removed

Sources : blog officiel Next.js (articles 16, 16.1, 16.2 et 16.3), vérifiés en septembre 2026.