Pre-alpha. API may change between releases.
Auth for SvelteKit. Email+OTP + optional passkeys.
"Anahtar" = key (Turkish)
- Email -> OTP sent via your
onSendOTPcallback - OTP verified -> session cookie
- First login -> passkey registration prompt
- Future logins -> passkey autofill, OTP fallback
pnpm add @mrgnw/anahtarCreate your auth instance:
// src/lib/server/auth.ts
import { createAuth } from "@mrgnw/anahtar";
import { sqliteAdapter } from "@mrgnw/anahtar/sqlite";
import Database from "better-sqlite3";
const db = new Database("data/app.db");
export const auth = createAuth({
db: sqliteAdapter(db),
onSendOTP: async (email, code) => {
console.log(`[dev] OTP for ${email}: ${code}`);
},
});Wire into SvelteKit:
// src/hooks.server.ts
import { auth } from "$lib/server/auth";
export const handle = auth.handle;// src/routes/api/auth/[...path]/+server.ts
import { auth } from "$lib/server/auth";
export const { GET, POST } = auth.handlers;Optional UI component:
<script>
import { AuthFlow } from '@mrgnw/anahtar/components';
import { goto } from '$app/navigation';
</script>
<AuthFlow onSuccess={() => goto('/')} />68 tests: 46 unit (node) + 22 component (happy-dom).
pnpm test:unit
pnpm test:browser
pnpm test- Integration guide — install, config, theming, Postgres setup
- PLAN.md — architecture, DB adapter interface, test setup