Přeskočit na obsah

Better Auth vs Clerk: proč jsme si vybrali Better Auth

Pro CTO a vývojářeRozhodnutí CTO · Aktualizováno

Filip PapranecZakladatel, Digitaliko

Better Auth vs Clerk. Ilustrace: vlevo tabulka uživatelů ve vaší vlastní databázi, vpravo hostovaný adresář uživatelů za API a otázka, kde žijí vaše session.Better Auth vs Clerk. Ilustrace: vlevo tabulka uživatelů ve vaší vlastní databázi, vpravo hostovaný adresář uživatelů za API a otázka, kde žijí vaše session.

Better Auth vs Clerk se rozhoduje jednou otázkou: kde žijí vaši uživatelé a session? Clerk je drží ve své hostované službě. Better Auth je zapisuje do vaší vlastní databáze jako obyčejné tabulky vedle zbytku aplikace.

Z NextAuth jsme v každé nové aplikaci přešli na Better Auth a Clerk jsme si nevybrali. Hned upřímně: Clerk jsme v produkci neprovozovali. Tohle není benchmark. Je to vysvětlení, proč jsme ho nezvolili, s konfigurací, která u nás opravdu běží.

Jaký je rozdíl mezi Better Auth a Clerkem?

Better Auth je knihovna. Sama se popisuje jako „a framework-agnostic, universal authentication and authorization framework for TypeScript“ (dokumentace Better Auth, stav k 24. 10. 2026). Má licenci MIT. Clerk je hostovaná služba s hotovými přihlašovacími komponentami a správou uživatelů.

Better AuthClerk
Co to jeKnihovna pro TypeScript ve vašem repozitářiHostovaná služba s UI komponentami
Kde jsou uživatelé a sessionTabulky ve vaší databáziInfrastruktura Clerku
CenaMIT, platíte vlastní databázi a e-maily0 USD do 50 000 MRU na aplikaci, pak placené (ceník, stav k 24. 10. 2026)
Přihlašovací UIPostavíte si hoHotové komponenty
Bezpečnostní opravyAktualizujete balíček a vydáte verziŘeší Clerk
Ověřovací e-maily a magic linkyVaše e-mailová službaPosílá Clerk
OdchodNení od čeho odcházet, schéma je vašeExport uživatelů s hashi hesel, pak přepojit UI a kontroly session

Rozhodly za nás druhý a třetí řádek. Kód, data i infrastruktura patří klientovi od prvního dne. Tabulka uživatelů na cizích serverech, placená za každého uživatele, do toho nesedí.

Proč jsme z NextAuth přešli na Better Auth?

Starší klientské aplikace běží na NextAuth v4 s Prisma adaptérem. Fungují a necháme je být. Přihlášení, které funguje, kvůli článku nepřepisujeme.

U nových aplikací se rozhodnutí v září 2025 zjednodušilo. Auth.js, projekt dříve známý jako NextAuth.js, přešel pod tým Better Auth. Jejich oznámení to říká přímo:

We strongly recommend new projects to start with Better Auth unless there are some very specific feature gaps.

Bereket Engida
Better Auth, Auth.js is now part of Better Auth (22. 9. 2025)

Mezera, kterou zmiňují, jsou bezstavové session bez databáze. Databázi chceme tak jako tak, takže se nás netýká.

Jak vypadá Better Auth v reálné aplikaci?

Tohle je auth balíček z naší startovací šablony, mírně zkrácený. TanStack Start na Cloudflare Workers, Drizzle na D1:

import { betterAuth } from 'better-auth'
import { drizzleAdapter } from 'better-auth/adapters/drizzle'
import { tanstackStartCookies } from 'better-auth/tanstack-start'
import { checkout, polar, portal } from '@polar-sh/better-auth'

export function createAuth() {
  const db = createDb()
  const plugins = [tanstackStartCookies()]

  // Platby jen tehdy, když má aplikace platební token.
  if (env.POLAR_ACCESS_TOKEN) {
    plugins.push(polar({ client: polarClient, createCustomerOnSignUp: true, use: [checkout({ /* produkty */ }), portal()] }))
  }

  return betterAuth({
    database: drizzleAdapter(db, { provider: 'sqlite', schema }),
    trustedOrigins: [env.CORS_ORIGIN],
    emailAndPassword: { enabled: true },
    socialProviders: { /* Google a GitHub, jen když jsou nastavené klíče */ },
    secret: env.BETTER_AUTH_SECRET,
    baseURL: env.BETTER_AUTH_URL,
    plugins,
  })
}

I schéma je naše. Uživatelé a session jsou Drizzle tabulky jako každé jiné:

const user = sqliteTable('user', {
  id: text('id').primaryKey(),
  name: text('name').notNull(),
  email: text('email').notNull().unique(),
  emailVerified: integer('email_verified', { mode: 'boolean' }).default(false).notNull(),
})

const session = sqliteTable('session', {
  id: text('id').primaryKey(),
  token: text('token').notNull().unique(),
  expiresAt: integer('expires_at', { mode: 'timestamp_ms' }).notNull(),
  userId: text('user_id').notNull().references(() => user.id, { onDelete: 'cascade' }),
})
Better Auth vs Clerk jako dvě okna. Vlevo Better Auth: tabulky user, session a account jsou ve vaší vlastní databázi vedle tabulek aplikace a pluginy jako passkeys, dvoufaktorové přihlášení a organizace běží jako kód ve vašem repozitáři. Vpravo Clerk: hostovaný adresář uživatelů s hotovým přihlašovacím UI, účtovaný za MRU (monthly retained user), aplikace s ním mluví přes API.Better Auth vs Clerk jako dvě okna. Vlevo Better Auth: tabulky user, session a account jsou ve vaší vlastní databázi vedle tabulek aplikace a pluginy jako passkeys, dvoufaktorové přihlášení a organizace běží jako kód ve vašem repozitáři. Vpravo Clerk: hostovaný adresář uživatelů s hotovým přihlašovacím UI, účtovaný za MRU (monthly retained user), aplikace s ním mluví přes API.

V tom je praktický rozdíl. Záznam, který vytvořil uživatel, je cizí klíč na user.id ve stejné databázi. Přehled „kdo co udělal“ je jeden SQL join, ne volání externího API a synchronizační job.

Jak se z přihlášení stane váš vlastní kód?

Ukazuje to naše interní aplikace na řízení práce. Zaregistrovat se smí jen krátký seznam lidí a jen přes GitHub. Žádné nastavení u dodavatele to nedělá. Je to pár řádků v databázovém hooku:

return betterAuth({
  database: drizzleAdapter(db, { provider: 'sqlite', schema }),
  emailAndPassword: { enabled: false },
  databaseHooks: {
    user: {
      create: {
        before: async (user) => {
          if (allowedEmails.length > 0 && !allowedEmails.includes(user.email.toLowerCase())) return false
        },
      },
    },
  },
  socialProviders: { github: { clientId, clientSecret, scope: ['repo', 'read:user', 'user:email'] } },
})

Co se stane při registraci:

  1. Přihlášení přes GitHub

    Člověk se přihlásí přes GitHub. Aplikace žádá přístup k repozitářům, protože čte issues a pull requesty.

  2. Hook běží před zápisem

    databaseHooks.user.create.before dostane nového uživatele dřív, než se zapíše.

  3. Není na seznamu: žádný uživatel

    Návrat false zastaví zápis. Nevznikne řádek uživatele ani session.

  4. Je na seznamu: řádek session

    Uživatel i session skončí ve vlastní D1 databázi aplikace, čitelné jakýmkoli SQL klientem.

Seznam povolených e-mailů je proměnná prostředí. Jeho změna je deploy, který projde review jako každá jiná změna. U hostované služby by stejné pravidlo žilo v dashboardu nebo ve webhooku mimo repozitář.

Které pluginy Better Auth máme v produkci?

Každý plugin je kód v repozitáři, takže seznam se snadno ověří:

  • Naše startovací šablona: tanstackStartCookies a platební plugin Polar (checkout a zákaznický portál, zákazník vznikne při registraci). Polar se přidá, jen když existuje token.
  • Webová aplikace pro klienta: Better Auth uvnitř Payload CMS s pluginy admin, organization, twoFactor, emailOTP, magicLink, multiSession a passkey.
  • Klient s online marketplace: samostatná auth služba na MongoDB s magicLink a oidcProvider. Ostatní aplikace marketplace se přes ni přihlašují jako přes jakéhokoli OpenID Connect poskytovatele.

Tři databáze, tři nastavení, jedna knihovna. Toho si ceníme nejvíc: stejná knihovna sedí na SQLite na edge, na Postgresu za CMS i na MongoDB v samostatné službě.

Kdy je lepší volba Clerk?

Clerk dává smysl, když chcete přihlášení hotové tento týden a nikdo v týmu nemá vlastnit kód kolem autentizace. Hotové komponenty ušetří obrazovky. E-maily posílá a službu opravuje Clerk. Na prototyp je bezplatný plán štědrý: 50 000 MRU (monthly retained users) na aplikaci, Pro za 25 USD měsíčně a 0,02 USD za uživatele od 50 001 do 100 000 (ceník Clerku, stav k 24. 10. 2026).

Lock-in je menší, než se zdá. Admin si v Clerku vyexportuje uživatele i s hashi hesel do CSV (dokumentace Clerku, stav k 24. 10. 2026). Data nejsou rukojmím. Práci dá všechno, co je na ně napojené: přihlašovací UI, kontroly session na serveru a údaje, které jste si zkopírovali do vlastních tabulek.

Ještě jeden fakt ke zvážení. Better Auth se 7. července 2026 připojil k Vercelu. Jejich příspěvek říká: „Vercel shares our commitment to keeping auth open source, framework and platform agnostic.“ (blog Better Auth). Licence MIT zůstává, jaká je. Bereme to na vědomí jako u každé změny vlastníka závislosti, na které stavíme.

Co na sebe berete, když přihlášení vlastníte?

Vlastní přihlášení není bez práce. Práci jen přesune na váš tým. Než zvolíte Better Auth, projděte si tento seznam:

Poslední bod je nejlevnější pojistka. Naše šablona na to pouští Playwright testy: přihlašovací formulář se vykreslí, registrace funguje a dashboard bez session přesměruje na login.

Jak nad takovým přihlášením zpřístupňujeme data aplikace AI agentům, rozebíráme v článku Jak postavit MCP server a kdy to nedělat.

Chcete přihlášení, které zůstane ve vaší databázi?

Webové aplikace, kde uživatelé, session i oprávnění žijí ve vlastní databázi klienta, stavíme v rámci služby vývoj webových aplikací na míru. Kód, data i infrastruktura patří klientovi od prvního dne. AI dnes píše veškerý náš kód a za výsledek ručí senior. Od roku 2023 jsme dodali 15+ produkčních projektů.

Ozveme se do dvou pracovních dnů a společně vybereme, co vyřešíme jako první.

Pokud si chcete nejdřív promluvit, domluvte si meeting na 15 minut s Filipem.

Kde dnes žijí vaši uživatelé a dostanete se k nim jedním SQL joinem?

Ve zkratce

  • Better Auth ukládá uživatele a session do vaší databáze. Clerk je drží ve své hostované službě.
  • U nových aplikací jsme z NextAuth přešli na Better Auth, fungující NextAuth aplikace necháváme být.
  • S Better Auth je pravidlo jako seznam povolených e-mailů pár řádků ve vašem repozitáři.
  • Clerk sedí, když nikdo nemá vlastnit kód přihlášení. Uživatele později vyexportujete, ale přepojení dá práci.

Časté otázky

Jaký je rozdíl mezi Better Auth a Clerkem?

Better Auth je open source knihovna pro TypeScript, která ukládá uživatele a session do vaší databáze. Clerk je hostovaná služba, která je ukládá za vás a dá vám hotové přihlašovací UI. Volíte mezi kontrolou bez platby za uživatele a menším množstvím vlastního kódu.

Kolik stojí Better Auth?

Better Auth má licenci MIT, za knihovnu neplatíte. Platíte to, na čem běží: databázi, hosting a e-mailovou službu, která posílá ověřovací odkazy a magic linky.

Kolik stojí Clerk?

K 24. 10. 2026 stojí plán Hobby 0 USD s limitem 50 000 MRU (monthly retained users) na aplikaci, Pro stojí 25 USD měsíčně (20 USD při roční platbě) a uživatelé 50 001 až 100 000 po 0,02 USD měsíčně. Aktuální čísla jsou na clerk.com/pricing.

Vyplatí se přejít z NextAuth na Better Auth?

U nového projektu ano: Auth.js dnes spravuje tým Better Auth a pro novou práci doporučuje Better Auth. Fungující aplikaci na NextAuth jen kvůli tomu nepřepisujeme. Přecházíme, když aplikace potřebuje funkci, kterou NextAuth nemá.

Dá se od Clerku později odejít?

Ano. Admin si v Clerku vyexportuje uživatele i s hashi hesel do CSV. Práci dá zbytek: přihlašovací UI, kontroly session na serveru a údaje o uživatelích, které jste si zkopírovali do vlastních tabulek.

Zeptejte se AI na tento článek

AI při odpovědi využije i naše další články a zkušenosti z reálných projektů.

ChatGPTClaudePerplexity
Engineering

Ostatní články

Rozhodnutí CTO

Claude Code pricing: cena pro tým, API a agenty

Claude Code pricing podle veřejného ceníku Anthropicu (říjen 2026): Pro, Max, Team seaty, Enterprise a API tokeny. Co se hodí vývojářům, na čem běží agent na pozadí a CI reviewer, a pojistky, které agentovi nedovolí projet rozpočet.

Rozhodnutí CTO

Alternativy k Vercelu: proč máme Vercel i Cloudflare

Vercel jsme nenahradili, práci jsme rozdělili. Next.js weby zůstávají na Vercelu, nové aplikace běží na Cloudflare Workers a D1, popsané v TypeScriptu přes Alchemy. Ceny se zdroji, naše konfigurace a zablokovaný deploy od AI agenta.

Rozhodnutí CTO

Drizzle vs Prisma: proč v produkci používáme obě ORM

Drizzle vs Prisma ze dvou ORM, která máme v produkci: Prisma na Postgresu ve starších klientských aplikacích, Drizzle na Cloudflare D1 ve všem novém. Skutečná konfigurace, cesta migrace, co změnila Prisma 7 a kdy bychom neměnili.

Čas přestat plánovat a začít řešit.

Kontakt

  • Digitaliko s.r.o.
    Šípková 377/17
    958 03 Malé Uherce, Slovensko
  • Ozvěte se nám
    info@digitaliko.com
    +421 950 595 506
    WhatsApp