Better Auth vs Clerk vs NextAuth vs Supabase Auth (2026)
Compare Better Auth, Clerk, NextAuth (Auth.js), and Supabase Auth on price, lock-in, orgs, MFA, and Next.js DX. Clear pick for each stack.

If you are choosing Better Auth vs Clerk vs NextAuth vs Supabase Auth for a Next.js SaaS in 2026, you are really choosing a deployment model: self-hosted library, managed product, legacy Auth.js install, or Supabase-bundled identity. This guide gives a clear verdict, verified pricing, a feature matrix, and decision rules we use when shipping auth in TurboStarter.
Short answer
Pick Better Auth for new TypeScript apps that want users in your own Postgres, plugin-based MFA/passkeys/orgs, and no per-user bill. Pick Clerk when polished UI, hosted user management, and ship-today speed beat lock-in and MRU pricing. Pick Supabase Auth only if you are already on Supabase and want RLS via auth.uid(). Keep NextAuth / Auth.js if it already works; for greenfield, migrate toward Better Auth. Auth.js is now maintained by the Better Auth team with security patches, not as the recommended new default.
Key takeaways
- The 2026 decision is hosted vs self-hosted, not “build auth from scratch.”
- Clerk’s free tier is 50,000 MRUs per app (Clerk pricing). Older posts quoting 10k MAU are outdated.
- Auth.js (NextAuth) joined Better Auth in September 2025; new features land in Better Auth.
- Supabase Auth wins on RLS, not as a general-purpose auth pick outside Supabase.
- Screens are separate from servers. Pair Better Auth with Better Auth UI or a SaaS starter if you also need billing and orgs.
What is Better Auth vs Clerk vs NextAuth vs Supabase Auth?
Four names dominate Next.js auth searches. They solve the same problem with different ownership models.
| Option | What it is | Where user data lives |
|---|---|---|
| Better Auth | Open-source, framework-agnostic TypeScript auth/authorization library with a plugin ecosystem | Your database (Postgres via Drizzle/Prisma/etc.) |
| Clerk | Hosted authentication and user-management product with React components and a dashboard | Clerk’s infrastructure |
| NextAuth / Auth.js | Long-standing open-source auth library (NextAuth.js → Auth.js v5); now under Better Auth Inc. | Your database (or JWT-only) |
| Supabase Auth | Auth service bundled with the Supabase platform; JWTs + Postgres | Your Supabase project’s Postgres (auth schema) |
Quotable definition: Better Auth and Auth.js are libraries you run. Clerk is a managed SaaS. Supabase Auth is platform auth that shines when RLS is part of your data model.
Quick comparison table
| Factor | Better Auth | Clerk | NextAuth (Auth.js) | Supabase Auth |
|---|---|---|---|---|
| Model | Self-hosted library | Hosted SaaS | Self-hosted library | Hosted (with Supabase) |
| Cost model | Your infra only | Hobby free → Pro $25/mo + $0.02/MRU over 50k | Your infra only | Free 50k MAU; Pro includes 100k then ~$0.00325/MAU |
| Pre-built UI | No (use Better Auth UI or build) | Yes (strongest) | Recipes / DIY | Auth helpers + dashboard |
| Organizations | First-class plugin | Built-in (+ B2B add-on for scale) | DIY | DIY (or app-layer) |
| MFA / passkeys | Plugins | Yes (plan-gated) | Mostly DIY | Yes (advanced phone MFA add-on) |
| Enterprise SSO | Available via ecosystem / enterprise path | Paid connections on Pro+ | DIY / adapters | SAML on paid plans |
| RLS integration | App-layer | App-layer | App-layer | Native (auth.uid()) |
| Data residency | Wherever you host the DB | Clerk’s regions / product constraints | Wherever you host the DB | Supabase region you choose |
| Lock-in | Low (you own tables) | High (product + data model) | Low | Medium (tied to Supabase stack) |
| Best for | Owned multi-tenant SaaS | Fastest polished ship | Existing Auth.js apps | Apps already on Supabase |
Sources: Better Auth docs, Clerk pricing, Auth.js migration guidance, Supabase Auth docs / Supabase pricing.
Pricing: what you actually pay at scale
Auth pricing arguments go stale fast. Use current published plans, not 2024 blog math.
Clerk (MRU, not classic MAU)
Clerk bills Monthly Retained Users (MRUs). A user who signs up and never returns after the first day does not count toward MRU (Clerk pricing FAQ).
| Stage | Approximate Clerk cost |
|---|---|
| Hobby | $0 (up to 50,000 MRUs per app) |
| Pro base | $25/mo ($20/mo annual), 50,000 MRUs included |
| Over 50k MRUs | From $0.02 per additional MRU/mo (volume discounts above) |
| Example: 100k MRUs on Pro | ~$25 + (50k × $0.02) ≈ $1,025/mo before B2B/SSO add-ons |
Organizations: 100 MROs included; Enhanced B2B Authentication add-on is $100/mo ($85 annual) for higher org limits and advanced org features (Clerk pricing).
Better Auth and NextAuth
Both are open source. Your bill is Postgres + compute + email/SMS. At ~100k monthly active users, teams typically pay tens of dollars for a managed Postgres instance, not a four-figure auth invoice. You own ops: sessions, rate limits, migrations, monitoring.
Supabase Auth
Auth is included in the Supabase plan:
| Plan | Auth quota (published) |
|---|---|
| Free | 50,000 MAU |
| Pro / Team | 100,000 MAU included, then $0.00325 per MAU |
SSO MAU and advanced phone MFA are separate line items on paid plans (Supabase pricing, MAU usage docs).
Rule of thumb: Under ~50k retained users, Clerk can feel “free.” Past that, self-hosted Better Auth or Supabase’s overage rates usually win on pure cost, unless Clerk’s UI and dashboard are buying you engineering weeks every quarter.
Better Auth: self-hosted, TypeScript-first, plugin-rich
Better Auth is a framework-agnostic authentication and authorization library for TypeScript. Official docs position it as batteries-included (email/password, sessions, social sign-on, orgs, 2FA) plus a plugin ecosystem for passkeys, magic links, and more (introduction).
Why teams pick it in 2026
- User and session tables live next to orgs and billing in your schema (Drizzle/Prisma adapters)
- Organizations and access control are first-class, not a weekend side project
- No per-MAU tax as you grow
- Works across Next.js, Expo, and other runtimes: one auth package for multi-platform products
- Aligns with the Auth.js succession story after the Auth.js joins Better Auth announcement (Sep 22, 2025)
Tradeoffs
- You operate it: migrations, email delivery, rate limiting, abuse controls
- No Clerk-grade hosted dashboard out of the box
- UI is DIY or Better Auth UI / starter-kit screens
TurboStarter ships Better Auth with password, magic link, OTP, passkeys, anonymous auth, OAuth, 2FA, and organization flows already wired. See the auth overview and the Next.js Better Auth template.
Clerk: fastest path to polished auth UI
Clerk is the managed option: prebuilt sign-in/sign-up/user profile components, organizations, MFA, passkeys, enterprise connections, and an admin dashboard. For a solo founder who needs B2B-looking auth this week, Clerk still wins on time-to-production.
Why teams pick it
- Best-in-class React components and drop-in middleware patterns
- Hosted user management, device sessions, and webhooks
- Enterprise SSO connections on Pro+ with published overage pricing
- SOC 2 report available on Business plan (Clerk pricing)
Tradeoffs
- Users live in Clerk’s system (migration is a project)
- Cost scales with retained users; B2B/org add-ons stack on top
- You accept product roadmap and regional constraints of a vendor
Pick Clerk when engineering hours are scarcer than MRU fees for the next 12 months.
NextAuth / Auth.js: keep it if it works, don’t start here
NextAuth.js (Auth.js) powered a huge share of the Next.js ecosystem for years. In September 2025, Auth.js became part of Better Auth. The Auth.js site and migration guide are explicit: existing apps can stay; new projects should prefer Better Auth; Better Auth continues security patches for Auth.js (migrate to Better Auth).
Why it still appears in comparisons
- Massive installed base and OAuth provider breadth
- Familiar patterns in older boilerplates and tutorials
- Zero license cost, self-hosted
Why greenfield teams move on
- MFA, passkeys, magic links, and organizations usually mean custom work
- Direction and DX energy shifted to Better Auth’s plugin model
- Dual maintenance (Auth.js + Better Auth) is unnecessary for new apps
If you are on Auth.js and stable, do not rewrite for fashion. If you are starting today, skip straight to Better Auth.
Supabase Auth: right answer when Supabase is the platform
Supabase Auth issues JWTs and stores users in your project’s Postgres. Its killer feature is Row Level Security: policies can reference the authenticated user directly, and client requests carry the auth token into PostgREST (Supabase Auth docs).
Why teams pick it
- Zero extra auth vendor if you already use Supabase DB, Storage, or Realtime
- Generous free MAU quota; cheap overages on Pro
- Social providers, MFA, magic links, and paid SSO in one console
Tradeoffs
- Organizations / multi-tenancy are mostly your schema and policies
- UI is functional, not Clerk-polished
- Choosing Supabase “just for auth” while running a separate Postgres elsewhere adds accidental complexity
TurboStarter can connect to Supabase as a database host without making Supabase Auth the identity layer. See connect TurboStarter to Supabase. Auth stays Better Auth + your tables unless you intentionally adopt the Supabase auth stack.
Feature depth: MFA, orgs, UI, and multi-platform
Multi-factor and passkeys
| Capability | Better Auth | Clerk | Auth.js | Supabase Auth |
|---|---|---|---|---|
| TOTP / authenticator MFA | Plugin | Pro+ | DIY | Included (basic) |
| Passkeys | Plugin | Pro+ | Limited / DIY | Supported |
| SMS / phone MFA | Via your SMS provider | Per-SMS fees on Pro+ | DIY | Advanced MFA Phone add-on |
Organizations and B2B
Better Auth and Clerk treat orgs as product primitives. Auth.js and Supabase leave tenancy to your app (or a kit). Clerk’s free org tier caps members/MROs; heavier B2B needs the Enhanced add-on. Better Auth’s organization plugin keeps membership in your DB, the model TurboStarter uses for invites, roles, and seats (organizations docs).
UI and DX
Clerk wins raw component polish. Better Auth + Better Auth UI (shadcn registry) closes much of the gap while keeping owned source. Auth.js and Supabase expect more custom forms.
Web, mobile, extension
If you need one auth story across Next.js, Expo, and a browser extension, a self-hosted library in a shared package beats bolting Clerk or Supabase Auth onto three clients separately. That multi-platform path is why TurboStarter standardizes on Better Auth in a Turborepo (best SaaS stack 2026, cross-platform SaaS).
Decision framework: which auth should you pick?
Use this in order. Stop at the first hard yes.
Already all-in on Supabase (DB + RLS as your authorization model)? → Supabase Auth.
Need ship-today UI, hosted admin, and enterprise SSO paperwork this quarter? → Clerk.
Greenfield TypeScript SaaS, own Postgres, expect orgs/MFA/passkeys, care about cost past 50k users? → Better Auth.
Existing NextAuth/Auth.js app that is stable? → Stay, patch via Better Auth’s Auth.js maintenance; migrate when you need plugins Auth.js will not grow.
Also need billing, admin, and multi-platform clients? → Pair Better Auth with a production SaaS starter kit instead of assembling screens and webhooks alone.
Situation → pick cheat sheet
| Your situation | Pick | Why |
|---|---|---|
| New Next.js + Postgres SaaS, own the user table | Better Auth | Plugins + ownership + predictable cost |
| Weekend MVP, design-sensitive auth UI | Clerk | Components + dashboard |
| Supabase-first product with heavy RLS | Supabase Auth | auth.uid() in policies |
| Legacy NextAuth codebase | Auth.js (keep) | Migration cost > benefit until you need orgs/MFA plugins |
| Web + Expo + extension monorepo | Better Auth | Shared package, one session model |
| Enterprise buyers demanding vendor SOC 2 report tomorrow | Clerk Business (or enterprise IdP) | Buy compliance narrative |
Common mistakes when comparing these four
- Using outdated Clerk free-tier numbers: Hobby/Pro include 50k MRUs, not the old 10k MAU talking point.
- Treating Auth.js as abandoned: it is maintained for security; it is simply not the feature roadmap for new apps.
- Picking Supabase Auth without Supabase: you inherit platform coupling without the RLS payoff.
- Ignoring UI cost on Better Auth: budget a day for Better Auth UI or a starter; do not compare “Clerk in 15 minutes” to “raw Better Auth with zero screens.”
- Forgetting email/SMS: magic links and OTP fail in production without a real provider (Resend, etc.), regardless of library.
- Optimizing only for setup time: auth migrations after launch are painful; price lock-in and data ownership on day one.
Frequently asked questions
Neither is universally better. Better Auth is better when you want ownership, predictable cost at scale, and TypeScript plugins in your repo. Clerk is better when prebuilt UI, hosted admin, and speed outweigh per-MRU pricing and vendor lock-in. Many serious SaaS teams default to Better Auth; many design-led MVPs still ship Clerk first.
NextAuth / Auth.js is not deleted. Better Auth Inc. maintains it and publishes migration docs. For new projects, Better Auth is the recommended path. Migrate existing apps when you need organizations, passkeys, or DX that Auth.js will not grow, not because of a tweet.
On published list prices, Supabase Auth is usually cheaper past the free tier (Pro includes 100k MAU then ~$0.00325/MAU). Clerk can be free up to 50k MRUs, then jumps to Pro + $0.02/MRU. Always model your retained-user curve; Clerk’s MRU definition is friendlier than raw signup MAU.
Yes. Better Auth supports a Drizzle adapter so user/session tables live in your Postgres schema. That is how TurboStarter keeps auth next to orgs and billing. See auth overview and Drizzle vs Prisma.
Better Auth is the server. For screens, use Better Auth UI (shadcn registry) or a starter that ships production auth views. Clerk bundles UI in the product; that is a major part of what you pay for.
They matter for enterprise IdP-heavy or Google-ecosystem apps, but they are outside the four names most Next.js SaaS builders actually shortlist in 2026. If you need Auth0-grade enterprise federation as the primary buyer requirement, evaluate Auth0/Clerk Enterprise separately from this indie/SaaS default set.
Better Auth, with email/password, OAuth, magic links, OTP, passkeys, anonymous auth, 2FA, and organizations wired across web (and optional mobile/extension). Docs: web auth overview. Live demo: demo.turbostarter.dev.
Final verdict: Better Auth vs Clerk vs NextAuth vs Supabase Auth
Better Auth vs Clerk vs NextAuth vs Supabase Auth is a ownership-and-platform decision, not a popularity contest.
- Choose Better Auth for greenfield TypeScript SaaS where the user table should live beside your product data (the default we ship in TurboStarter).
- Choose Clerk when managed UI and dashboard speed justify MRU pricing and lock-in.
- Choose Supabase Auth when Supabase + RLS is already your backend story.
- Keep NextAuth / Auth.js when migration cost exceeds plugin gains; start new work on Better Auth.
If auth is only one blocker next to billing, orgs, and admin, skip assembling four vendors yourself: skim the best SaaS stack for 2026, the Better Auth UI guide, the Next.js security guide, or open TurboStarter and ship with production auth already configured.
Better Auth UI: the complete Next.js + shadcn guide (2026)
What Better Auth UI is, how to install it with shadcn, wire AuthProvider in Next.js, protect routes, and when a full SaaS starter beats DIY auth screens.
Next.js Security Checklist 2026: Auth, API, CSRF & XSS (Complete Guide)
Production-ready Next.js security for SaaS - auth hardening, API protection, CSRF/XSS. Patterns from TurboStarter's stack.



