Auth.js v5 (NextAuth baru) mencapai stable di akhir 2024 sebagai penulisan ulang yang hampir lengkap. Pada September 2025, tim Better Auth mengambil alih pemeliharaan Auth.js, dan library memasuki mode patch keamanan. Sementara itu, Clerk terus merilis fitur dengan cepat dan kini menangani segalanya dari MFA hingga passkey hingga manajemen organisasi B2B dari kotak. Lanskap autentikasi bergeser signifikan di 2025.
Clerk adalah platform identitas yang di-host, bukan library sesi. Database pengguna, penyimpanan sesi, dan kunci signing JWT Anda berada di infrastruktur Clerk. Aplikasi Anda adalah klien dari API Clerk. NextAuth (Auth.js) adalah kebalikannya: middleware sesi yang Anda deploy bersama database Anda sendiri. Anda memiliki segalanya — tabel pengguna, token sesi, handler callback OAuth.
Clerk menang dalam kecepatan setup, secara tegas. Dengan Clerk, Anda menginstal SDK, menambahkan middleware, membungkus aplikasi Anda dalam ClerkProvider, dan menambahkan komponen siap pakai seperti <SignIn /> dan <UserButton />. Alur auth yang berfungsi membutuhkan kurang dari satu jam. NextAuth memerlukan konfigurasi adapter, skema database, memilih dan menyiapkan penyedia OAuth, dan menangani session callback.
Clerk (Hosted Platform) NextAuth / Auth.js (Self-hosted)
─────────────────────── ────────────────────────────────
Your App Your App
│ │
▼ ▼
ClerkProvider (SDK) auth.ts config (adapters, providers)
│ │
▼ ▼
Clerk API (hosted) Your Database (users/sessions tables)
│ │
├── User store ├── NextAuth JWT / database sessions
├── Session management ├── OAuth callbacks (you handle)
├── MFA / passkeys (included) ├── MFA (build it yourself)
└── Org management └── Token rotation (build it yourself)
Setup time: ~1 hour Setup time: ~4-8 hours
Cost at 50k MAU: $25/month Cost: database + email only
Data location: Clerk's servers Data location: your infrastructure
Compliance: check their ToS Compliance: you control everythingDari membangun prototipe SaaS dengan Clerk: gunakan Webhook Sync Clerk untuk menjaga sinkronisasi database Anda sendiri dengan catatan pengguna Clerk. Saat pengguna dibuat atau diperbarui di Clerk, webhook ditembakkan dan handler API NestJS atau Next.js Anda melakukan upsert catatan di database PostgreSQL Anda. Dengan cara ini Anda masih bisa melakukan query relasional terhadap data pengguna Anda sendiri tanpa query ke API Clerk di setiap request.
NextAuth gratis — Anda hanya membayar untuk database dan penyedia email Anda. Harga Clerk dimulai gratis (hingga 10.000 MAU) kemudian naik ke $25/bulan (Pro, ditagih bulanan) untuk 50.000 Monthly Retained Users. Melampaui itu, Anda membayar per MRU tambahan. Fitur B2B — manajemen organisasi, SSO — $100/bulan tambahan.
// Clerk setup (minimal)
// middleware.ts
import { clerkMiddleware } from '@clerk/nextjs/server'
export default clerkMiddleware()
export const config = { matcher: ['/((?!_next|.*\..*).*)'] }
// app/layout.tsx
import { ClerkProvider } from '@clerk/nextjs'
export default function Layout({ children }) {
return <ClerkProvider>{children}</ClerkProvider>
}
// Protected page — done
import { auth } from '@clerk/nextjs/server'
export default async function Dashboard() {
const { userId } = await auth()
if (!userId) redirect('/sign-in')
return <div>Dashboard for {userId}</div>
}
// ─────────────────────────────────────────
// Auth.js v5 (NextAuth) setup
// auth.ts
import NextAuth from "next-auth"
import { PrismaAdapter } from "@auth/prisma-adapter"
import GitHub from "next-auth/providers/github"
import { prisma } from "@/lib/db"
export const { handlers, auth, signIn, signOut } = NextAuth({
adapter: PrismaAdapter(prisma),
providers: [GitHub],
// also need: DATABASE_URL, GITHUB_ID, GITHUB_SECRET, AUTH_SECRET env vars
// also need: prisma schema with User, Account, Session, VerificationToken tables
})Paket Pro Clerk mencakup MFA (TOTP, SMS), passkey, 1 koneksi SSO enterprise, dan manajemen organisasi. NextAuth tidak memiliki MFA bawaan — Anda mengimplementasikannya sendiri dengan library TOTP dan kolom database. Rotasi token akses, penanganan refresh token, dan perlindungan bot semuanya memerlukan implementasi manual di NextAuth.
Clerk menyimpan data pengguna di AS secara default (wilayah EU tersedia dalam paket Enterprise). Untuk bisnis Indonesia atau Asia Tenggara dengan persyaratan residensi data, atau untuk aplikasi apa pun yang menangani PII sensitif yang harus tetap di wilayah, Clerk mungkin tidak patuh secara default. NextAuth dengan database Anda sendiri memberi Anda kontrol penuh atas lokalitas data. Periksa persyaratan regulasi Anda sebelum memilih penyedia auth yang di-host.
Auth.js v5 adalah penulisan ulang besar — dukungan runtime universal (Edge, Node, Deno), konfigurasi terpadu baru di auth.ts, dan API TypeScript yang lebih bersih. Pola adapter meningkat secara signifikan. Namun, dengan tim Better Auth mengambil alih pemeliharaan di akhir 2025, proyek Auth.js baru harus mengevaluasi Better Auth, yang menawarkan lebih banyak fitur dengan pengembangan aktif.
Untuk proyek klien di mana saya mengontrol anggaran dan jumlah pengguna tetap di bawah 50k, saya menggunakan Clerk. Keuntungan produktivitas selama pengembangan tahap awal nyata — saya tidak men-debug callback OAuth ketika seharusnya membangun fitur produk. Untuk proyek open-source, alat internal, atau proyek apa pun di mana saya ingin nol ketergantungan vendor pada auth, saya menggunakan NextAuth/Auth.js dengan adapter PostgreSQL.
Pilih Clerk jika: Anda membangun SaaS konsumen atau B2C dengan kebutuhan auth yang mudah, Anda menghargai kecepatan pengembang, Anda butuh MFA dan passkey tanpa implementasi kustom, dan jumlah pengguna Anda membenarkan biaya. Pilih NextAuth/Auth.js jika: Anda membutuhkan kepemilikan data penuh, Anda memiliki persyaratan residensi data yang ketat, Anda membangun perangkat lunak open-source, atau Anda mengerjakan proyek dengan anggaran nol.