Antwa CodeAntwaCode Blog

Catatan8 menit baca

Next.js 16.3: Update Besar dengan Instant Navigations & 90% Less Memory

Next.js 16.3 rilis dengan fitur besar: Instant Navigations, 90% less memory, 5.5x faster builds, dan TypeScript 7 support.

Baca dalam English

Next.js 16.3 resmi dirilis pada 3 Agustus 2026, dan ini bukan sekadar patch kecil. Tim Vercel menggambarkannya sebagai update terbesar sejak Next.js 16.0 diluncurkan pada November 2025 lalu. Ada peningkatan signifikan di hampir semua lini — dari penggunaan memori di environment development, kecepatan build, rendering server-side, sampai fitur navigasi baru yang bikin aplikasi Next.js terasa seperti SPA.

Kalau kamu pakai Next.js untuk project production, update ini wajib diperhatikan. Pasalnya, semua perbaikan berikut berlaku untuk semua aplikasi Next.js yang upgrade — tanpa perlu ubah kode sama sekali.

Yuk, kita bedah semua yang baru di Next.js 16.3.

Kenapa Update Ini Penting?

Sejak peluncuran Server Components dan App Router, Next.js memang menghadirkan banyak manfaat — kurang JavaScript yang dikirim ke client, rendering yang efisien, dan caching yang powerful. Tapi ada masalah yang diakui sendiri oleh tim Vercel:

  • Navigasi terasa lambat dibanding SPA. Karena setiap navigasi harus fetch data dari server, user harus menunggu lebih lama dibanding aplikasi client-side.
  • Caching model membingungkan. Sebelumnya caching bersifat implisit — banyak developer yang tidak paham kapan data di-cache dan kapan tidak.
  • Prefetching terlalu agresif. Setiap link di-prefetch secara penuh, yang memakan bandwidth dan resources.
  • Dev server makan RAM banyak. Untuk project besar, next dev bisa makan puluhan GB memori.

Next.js 16.3 menyelesaikan semua masalah tersebut — dan masih banyak lagi. Ini bukan cuma perbaikan incremental, tapi perubahan arsitektural yang akan jadi fondasi untuk major version berikutnya.

Fitur Utama Next.js 16.3

1. 90% Less Memory di Development

Ini mungkin headline paling menarik untuk developer yang sering mengeluh soal next dev yang lambat dan makan RAM berlebihan.

Turbopack di Next.js 16.3 sekarang menggunakan disk caching untuk dev (pertama kali diperkenalkan di 16.1) dan memory eviction yang diaktifkan secara default. Hasilnya? Penggunaan memori turun drastis.

Angka dari benchmark yang dipublikasikan Vercel:

  • vercel.com (dashboard): Dari 21.5 GB → 2 GB — pengurangan ~90%!
  • nextjs.org: Dari 4.600 MB → 840 MB — pengurangan ~82%

Bayangkan, project yang biasanya makan 21 GB RAM saat next dev sekarang cuma butuh 2 GB. Ini game-changer banget, terutama untuk developer yang kerja di laptop dengan RAM terbatas atau menjalankan banyak service sekaligus.

Yang keren, fitur ini bekerja di background — kamu tidak perlu konfigurasi apapun. Cukup upgrade ke 16.3 dan manfaatkan langsung.

Sebagai konteks, ini merupakan evolusi dari fitur disk caching yang pertama kali diperkenalkan di Next.js 16.1. Kalau dulu fitur ini masih dalam tahap beta dan tidak diaktifkan secara default, sekarang sudah stabil dan siap dipakai di production. Perubahan dari "experimental" ke "default" ini menunjukkan kepercayaan tim Vercel terhadap keandalannya.

2. 5.5x Build Lebih Cepat

Fitur disk caching yang sama kini juga bekerja dengan next build dan diaktifkan secara default. Artinya, build berulang di CI/CD akan jauh lebih cepat karena artifact yang tidak berubah bisa dibaca dari cache.

Benchmark dari proyek Vercel:

  • nextjs.org: Cold build 21 detik → Cached 9.2 detik (~2.3x lebih cepat)
  • vercel.com/geist: Cold build 30 detik → Cached 5.5 detik (~5.5x lebih cepat)
  • vercel.com (logged out): Cold build 66 detik → Cached 46 detik (~1.4x lebih cepat)

Untuk tim yang sering push ke CI, penghematan waktu build ini sangat signifikan. Kalau proyekmu cukup besar, kamu bisa menghemat puluhan detik per build — yang dikalikan puluhan kali sehari jadi hitungan menit.

3. TypeScript 7 — Type Checking 10x Lebih Cepat

TypeScript 7 dirilis sebulan sebelumnya sebagai port native TypeScript yang jauh lebih cepat. Next.js 16.3 sudah mendukungnya sepenuhnya di next build.

Untuk mulai menggunakannya, cukup tambahkan dependency:

pnpm add -D typescript@^7

TypeScript 7 adalah port native (bukan lagi berjalan di Node.js) sehingga type checking bisa mencapai 10x kecepatan dibanding versi sebelumnya. Ini berarti kamu mendapat manfaat performance TypeScript modern tanpa harus mengubah workflow.

Perubahan ini terutama terasa untuk project dengan codebase besar yang memiliki ratusan file TypeScript. Kalau sebelumnya next build harus menunggu lama hanya untuk type checking, sekarang proses itu bisa selesai dalam hitungan detik saja.

4. 22% SSR Lebih Cepat

Next.js 16.3 mengganti web streams dengan native Node.js streams di layer rendering App Router. Hasilnya? Overhead konversi antara web streams dan Node.js streams saat SSR dihilangkan.

Di benchmark yang dijalankan Vercel, aplikasi bisa menangani 22% lebih banyak request di bawah beban — tanpa perubahan kode aplikasi. Ini perubahan yang pure performance improvement dan berdampak langsung untuk production apps.

Penggantian web streams dengan native Node.js streams ini juga membuka potensi optimasi lebih lanjut di masa depan, karena Node.js streams memiliki dukungan yang lebih matang dan lebih efisien dalam hal penggunaan memori dan throughput.

5. Versioned Docs untuk AI Agents

Fitur yang menarik di era AI coding ini. Sekarang, AI coding agents seperti Cursor, Copilot, atau Claude akan otomatis membaca dokumentasi yang sesuai dengan versi Next.js di project kamu.

Saat kamu menjalankan next dev, Next.js secara otomatis menulis dan memelihara blok AGENTS.md yang menunjuk ke dokumentasi lokal di node_modules. Artinya, AI agent akan selalu mendapat informasi yang akurat dan up-to-date tentang versi Next.js yang kamu pakai.

Vercel juga mengumumkan pensiunnya Skills mereka yang sebelumnya dibuat untuk membawa dokumentasi terkini ke aplikasi. Dengan adanya fitur ini, hal tersebut tidak lagi diperlukan.

6. Prefetch Requests Lebih Sedikit

Sebelumnya, setiap <Link> di-prefetch secara terpisah, yang bisa menghasilkan banyak request kecil. Di 16.3, prefetches yang di bawah ukuran payload tertentu akan otomatis digabung (bundled) menjadi satu request yang lebih efisien.

Prefetches untuk shared segments yang lebih besar tetap dipisah agar bisa digunakan ulang lintas route. Hasilnya? Lebih sedikit network request dan performa navigasi yang lebih baik.

7. Caching Static Assets Lebih Baik

Aset statis yang immutable sekarang bisa digunakan ulang lintas deployment. Karena sifatnya yang immutable, mereka tidak terpengaruh oleh isu-cache skew. Ini artinya user yang sudah meng-visit halamanmu tidak perlu mengunduh ulang aset yang sama saat kamu deploy versi baru.

8. Custom Error Boundaries

Sebelumnya, React error boundaries di Next.js punya beberapa keterbatasan — mereka mengganggu notFound() dan redirect(), hanya bisa mereset state di client side, dan tidak punya cara untuk retry Server Components yang gagal.

Di 16.3, kamu bisa menggunakan catchError dari next/error untuk membuat error boundary yang lebih powerful:

'use client';
import { catchError, type ErrorInfo } from 'next/error';
 
function ErrorFallback(props: { title: string }, { error, retry }: ErrorInfo) {
  return (
    <div>
      <h2>{props.title}</h2>
      <p>{error.message}</p>
      <button onClick={() => retry()}>Try again</button>
    </div>
  );
}
 
export default catchError(ErrorFallback);

Yang menarik, fungsi retry() bisa digunakan untuk me-fetch ulang anak-anak boundary, termasuk me-render ulang Server Components. Ini memberikan kontrol yang jauh lebih baik dalam menangani error di production.

9. Built-in Glob Imports

Turbopack sekarang mendukung import.meta.glob — API yang kompatibel dengan Vite untuk memuat multiple modules dari file system. Fitur ini membawa hot-module reloading dan benefit lainnya ke Server Components yang membaca file lokal.

Contoh penggunaan untuk blog:

import matter from 'gray-matter';
 
export default function Page() {
  const posts = import.meta.glob('./posts/*.md', { eager: true });
  
  return (
    <ul>
      {Object.entries(posts).map(([path, mod]) => {
        const { data } = matter(mod.default);
        return <li key={path}>{data.title}</li>;
      })}
    </ul>
  );
}

Sangat berguna untuk project yang banyak menggunakan markdown files, MDX, atau file-file statis lainnya. API ini juga kompatibel dengan pola yang sudah familiar bagi developer Vite, sehingga transisi dari Vite ke Next.js (atau sebaliknya) menjadi lebih mulus.

10. Root Params

Sebelumnya, kamu harus me-pass params ke bawah sebagai props dari route page. Ini menyebabkan prop-drilling yang berlebihan, terutama untuk params seperti [lang] yang digunakan di banyak tempat.

Next.js 16.3 memperkenalkan root params — cara mudah mengakses dynamic route params dari Server Component manapun tanpa prop-drilling:

// app/[lang]/posts/[slug]/page.tsx
import { lang } from 'next/root-params';
 
export default async function PostPage(
  props: PageProps<'/[lang]/posts/[slug]'>,
) {
  const { slug } = await props.params;
  const language = await lang();
 
  return (
    <article>
      <p>Language: {language}</p>
      <p>Post: {slug}</p>
    </article>
  );
}

Sangat ergonomis untuk fitur internationalization atau proyek dengan struktur route yang kompleks. Root params juga bekerja di dalam scope use cache.

Instant Navigations — Responsivitas SPA di Next.js

Ini adalah suite fitur opt-in paling menarik di 16.3. Tujuannya: membawa responsivitas SPA ke Next.js tanpa mengorbankan manfaat model server-driven.

Instant Insights

Devtools baru yang otomatis mendeteksi navigasi yang lambat. Jika ada halaman yang tidak bisa di-load secara instan saat user mengklik link, panel Instant Insights akan menampilkannya — lengkap dengan panduan untuk memperbaikinya.

Partial Prefetching

Sebelumnya, prefetching Next.js bersifat biner: atau loading.tsx statis, atau prefetch penuh. Sekarang, Partial Prefetching memungkinkan Next.js mengekstrak reusable loading shells dari route manapun.

Kamu bisa mengontrol seberapa banyak konten dari target page yang di-prefetch. <Link prefetch={true}> sekarang bisa memuat sebagian atau seluruh konten sesuai kebutuhan.

ISR yang Lebih Baik

URL yang tidak di-prerender saat build time kini bisa menampilkan instant loading shell kepada visitor pertama, lalu upgrade ke halaman yang sudah di-prerender di background. Visitor berikutnya akan mendapat konten final dari cache.

Ini menyelesaikan tradeoff lama antara menampilkan loading shell tanpa pernah di-prerender, atau memblokir visitor pertama.

Devtools baru yang memungkinkan kamu mem-pause halaman dan navigasi di shell loading. Kamu bisa melihat persis apa yang user lihat selama loading sequence — sangat berguna untuk debugging UX.

Playwright Test Helper

Helper baru dari @next/playwright untuk menulis regression test yang memastikan refactor tidak membuat navigasi menjadi lambat:

import { expect, test } from '@playwright/test';
import { instant } from '@next/playwright';
 
test('product title is available immediately', async ({ page }) => {
  await page.goto('/products/shoes');
  
  await instant(page, async () => {
    await page.click('a[href="/products/hats"]');
    await expect(page.locator('h1')).toContainText('Baseball Cap');
    await expect(page.getByText('Checking inventory...')).toBeVisible();
  });
  
  await expect(page.getByText('12 in stock')).toBeVisible();
});

Test ini akan gagal jika ada perubahan di UI instant — bagus untuk menjaga performa navigasi tetap stabil.

Mengaktifkan Instant Navigations

Untuk mulai menggunakan Instant Navigations, aktifkan dua flag di next.config.ts:

import type { NextConfig } from 'next';
 
const nextConfig: NextConfig = {
  cacheComponents: true,
  partialPrefetching: true,
};
 
export default nextConfig;

Perilaku di balik Instant Navigations akan menjadi default di major version berikutnya. Jadi sekarang waktu yang tepat untuk mencoba dan memberikan feedback.

Fitur Experimental

Rust-based React Compiler

React Compiler yang selama ini berjalan via Babel di Node.js kini punya port Rust yang berjalan langsung di Turbopack. Penghematan signifikan karena tidak perlu generate dan re-parse kode.

Benchmark di v0 (aplikasi besar Vercel):

  • Cold build: 34% lebih cepat dari Babel
  • Warm build: 46% lebih cepat dari Babel

Cara mengaktifkan:

import type { NextConfig } from 'next';
 
const nextConfig: NextConfig = {
  reactCompiler: true,
  experimental: {
    turbopackRustReactCompiler: true,
  },
};
 
export default nextConfig;

Network Resilience

Dengan experimental.useOffline, Next.js akan menahan navigasi, data fetch, atau Server Action dalam status pending saat network drop — dan me-retry otomatis saat koneksi kembali. Tidak lagi langsung throw error.

import type { NextConfig } from 'next';
 
const nextConfig: NextConfig = {
  experimental: {
    useOffline: true,
  },
};
 
export default nextConfig;

Tersedia juga hook useOffline dari next/offline untuk menampilkan banner atau indikator bahwa user sedang offline.

'use client';
import { useOffline } from 'next/offline';
 
export function OfflineBanner() {
  const isOffline = useOffline();
  
  if (!isOffline) return null;
  
  return <div>You're offline. Retrying when you reconnect.</div>;
}

Cara Upgrade ke Next.js 16.3

Upgrade seharusnya straightforward. Vercel menyediakan beberapa opsi:

npx @next/codemod@canary upgrade latest

Codemod akan otomatis menangani sebagian besar perubahan yang diperlukan, termasuk breaking changes.

Opsi 2: Manual Upgrade

npm install next@latest react@latest react-dom@latest

Opsi 3: Mulai dari Awal

npx create-next-app@latest

Things to Watch Out

  • Breaking changes di 16.3 meliputi: async params, perubahan default next/image, dan lainnya. Cek upgrade guide untuk detail lengkap.
  • proxy.ts menggantikan middleware.ts — rename file dan ubah nama exported function menjadi proxy. Logic tetap sama.
  • experimental.ppr flag sudah dihapus — gunakan cacheComponents: true sebagai penggantinya.
  • Jika codemod tidak bisa memigrasi sepenuhnya, baca upgrade guide secara manual.

Tips untuk Maximalkan Next.js 16.3

  1. Mulai dengan Instant Navigations. Aktifkan cacheComponents dan partialPrefetching untuk pengalaman terbaik. Jangan lupa cek Instant Insights di DevTools.

  2. Gunakan TypeScript 7. Cukup tambahkan typescript@^7 di dev dependencies untuk type checking yang 10x lebih cepat tanpa effort tambahan.

  3. Manfaatkan disk cache di CI/CD. Build cache sudah aktif by default — pastikan CI/CD pipeline kamu menyimpan dan memulihkan cache Turbopack untuk penghematan waktu maksimal.

  4. Coba Rust React Compiler. Kalau kamu sudah pakai React Compiler, switch ke versi Rust untuk penghematan 34-46% di cold/warm build.

  5. Tulis regression tests untuk navigasi. Pakai instant() test helper dari @next/playwright untuk memastikan refactor tidak membuat navigasi lambat.

  6. Gunakan root params untuk i18n. Kalau project kamu pakai dynamic [lang] route, gunakan next/root-params untuk mengaksesnya dari manapun tanpa prop-drilling.

  7. Gunakan catchError untuk error handling. Alih-alih error.tsx default, buka custom error boundary yang bisa retry Server Components.

  8. Coba Network Resilience. Untuk app yang target penggunanya sering di mobile atau jaringan tidak stabil, experimental.useOffline sangat membantu.

Kesimpulan

Next.js 16.3 bukan sekadar update — ini adalah pernyataan arsitektural tentang masa depan framework. Dengan memori yang 90% lebih hemat, build yang 5.5x lebih cepat, dan Instant Navigations yang membawa responsivitas SPA ke model server-driven, Next.js semakin mendekati visinya sebagai full-stack framework yang comprehensive.

Yang paling menggembirakan adalah bagaimana tim Vercel mendengarkan feedback komunitas dan mengatasi masalah-masalah yang sudah lama dikeluhkan — dev server yang makan RAM, navigasi yang lambat, caching yang membingungkan, dan prefetching yang boros.

Kalau kamu belum siap untuk mengaktifkan Instant Navigations sekarang, tidak masalah. Semua perbaikan performance (memori, build speed, SSR) sudah aktif by default tanpa perlu ubah kode. Tapi kalau kamu ingin berada di garis depan, sekarang waktu yang tepat untuk mencoba dan memberikan feedback ke tim Next.js.

Upgrade sekarang dengan npm install next@latest dan rasakan bedanya sendiri. 🚀


Sumber: Next.js 16.3 Official Blog Post

Tulisan lain