· auth / better-auth / clerk

Better Auth vs Clerk 2026: Open Source vs Hosted Auth

Clerk chạy auth trong 30 phút, tốn $1,025/tháng ở 100K MAU. Better Auth mất 2–3 tiếng, tốn ~$50/tháng cùng quy mô. Dành một buổi chiều, tiết kiệm $11,700/năm.

Bởi

2.378 từ · 12 phút đọc

Chọn Clerk nếu bạn cần auth chạy được ngay hôm nay và chưa vượt quá 50K monthly active users. Chọn Better Auth nếu bạn đã tính toán kỹ và sẵn sàng đánh đổi vendor lock-in, bộ social provider phong phú hơn, và các UI component có sẵn — để đổi lấy mức tiết kiệm ~$11,700/năm ở 100K MAU, toàn quyền sở hữu dữ liệu, và không phải băn khoăn về GDPR với một nhà cung cấp chỉ hoạt động ở Mỹ.

Đó là toàn bộ bài viết này. Đọc tiếp nếu bạn muốn xem những con số đằng sau.

Bài này dành cho ai

Developer và technical founder đang chọn giải pháp auth cho dự án Next.js App Router mới vào năm 2026. Nếu bạn đang dùng Clerk và mọi thứ đang ổn, phần chi phí migration sẽ giúp bạn quyết định có đáng chuyển không. Nếu bạn cần SOC 2 compliance ngay từ đầu, hãy kéo thẳng xuống phần kết luận — yêu cầu đó đã quyết định thay bạn rồi.

Chúng tôi đã so sánh gì

Better Auth: v1.6.11 stable (2026-05-12), giấy phép MIT
Clerk: Hosted SaaS, giá được xác minh từ clerk.com/pricing ngày 2026-05-25

Chúng tôi không chạy benchmark tổng hợp — auth không phải là hot path bạn cần tối ưu bằng đồng hồ bấm giờ. Những gì chúng tôi so sánh: thời gian setup, giá ở các quy mô thực tế, feature parity trên những thứ team thực sự dùng, và chi phí migration nếu bạn đổi ý sau này.

Ghi chú về phiên bản: Better Auth v1.7.0-beta.3 đang được phát triển tích cực tại thời điểm viết bài. Danh sách tính năng chỉ phản ánh v1.6.11 stable.

Giá cả: chỗ con số trở nên khó chịu

Free tier của Clerk tốt hơn nhiều bài viết mô tả. Tính đến năm 2026, con số là 50,000 monthly active users (MRU), không phải 10K như bạn vẫn thấy trích dẫn ở các bài cũ. Con số đó đủ cho phần lớn dự án indie mà không cần trả thêm đồng nào.

Phép tính điểm hoà vốn:

Quy môClerk (Pro)Better Auth (tự host)
0 → 50K MAU$0 (Hobby)~$5–$15/tháng (Postgres hosting)
50K → 100K MAU$25 + (50K × $0.02) = $1,025/tháng~$20–$50/tháng (Postgres ở quy mô lớn)
100K MAU liên tục~$1,025/tháng~$50/tháng

Ở 100K MAU, bạn trả $12,300/năm cho Clerk (Pro plan + overage) so với khoảng $600/năm cho Better Auth (Postgres trên Railway hoặc Render). Chênh lệch $11,700/năm.

Nếu bạn không bao giờ vượt 50K MAU, bài so sánh này thực chất là free tier với “một khoản phí Postgres nhỏ”. Ở điểm đó, Clerk thắng thuần về sự tiện lợi.

Một điều cần lưu ý: cách Clerk tính phí theo organization. Multi-tenancy cơ bản miễn phí — bạn được 100 monthly retained organizations (MRO) trên mọi plan. Nhưng add-on B2B Authentication, vốn mở khóa unlimited organization members và custom RBAC đầy đủ, tốn $85/tháng thanh toán hàng năm. Nếu sản phẩm của bạn là B2B có teams, hãy tính khoản này vào.

So sánh tính năng chi tiết

Tính năngBetter Auth v1.6.11Clerk
HostingTự hostHạ tầng của Clerk (Mỹ)
Sở hữu dữ liệuDatabase của bạn, region của bạnServer của Clerk, chỉ ở Mỹ
Data residency EUBất kỳ region nàoKhông có
Giấy phépMITProprietary SaaS
Next.js App RoutertoNextJsHandler()clerkMiddleware() + <ClerkProvider>
UI component có sẵnKhông — tự xây<SignIn>, <UserButton>, <Show>
Social OAuth providers8 built-in + generic OAuth plugin20+ built-in
Email/password
Passwordless / passkeysPluginPro+
TOTP 2FAPluginPro+
SMS 2FATích hợp sendOTP tùy chỉnhPro+ (built-in)
Organizations / multi-tenancyMiễn phí (plugin)Cơ bản miễn phí; B2B add-on $85/tháng
Custom RBACcreateAccessControlPro+
SAML / Enterprise SSOPlugin$75/tháng mỗi enterprise connection
Quản lý sessionCấu hình linh hoạtCustom duration trên Pro+
Database adaptersPrisma, Drizzle, MongoDB, raw SQLKhông áp dụng
Vendor lock-inKhôngCao (dữ liệu user nằm trong hạ tầng Clerk)
SOC 2 complianceTự làmSOC 2 Type II certified
Thời gian setup2–3 tiếng10–30 phút
Free tier MAUKhông giới hạn (tự host)50,000

Cài đặt trong Next.js App Router

Better Auth — setup tối giản

Better Auth yêu cầu một database và ORM adapter — nếu bạn chưa chọn giữa Prisma và Drizzle, Prisma vs Drizzle so sánh cả hai. Tính 2–3 tiếng bao gồm cả migrations.

Cài đặt:

npm install better-auth

.env:

BETTER_AUTH_SECRET=<openssl rand -base64 32>
BETTER_AUTH_URL=http://localhost:3000

lib/auth.ts:

import { betterAuth } from "better-auth";
import { drizzleAdapter } from "better-auth/adapters/drizzle";
import { db } from "@/db";

export const auth = betterAuth({
  database: drizzleAdapter(db, { provider: "pg" }),
  emailAndPassword: { enabled: true },
  socialProviders: {
    github: {
      clientId: process.env.GITHUB_CLIENT_ID!,
      clientSecret: process.env.GITHUB_CLIENT_SECRET!,
    },
  },
});

app/api/auth/[...all]/route.ts:

import { auth } from "@/lib/auth";
import { toNextJsHandler } from "better-auth/next-js";

export const { POST, GET } = toNextJsHandler(auth);

Client setup:

import { createAuthClient } from "better-auth/react";
export const authClient = createAuthClient({ baseURL: "http://localhost:3000" });

Tạo và chạy migrations:

npx auth@latest generate
npx auth@latest migrate

Đó là con đường thuận lợi nhất. Chỗ tốn thêm thời gian là: cấu hình ORM schema, chuẩn bị database trong môi trường hosting, và kết nối social provider trên các developer console tương ứng. Không bước nào khó, nhưng mỗi bước đều cần thời gian.

Clerk — setup tối giản

Không cần database. Clerk host mọi thứ.

Cài đặt:

npm install @clerk/nextjs

.env.local:

NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_...
CLERK_SECRET_KEY=sk_...

middleware.ts:

import { clerkMiddleware } from '@clerk/nextjs/server';

export default clerkMiddleware();

export const config = {
  matcher: [
    '/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)',
    '/(api|trpc)(.*)',
    '/__clerk/(.*)',
  ],
};

app/layout.tsx:

import { ClerkProvider, SignInButton, SignUpButton, Show, UserButton } from "@clerk/nextjs";

export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <html lang="en">
      <body>
        <ClerkProvider>
          <header>
            <Show when="signed-out">
              <SignInButton />
              <SignUpButton />
            </Show>
            <Show when="signed-in">
              <UserButton />
            </Show>
          </header>
          {children}
        </ClerkProvider>
      </body>
    </html>
  );
}

Auth hoạt động được. Không cần migration, không cần chuẩn bị database.

Sự đánh đổi không thấy được lúc setup — nó xuất hiện trên hóa đơn infrastructure 18 tháng sau.

Điểm mạnh của Better Auth

Chi phí ở quy mô lớn. Phép tính trong phần giá cả là toàn bộ lý lẽ. Ở 100K MAU, Better Auth tiết kiệm ~$11,700/năm. Ở 500K MAU, chênh lệch đó trở thành con số có ý nghĩa chiến lược.

Sở hữu dữ liệu và tuân thủ EU. Clerk chỉ chạy trên hạ tầng Mỹ. Nếu user của bạn ở EU và yêu cầu GDPR data residency là cứng, Clerk tạo ra một vấn đề mà tiền không giải quyết được. Với Better Auth, bạn chọn bất kỳ Postgres host nào ở bất kỳ region nào.

Organizations miễn phí. B2B add-on của Clerk ($85/tháng) bao gồm chức năng mà Better Auth cung cấp dưới dạng MIT plugin miễn phí — unlimited org members, custom RBAC, team nesting. Nếu bạn xây dựng sản phẩm B2B multi-tenant, đây là khoản tiền thực.

Không bị khóa nhà cung cấp. User, session, và dữ liệu auth của bạn nằm trong Postgres riêng của bạn ngay từ ngày đầu. Nếu Better Auth biến mất ngày mai, bạn vẫn còn dữ liệu. Với Clerk, migration là một dự án riêng (xem bên dưới).

Hệ sinh thái TypeScript-first. Better Auth được xây từ đầu cho TypeScript. Kiến trúc plugin (2FA, passkeys, SSO, impersonation, RBAC) có thể kết hợp linh hoạt và hoàn toàn có kiểu. Việc Better Auth tiếp nhận dự án Auth.js vào tháng 9 năm 2025 — sau khi Auth.js bị đình trệ ở trạng thái beta mãi mãi sau khi maintainer rời đi — là tín hiệu rõ ràng rằng cộng đồng TypeScript đang hội tụ về đây.

Điểm mạnh của Clerk

Thời gian ra auth hoạt động được. Ba mươi phút là thật. Quickstart của Clerk thực sự nhanh — không cần database, không migration, không cấu hình ORM. Nếu bạn đang xây prototype hoặc cần auth trước một buổi demo, Clerk là câu trả lời đúng.

UI component có sẵn. <SignIn>, <UserButton>, và <Show> được đánh bóng kỹ và xử lý các edge case mà bạn sẽ mất hàng ngày để tự xây — luồng reset mật khẩu, xử lý lỗi OAuth, MFA prompt. Với Better Auth, bạn phải tự xây tất cả những thứ này hoặc kéo vào một component library mà bạn phải tự bảo trì.

Bộ social provider phong phú. Clerk hỗ trợ 20+ social provider ngay từ đầu. Better Auth có 8 provider built-in cộng với generic OAuth plugin cho các provider tương thích OIDC. Với phần lớn dự án, 8 cái đó là đủ (Google, GitHub, Discord, Apple, Microsoft, Facebook, LinkedIn, TikTok), nhưng nếu bạn cần gì đó lạ hơn, bạn phải tự viết plugin.

SOC 2 Type II compliance. Clerk đã được chứng nhận. Nếu khách hàng enterprise yêu cầu, câu chuyện trở nên đơn giản. Với Better Auth, bạn tự đi xin chứng nhận — hoặc giải thích cho bộ phận procurement enterprise tại sao bạn không có.

Không cần ops. Clerk tự lo backup, giám sát uptime, vá lỗ hổng trong auth layer, và scale session storage. Với Better Auth, đó là việc của bạn. Nếu team bạn không có kinh nghiệm infrastructure, đây không phải điều nhỏ nhặt.

Nguồn gốc từ Auth.js

Better Auth là người kế thừa tinh thần của NextAuth (Auth.js). Vào tháng 9 năm 2025, Better Auth tiếp nhận dự án Auth.js — maintainer ban đầu đã rời đi trước đó trong năm, khiến v5 bị kẹt ở beta vĩnh viễn từ năm 2023. Better Auth tiếp quản để tránh dự án bị bỏ hoàn toàn. Auth.js v5 vẫn được bảo trì về mặt kỹ thuật (vá bảo mật) nhưng đà phát triển của hệ sinh thái đã dịch chuyển. Nếu bạn đang migrate từ Auth.js v4 và đang cân nhắc các lựa chọn, Better Auth là điểm đến rõ ràng — khái niệm quen thuộc, pattern TypeScript quen thuộc, bộ tính năng đầy đủ hơn nhiều. Nếu Clerk cũng nằm trong danh sách cân nhắc đó, NextAuth vs Clerk phân tích so sánh từ góc độ migration Auth.js.

Nếu bạn đang dùng Clerk và đang nghĩ đến việc chuyển

Chi phí chuyển đổi là có thật. MakerKit ước tính 2 engineer-weeks cho một setup multi-provider điển hình có organizations. Những điểm đau:

  1. Export user: Clerk có export API, nhưng schema khác với Better Auth. Bạn sẽ phải viết code chuyển đổi.
  2. Hủy session: Mọi session hiện tại đều bị xóa. Tất cả user phải đăng nhập lại sau khi migration.
  3. Rehash mật khẩu: Clerk dùng hash riêng của họ; bạn không thể migrate hash trực tiếp. Lazy rehash lần đăng nhập đầu tiên là cách tiếp cận thông thường.
  4. Cấu hình lại webhook: Mọi Clerk webhook (user.created, session.ended) cần có bản tương đương trong hệ thống của bạn.
  5. Refactor component: Xóa mọi <UserButton>, <SignIn>, và <Show>, thay bằng UI tùy chỉnh hoặc headless UI.

Ước tính 2 engineer-weeks tăng theo kích thước codebase và tăng thêm nếu bạn có mobile client, vì session model của Clerk đủ khác biệt để mobile SDK cần xử lý riêng.

Pattern phổ biến cộng đồng mô tả: các team chuyển đổi hầu như đều bắt đầu bằng Clerk, chạm vào bức tường giá khoảng tháng thứ 9, rồi trả chi phí migration. Bắt đầu với Better Auth tránh hoàn toàn kịch bản đó — nếu bạn có 3 tiếng lúc khởi đầu dự án.

Kết luận

Chọn Clerk nếu: bạn cần auth lên production trước khi tuần này kết thúc, bạn không kỳ vọng vượt 50K MAU trong 12 tháng tới, hoặc khách hàng enterprise của bạn yêu cầu chứng nhận SOC 2.

Chọn Better Auth nếu: bạn có nửa ngày để đầu tư lúc đầu, bạn xây cho user ở EU, bạn dự kiến multi-tenancy mà không muốn trả $85/tháng, hoặc bạn đang lên kế hoạch cho quy mô mà giá Clerk trở thành chủ đề ngân sách.

Đừng biến quyết định này thành phức tạp hơn cần thiết. Ở mức 0 → 50K MAU, chênh lệch chi phí không đáng kể. Câu hỏi thực sự là: bạn có muốn sở hữu hạ tầng auth của mình — với tất cả lợi thế và trách nhiệm đi kèm — ngay từ ngày đầu hay không. Nếu Auth0 cũng nằm trong danh sách cân nhắc, Clerk vs Auth0 so sánh cả hai giải pháp hosted cạnh nhau.

Những điểm cần lưu ý

  • Giá Clerk thay đổi thường xuyên. Free tier 50K MAU trước đây là 10K; hãy xác minh tại clerk.com/pricing trước khi đưa ra dự báo tài chính dựa trên bài viết này.
  • Better Auth v1.7.0 đang trong giai đoạn beta lúc xuất bản (phiên bản stable có thể đã ra khi bạn đọc bài này — kiểm tra trang GitHub releases).
  • Chúng tôi không test enterprise tier hoặc tùy chọn multi-region của Clerk, vốn có thể tồn tại trong các plan không được liệt kê công khai.
  • Cả Clerk lẫn Better Auth đều không có chương trình affiliate tại thời điểm viết. Bài viết này không có affiliate link.

Tham khảo