Next.js 16 App Router adalah cara paling modern untuk membangun aplikasi web di ekosistem Next.js. Kalau kamu ingin membuat aplikasi yang cepat, rapi, mudah dirawat, dan siap scale, memahami App Router bukan lagi sekadar pilihan—ini fondasi utama pengembangan Next.js di 2026. Dokumentasi resmi Next.js menekankan bahwa App Router adalah pendekatan berbasis file-system untuk routing, layout, dan navigasi, dengan dukungan fitur modern seperti Server Components, Suspense, dan Server Functions. (Next JS)
Apa itu App Router
App Router adalah sistem routing berbasis folder di dalam direktori app/. Setiap folder dan file punya peran khusus: page.tsx untuk halaman, layout.tsx untuk kerangka UI, loading.tsx untuk state loading, dan error.tsx untuk penanganan error per segmen. Artinya, struktur folder bukan cuma tempat menyimpan file, tetapi juga menentukan perilaku aplikasi. Next JS)
Di Next.js 16, pendekatan ini terasa sangat natural untuk aplikasi modern karena tiap route bisa punya layout sendiri, data fetching sendiri, dan boundary sendiri tanpa harus mencampur semuanya ke satu file besar. Inilah yang membuat App Router lebih cocok untuk aplikasi skala kecil maupun besar dibanding pola routing lama. (Next JS)
Mental model yang benar
Cara terbaik memahami App Router adalah menganggap bahwa komponen di dalamnya bersifat server-first. Secara default, komponen dirender di server, dan kamu hanya menandai komponen tertentu dengan use client jika memang butuh interaktivitas seperti state, event handler, atau akses API browser. Banyak panduan modern untuk Next.js 16 juga menekankan bahwa pendekatan ini membantu mengurangi bundle JavaScript di client. (reformat)
Contoh mental model yang sederhana:
- Server Components untuk ambil data, render konten, dan menjaga performa.
- Client Components untuk tombol interaktif, form kompleks, dropdown, modal, dan kebutuhan browser.
- Layout untuk UI yang harus tetap konsisten seperti navbar dan sidebar.
- Loading dan error boundary untuk pengalaman pengguna yang halus. (reformat)
Kalau kamu terbiasa dengan framework SPA murni, App Router mungkin terasa berbeda di awal. Tapi setelah paham alurnya, justru lebih masuk akal karena UI, data, dan routing saling terhubung dengan rapi.
Struktur folder yang ideal
Struktur App Router yang baik biasanya dimulai dari pemisahan yang jelas antara route, komponen bersama, dan logika bisnis. Dokumentasi dan praktik terbaik modern menyarankan folder seperti app/ untuk route, components/ untuk UI bersama, dan lib/ untuk data access atau business logic. Route group seperti (marketing) atau (app) juga sangat berguna karena bisa mengelompokkan halaman tanpa mengubah URL. (Next JS)
Contoh struktur yang sehat:app/(marketing)/page.tsxabout/page.tsx(dashboard)/layout.tsxdashboard/page.tsxapi/users/route.tscomponents/lib/
Pola ini penting karena membuat proyek tetap mudah dibaca saat jumlah halaman bertambah. Kalau semua file ditaruh di satu tempat, proyek cepat berubah jadi labirin. Dengan route group dan colocated components, tiap fitur bisa berdiri lebih jelas tanpa mengorbankan kebersihan URL. (dharmsy)
Layout, page, dan nested routing
Salah satu kekuatan paling besar App Router adalah nested layout. Kamu bisa membuat layout di level root, lalu menambahkan layout lain di subfolder untuk bagian aplikasi tertentu. Layout ini akan tetap persisten saat navigasi, sehingga navbar atau sidebar tidak perlu dirender ulang dari nol setiap kali pindah halaman. (Next JS)
Misalnya:
app/layout.tsxuntuk struktur global.app/(dashboard)/layout.tsxuntuk layout khusus dashboard.app/(dashboard)/settings/page.tsxuntuk halaman settings.
Dengan pendekatan ini, aplikasi terasa lebih cepat dan UX jadi lebih stabil. Selain itu, nested routing memudahkan kamu membangun area aplikasi yang berbeda, seperti public site, dashboard admin, dan area user login, tanpa mencampur semuanya dalam satu struktur yang berantakan. (dharmsy)
Data fetching yang lebih elegan
Salah satu perubahan besar di App Router adalah cara mengambil data. Di pendekatan server-first, data sering diambil langsung di Server Component tanpa perlu pola lama seperti getServerSideProps. Ini membuat kode lebih singkat, lebih dekat ke UI yang menggunakannya, dan lebih mudah dipahami. (reformat)
Contoh sederhana:
async function UsersPage() {const res = await fetch("https://api.example.com/users");const users = await res.json();return (<ul>{users.map((user: { id: string; name: string }) => (<li key={user.id}>{user.name}</li>))}</ul>);}export default UsersPage;
Kelebihannya bukan cuma sintaks yang ringkas, tetapi juga kemampuan Next.js mengelola caching, streaming, dan revalidation dengan lebih fleksibel. Di Next.js 16, dokumentasi dan panduan terbaru juga menyoroti model caching yang makin matang, termasuk arah pengembangan seperti cacheComponents. (crea)
Loading, streaming, dan Suspense
Salah satu fitur yang paling terasa manfaatnya di App Router adalah streaming. Alih-alih menunggu semua data selesai baru menampilkan halaman, Next.js bisa menampilkan bagian yang sudah siap lebih dulu dan sisanya menyusul. Ini membuat aplikasi terasa jauh lebih responsif, terutama untuk data yang lambat atau halaman yang kompleks. (Next JS)
File loading.tsx sangat penting di sini. Saat sebuah route sedang menunggu data, Next.js bisa otomatis menampilkan loading state tanpa harus kamu tulis manual dengan banyak state lokal. Untuk user, ini memberi kesan aplikasi hidup dan tidak “membeku”. Untuk developer, ini mengurangi boilerplate. (reformat)
Contoh pola penggunaan:
- Tampilkan layout dan navigasi lebih dulu.
- Render konten utama secara bertahap.
- Gunakan
Suspenseuntuk bagian yang berat. - Sediakan loading skeleton yang realistis agar UX terasa natural.
Server Actions dan route handlers
Next.js 16 juga sangat kuat untuk full-stack development karena App Router mendukung Server Actions dan Route Handlers. Server Actions memungkinkan kamu menjalankan fungsi di server langsung dari client dengan cara yang lebih sederhana, tanpa harus membuat endpoint manual untuk setiap aksi kecil. (reformat)
Sementara itu, Route Handlers cocok untuk kebutuhan API yang memang perlu endpoint eksplisit. Dokumentasi dan panduan terbaru menyebutkan bahwa route handlers mendukung metode HTTP umum seperti GET, POST, PUT, PATCH, DELETE, HEAD, dan OPTIONS. (reformat)
Ini artinya:
- Gunakan Server Actions untuk submit form, update data, atau aksi server sederhana.
- Gunakan Route Handlers untuk API publik, integrasi pihak ketiga, atau kebutuhan endpoint yang jelas.
Dengan pembagian ini, kamu bisa menjaga arsitektur tetap bersih. UI fokus ke interaksi, server fokus ke data dan operasi bisnis.
Best practice yang perlu dipegang
Kalau ingin App Router benar-benar terasa seperti masterclass, ada beberapa prinsip yang harus dijaga sejak awal. Praktik yang paling sering direkomendasikan adalah meminimalkan Client Components, memakai caching dan static generation ketika memungkinkan, serta memanfaatkan streaming untuk pengalaman pengguna yang lebih baik. (crea)
Berikut prinsip utamanya:
- Gunakan Server Component sebagai default.
- Pakai
use clienthanya saat memang butuh interaksi browser. - Colocate file yang berkaitan langsung dengan route.
- Pisahkan logika bisnis ke
lib/, bukan di komponen UI. - Gunakan
loading.tsxdanerror.tsxuntuk resilience. - Hindari folder terlalu dalam jika tidak perlu.
- Gunakan
next/imageuntuk optimasi gambar. (dharmsy)
Prinsip-prinsip ini mungkin terdengar sederhana, tetapi justru di situlah kekuatannya. Banyak proyek gagal rapi bukan karena teknologinya kurang bagus, melainkan karena struktur dan kebiasaan awalnya tidak disiplin.
Kesalahan umum pemula
Ada beberapa kesalahan yang sering terjadi saat belajar App Router. Pertama, terlalu banyak memberi label use client pada komponen. Akibatnya, keunggulan server-first hilang dan bundle client jadi membesar. Kedua, menaruh semua logic di dalam komponen page, padahal seharusnya sebagian besar business logic dipindahkan ke lib/. (dharmsy)
Kesalahan lain adalah memakai struktur folder yang terlalu rumit sejak awal. App Router memang mendukung nested routing dan route group, tetapi bukan berarti semua halaman harus dibuat sedalam mungkin. Gunakan nesting hanya saat URL dan pengalaman pengguna memang memerlukannya, bukan demi keren-kerenan struktur. (dharmsy)
Next.js 16 App Router adalah kombinasi dari routing yang rapi, performa yang kuat, dan pola pengembangan yang cocok untuk aplikasi modern. Kalau kamu ingin membangun produk yang serius, memahami layout, nested routing, Server Components, loading states, streaming, dan server actions adalah investasi yang sangat layak. Dokumentasi resmi dan panduan modern sama-sama mengarah ke satu kesimpulan: App Router adalah default yang paling masuk akal untuk proyek baru di era Next.js 16. (Next JS)