1<!DOCTYPE html><html lang="en" class="inter_b5d792de-module__xmk7IW__className"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/83afe278b6a6bb3c-s.p.2bn3s6zvc0dyp.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" imageSrcSet="/_next/image?url=%2Fhero-gradient.png&w=1200&q=75 1x, /_next/image?url=%2Fhero-gradient.png&w=3840&q=75 2x"/><link rel="stylesheet" href="/_next/static/chunks/0bdh2-v1pf3lv.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/3kbkjihoxg5c9.js"/>
1<script src="/_next/static/chunks/2swhd02htmrwg.js" async=""></script>
1<script src="/_next/static/chunks/23g7bh5qc52wr.js" async=""></script>
1<script src="/_next/static/chunks/26jgqnt_r6no-.js" async=""></script>
1<script src="/_next/static/chunks/turbopack-39z28tx4a7zyb.js" async=""></script>
1<script src="/_next/static/chunks/0zcznnpopwevp.js" async=""></script>
1<script src="/_next/static/chunks/0fs5a-7i-i7jv.js" async=""></script>
1<script src="/_next/static/chunks/1n_i4wrl-gdck.js" async=""></script>
1<script src="/_next/static/chunks/393fgzbj-v6du.js" async=""></script>
1<meta name="next-size-adjust" content=""/><title>Aura Auth | Authentication for the Modern Web</title>
1<script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script>
1</head><body class="flex flex-col min-h-screen overflow-x-hidden"><div hidden=""><!--$--><!--/$--></div>
1<script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","theme","system",null,["light","dark"],null,true,true)</script>
1<!--$--><div class="bg-fd-secondary/50 p-3 empty:hidden"></div><!--/$--><header><nav data-state="false" class="group w-full px-6 fixed z-20 border-b border-border bg-background"><div class="mx-auto max-w-6xl text-muted-foreground transition-all duration-300"><div class="py-3 flex flex-wrap items-center justify-between gap-6 relative lg:gap-0 lg:py-4"><div class="w-full flex items-center justify-between lg:w-auto"><a class="text-white" aria-label="home" href="/">Aura Auth</a><button class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border border-transparent bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground size-9 -mr-2 text-white relative z-20 cursor-pointer lg:hidden" aria-label="Open Menu"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-menu in-data-[state=active]:rotate-180 group-data-[state=active]:scale-0 group-data-[state=active]:opacity-0 m-auto size-6 duration-200" aria-hidden="true"><path d="M4 5h16"></path><path d="M4 12h16"></path><path d="M4 19h16"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-x group-data-[state=active]:rotate-0 group-data-[state=active]:scale-100 group-data-[state=active]:opacity-100 absolute inset-0 m-auto size-6 -rotate-180 scale-0 opacity-0 duration-200" aria-hidden="true"><path d="M18 6 6 18"></path><path d="m6 6 12 12"></path></svg></button></div><div class="m-auto absolute inset-0 hidden size-fit lg:block"><ul class="flex gap-8 text-base"><li><a class="hover:text-white block duration-150" href="/"><span>Home</span></a></li><li><a class="hover:text-white block duration-150" href="/docs/introduction"><span>Docs</span></a></li><li><a class="hover:text-white block duration-150" href="/docs/contributing"><span>Community</span></a></li></ul></div><div class="w-full mt-5 hidden flex-wrap items-center justify-end space-y-8 bg-background group-data-[state=active]:block lg:group-data-[state=active]:flex md:flex-nowrap lg:m-0 lg:flex lg:w-fit lg:gap-6 lg:space-y-0 lg:border-transparent lg:bg-transparent lg:p-0 dark:lg:bg-transparent"><ul class="space-y-4 text-base lg:hidden"><li><a class="hover:text-white block duration-150" href="/"><span>Home</span></a></li><li><a class="hover:text-white block duration-150" href="/docs/introduction"><span>Docs</span></a></li><li><a class="hover:text-white block duration-150" href="/docs/contributing"><span>Community</span></a></li></ul><div class="flex w-full items-center flex-col space-y-3 sm:hidden sm:gap-3 sm:space-y-0 md:w-fit lg:flex lg:flex-row"><a target="_blank" rel="noopener noreferrer" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none hover:bg-primary/80 h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-full text-white border-white/10 rounded-none bg-white/10 lg:w-fit lg:hidden" href="https://github.com/aura-stack-ts/auth">GitHub</a><a target="_blank" rel="noopener noreferrer" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border border-transparent bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='
1size-'])]:size-4 items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 hidden lg:flex" href="https://github.com/aura-stack-ts/auth">GitHub</a><a class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none border-border bg-background hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-full rounded-none lg:w-fit" href="/docs/introduction">Get Started</a></div></div></div></div></nav></header><main class="min-h-screen text-primary antialiased relative overflow-hidden bg-background"><section class="mt-15 px-6 relative"><div class="min-h-[45dvw] max-w-6xl mx-auto py-18 px-6 flex items-center justify-center flex-col text-center border-x border-border"><div class="max-w-md relative z-10 lg:max-w-2xl"><h1 class="text-white font-normal text-4xl -tracking-[1.5px] lg:text-5xl">Ship OAuth 2.0. Secure by default. Authentication workflows made easy.</h1><p class="mt-8 mb-12 text-white/80">Create powerful authentication workflows with just a few lines of code. Ship OAuth 2.0, encrypted sessions, and CSRF protection without rebuilding the plumbing.</p><div class="flex flex-col justify-center items-center gap-5 xs:flex-row"><a class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none bg-black border-black text-white hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-full xs:w-fit" href="/docs/introduction">Get Started</a><span class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none bg-black border-black text-white hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-full xs:w-fit">pnpm add @aura-stack/auth<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy ml-1 size-4 text-neutral-500 hover:cursor-pointer" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg></span></div></div><div class="size-full absolute left-0 top-0 pointer-events-none">
1<img alt="Hero Gradient Background" width="1200" height="800" decoding="async" data-nimg="1" class="size-full" style="color:transparent" srcSet="/_next/image?url=%2Fhero-gradient.png&w=1200&q=75 1x, /_next/image?url=%2Fhero-gradient.png&w=3840&q=75 2x" src="/_next/image?url=%2Fhero-gradient.png&w=3840&q=75"/></div></div></section><section class="py-24 border-t border-border"><h2 class="flex items-center justify-center gap-x-8 text-center"><span class="w-3 h-1 block bg-white"></span>Powered by<span class="w-3 h-1 block bg-white"></span></h2><div class="mt-8 flex items-center justify-center gap-x-8 overflow-hidden"><span class="w-0 min-w-fit">TypeScript</span><span class="w-0 min-w-fit">Next.js</span><span class="w-0 min-w-fit">React</span><span class="w-0 min-w-fit">Node.js</span><span class="w-0 min-w-fit">OAuth 2.0</span><span class="w-0 min-w-fit">OpenID</span></div></section><div class="py-10 border-t border-border"></div><section class="px-6 border-t border-border"><div class="max-w-6xl py-20 mx-auto border-x border-border"><div class="mb-16 text-center"><h2 class="mb-4 text-4xl font-bold text-white md:text-5xl">What You Get</h2><p class="max-w-2xl mx-auto text-lg text-white/70">Everything you need to build secure, production-ready authentication workflows</p></div><div class="p-6 grid gap-6 md:grid-cols-2 lg:grid-cols-3"><a class="group p-6 size-full flex flex-col justify-start relative border border-border transition-all duration-300 bg-background hover:border-white/40" href="/docs/concepts/framework-agnostic"><div class="mb-4"><div class="size-12 flex items-center justify-center"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-globe size-8 text-white" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"></path><path d="M2 12h20"></path></svg></div></div><h3 class="mb-2 text-xl font-semibold text-white transition-colors">Framework-Agnostic</h3><p class="mb-3 text-white/70 leading-relaxed">Seamlessly integrate with any web framework or library. Build authentication flows that work with React, Vue, Svelte, and more.</p><button class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none border-border hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-fit mt-auto bg-white/5">Try now</button><img alt="" loading="lazy" width="400" height="400" decoding="async" data-nimg="1" class="w-full absolute bottom-0 right-0 opacity-0 group-hover:opacity-100 transition-opacity" style="color:transparent" srcSet="/_next/image?url=%2Fshape.png&w=640&q=75 1x, /_next/image?url=%2Fshape.png&w=828&q=75 2x" src="/_next/image?url=%2Fshape.png&w=828&q=75"/></a><a class="group p-6 size-full flex flex-col justify-start relative border border-border transition-all duration-300 bg-background hover:border-white/40" href="/docs/concepts/runtime-agnosstic"><div class="mb-4"><div class="size-12 flex items-center justify-center"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layers size-8 text-white" aria-hidden="true"><path d="M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z"></path><path d="M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12"></path><path d="M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17"></path></svg></div></div><h3 class="mb-2 text-xl font-semibold text-white transition-colors">Runtime-Agnostic</h3><p class="mb-3 text-white/70 leading-relaxed">Run on any JavaScript runtime built on top of the Web Standard APIs (Request, Response, Fetch, Web Crypto).</p><button class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='
1size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none border-border hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-fit mt-auto bg-white/5">Try now</button><img alt="" loading="lazy" width="400" height="400" decoding="async" data-nimg="1" class="w-full absolute bottom-0 right-0 opacity-0 group-hover:opacity-100 transition-opacity" style="color:transparent" srcSet="/_next/image?url=%2Fshape.png&w=640&q=75 1x, /_next/image?url=%2Fshape.png&w=828&q=75 2x" src="/_next/image?url=%2Fshape.png&w=828&q=75"/></a><a class="group p-6 size-full flex flex-col justify-start relative border border-border transition-all duration-300 bg-background hover:border-white/40" href="/docs/concepts/oauth"><div class="mb-4"><div class="size-12 flex items-center justify-center"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-lock size-8 text-white" aria-hidden="true"><rect width="18" height="11" x="3" y="11" rx="2" ry="2"></rect><path d="M7 11V7a5 5 0 0 1 10 0v4"></path></svg></div></div><h3 class="mb-2 text-xl font-semibold text-white transition-colors">OAuth 2.0 & OpenID Connect</h3><p class="mb-3 text-white/70 leading-relaxed">First-class support for OAuth 2.0 and OpenID Connect. Implements PKCE, Authorization Code Flow for secure authentication.</p><button class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none border-border hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-fit mt-auto bg-white/5">Try now</button><img alt="" loading="lazy" width="400" height="400" decoding="async" data-nimg="1" class="w-full absolute bottom-0 right-0 opacity-0 group-hover:opacity-100 transition-opacity" style="color:transparent" srcSet="/_next/image?url=%2Fshape.png&w=640&q=75 1x, /_next/image?url=%2Fshape.png&w=828&q=75 2x" src="/_next/image?url=%2Fshape.png&w=828&q=75"/></a><a class="group p-6 size-full flex flex-col justify-start relative border border-border transition-all duration-300 bg-background hover:border-white/40" href="/docs/concepts/typescript"><div class="mb-4"><div class="size-12 flex items-center justify-center"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code-xml size-8 text-white" aria-hidden="true"><path d="m18 16 4-4-4-4"></path><path d="m6 8-4 4 4 4"></path><path d="m14.5 4-5 16"></path></svg></div></div><h3 class="mb-2 text-xl font-semibold text-white transition-colors">Type-first API</h3><p class="mb-3 text-white/70 leading-relaxed">First-class TypeScript support with complete type inference. Build authentication flows with confidence and catch errors at compile time.</p><button class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='
1size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none border-border hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-fit mt-auto bg-white/5">Try now</button><img alt="" loading="lazy" width="400" height="400" decoding="async" data-nimg="1" class="w-full absolute bottom-0 right-0 opacity-0 group-hover:opacity-100 transition-opacity" style="color:transparent" srcSet="/_next/image?url=%2Fshape.png&w=640&q=75 1x, /_next/image?url=%2Fshape.png&w=828&q=75 2x" src="/_next/image?url=%2Fshape.png&w=828&q=75"/></a><a class="group p-6 size-full flex flex-col justify-start relative border border-border transition-all duration-300 bg-background hover:border-white/40" href="/docs/concepts/security-model#token-management"><div class="mb-4"><div class="size-12 flex items-center justify-center"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-shield size-8 text-white" aria-hidden="true"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path></svg></div></div><h3 class="mb-2 text-xl font-semibold text-white transition-colors">Secure by default</h3><p class="mb-3 text-white/70 leading-relaxed">Strong default practices for PKCE, state validation, secure cookies, redirect validation and CSRF validation.</p><button class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none border-border hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-fit mt-auto bg-white/5">Try now</button><img alt="" loading="lazy" width="400" height="400" decoding="async" data-nimg="1" class="w-full absolute bottom-0 right-0 opacity-0 group-hover:opacity-100 transition-opacity" style="color:transparent" srcSet="/_next/image?url=%2Fshape.png&w=640&q=75 1x, /_next/image?url=%2Fshape.png&w=828&q=75 2x" src="/_next/image?url=%2Fshape.png&w=828&q=75"/></a><a class="group p-6 size-full flex flex-col justify-start relative border border-border transition-all duration-300 bg-background hover:border-white/40" href="/docs/core-principles"><div class="mb-4"><div class="size-12 flex items-center justify-center"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-cookie size-8 text-white" aria-hidden="true"><path d="M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5"></path><path d="M8.5 8.5v.01"></path><path d="M16 15.5v.01"></path><path d="M12 12v.01"></path><path d="M11 17v.01"></path><path d="M7 14v.01"></path></svg></div></div><h3 class="mb-2 text-xl font-semibold text-white transition-colors">Composable</h3><p class="mb-3 text-white/70 leading-relaxed">Built from small, focused utilities and packages. Use only what you need (auth handlers, JOSE utilities and APIs).</p><button class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='
1size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none border-border hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-fit mt-auto bg-white/5">Try now</button><img alt="" loading="lazy" width="400" height="400" decoding="async" data-nimg="1" class="w-full absolute bottom-0 right-0 opacity-0 group-hover:opacity-100 transition-opacity" style="color:transparent" srcSet="/_next/image?url=%2Fshape.png&w=640&q=75 1x, /_next/image?url=%2Fshape.png&w=828&q=75 2x" src="/_next/image?url=%2Fshape.png&w=828&q=75"/></a></div></div></section><div class="py-10 border-t border-border"></div><section class="px-6 border-t border-border"><div class="max-w-6xl px-6 py-20 mx-auto border-x border-border"><div class="mb-16 text-center"><h2 class="mb-4 text-4xl font-bold text-white md:text-5xl">Integrations</h2><p class="max-w-2xl mx-auto text-lg text-white/70">First-class support for popular frameworks with working integration examples</p></div><div class="grid gap-6 md:grid-cols-2 lg:grid-cols-4"><a class="group p-6 flex items-start justify-between flex-col relative border border-border transition-all duration-300 bg-background hover:border-white/40" target="_blank" rel="noopener noreferrer" href="https://github.com/aura-stack-ts/auth/tree/master/apps/nextjs"><div class="mb-4 flex flex-col items-start text-start relative z-10"><h3 class="mb-2 text-xl font-semibold text-white transition-colors">Next.js</h3><p class="mb-4 text-sm text-white/70 leading-relaxed">Full-stack React framework with App Router and Pages Router support</p></div><button class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none border-border hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-fit mt-auto bg-white/5">View Example</button><img alt="" loading="lazy" width="100" height="100" decoding="async" data-nimg="1" class="w-full absolute top-0 right-0 opacity-0 group-hover:opacity-100 transition-opacity" style="color:transparent" srcSet="/_next/image?url=%2Fshape-top.png&w=128&q=75 1x, /_next/image?url=%2Fshape-top.png&w=256&q=75 2x" src="/_next/image?url=%2Fshape-top.png&w=256&q=75"/></a><a class="group p-6 flex items-start justify-between flex-col relative border border-border transition-all duration-300 bg-background hover:border-white/40" target="_blank" rel="noopener noreferrer" href="https://github.com/aura-stack-ts/auth/tree/master/apps/nuxt"><div class="mb-4 flex flex-col items-start text-start relative z-10"><h3 class="mb-2 text-xl font-semibold text-white transition-colors">Nuxt</h3><p class="mb-4 text-sm text-white/70 leading-relaxed">The intuitive Vue framework for building web applications</p></div><button class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none border-border hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-fit mt-auto bg-white/5">View Example</button><img alt="" loading="lazy" width="100" height="100" decoding="async" data-nimg="1" class="w-full absolute top-0 right-0 opacity-0 group-hover:opacity-100 transition-opacity" style="color:transparent" srcSet="/_next/image?url=%2Fshape-top.png&w=128&q=75 1x, /_next/image?url=%2Fshape-top.png&w=256&q=75 2x" src="/_next/image?url=%2Fshape-top.png&w=256&q=75"/></a><a class="group p-6 flex items-start justify-between flex-col relative border border-border transition-all duration-300 bg-background hover:border-white/40" target="_blank" rel="noopener noreferrer" href="https://github.com/aura-stack-ts/auth/tree/master/apps/react-router"><div class="mb-4 flex flex-col items-start text-start relative z-10"><h3 class="mb-2 text-xl font-semibold text-white transition-colors">React Router</h3><p class="mb-4 text-sm text-white/70 leading-relaxed">Declarative routing for React applications</p></div><button class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='
1size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none border-border hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-fit mt-auto bg-white/5">View Example</button><img alt="" loading="lazy" width="100" height="100" decoding="async" data-nimg="1" class="w-full absolute top-0 right-0 opacity-0 group-hover:opacity-100 transition-opacity" style="color:transparent" srcSet="/_next/image?url=%2Fshape-top.png&w=128&q=75 1x, /_next/image?url=%2Fshape-top.png&w=256&q=75 2x" src="/_next/image?url=%2Fshape-top.png&w=256&q=75"/></a><a class="group p-6 flex items-start justify-between flex-col relative border border-border transition-all duration-300 bg-background hover:border-white/40" target="_blank" rel="noopener noreferrer" href="https://github.com/aura-stack-ts/auth/tree/master/apps/tanstack-start"><div class="mb-4 flex flex-col items-start text-start relative z-10"><h3 class="mb-2 text-xl font-semibold text-white transition-colors">TanStack Start</h3><p class="mb-4 text-sm text-white/70 leading-relaxed">Full-stack React framework powered by TanStack Router</p></div><button class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none border-border hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-fit mt-auto bg-white/5">View Example</button><img alt="" loading="lazy" width="100" height="100" decoding="async" data-nimg="1" class="w-full absolute top-0 right-0 opacity-0 group-hover:opacity-100 transition-opacity" style="color:transparent" srcSet="/_next/image?url=%2Fshape-top.png&w=128&q=75 1x, /_next/image?url=%2Fshape-top.png&w=256&q=75 2x" src="/_next/image?url=%2Fshape-top.png&w=256&q=75"/></a></div></div></section><div class="py-10 border-t border-border"></div><section class="px-6 border-t border-border"><div class="max-w-6xl mx-auto py-20 px-6 border-x border-border"><div class="text-center mb-16"><h2 class="text-4xl font-bold mb-4 text-white md:text-5xl">Hear From Our Community</h2><p class="text-lg text-white/70 max-w-2xl mx-auto">Developers around the world are building secure authentication with Aura Auth</p></div><div class="pb-4 overflow-x-auto relative"><div class="grid grid-cols-1 gap-6 sm:grid-cols-2 md:grid-cols-3"><div class="w-full shrink-0 p-6 border border-border transition-all duration-300 bg-background hover:bg-white/5"><div class="flex items-center gap-3 mb-4"><div class="size-12 flex items-center justify-center rounded-full text-white font-semibold">AR</div><h4 class="text-white font-semibold">Alex Rivera</h4></div><p class="text-white/80 leading-relaxed">Aura Auth saved us weeks of development time. The type-safe APIs and framework-agnostic design made integration seamless across our microservices.</p></div><div class="w-full shrink-0 p-6 border border-border transition-all duration-300 bg-background hover:bg-white/5"><div class="flex items-center gap-3 mb-4"><div class="size-12 flex items-center justify-center rounded-full text-white font-semibold">SC</div><h4 class="text-white font-semibold">Sarah Chen</h4></div><p class="text-white/80 leading-relaxed">Finally, an auth library that doesn't lock you into a specific framework. We migrated from Next.js to Astro without touching our auth logic.</p></div><div class="w-full shrink-0 p-6 border border-border transition-all duration-300 bg-background hover:bg-white/5"><div class="flex items-center gap-3 mb-4"><div class="size-12 flex items-center justify-center rounded-full text-white font-semibold">MJ</div><h4 class="text-white font-semibold">Marcus Johnson</h4></div><p class="text-white/80 leading-relaxed">The security-first approach and built-in CSRF protection give us peace of mind. Plus, the TypeScript support is top-notch.</p></div><div class="w-full shrink-0 p-6 border border-border transition-all duration-300 bg-background hover:bg-white/5"><div class="flex items-center gap-3 mb-4"><div class="size-12 flex items-center justify-center rounded-full text-white font-semibold">
1EW</div><h4 class="text-white font-semibold">Emily Watson</h4></div><p class="text-white/80 leading-relaxed">We deployed Aura Auth on Cloudflare Workers and Vercel Edge without any issues. True framework-agnostic design.</p></div><div class="w-full shrink-0 p-6 border border-border transition-all duration-300 bg-background hover:bg-white/5"><div class="flex items-center gap-3 mb-4"><div class="size-12 flex items-center justify-center rounded-full text-white font-semibold">DK</div><h4 class="text-white font-semibold">David Kim</h4></div><p class="text-white/80 leading-relaxed">The OAuth 2.0 implementation is clean and well-documented. Adding new providers is straightforward.</p></div><div class="w-full shrink-0 p-6 border border-border transition-all duration-300 bg-background hover:bg-white/5"><div class="flex items-center gap-3 mb-4"><div class="size-12 flex items-center justify-center rounded-full text-white font-semibold">LM</div><h4 class="text-white font-semibold">Lisa Martinez</h4></div><p class="text-white/80 leading-relaxed">Aura Auth's session management is exactly what we needed. Encrypted by default, configurable, and performant.</p></div></div></div></div></section><div class="py-10 border-t border-border"></div><section class="px-6 border-t border-border"><div class="mx-auto max-w-6xl py-20 px-6 border-x border-border"><div class=" mx-auto lg:grid grid-cols-2"><div class="max-w-md text-center mb-16 lg:text-start"><h2 class="text-3xl font-bold mb-4 text-white md:text-4xl">Frequently Asked Questions</h2><p class="text-lg text-white/70 max-w-2xl mx-auto">Everything you need to know about Aura Auth</p></div><div class="space-y-4"><div class="border-b border-border bg-background overflow-hidden transition-all duration-300"><button type="button" class="w-full py-5 flex items-center justify-between text-left" aria-controls="faq-panel-0" id="faq-button-0" aria-expanded="false"><h3 class="text-lg font-semibold text-white pr-8">What is Aura Auth?</h3><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down size-5 text-white/70 shrink-0 transition-transform duration-300" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div class="overflow-hidden transition-all duration-300 max-h-0" id="faq-panel-0" role="region" aria-labelledby="faq-button-0"><div class="pb-5"><p class="text-white/70 leading-relaxed">Aura Auth is a framework-agnostic, type-safe authentication library for TypeScript. It provides OAuth 2.0 support, session management, and security features like CSRF protection, all built on web standards.</p></div></div></div><div class="border-b border-border bg-background overflow-hidden transition-all duration-300"><button type="button" class="w-full py-5 flex items-center justify-between text-left" aria-controls="faq-panel-1" id="faq-button-1" aria-expanded="false"><h3 class="text-lg font-semibold text-white pr-8">Which frameworks does Aura Auth support?</h3><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down size-5 text-white/70 shrink-0 transition-transform duration-300" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div class="overflow-hidden transition-all duration-300 max-h-0" id="faq-panel-1" role="region" aria-labelledby="faq-button-1"><div class="pb-5"><p class="text-white/70 leading-relaxed">Aura Auth works with any JavaScript runtime that supports the Web Request/Response API. This includes Next.js, Astro, TanStack Start, SvelteKit, Remix, Express, and more. It can also run on edge runtimes like Cloudflare Workers and Vercel Edge.</p></div></div></div><div class="border-b border-border bg-background overflow-hidden transition-all duration-300"><button type="button" class="w-full py-5 flex items-center justify-between text-left" aria-controls="faq-panel-2" id="faq-button-2" aria-expanded="false"><h3 class="text-lg font-semibold text-white pr-8">Is Aura Auth secure?</h3><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down size-5 text-white/70 shrink-0 transition-transform duration-300" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div class="overflow-hidden transition-all duration-300 max-h-0" id="faq-panel-2" role="region" aria-labelledby="faq-button-2"><div class="pb-5"><p class="text-white/70 leading-relaxed">Yes. Aura Auth is built with security as a top priority. It includes encrypted JWT sessions, CSRF protection, secure cookie handling with proper flags, and follows OAuth 2.0 best practices. All sessions are encrypted by default.</p></div></div></div><div class="border-b border-border bg-background overflow-hidden transition-all duration-300"><button type="button" class="w-full py-5 flex items-center justify-between text-left" aria-controls="faq-panel-3" id="faq-button-3" aria-expanded="false"><h3 class="text-lg font-semibold text-white pr-8">Can I use Aura Auth in production?</h3><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down size-5 text-white/70 shrink-0 transition-transform duration-300" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div class="overflow-hidden transition-all duration-300 max-h-0" id="faq-panel-3" role="region" aria-labelledby="faq-button-3"><div class="pb-5"><p class="text-white/70 leading-relaxed">Absolutely. Aura Auth is production-ready and designed for enterprise-grade applications. It's been thoroughly tested and follows security best practices for authentication workflows.</p></div></div></div><div class="border-b border-border bg-background overflow-hidden transition-all duration-300"><button type="button" class="w-full py-5 flex items-center justify-between text-left" aria-controls="faq-panel-4" id="faq-button-4" aria-expanded="false"><h3 class="text-lg font-semibold text-white pr-8">What OAuth providers are supported?</h3><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down size-5 text-white/70 shrink-0 transition-transform duration-300" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div class="overflow-hidden transition-all duration-300 max-h-0" id="faq-panel-4" role="region" aria-labelledby="faq-button-4"><div class="pb-5"><p class="text-white/70 leading-relaxed">Aura Auth supports multiple OAuth providers including GitHub, Discord, Google, Figma, and more. You can also easily add custom OAuth 2.0 providers using the extensible provider system.</p></div></div></div><div class="border-b border-border bg-background overflow-hidden transition-all duration-300"><button type="button" class="w-full py-5 flex items-center justify-between text-left" aria-controls="faq-panel-5" id="faq-button-5" aria-expanded="false"><h3 class="text-lg font-semibold text-white pr-8">How does Aura Auth compare to Auth.js?</h3><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down size-5 text-white/70 shrink-0 transition-transform duration-300" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div class="overflow-hidden transition-all duration-300 max-h-0" id="faq-panel-5" role="region" aria-labelledby="faq-button-5"><div class="pb-5"><p class="text-white/70 leading-relaxed">Aura Auth is inspired by Auth.js but focuses on being truly framework-agnostic by using web standards (Request/Response API). It's built with TypeScript-first design, provides stronger type safety, and has a simpler, more composable API.</p></div></div></div></div></div></div></section><div class="py-10 border-t border-border"></div><section class="px-6 relative border-t border-border"><div class="max-w-6xl mx-auto py-30 px-6 text-center relative z-10 border-x border-border"><div class="max-w-md mx-auto relative z-10 lg:max-w-2xl"><h2 class="text-white font-normal text-4xl -tracking-[1.5px] lg:text-5xl">Ready to Ship Authentication 10x Faster?</h2><p class="mt-8 mb-12 text-white/80">Join developers building secure, production-ready auth with Aura Auth. Get started in minutes, not days.</p></div><div class="flex flex-col sm:flex-row items-center justify-center gap-4"><a class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='
1size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none bg-black border-black text-white hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-full sm:w-fit" href="/docs/introduction">Get Started</a><a target="_blank" rel="noopener noreferrer" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none border-border hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-full bg-transparent sm:w-fit" href="https://github.com/aura-stack-ts/auth"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-github size-5" aria-hidden="true"><path d="M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4"></path><path d="M9 18c-4.51 2-5-2-7-2"></path></svg>View on GitHub</a></div></div><div class="size-full absolute left-0 top-0 pointer-events-none">
1<img alt="Hero Gradient Background" loading="lazy" width="1200" height="800" decoding="async" data-nimg="1" class="size-full" style="color:transparent" srcSet="/_next/image?url=%2Fhero-gradient.png&w=1200&q=75 1x, /_next/image?url=%2Fhero-gradient.png&w=3840&q=75 2x" src="/_next/image?url=%2Fhero-gradient.png&w=3840&q=75"/></div></section><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:0vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:30vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:60vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:90vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:120vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:150vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:180vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:210vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:240vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:270vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:300vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:330vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:360vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:390vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:420vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:450vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:480vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:510vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:540vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:570vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:600vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:630vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:660vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:690vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:720vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:750vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:780vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:810vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:840vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:870vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:900vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:930vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:960vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:990vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:1020vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:1050vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:1080vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:1110vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:1140vh"></span><span class="h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10" style="top:1170vh"></span></main><footer class="px-6 border-t border-border bg-background"><div class="max-w-6xl mx-auto"><div class="py-10 grid gap-8 border-b border-border sm:py-8 sm:gap-x-12 md:py-10 md:grid-cols-[1.5fr_auto_auto_auto] md:gap-x-14 base:py-16 base
1:gap-x-20 lg:py-24"><div><h3 class="font-semibold text-primary mb-4">Aura Auth</h3><p class="text-sm text-primary-foreground">Modern authentication for TypeScript applications.</p></div><div><h4 class="font-medium text-primary mb-4">Documentation</h4><ul class="space-y-2 text-sm text-primary-foreground"><li><a class="hover:text-primary transition" href="/docs">Overview</a></li><li><a class="hover:text-primary transition" href="/docs/quick-start">Quick Start</a></li><li><a class="hover:text-primary transition" href="/docs/oauth">OAuth Providers</a></li></ul></div><div><h4 class="font-medium text-primary mb-4">Community</h4><ul class="space-y-2 text-sm text-primary-foreground"><li><a class="hover:text-primary transition" target="_blank" rel="noopener noreferrer" href="/docs/contributing">Contributing</a></li><li><a class="hover:text-primary transition" target="_blank" rel="noopener noreferrer" href="https://github.com/aura-stack-ts/auth">GitHub</a></li><li><a class="hover:text-primary transition" target="_blank" rel="noopener noreferrer" href="https://discord.gg/eY8xMS6Brx">Discord</a></li></ul></div><div><h4 class="font-medium text-primary mb-4">Resources</h4><ul class="space-y-2 text-sm text-primary-foreground"><li><a class="hover:text-primary transition" href="https://www.npmjs.com/package/@aura-stack/auth">Npm Package</a></li><li><a class="hover:text-primary transition" href="/docs/api-reference/core">API Reference</a></li><li><a class="hover:text-primary transition" href="https://github.com/aura-stack-ts/auth/issues">Issues</a></li></ul></div></div><div class="py-4 flex flex-col md:flex-row items-center justify-between"><p class="text-sm text-neutral-500">© <!-- -->2026<!-- --> Aura Stack. All rights reserved.</p><div class="flex items-center gap-6 text-sm text-neutral-500 mt-6 md:mt-0"><a class="hover:text-neutral-300 transition" target="_blank" rel="noopener noreferrer" href="https://github.com/aura-stack-ts/auth">GitHub</a><a class="hover:text-neutral-300 transition" target="_blank" rel="noopener noreferrer" href="https://www.npmjs.com/package/@aura-stack/auth">npm</a></div></div></div></footer><!--$--><!--/$--><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><!--/$-->
1<script src="/_next/static/chunks/3kbkjihoxg5c9.js" id="_R_" async=""></script>
1<script>(self.__next_f=self.__next_f||[]).push([0])</script>
1<script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[655823,[\"/_next/static/chunks/0zcznnpopwevp.js\",\"/_next/static/chunks/0fs5a-7i-i7jv.js\"],\"RootProvider\"]\n3:I[350265,[\"/_next/static/chunks/0zcznnpopwevp.js\",\"/_next/static/chunks/0fs5a-7i-i7jv.js\"],\"default\"]\n4:I[777322,[\"/_next/static/chunks/0zcznnpopwevp.js\",\"/_next/static/chunks/0fs5a-7i-i7jv.js\"],\"default\"]\n5:I[811729,[\"/_next/static/chunks/0zcznnpopwevp.js\",\"/_next/static/chunks/0fs5a-7i-i7jv.js\"],\"Analytics\"]\n6:I[373998,[\"/_next/static/chunks/0zcznnpopwevp.js\",\"/_next/static/chunks/0fs5a-7i-i7jv.js\",\"/_next/static/chunks/1n_i4wrl-gdck.js\",\"/_next/static/chunks/393fgzbj-v6du.js\"],\"Header\"]\n7:I[887539,[\"/_next/static/chunks/0zcznnpopwevp.js\",\"/_next/static/chunks/0fs5a-7i-i7jv.js\",\"/_next/static/chunks/1n_i4wrl-gdck.js\",\"/_next/static/chunks/393fgzbj-v6du.js\"],\"Hero\"]\n1d:I[54315,[\"/_next/static/chunks/0zcznnpopwevp.js\",\"/_next/static/chunks/0fs5a-7i-i7jv.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/0bdh2-v1pf3lv.css\",\"style\"]\n:HL[\"/_next/static/media/83afe278b6a6bb3c-s.p.2bn3s6zvc0dyp.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n"])</script>
1<script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"(home)\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0bdh2-v1pf3lv.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0zcznnpopwevp.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/0fs5a-7i-i7jv.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"inter_b5d792de-module__xmk7IW__className\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"flex flex-col min-h-screen overflow-x-hidden\",\"children\":[[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}],[\"$\",\"$L5\",null,{}]]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"$L6\",null,{}],[\"$\",\"main\",null,{\"className\":\"min-h-screen text-primary antialiased relative overflow-hidden bg-background\",\"children\":[[\"$\",\"$L7\",null,{}],[\"$\",\"section\",null,{\"className\":\"py-24 border-t border-border\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"flex items-center justify-center gap-x-8 text-center\",\"children\":[[\"$\",\"span\",null,{\"className\":\"w-3 h-1 block bg-white\"}],\"Powered by\",[\"$\",\"span\",null,{\"className\":\"w-3 h-1 block bg-white\"}]]}],[\"$\",\"div\",null,{\"className\":\"mt-8 flex items-center justify-center gap-x-8 overflow-hidden\",\"children\":[[\"$\",\"span\",null,{\"className\":\"w-0 min-w-fit\",\"children\":\"TypeScript\"}],[\"$\",\"span\",null,{\"className\":\"w-0 min-w-fit\",\"children\":\"Next.js\"}],[\"$\",\"span\",null,{\"className\":\"w-0 min-w-fit\",\"children\":\"React\"}],[\"$\",\"span\",null,{\"className\":\"w-0 min-w-fit\",\"children\":\"Node.js\"}],[\"$\",\"span\",null,{\"className\":\"w-0 min-w-fit\",\"children\":\"OAuth 2.0\"}],[\"$\",\"span\",null,{\"className\":\"w-0 min-w-fit\",\"children\":\"OpenID\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"py-10 border-t border-border\"}],[\"$\",\"section\",null,{\"className\":\"px-6 border-t border-border\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-6xl py-20 mx-auto border-x border-border\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-16 text-center\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"mb-4 text-4xl font-bold text-white md:text-5xl\",\"children\":\"What You Get\"}],[\"$\",\"p\",null,{\"className\":\"max-w-2xl mx-auto text-lg text-white/70\",\"children\":\"Everything you need to build secure, production-ready authentication workflows\"}]]}],[\"$\",\"div\",null,{\"className\":\"p-6 grid gap-6 md:grid-cols-2 lg:grid-cols-3\",\"children\":[\"$L8\",\"$L9\",\"$La\",\"$Lb\",\"$Lc\",\"$Ld\"]}]]}]}],\"$Le\",\"$Lf\",\"$L10\",\"$L11\",\"$L12\",\"$L13\",\"$L14\",\"$L15\",\"$L16\"]}],\"$L17\"],[\"$L18\",\"$L19\"],\"$L1a\"]}],{}
1,null,false,null]},null,false,\"$@1b\"]},null,false,null],\"$L1c\",false]],\"m\":\"$undefined\",\"G\":[\"$1d\",[\"$L1e\"]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"MzSgF_Y1snqqGenGFxF9i\"}\n"])</script>
1<script>self.__next_f.push([1,"1f:I[31306,[\"/_next/static/chunks/0zcznnpopwevp.js\",\"/_next/static/chunks/0fs5a-7i-i7jv.js\",\"/_next/static/chunks/1n_i4wrl-gdck.js\",\"/_next/static/chunks/393fgzbj-v6du.js\"],\"\"]\n20:I[534137,[\"/_next/static/chunks/0zcznnpopwevp.js\",\"/_next/static/chunks/0fs5a-7i-i7jv.js\",\"/_next/static/chunks/1n_i4wrl-gdck.js\",\"/_next/static/chunks/393fgzbj-v6du.js\"],\"Image\"]\n26:I[849505,[\"/_next/static/chunks/0zcznnpopwevp.js\",\"/_next/static/chunks/0fs5a-7i-i7jv.js\",\"/_next/static/chunks/1n_i4wrl-gdck.js\",\"/_next/static/chunks/393fgzbj-v6du.js\"],\"FAQ\"]\n37:I[406884,[\"/_next/static/chunks/0zcznnpopwevp.js\",\"/_next/static/chunks/0fs5a-7i-i7jv.js\"],\"OutletBoundary\"]\n38:\"$Sreact.suspense\"\n3b:I[406884,[\"/_next/static/chunks/0zcznnpopwevp.js\",\"/_next/static/chunks/0fs5a-7i-i7jv.js\"],\"ViewportBoundary\"]\n3d:I[406884,[\"/_next/static/chunks/0zcznnpopwevp.js\",\"/_next/static/chunks/0fs5a-7i-i7jv.js\"],\"MetadataBoundary\"]\n"])</script>
1<script>self.__next_f.push([1,"8:[\"$\",\"$L1f\",\"Framework-Agnostic\",{\"href\":\"/docs/concepts/framework-agnostic\",\"className\":\"group p-6 size-full flex flex-col justify-start relative border border-border transition-all duration-300 bg-background hover:border-white/40\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-4\",\"children\":[\"$\",\"div\",null,{\"className\":\"size-12 flex items-center justify-center\",\"children\":[\"$\",\"svg\",null,{\"ref\":\"$undefined\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-globe size-8 text-white\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"circle\",\"1mglay\",{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}],[\"$\",\"path\",\"13o1zl\",{\"d\":\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\"}],[\"$\",\"path\",\"9i4pu4\",{\"d\":\"M2 12h20\"}],\"$undefined\"]}]}]}],[\"$\",\"h3\",null,{\"className\":\"mb-2 text-xl font-semibold text-white transition-colors\",\"children\":\"Framework-Agnostic\"}],[\"$\",\"p\",null,{\"className\":\"mb-3 text-white/70 leading-relaxed\",\"children\":\"Seamlessly integrate with any web framework or library. Build authentication flows that work with React, Vue, Svelte, and more.\"}],[\"$\",\"button\",null,{\"className\":\"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [\u0026_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [\u0026_svg]:pointer-events-none shrink-0 [\u0026_svg]:shrink-0 outline-none group/button select-none border-border hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-fit mt-auto bg-white/5\",\"ref\":\"$undefined\",\"children\":\"Try now\"}],[\"$\",\"$L20\",null,{\"className\":\"w-full absolute bottom-0 right-0 opacity-0 group-hover:opacity-100 transition-opacity\",\"width\":400,\"height\":400,\"src\":\"/shape.png\",\"alt\":\"\"}]]}]\n"])</script>
1<script>self.__next_f.push([1,"9:[\"$\",\"$L1f\",\"Runtime-Agnostic\",{\"href\":\"/docs/concepts/runtime-agnosstic\",\"className\":\"group p-6 size-full flex flex-col justify-start relative border border-border transition-all duration-300 bg-background hover:border-white/40\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-4\",\"children\":[\"$\",\"div\",null,{\"className\":\"size-12 flex items-center justify-center\",\"children\":[\"$\",\"svg\",null,{\"ref\":\"$undefined\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-layers size-8 text-white\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"path\",\"zw3jo\",{\"d\":\"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z\"}],[\"$\",\"path\",\"1wduqc\",{\"d\":\"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12\"}],[\"$\",\"path\",\"kqbvx6\",{\"d\":\"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17\"}],\"$undefined\"]}]}]}],[\"$\",\"h3\",null,{\"className\":\"mb-2 text-xl font-semibold text-white transition-colors\",\"children\":\"Runtime-Agnostic\"}],[\"$\",\"p\",null,{\"className\":\"mb-3 text-white/70 leading-relaxed\",\"children\":\"Run on any JavaScript runtime built on top of the Web Standard APIs (Request, Response, Fetch, Web Crypto).\"}],[\"$\",\"button\",null,{\"className\":\"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [\u0026_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [\u0026_svg]:pointer-events-none shrink-0 [\u0026_svg]:shrink-0 outline-none group/button select-none border-border hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-fit mt-auto bg-white/5\",\"ref\":\"$undefined\",\"children\":\"Try now\"}],[\"$\",\"$L20\",null,{\"className\":\"w-full absolute bottom-0 right-0 opacity-0 group-hover:opacity-100 transition-opacity\",\"width\":400,\"height\":400,\"src\":\"/shape.png\",\"alt\":\"\"}]]}]\n"])</script>
1<script>self.__next_f.push([1,"a:[\"$\",\"$L1f\",\"OAuth 2.0 \u0026 OpenID Connect\",{\"href\":\"/docs/concepts/oauth\",\"className\":\"group p-6 size-full flex flex-col justify-start relative border border-border transition-all duration-300 bg-background hover:border-white/40\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-4\",\"children\":[\"$\",\"div\",null,{\"className\":\"size-12 flex items-center justify-center\",\"children\":[\"$\",\"svg\",null,{\"ref\":\"$undefined\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-lock size-8 text-white\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"rect\",\"1w4ew1\",{\"width\":\"18\",\"height\":\"11\",\"x\":\"3\",\"y\":\"11\",\"rx\":\"2\",\"ry\":\"2\"}],[\"$\",\"path\",\"fwvmzm\",{\"d\":\"M7 11V7a5 5 0 0 1 10 0v4\"}],\"$undefined\"]}]}]}],[\"$\",\"h3\",null,{\"className\":\"mb-2 text-xl font-semibold text-white transition-colors\",\"children\":\"OAuth 2.0 \u0026 OpenID Connect\"}],[\"$\",\"p\",null,{\"className\":\"mb-3 text-white/70 leading-relaxed\",\"children\":\"First-class support for OAuth 2.0 and OpenID Connect. Implements PKCE, Authorization Code Flow for secure authentication.\"}],[\"$\",\"button\",null,{\"className\":\"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [\u0026_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [\u0026_svg]:pointer-events-none shrink-0 [\u0026_svg]:shrink-0 outline-none group/button select-none border-border hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-fit mt-auto bg-white/5\",\"ref\":\"$undefined\",\"children\":\"Try now\"}],[\"$\",\"$L20\",null,{\"className\":\"w-full absolute bottom-0 right-0 opacity-0 group-hover:opacity-100 transition-opacity\",\"width\":400,\"height\":400,\"src\":\"/shape.png\",\"alt\":\"\"}]]}]\n"])</script>
1<script>self.__next_f.push([1,"b:[\"$\",\"$L1f\",\"Type-first API\",{\"href\":\"/docs/concepts/typescript\",\"className\":\"group p-6 size-full flex flex-col justify-start relative border border-border transition-all duration-300 bg-background hover:border-white/40\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-4\",\"children\":[\"$\",\"div\",null,{\"className\":\"size-12 flex items-center justify-center\",\"children\":[\"$\",\"svg\",null,{\"ref\":\"$undefined\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-code-xml size-8 text-white\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"path\",\"1inbqp\",{\"d\":\"m18 16 4-4-4-4\"}],[\"$\",\"path\",\"15zrgr\",{\"d\":\"m6 8-4 4 4 4\"}],[\"$\",\"path\",\"e7oirm\",{\"d\":\"m14.5 4-5 16\"}],\"$undefined\"]}]}]}],[\"$\",\"h3\",null,{\"className\":\"mb-2 text-xl font-semibold text-white transition-colors\",\"children\":\"Type-first API\"}],[\"$\",\"p\",null,{\"className\":\"mb-3 text-white/70 leading-relaxed\",\"children\":\"First-class TypeScript support with complete type inference. Build authentication flows with confidence and catch errors at compile time.\"}],[\"$\",\"button\",null,{\"className\":\"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [\u0026_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [\u0026_svg]:pointer-events-none shrink-0 [\u0026_svg]:shrink-0 outline-none group/button select-none border-border hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-fit mt-auto bg-white/5\",\"ref\":\"$undefined\",\"children\":\"Try now\"}],[\"$\",\"$L20\",null,{\"className\":\"w-full absolute bottom-0 right-0 opacity-0 group-hover:opacity-100 transition-opacity\",\"width\":400,\"height\":400,\"src\":\"/shape.png\",\"alt\":\"\"}]]}]\n"])</script>
1<script>self.__next_f.push([1,"c:[\"$\",\"$L1f\",\"Secure by default\",{\"href\":\"/docs/concepts/security-model#token-management\",\"className\":\"group p-6 size-full flex flex-col justify-start relative border border-border transition-all duration-300 bg-background hover:border-white/40\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-4\",\"children\":[\"$\",\"div\",null,{\"className\":\"size-12 flex items-center justify-center\",\"children\":[\"$\",\"svg\",null,{\"ref\":\"$undefined\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-shield size-8 text-white\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"path\",\"oel41y\",{\"d\":\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\"}],\"$undefined\"]}]}]}],[\"$\",\"h3\",null,{\"className\":\"mb-2 text-xl font-semibold text-white transition-colors\",\"children\":\"Secure by default\"}],[\"$\",\"p\",null,{\"className\":\"mb-3 text-white/70 leading-relaxed\",\"children\":\"Strong default practices for PKCE, state validation, secure cookies, redirect validation and CSRF validation.\"}],[\"$\",\"button\",null,{\"className\":\"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [\u0026_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [\u0026_svg]:pointer-events-none shrink-0 [\u0026_svg]:shrink-0 outline-none group/button select-none border-border hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-fit mt-auto bg-white/5\",\"ref\":\"$undefined\",\"children\":\"Try now\"}],[\"$\",\"$L20\",null,{\"className\":\"w-full absolute bottom-0 right-0 opacity-0 group-hover:opacity-100 transition-opacity\",\"width\":400,\"height\":400,\"src\":\"/shape.png\",\"alt\":\"\"}]]}]\n"])</script>
1<script>self.__next_f.push([1,"d:[\"$\",\"$L1f\",\"Composable\",{\"href\":\"/docs/core-principles\",\"className\":\"group p-6 size-full flex flex-col justify-start relative border border-border transition-all duration-300 bg-background hover:border-white/40\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-4\",\"children\":[\"$\",\"div\",null,{\"className\":\"size-12 flex items-center justify-center\",\"children\":[\"$\",\"svg\",null,{\"ref\":\"$undefined\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-cookie size-8 text-white\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"path\",\"laymnq\",{\"d\":\"M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5\"}],[\"$\",\"path\",\"ue8clq\",{\"d\":\"M8.5 8.5v.01\"}],[\"$\",\"path\",\"14dtrp\",{\"d\":\"M16 15.5v.01\"}],[\"$\",\"path\",\"u5ubse\",{\"d\":\"M12 12v.01\"}],[\"$\",\"path\",\"1hyl5a\",{\"d\":\"M11 17v.01\"}],[\"$\",\"path\",\"uct60s\",{\"d\":\"M7 14v.01\"}],\"$undefined\"]}]}]}],[\"$\",\"h3\",null,{\"className\":\"mb-2 text-xl font-semibold text-white transition-colors\",\"children\":\"Composable\"}],[\"$\",\"p\",null,{\"className\":\"mb-3 text-white/70 leading-relaxed\",\"children\":\"Built from small, focused utilities and packages. Use only what you need (auth handlers, JOSE utilities and APIs).\"}],[\"$\",\"button\",null,{\"className\":\"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [\u0026_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [\u0026_svg]:pointer-events-none shrink-0 [\u0026_svg]:shrink-0 outline-none group/button select-none border-border hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-fit mt-auto bg-white/5\",\"ref\":\"$undefined\",\"children\":\"Try now\"}],[\"$\",\"$L20\",null,{\"className\":\"w-full absolute bottom-0 right-0 opacity-0 group-hover:opacity-100 transition-opacity\",\"width\":400,\"height\":400,\"src\":\"/shape.png\",\"alt\":\"\"}]]}]\n"])</script>
1<script>self.__next_f.push([1,"e:[\"$\",\"div\",null,{\"className\":\"py-10 border-t border-border\"}]\n"])</script>
1<script>self.__next_f.push([1,"f:[\"$\",\"section\",null,{\"className\":\"px-6 border-t border-border\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-6xl px-6 py-20 mx-auto border-x border-border\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-16 text-center\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"mb-4 text-4xl font-bold text-white md:text-5xl\",\"children\":\"Integrations\"}],[\"$\",\"p\",null,{\"className\":\"max-w-2xl mx-auto text-lg text-white/70\",\"children\":\"First-class support for popular frameworks with working integration examples\"}]]}],[\"$\",\"div\",null,{\"className\":\"grid gap-6 md:grid-cols-2 lg:grid-cols-4\",\"children\":[[\"$\",\"$L1f\",\"Next.js\",{\"href\":\"https://github.com/aura-stack-ts/auth/tree/master/apps/nextjs\",\"className\":\"group p-6 flex items-start justify-between flex-col relative border border-border transition-all duration-300 bg-background hover:border-white/40\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-4 flex flex-col items-start text-start relative z-10\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"mb-2 text-xl font-semibold text-white transition-colors\",\"children\":\"Next.js\"}],[\"$\",\"p\",null,{\"className\":\"mb-4 text-sm text-white/70 leading-relaxed\",\"children\":\"Full-stack React framework with App Router and Pages Router support\"}]]}],[\"$\",\"button\",null,{\"className\":\"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [\u0026_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [\u0026_svg]:pointer-events-none shrink-0 [\u0026_svg]:shrink-0 outline-none group/button select-none border-border hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-fit mt-auto bg-white/5\",\"ref\":\"$undefined\",\"children\":\"View Example\"}],[\"$\",\"$L20\",null,{\"className\":\"w-full absolute top-0 right-0 opacity-0 group-hover:opacity-100 transition-opacity\",\"width\":100,\"height\":100,\"src\":\"/shape-top.png\",\"alt\":\"\"}]]}],[\"$\",\"$L1f\",\"Nuxt\",{\"href\":\"https://github.com/aura-stack-ts/auth/tree/master/apps/nuxt\",\"className\":\"group p-6 flex items-start justify-between flex-col relative border border-border transition-all duration-300 bg-background hover:border-white/40\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-4 flex flex-col items-start text-start relative z-10\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"mb-2 text-xl font-semibold text-white transition-colors\",\"children\":\"Nuxt\"}],[\"$\",\"p\",null,{\"className\":\"mb-4 text-sm text-white/70 leading-relaxed\",\"children\":\"The intuitive Vue framework for building web applications\"}]]}],[\"$\",\"button\",null,{\"className\":\"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [\u0026_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [\u0026_svg]:pointer-events-none shrink-0 [\u0026_svg]:shrink-0 outline-none group/button select-none border-border hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-fit mt-auto bg-white/5\",\"ref\":\"$undefined\",\"children\":\"View Example\"}],\"$L21\"]}],\"$L22\",\"$L23\"]}]]}]}]\n"])</script>
1<script>self.__next_f.push([1,"10:[\"$\",\"div\",null,{\"className\":\"py-10 border-t border-border\"}]\n"])</script>
1<script>self.__next_f.push([1,"11:[\"$\",\"section\",null,{\"className\":\"px-6 border-t border-border\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-6xl mx-auto py-20 px-6 border-x border-border\",\"children\":[[\"$\",\"div\",null,{\"className\":\"text-center mb-16\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-4xl font-bold mb-4 text-white md:text-5xl\",\"children\":\"Hear From Our Community\"}],[\"$\",\"p\",null,{\"className\":\"text-lg text-white/70 max-w-2xl mx-auto\",\"children\":\"Developers around the world are building secure authentication with Aura Auth\"}]]}],[\"$\",\"div\",null,{\"className\":\"pb-4 overflow-x-auto relative\",\"children\":[\"$\",\"div\",null,{\"className\":\"grid grid-cols-1 gap-6 sm:grid-cols-2 md:grid-cols-3\",\"children\":[[\"$\",\"div\",\"Alex Rivera\",{\"className\":\"w-full shrink-0 p-6 border border-border transition-all duration-300 bg-background hover:bg-white/5\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-3 mb-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"size-12 flex items-center justify-center rounded-full text-white font-semibold\",\"children\":\"AR\"}],[\"$\",\"h4\",null,{\"className\":\"text-white font-semibold\",\"children\":\"Alex Rivera\"}]]}],[\"$\",\"p\",null,{\"className\":\"text-white/80 leading-relaxed\",\"children\":\"Aura Auth saved us weeks of development time. The type-safe APIs and framework-agnostic design made integration seamless across our microservices.\"}]]}],[\"$\",\"div\",\"Sarah Chen\",{\"className\":\"w-full shrink-0 p-6 border border-border transition-all duration-300 bg-background hover:bg-white/5\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-3 mb-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"size-12 flex items-center justify-center rounded-full text-white font-semibold\",\"children\":\"SC\"}],[\"$\",\"h4\",null,{\"className\":\"text-white font-semibold\",\"children\":\"Sarah Chen\"}]]}],[\"$\",\"p\",null,{\"className\":\"text-white/80 leading-relaxed\",\"children\":\"Finally, an auth library that doesn't lock you into a specific framework. We migrated from Next.js to Astro without touching our auth logic.\"}]]}],[\"$\",\"div\",\"Marcus Johnson\",{\"className\":\"w-full shrink-0 p-6 border border-border transition-all duration-300 bg-background hover:bg-white/5\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-3 mb-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"size-12 flex items-center justify-center rounded-full text-white font-semibold\",\"children\":\"MJ\"}],[\"$\",\"h4\",null,{\"className\":\"text-white font-semibold\",\"children\":\"Marcus Johnson\"}]]}],[\"$\",\"p\",null,{\"className\":\"text-white/80 leading-relaxed\",\"children\":\"The security-first approach and built-in CSRF protection give us peace of mind. Plus, the TypeScript support is top-notch.\"}]]}],[\"$\",\"div\",\"Emily Watson\",{\"className\":\"w-full shrink-0 p-6 border border-border transition-all duration-300 bg-background hover:bg-white/5\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-3 mb-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"size-12 flex items-center justify-center rounded-full text-white font-semibold\",\"children\":\"EW\"}],[\"$\",\"h4\",null,{\"className\":\"text-white font-semibold\",\"children\":\"Emily Watson\"}]]}],[\"$\",\"p\",null,{\"className\":\"text-white/80 leading-relaxed\",\"children\":\"We deployed Aura Auth on Cloudflare Workers and Vercel Edge without any issues. True framework-agnostic design.\"}]]}],[\"$\",\"div\",\"David Kim\",{\"className\":\"w-full shrink-0 p-6 border border-border transition-all duration-300 bg-background hover:bg-white/5\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-3 mb-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"size-12 flex items-center justify-center rounded-full text-white font-semibold\",\"children\":\"DK\"}],[\"$\",\"h4\",null,{\"className\":\"text-white font-semibold\",\"children\":\"David Kim\"}]]}],[\"$\",\"p\",null,{\"className\":\"text-white/80 leading-relaxed\",\"children\":\"The OAuth 2.0 implementation is clean and well-documented. Adding new providers is straightforward.\"}]]}],[\"$\",\"div\",\"Lisa Martinez\",{\"className\":\"w-full shrink-0 p-6 border border-border transition-all duration-300 bg-background hover:bg-white/5\",\"children\":[\"$L24\",\"$L25\"]}]]}]}]]}]}]\n"])</script>
1<script>self.__next_f.push([1,"12:[\"$\",\"div\",null,{\"className\":\"py-10 border-t border-border\"}]\n13:[\"$\",\"$L26\",null,{}]\n14:[\"$\",\"div\",null,{\"className\":\"py-10 border-t border-border\"}]\n"])</script>
1<script>self.__next_f.push([1,"15:[\"$\",\"section\",null,{\"className\":\"px-6 relative border-t border-border\",\"children\":[[\"$\",\"div\",null,{\"className\":\"max-w-6xl mx-auto py-30 px-6 text-center relative z-10 border-x border-border\",\"children\":[[\"$\",\"div\",null,{\"className\":\"max-w-md mx-auto relative z-10 lg:max-w-2xl\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-white font-normal text-4xl -tracking-[1.5px] lg:text-5xl\",\"children\":\"Ready to Ship Authentication 10x Faster?\"}],[\"$\",\"p\",null,{\"className\":\"mt-8 mb-12 text-white/80\",\"children\":\"Join developers building secure, production-ready auth with Aura Auth. Get started in minutes, not days.\"}]]}],[\"$\",\"div\",null,{\"className\":\"flex flex-col sm:flex-row items-center justify-center gap-4\",\"children\":[[\"$\",\"$L1f\",null,{\"href\":\"/docs/introduction\",\"children\":\"Get Started\",\"className\":\"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [\u0026_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [\u0026_svg]:pointer-events-none shrink-0 [\u0026_svg]:shrink-0 outline-none group/button select-none bg-black border-black text-white hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-full sm:w-fit\",\"ref\":null}],[\"$\",\"$L1f\",null,{\"href\":\"https://github.com/aura-stack-ts/auth\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"svg\",null,{\"ref\":\"$undefined\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-github size-5\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"path\",\"tonef\",{\"d\":\"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4\"}],[\"$\",\"path\",\"9comsn\",{\"d\":\"M9 18c-4.51 2-5-2-7-2\"}],\"$undefined\"]}],\"View on GitHub\"],\"className\":\"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [\u0026_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [\u0026_svg]:pointer-events-none shrink-0 [\u0026_svg]:shrink-0 outline-none group/button select-none border-border hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-full bg-transparent sm:w-fit\",\"ref\":null}]]}]]}],[\"$\",\"div\",null,{\"className\":\"size-full absolute left-0 top-0 pointer-events-none\",\"children\":[\"$\",\"$L20\",null,{\"className\":\"size-full\",\"src\":\"/hero-gradient.png\",\"alt\":\"Hero Gradient Backgroun
1d\",\"width\":1200,\"height\":800,\"loading\":\"lazy\"}]}]]}]\n"])</script>
1<script>self.__next_f.push([1,"16:[[\"$\",\"span\",\"0\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"0vh\"}}],[\"$\",\"span\",\"1\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"30vh\"}}],[\"$\",\"span\",\"2\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"60vh\"}}],[\"$\",\"span\",\"3\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"90vh\"}}],[\"$\",\"span\",\"4\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"120vh\"}}],[\"$\",\"span\",\"5\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"150vh\"}}],[\"$\",\"span\",\"6\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"180vh\"}}],[\"$\",\"span\",\"7\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"210vh\"}}],[\"$\",\"span\",\"8\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"240vh\"}}],[\"$\",\"span\",\"9\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"270vh\"}}],[\"$\",\"span\",\"10\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"300vh\"}}],[\"$\",\"span\",\"11\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"330vh\"}}],[\"$\",\"span\",\"12\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"360vh\"}}],[\"$\",\"span\",\"13\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"390vh\"}}],[\"$\",\"span\",\"14\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"420vh\"}}],[\"$\",\"span\",\"15\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"450vh\"}}],[\"$\",\"span\",\"16\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"480vh\"}}],[\"$\",\"span\",\"17\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"510vh\"}}],[\"$\",\"span\",\"18\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"540vh\"}}],[\"$\",\"span\",\"19\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"570vh\"}}],[\"$\",\"span\",\"20\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"600vh\"}}],[\"$\",\"span\",\"21\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"630vh\"}}],[\"$\",\"span\",\"22\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"660vh\"}}],[\"$\",\"span\",\"23\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"690vh\"}}],\"$L27\",\"$L28\",\"$L29\",\"$L2a\",\"$L2b\",\"$L2c\",\"$L2d\",\"$L2e\",\"$L2f\",\"$L30\",\"$L31\",\"$L32\",\"$L33\",\"$L34\",\"$L35\",\"$L36\"]\n"])</script>
1<script>self.__next_f.push([1,"17:[\"$\",\"footer\",null,{\"className\":\"px-6 border-t border-border bg-background\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-6xl mx-auto\",\"children\":[[\"$\",\"div\",null,{\"className\":\"py-10 grid gap-8 border-b border-border sm:py-8 sm:gap-x-12 md:py-10 md:grid-cols-[1.5fr_auto_auto_auto] md:gap-x-14 base:py-16 base:gap-x-20 lg:py-24\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"h3\",null,{\"className\":\"font-semibold text-primary mb-4\",\"children\":\"Aura Auth\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-primary-foreground\",\"children\":\"Modern authentication for TypeScript applications.\"}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"h4\",null,{\"className\":\"font-medium text-primary mb-4\",\"children\":\"Documentation\"}],[\"$\",\"ul\",null,{\"className\":\"space-y-2 text-sm text-primary-foreground\",\"children\":[[\"$\",\"li\",\"/docs\",{\"children\":[\"$\",\"$L1f\",null,{\"href\":\"/docs\",\"className\":\"hover:text-primary transition\",\"children\":\"Overview\"}]}],[\"$\",\"li\",\"/docs/quick-start\",{\"children\":[\"$\",\"$L1f\",null,{\"href\":\"/docs/quick-start\",\"className\":\"hover:text-primary transition\",\"children\":\"Quick Start\"}]}],[\"$\",\"li\",\"/docs/oauth\",{\"children\":[\"$\",\"$L1f\",null,{\"href\":\"/docs/oauth\",\"className\":\"hover:text-primary transition\",\"children\":\"OAuth Providers\"}]}]]}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"h4\",null,{\"className\":\"font-medium text-primary mb-4\",\"children\":\"Community\"}],[\"$\",\"ul\",null,{\"className\":\"space-y-2 text-sm text-primary-foreground\",\"children\":[[\"$\",\"li\",\"/docs/contributing\",{\"children\":[\"$\",\"$L1f\",null,{\"href\":\"/docs/contributing\",\"className\":\"hover:text-primary transition\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Contributing\"}]}],[\"$\",\"li\",\"https://github.com/aura-stack-ts/auth\",{\"children\":[\"$\",\"$L1f\",null,{\"href\":\"https://github.com/aura-stack-ts/auth\",\"className\":\"hover:text-primary transition\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"GitHub\"}]}],[\"$\",\"li\",\"https://discord.gg/eY8xMS6Brx\",{\"children\":[\"$\",\"$L1f\",null,{\"href\":\"https://discord.gg/eY8xMS6Brx\",\"className\":\"hover:text-primary transition\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Discord\"}]}]]}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"h4\",null,{\"className\":\"font-medium text-primary mb-4\",\"children\":\"Resources\"}],[\"$\",\"ul\",null,{\"className\":\"space-y-2 text-sm text-primary-foreground\",\"children\":[[\"$\",\"li\",\"https://www.npmjs.com/package/@aura-stack/auth\",{\"children\":[\"$\",\"$L1f\",null,{\"href\":\"https://www.npmjs.com/package/@aura-stack/auth\",\"className\":\"hover:text-primary transition\",\"children\":\"Npm Package\"}]}],[\"$\",\"li\",\"/docs/api-reference/core\",{\"children\":[\"$\",\"$L1f\",null,{\"href\":\"/docs/api-reference/core\",\"className\":\"hover:text-primary transition\",\"children\":\"API Reference\"}]}],[\"$\",\"li\",\"https://github.com/aura-stack-ts/auth/issues\",{\"children\":[\"$\",\"$L1f\",null,{\"href\":\"https://github.com/aura-stack-ts/auth/issues\",\"className\":\"hover:text-primary transition\",\"children\":\"Issues\"}]}]]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"py-4 flex flex-col md:flex-row items-center justify-between\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-sm text-neutral-500\",\"children\":[\"© \",2026,\" Aura Stack. All rights reserved.\"]}],[\"$\",\"div\",null,{\"className\":\"flex items-center gap-6 text-sm text-neutral-500 mt-6 md:mt-0\",\"children\":[[\"$\",\"$L1f\",null,{\"className\":\"hover:text-neutral-300 transition\",\"href\":\"https://github.com/aura-stack-ts/auth\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"GitHub\"}],[\"$\",\"$L1f\",null,{\"className\":\"hover:text-neutral-300 transition\",\"href\":\"https://www.npmjs.com/package/@aura-stack/auth\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"npm\"}]]}]]}]]}]}]\n"])</script>
1<script>self.__next_f.push([1,"18:[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/1n_i4wrl-gdck.js\",\"async\":true,\"nonce\":\"$undefined\"}]\n19:[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/393fgzbj-v6du.js\",\"async\":true,\"nonce\":\"$undefined\"}]\n1a:[\"$\",\"$L37\",null,{\"children\":[\"$\",\"$38\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@39\"}]}]\n3a:[]\n1b:\"$W3a\"\n1c:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L3b\",null,{\"children\":\"$L3c\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L3d\",null,{\"children\":[\"$\",\"$38\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L3e\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}]\n1e:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0bdh2-v1pf3lv.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n"])</script>
1<script>self.__next_f.push([1,"21:[\"$\",\"$L20\",null,{\"className\":\"w-full absolute top-0 right-0 opacity-0 group-hover:opacity-100 transition-opacity\",\"width\":100,\"height\":100,\"src\":\"/shape-top.png\",\"alt\":\"\"}]\n"])</script>
1<script>self.__next_f.push([1,"22:[\"$\",\"$L1f\",\"React Router\",{\"href\":\"https://github.com/aura-stack-ts/auth/tree/master/apps/react-router\",\"className\":\"group p-6 flex items-start justify-between flex-col relative border border-border transition-all duration-300 bg-background hover:border-white/40\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-4 flex flex-col items-start text-start relative z-10\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"mb-2 text-xl font-semibold text-white transition-colors\",\"children\":\"React Router\"}],[\"$\",\"p\",null,{\"className\":\"mb-4 text-sm text-white/70 leading-relaxed\",\"children\":\"Declarative routing for React applications\"}]]}],[\"$\",\"button\",null,{\"className\":\"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [\u0026_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [\u0026_svg]:pointer-events-none shrink-0 [\u0026_svg]:shrink-0 outline-none group/button select-none border-border hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-fit mt-auto bg-white/5\",\"ref\":\"$undefined\",\"children\":\"View Example\"}],[\"$\",\"$L20\",null,{\"className\":\"w-full absolute top-0 right-0 opacity-0 group-hover:opacity-100 transition-opacity\",\"width\":100,\"height\":100,\"src\":\"/shape-top.png\",\"alt\":\"\"}]]}]\n"])</script>
1<script>self.__next_f.push([1,"23:[\"$\",\"$L1f\",\"TanStack Start\",{\"href\":\"https://github.com/aura-stack-ts/auth/tree/master/apps/tanstack-start\",\"className\":\"group p-6 flex items-start justify-between flex-col relative border border-border transition-all duration-300 bg-background hover:border-white/40\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-4 flex flex-col items-start text-start relative z-10\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"mb-2 text-xl font-semibold text-white transition-colors\",\"children\":\"TanStack Start\"}],[\"$\",\"p\",null,{\"className\":\"mb-4 text-sm text-white/70 leading-relaxed\",\"children\":\"Full-stack React framework powered by TanStack Router\"}]]}],[\"$\",\"button\",null,{\"className\":\"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [\u0026_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [\u0026_svg]:pointer-events-none shrink-0 [\u0026_svg]:shrink-0 outline-none group/button select-none border-border hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground h-12 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 w-fit mt-auto bg-white/5\",\"ref\":\"$undefined\",\"children\":\"View Example\"}],[\"$\",\"$L20\",null,{\"className\":\"w-full absolute top-0 right-0 opacity-0 group-hover:opacity-100 transition-opacity\",\"width\":100,\"height\":100,\"src\":\"/shape-top.png\",\"alt\":\"\"}]]}]\n"])</script>
1<script>self.__next_f.push([1,"24:[\"$\",\"div\",null,{\"className\":\"flex items-center gap-3 mb-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"size-12 flex items-center justify-center rounded-full text-white font-semibold\",\"children\":\"LM\"}],[\"$\",\"h4\",null,{\"className\":\"text-white font-semibold\",\"children\":\"Lisa Martinez\"}]]}]\n25:[\"$\",\"p\",null,{\"className\":\"text-white/80 leading-relaxed\",\"children\":\"Aura Auth's session management is exactly what we needed. Encrypted by default, configurable, and performant.\"}]\n27:[\"$\",\"span\",\"24\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"720vh\"}}]\n28:[\"$\",\"span\",\"25\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"750vh\"}}]\n29:[\"$\",\"span\",\"26\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"780vh\"}}]\n2a:[\"$\",\"span\",\"27\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"810vh\"}}]\n2b:[\"$\",\"span\",\"28\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"840vh\"}}]\n2c:[\"$\",\"span\",\"29\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"870vh\"}}]\n2d:[\"$\",\"span\",\"30\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"900vh\"}}]\n2e:[\"$\",\"span\",\"31\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"930vh\"}}]\n2f:[\"$\",\"span\",\"32\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"960vh\"}}]\n30:[\"$\",\"span\",\"33\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"990vh\"}}]\n31:[\"$\",\"span\",\"34\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"1020vh\"}}]\n32:[\"$\",\"span\",\"35\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"1050vh\"}}]\n33:[\"$\",\"span\",\"36\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"1080vh\"}}]\n34:[\"$\",\"span\",\"37\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"1110vh\"}}]\n35:[\"$\",\"span\",\"38\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"1140vh\"}}]\n36:[\"$\",\"span\",\"39\",{\"className\":\"h-px w-[200%] block border-t border-dashed border-border absolute top-0 left-0 origin-top-left rotate-10\",\"style\":{\"top\":\"1170vh\"}}]\n"])</script>
1<script>self.__next_f.push([1,"3c:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script>
1<script>self.__next_f.push([1,"39:null\n3e:[[\"$\",\"title\",\"0\",{\"children\":\"Aura Auth | Authentication for the Modern Web\"}]]\n"])</script>
1</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.