Better Auth: 2026’da Neden NextAuth Yerine Self-Hosted ve Framework-Agnostik Bu Kütüphaneyi Seçmelisiniz?
Hadi dürüst olalım: NextAuth’un (yeni adıyla Auth.js) v4’ten v5’e geçiş sürecinde saçını başını yolmayan, Vercel middleware’lerinin Edge runtime kısıtlamaları yüzünden uykusu kaçmayan bir DevOps ya da SRE mühendisi herhalde yoktur. Modern projelerde web güvenliği ve ölçeklenebilir kimlik doğrulama çözümleri ararken kendimizi sürekli tek bir cloud sağlayıcısının ekosistemine kilitlenmiş buluyoruz. 2026 yılı itibarıyla sektörün yeni standardı haline gelen Better Auth burada devreye giriyor. Tamamen self-hosted odaklı ve framework-agnostik bir mimari sunuyor.
NextAuth bizi nerede yarı yolda bıraktı?
NextAuth, Next.js’in yükselişiyle birlikte altın çağını yaşadı. Ancak monolith bir yapıya bürünmesi ve Vercel’in sunucusuz (serverless) dünyasına aşırı optimize edilmesi, bağımsız mimarilerde büyük çatlaklar yarattı.
NextAuth, HTTP isteklerini standart Request/Response API’leri üzerinden soyutlamak yerine Next.js’in kendi iç mekanizmalarına çok sıkı bağlandı. SvelteKit, Astro veya SolidStart gibi modern framework’lerde kullanmaya çalıştığınızda, arkada çalışmaması gereken tonla Next.js bağımlılığını da projenize dahil etmiş oluyorsunuz.
Veritabanı adapter’larının hantal yapısı ve karmaşık ilişkisel modelleri yönetirken çıkardığı zorluklar da production ortamında veritabanı bağlantı havuzlarının (connection pool) hızla tükenmesine yol açıyor. Kubernetes üzerinde koşan stateless bir pod’un her session doğrulama isteğinde veritabanına doğrudan gitmesi sürdürülebilir bir model değil.
Better Auth ve getirdiği paradigma değişimi
Better Auth başka bir auth kütüphanesinden ibaret değil. Tamamen TypeScript-first olarak tasarlanmış, runtime bağımsız bir kimlik doğrulama motoru. Node.js, Bun, Deno veya Cloudflare Workers fark etmeksizin her yerde aynı performansla çalışır.
Framework-agnostik mimari
Better Auth çekirdeğinde standart Web API’lerini (Request, Response, Headers) kullanır ve uygulamanızın router katmanına doğrudan entegre olur. Bugün Next.js ile başladığınız bir projeyi yarın Astro veya Nuxt’a taşımak istediğinizde auth servisinizde tek bir satır iş mantığı (business logic) değiştirmek zorunda kalmazsınız.
Self-hosted dostu yapı
Clerk veya Auth0 gibi SaaS çözümleri başlangıçta tatlı gelse de kullanıcı sayınız 100k barajını aştığında gelen faturalar ve GDPR/KVKK uyumluluk süreçleri baş ağrıtmaya başlar. Better Auth, verilerinizin ve oturum yönetiminizin tamamen kendi veritabanınızda kalmasını sağlayarak altyapı maliyetlerinizi sıfıra yaklaştırır.
Veritabanı entegrasyonu ve kurulum
Better Auth; Drizzle, Prisma veya Kysely gibi modern araçlarla doğrudan konuşabilir. Aşağıdaki kod bloğunda Drizzle ORM ve PostgreSQL kullanan bir Better Auth konfigürasyonunu inceleyebilirsiniz:
// src/lib/auth.ts
import { betterAuth } from "better-auth";
import { drizzleAdapter } from "better-auth/adapters/drizzle";
import { db } from "./db";
import { user, session, account, verification } from "./schema";
export const auth = betterAuth({
database: drizzleAdapter(db, {
provider: "pg",
schema: {
user,
session,
account,
verification
}
}),
emailAndPassword: {
enabled: true,
autoSignIn: true
},
socialProviders: {
github: {
clientId: process.env.GITHUB_CLIENT_ID!,
clientSecret: process.env.GITHUB_CLIENT_SECRET!,
}
}
});
Şemalarınızı tanımladıktan sonra Better Auth CLI ile migration dosyalarınızı saniyeler içinde oluşturup veritabanınızı güncelleyebilirsiniz:
# Better Auth şemalarını tespit et ve Drizzle dosyalarını oluştur
npx better-auth generate --output ./src/lib/auth-schema.ts
npx drizzle-kit push
DevOps gözünden: ölçekleme ve session caching
Bir SRE olarak state barındıran servisleri scale etmenin ne kadar sancılı olduğunu bilirsiniz. Better Auth hem JWT-based (stateless) hem de database-backed (stateful) session yönetimini destekler. Ancak production ortamında “Active Session” takibi, “Revoke Session” ve WebAuthn (Passkeys) gibi özellikler için stateful ya da hibrit bir model tercih edilir.
Redis ile oturum belleği yönetimi
Her gelen istekte veritabanına `SELECT * FROM session` sorgusu atmak DB connection limitlerinizi tüketebilir. Better Auth, secondary storage katmanı sayesinde oturum bilgilerini Redis üzerinde cache’lemenize izin verir:
// src/lib/auth-with-redis.ts
import Redis from "ioredis";
import { betterAuth } from "better-auth";
const redis = new Redis(process.env.REDIS_URL!);
export const auth = betterAuth({
// ... db configuration
secondaryStorage: {
get: async (key) => await redis.get(key),
set: async (key, value, ttl) => {
if (ttl) {
await redis.set(key, value, "EX", ttl);
} else {
await redis.set(key, value);
}
},
delete: async (key) => {
await redis.del(key);
}
}
});
Mikro servis olarak dockerize etmek
Auth mantığını ana monolith uygulamanızdan ayırıp bağımsız bir mikro servis olarak deploy etmek istiyorsanız Better Auth buna da çok uygun. İşte stateless bir Bun runtime üzerinde koşan Dockerfile örneği:
# Multi-stage Dockerfile for Better Auth API Service
FROM oven/bun:1.1-alpine AS base
WORKDIR /app
FROM base AS install
COPY package.json bun.lockb ./
RUN bun install --frozen-lockfile
FROM base AS prerelease
COPY --from=install /app/node_modules ./node_modules
COPY . .
ENV NODE_ENV=production
RUN bun build ./src/index.ts --outfile dist/index.js
FROM base AS release
COPY --from=prerelease /app/dist/index.js .
COPY --from=prerelease /app/package.json .
USER bun
EXPOSE 3000
ENTRYPOINT [ "bun", "run", "index.js" ]
NextAuth’tan canlı geçiş (zero-downtime migration)
Mevcut ve aktif kullanıcıları olan bir sistemi migrate etmek, havadaki uçağın motorunu değiştirmeye benzer. Sıfır kesintiyle Better Auth’a geçmek için izlemeniz gereken strateji şu:
1. Şema dönüşümü
NextAuth şeması ile Better Auth şeması büyük oranda paraleldir. SQL katmanında yazacağınız basit bir migration script’iyle eski session ve user verilerini taşıyabilirsiniz:
-- NextAuth kullanıcılarını Better Auth yapısına aktarma scripti
INSERT INTO "better_auth_user" (id, name, email, "emailVerified", image, "createdAt", "updatedAt")
SELECT
id,
name,
email,
"emailVerified",
image,
COALESCE("createdAt", NOW()),
COALESCE("updatedAt", NOW())
FROM "User";
2. Password hash uyumluluğu (Argon2id fallback)
NextAuth genellikle şifreleri bcrypt ile hash’ler. Better Auth ise varsayılan olarak modern Argon2id kullanır. Eski kullanıcıların şifrelerini geçersiz kılmamak için Better Auth’un şifre doğrulama (password verification) aşamasına bcrypt fallback’i ekleyebilir ya da migration esnasında eski hash’leri otomatik algılayan bir plugin yazabilirsiniz.
2026’da doğru kararı vermek
Kimlik doğrulama katmanı bir web uygulamasının en kritik bileşenidir. NextAuth yıllarca işimizi gördü, ama modern cloud-native yaklaşımlar, containerization ve microservice mimarileri karşısında hantal kalmaya başladı. Better Auth, SRE ekiplerine altyapıyı diledikleri gibi ölçekleme özgürlüğü verirken yazılım geliştiricilere framework bağımsız, temiz bir API sunuyor. Projenizin geleceğini sağlama almak istiyorsanız self-hosted dostu Better Auth’a geçiş planınızı şimdiden yapın.