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 (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 veya 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. İşte tam bu noktada, 2026 yılı itibarıyla sektörün yeni standardı haline gelen better auth, sunduğu tamamen self-hosted auth odaklı ve framework-agnostik mimarisiyle imdadımıza yetişiyor.
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ı.
Neden böyle? Çünkü NextAuth, HTTP isteklerini standart Request/Response API’leri üzerinden soyutlamak yerine, Next.js’in kendi iç mekanizmalarına çok sıkı bağladı. SvelteKit, Astro veya SolidStart gibi modern framework’lerde NextAuth kullanmaya çalıştığınızda, aslında arkada çalışmaması gereken tonla Next.js bağımlılığını da projenize dahil etmiş oluyorsunuz.
Dahası, veritabanı adapter’larının hantal yapısı ve karmaşık ilişkisel modelleri yönetirken çıkardığı zorluklar, 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, sadece bir başka auth kütüphanesi değil; tamamen TypeScript-first olarak tasarlanmış, runtime bağımsız bir kimlik doğrulama motorudur. 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. Bu sayede 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 yakınsar.
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 modern 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 aracılığıyla 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 veya 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 bunun için biçilmiş kaftandır. İş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 şudur:
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’i ile 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 veya migration esnasında eski hash’leri otomatik algılayan bir plugin yazabilirsiniz.
Sonuç: 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ü ancak 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 de framework bağımsız, temiz bir API sunuyor. Eğer projenizin geleceğini sağlama almak istiyorsanız, self-hosted dostu Better Auth’a geçiş planınızı şimdiden yapın.