[{"data":1,"prerenderedAt":1179},["ShallowReactive",2],{"navigation_docs":3,"-guides-custom-database":208,"-guides-custom-database-surround":1174},[4,42,68,115,136,157],{"title":5,"path":6,"stem":7,"children":8,"icon":11},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,12,17,22,27,32,37],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-sparkles",{"title":13,"path":14,"stem":15,"icon":16},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F1.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F2.configuration","i-lucide-settings",{"title":23,"path":24,"stem":25,"icon":26},"Client Setup","\u002Fgetting-started\u002Fclient-setup","1.getting-started\u002F3.client-setup","i-lucide-monitor",{"title":28,"path":29,"stem":30,"icon":31},"Type Augmentation","\u002Fgetting-started\u002Ftype-augmentation","1.getting-started\u002F4.type-augmentation","i-lucide-type",{"title":33,"path":34,"stem":35,"icon":36},"Schema Generation (NuxtHub)","\u002Fgetting-started\u002Fschema-generation","1.getting-started\u002F5.schema-generation","i-lucide-database",{"title":38,"path":39,"stem":40,"icon":41},"How It Works","\u002Fgetting-started\u002Fhow-it-works","1.getting-started\u002F6.how-it-works","i-lucide-workflow",{"title":43,"path":44,"stem":45,"children":46,"page":67},"Core Concepts","\u002Fcore-concepts","2.core-concepts",[47,51,55,59,63],{"title":48,"path":49,"stem":50},"serverAuth()","\u002Fcore-concepts\u002Fserver-auth","2.core-concepts\u002F1.server-auth",{"title":52,"path":53,"stem":54},"Sessions","\u002Fcore-concepts\u002Fsessions","2.core-concepts\u002F2.sessions",{"title":56,"path":57,"stem":58},"Route Protection","\u002Fcore-concepts\u002Froute-protection","2.core-concepts\u002F3.route-protection",{"title":60,"path":61,"stem":62},"Auto‑Imports and Aliases","\u002Fcore-concepts\u002Fauto-imports-aliases","2.core-concepts\u002F4.auto-imports-aliases",{"title":64,"path":65,"stem":66},"Security & Caveats","\u002Fcore-concepts\u002Fsecurity-caveats","2.core-concepts\u002F5.security-caveats",false,{"title":69,"path":70,"stem":71,"children":72,"page":67},"Guides","\u002Fguides","3.guides",[73,77,82,86,90,94,99,103,107,111],{"title":74,"path":75,"stem":76},"Role‑Based Access","\u002Fguides\u002Frole-based-access","3.guides\u002F1.role-based-access",{"title":78,"path":79,"stem":80,"icon":81},"Setup diagnostics","\u002Fguides\u002Fdiagnostics","3.guides\u002F10.diagnostics","i-lucide-circle-alert",{"title":83,"path":84,"stem":85},"OAuth Providers","\u002Fguides\u002Foauth-providers","3.guides\u002F2.oauth-providers",{"title":87,"path":88,"stem":89},"Custom Database","\u002Fguides\u002Fcustom-database","3.guides\u002F3.custom-database",{"title":91,"path":92,"stem":93},"Database-less Mode","\u002Fguides\u002Fdatabase-less-mode","3.guides\u002F4.database-less-mode",{"title":95,"path":96,"stem":97,"icon":98},"External Auth Backend","\u002Fguides\u002Fexternal-auth-backend","3.guides\u002F5.external-auth-backend","i-lucide-server",{"title":100,"path":101,"stem":102},"Migrating from nuxt-auth-utils","\u002Fguides\u002Fmigrate-from-nuxt-auth-utils","3.guides\u002F6.migrate-from-nuxt-auth-utils",{"title":104,"path":105,"stem":106},"Two-Factor Authentication (TOTP + Backup Codes)","\u002Fguides\u002Ftwo-factor-auth","3.guides\u002F7.two-factor-auth",{"title":108,"path":109,"stem":110},"Testing","\u002Fguides\u002Ftesting","3.guides\u002F8.testing",{"title":112,"path":113,"stem":114},"Production Deployment","\u002Fguides\u002Fproduction-deployment","3.guides\u002F9.production-deployment",{"title":116,"path":117,"stem":118,"children":119,"page":67},"Integrations","\u002Fintegrations","4.integrations",[120,124,128,132],{"title":121,"path":122,"stem":123},"NuxtHub","\u002Fintegrations\u002Fnuxthub","4.integrations\u002F1.nuxthub",{"title":125,"path":126,"stem":127},"DevTools","\u002Fintegrations\u002Fdevtools","4.integrations\u002F2.devtools",{"title":129,"path":130,"stem":131},"Convex","\u002Fintegrations\u002Fconvex","4.integrations\u002F3.convex",{"title":133,"path":134,"stem":135},"i18n","\u002Fintegrations\u002Fi18n","4.integrations\u002F4.i18n",{"title":137,"path":138,"stem":139,"children":140,"page":67},"API Reference","\u002Fapi","5.api",[141,145,149,153],{"title":142,"path":143,"stem":144},"Composables","\u002Fapi\u002Fcomposables","5.api\u002F1.composables",{"title":146,"path":147,"stem":148},"Server Utilities","\u002Fapi\u002Fserver-utils","5.api\u002F2.server-utils",{"title":150,"path":151,"stem":152},"Components","\u002Fapi\u002Fcomponents","5.api\u002F3.components",{"title":154,"path":155,"stem":156},"Types","\u002Fapi\u002Ftypes","5.api\u002F4.types",{"title":158,"path":159,"stem":160,"children":161,"icon":81},"Errors","\u002Ferrors","6.errors\u002F0.index",[162,164,168,172,176,180,184,188,192,196,200,204],{"title":163,"path":159,"stem":160},"Overview",{"title":165,"path":166,"stem":167},"Auth configuration failed to load","\u002Ferrors\u002Fnuxt-auth-config-load-failed","6.errors\u002Fnuxt-auth-config-load-failed",{"title":169,"path":170,"stem":171},"Schema generator returned no code","\u002Ferrors\u002Fnuxt-auth-empty-schema","6.errors\u002Fnuxt-auth-empty-schema",{"title":173,"path":174,"stem":175},"Invalid server auth config export","\u002Ferrors\u002Fnuxt-auth-invalid-config-export","6.errors\u002Fnuxt-auth-invalid-config-export",{"title":177,"path":178,"stem":179},"Auth plugin path must be absolute","\u002Ferrors\u002Fnuxt-auth-invalid-plugin-source","6.errors\u002Fnuxt-auth-invalid-plugin-source",{"title":181,"path":182,"stem":183},"Missing auth configuration","\u002Ferrors\u002Fnuxt-auth-missing-config","6.errors\u002Fnuxt-auth-missing-config",{"title":185,"path":186,"stem":187},"NuxtHub database alias is missing","\u002Ferrors\u002Fnuxt-auth-missing-hub-db","6.errors\u002Fnuxt-auth-missing-hub-db",{"title":189,"path":190,"stem":191},"No database provider is enabled","\u002Ferrors\u002Fnuxt-auth-no-database-provider","6.errors\u002Fnuxt-auth-no-database-provider",{"title":193,"path":194,"stem":195},"Auth schema generation failed","\u002Ferrors\u002Fnuxt-auth-schema-generation-failed","6.errors\u002Fnuxt-auth-schema-generation-failed",{"title":197,"path":198,"stem":199},"Custom session storage is missing","\u002Ferrors\u002Fnuxt-auth-schema-storage-required","6.errors\u002Fnuxt-auth-schema-storage-required",{"title":201,"path":202,"stem":203},"Secondary storage in client-only mode","\u002Ferrors\u002Fnuxt-auth-storage-client-only","6.errors\u002Fnuxt-auth-storage-client-only",{"title":205,"path":206,"stem":207},"Unsupported database dialect","\u002Ferrors\u002Fnuxt-auth-unsupported-dialect","6.errors\u002Fnuxt-auth-unsupported-dialect",{"id":209,"title":87,"body":210,"description":1168,"extension":1169,"links":1170,"meta":1171,"navigation":416,"path":88,"seo":1172,"stem":89,"__hash__":1173},"docs\u002F3.guides\u002F3.custom-database.md",{"type":211,"value":212,"toc":1157},"minimark",[213,222,227,232,282,286,294,319,328,342,346,541,545,676,680,892,896,899,915,918,923,936,1078,1087,1094,1114,1120,1130,1134,1137,1149,1153],[214,215,216,217,221],"p",{},"Use this guide when you want Better Auth to run against your existing database stack instead of ",[218,219],"brand-badge",{"name":220},"nuxthub",".",[214,223,224,225,221],{},"Better Auth supports any database through adapters. Use this guide when you need full control over your database setup or can't use ",[218,226],{"name":220},[228,229,231],"h2",{"id":230},"when-to-use-this","When to Use This",[233,234,235,248],"table",{},[236,237,238],"thead",{},[239,240,241,245],"tr",{},[242,243,244],"th",{},"Scenario",[242,246,247],{},"Recommended",[249,250,251,261,271],"tbody",{},[239,252,253,257],{},[254,255,256],"td",{},"Quick start, managed infra",[254,258,259],{},[218,260],{"name":220,"to":122},[239,262,263,266],{},[254,264,265],{},"OAuth-only, no persistence",[254,267,268],{},[269,270,91],"a",{"href":92},[239,272,273,276],{},[254,274,275],{},"Existing database, custom setup",[254,277,278],{},[279,280,281],"strong",{},"This guide",[228,283,285],{"id":284},"install-better-auth","Install Better Auth",[214,287,288,289,293],{},"Adapter imports come from the ",[290,291,292],"code",{},"better-auth"," package, so you must install it in your app.",[295,296,301],"pre",{"className":297,"code":298,"language":299,"meta":300,"style":300},"language-bash shiki shiki-themes one-light synthwave-84 synthwave-84","pnpm add better-auth\n","bash","",[290,302,303],{"__ignoreMap":300},[304,305,308,312,316],"span",{"class":306,"line":307},"line",1,[304,309,311],{"class":310},"siqUp","pnpm",[304,313,315],{"class":314},"sI3kV"," add",[304,317,318],{"class":314}," better-auth\n",[214,320,321,323,324,327],{},[290,322,292],{}," is a peer dependency of ",[290,325,326],{},"@nuxtjs\u002Fbetter-auth",". Keep the major versions aligned to avoid mismatches.",[214,329,330,331,334,335,338,339,221],{},"Choose the adapter that matches your stack: ",[218,332],{"name":333},"drizzle",", ",[218,336],{"name":337},"prisma",", or ",[218,340],{"name":341},"kysely",[228,343,345],{"id":344},"drizzle-adapter","Drizzle Adapter",[295,347,352],{"className":348,"code":349,"filename":350,"language":351,"meta":300,"style":300},"language-ts shiki shiki-themes one-light synthwave-84 synthwave-84","import { defineServerAuth } from '@nuxtjs\u002Fbetter-auth\u002Fconfig'\nimport { drizzleAdapter } from 'better-auth\u002Fadapters\u002Fdrizzle'\nimport { drizzle } from 'drizzle-orm\u002Fnode-postgres'\n\nconst db = drizzle(process.env.DATABASE_URL!)\n\nexport default defineServerAuth({\n  database: drizzleAdapter(db, { provider: 'pg' }),\n  emailAndPassword: { enabled: true },\n})\n","server\u002Fauth.config.ts","ts",[290,353,354,378,395,411,418,460,465,481,513,535],{"__ignoreMap":300},[304,355,356,360,364,368,371,374],{"class":306,"line":307},[304,357,359],{"class":358},"sqe1H","import",[304,361,363],{"class":362},"s17Py"," { ",[304,365,367],{"class":366},"sYvLG","defineServerAuth",[304,369,370],{"class":362}," } ",[304,372,373],{"class":358},"from",[304,375,377],{"class":376},"sPAZv"," '@nuxtjs\u002Fbetter-auth\u002Fconfig'\n",[304,379,381,383,385,388,390,392],{"class":306,"line":380},2,[304,382,359],{"class":358},[304,384,363],{"class":362},[304,386,387],{"class":366},"drizzleAdapter",[304,389,370],{"class":362},[304,391,373],{"class":358},[304,393,394],{"class":376}," 'better-auth\u002Fadapters\u002Fdrizzle'\n",[304,396,398,400,402,404,406,408],{"class":306,"line":397},3,[304,399,359],{"class":358},[304,401,363],{"class":362},[304,403,333],{"class":366},[304,405,370],{"class":362},[304,407,373],{"class":358},[304,409,410],{"class":376}," 'drizzle-orm\u002Fnode-postgres'\n",[304,412,414],{"class":306,"line":413},4,[304,415,417],{"emptyLinePlaceholder":416},true,"\n",[304,419,421,424,428,432,436,439,443,445,448,450,453,457],{"class":306,"line":420},5,[304,422,423],{"class":358},"const",[304,425,427],{"class":426},"s6Rhl"," db",[304,429,431],{"class":430},"sQBpM"," =",[304,433,435],{"class":434},"sfT9l"," drizzle",[304,437,438],{"class":362},"(",[304,440,442],{"class":441},"svFNh","process",[304,444,221],{"class":362},[304,446,447],{"class":366},"env",[304,449,221],{"class":362},[304,451,452],{"class":426},"DATABASE_URL",[304,454,456],{"class":455},"sn-Jc","!",[304,458,459],{"class":362},")\n",[304,461,463],{"class":306,"line":462},6,[304,464,417],{"emptyLinePlaceholder":416},[304,466,468,471,475,478],{"class":306,"line":467},7,[304,469,470],{"class":358},"export",[304,472,474],{"class":473},"sKg8T"," default",[304,476,477],{"class":434}," defineServerAuth",[304,479,480],{"class":362},"({\n",[304,482,484,487,491,494,496,499,502,505,507,510],{"class":306,"line":483},8,[304,485,486],{"class":366},"  database",[304,488,490],{"class":489},"sVnqq",":",[304,492,493],{"class":434}," drizzleAdapter",[304,495,438],{"class":362},[304,497,498],{"class":366},"db",[304,500,501],{"class":362},", { ",[304,503,504],{"class":366},"provider",[304,506,490],{"class":489},[304,508,509],{"class":376}," 'pg'",[304,511,512],{"class":362}," }),\n",[304,514,516,519,521,523,526,528,532],{"class":306,"line":515},9,[304,517,518],{"class":366},"  emailAndPassword",[304,520,490],{"class":489},[304,522,363],{"class":362},[304,524,525],{"class":366},"enabled",[304,527,490],{"class":489},[304,529,531],{"class":530},"s3ZNE"," true",[304,533,534],{"class":362}," },\n",[304,536,538],{"class":306,"line":537},10,[304,539,540],{"class":362},"})\n",[228,542,544],{"id":543},"prisma-adapter","Prisma Adapter",[295,546,548],{"className":348,"code":547,"filename":350,"language":351,"meta":300,"style":300},"import { defineServerAuth } from '@nuxtjs\u002Fbetter-auth\u002Fconfig'\nimport { prismaAdapter } from 'better-auth\u002Fadapters\u002Fprisma'\nimport { PrismaClient } from '@prisma\u002Fclient'\n\nconst prisma = new PrismaClient()\n\nexport default defineServerAuth({\n  database: prismaAdapter(prisma, { provider: 'postgresql' }),\n  emailAndPassword: { enabled: true },\n})\n",[290,549,550,564,580,596,600,618,622,632,656,672],{"__ignoreMap":300},[304,551,552,554,556,558,560,562],{"class":306,"line":307},[304,553,359],{"class":358},[304,555,363],{"class":362},[304,557,367],{"class":366},[304,559,370],{"class":362},[304,561,373],{"class":358},[304,563,377],{"class":376},[304,565,566,568,570,573,575,577],{"class":306,"line":380},[304,567,359],{"class":358},[304,569,363],{"class":362},[304,571,572],{"class":366},"prismaAdapter",[304,574,370],{"class":362},[304,576,373],{"class":358},[304,578,579],{"class":376}," 'better-auth\u002Fadapters\u002Fprisma'\n",[304,581,582,584,586,589,591,593],{"class":306,"line":397},[304,583,359],{"class":358},[304,585,363],{"class":362},[304,587,588],{"class":366},"PrismaClient",[304,590,370],{"class":362},[304,592,373],{"class":358},[304,594,595],{"class":376}," '@prisma\u002Fclient'\n",[304,597,598],{"class":306,"line":413},[304,599,417],{"emptyLinePlaceholder":416},[304,601,602,604,607,609,612,615],{"class":306,"line":420},[304,603,423],{"class":358},[304,605,606],{"class":426}," prisma",[304,608,431],{"class":430},[304,610,611],{"class":358}," new",[304,613,614],{"class":434}," PrismaClient",[304,616,617],{"class":362},"()\n",[304,619,620],{"class":306,"line":462},[304,621,417],{"emptyLinePlaceholder":416},[304,623,624,626,628,630],{"class":306,"line":467},[304,625,470],{"class":358},[304,627,474],{"class":473},[304,629,477],{"class":434},[304,631,480],{"class":362},[304,633,634,636,638,641,643,645,647,649,651,654],{"class":306,"line":483},[304,635,486],{"class":366},[304,637,490],{"class":489},[304,639,640],{"class":434}," prismaAdapter",[304,642,438],{"class":362},[304,644,337],{"class":366},[304,646,501],{"class":362},[304,648,504],{"class":366},[304,650,490],{"class":489},[304,652,653],{"class":376}," 'postgresql'",[304,655,512],{"class":362},[304,657,658,660,662,664,666,668,670],{"class":306,"line":515},[304,659,518],{"class":366},[304,661,490],{"class":489},[304,663,363],{"class":362},[304,665,525],{"class":366},[304,667,490],{"class":489},[304,669,531],{"class":530},[304,671,534],{"class":362},[304,673,674],{"class":306,"line":537},[304,675,540],{"class":362},[228,677,679],{"id":678},"kysely-adapter","Kysely Adapter",[295,681,683],{"className":348,"code":682,"filename":350,"language":351,"meta":300,"style":300},"import { defineServerAuth } from '@nuxtjs\u002Fbetter-auth\u002Fconfig'\nimport { kyselyAdapter } from 'better-auth\u002Fadapters\u002Fkysely'\nimport { Kysely, PostgresDialect } from 'kysely'\nimport { Pool } from 'pg'\n\nconst db = new Kysely({\n  dialect: new PostgresDialect({ pool: new Pool({ connectionString: process.env.DATABASE_URL }) }),\n})\n\nexport default defineServerAuth({\n  database: kyselyAdapter(db, { dialect: 'postgres', type: 'pg' }),\n  emailAndPassword: { enabled: true },\n})\n",[290,684,685,699,715,736,752,756,771,817,821,825,835,870,887],{"__ignoreMap":300},[304,686,687,689,691,693,695,697],{"class":306,"line":307},[304,688,359],{"class":358},[304,690,363],{"class":362},[304,692,367],{"class":366},[304,694,370],{"class":362},[304,696,373],{"class":358},[304,698,377],{"class":376},[304,700,701,703,705,708,710,712],{"class":306,"line":380},[304,702,359],{"class":358},[304,704,363],{"class":362},[304,706,707],{"class":366},"kyselyAdapter",[304,709,370],{"class":362},[304,711,373],{"class":358},[304,713,714],{"class":376}," 'better-auth\u002Fadapters\u002Fkysely'\n",[304,716,717,719,721,724,726,729,731,733],{"class":306,"line":397},[304,718,359],{"class":358},[304,720,363],{"class":362},[304,722,723],{"class":366},"Kysely",[304,725,334],{"class":362},[304,727,728],{"class":366},"PostgresDialect",[304,730,370],{"class":362},[304,732,373],{"class":358},[304,734,735],{"class":376}," 'kysely'\n",[304,737,738,740,742,745,747,749],{"class":306,"line":413},[304,739,359],{"class":358},[304,741,363],{"class":362},[304,743,744],{"class":366},"Pool",[304,746,370],{"class":362},[304,748,373],{"class":358},[304,750,751],{"class":376}," 'pg'\n",[304,753,754],{"class":306,"line":420},[304,755,417],{"emptyLinePlaceholder":416},[304,757,758,760,762,764,766,769],{"class":306,"line":462},[304,759,423],{"class":358},[304,761,427],{"class":426},[304,763,431],{"class":430},[304,765,611],{"class":358},[304,767,768],{"class":434}," Kysely",[304,770,480],{"class":362},[304,772,773,776,778,780,783,786,789,791,793,796,798,801,803,806,808,810,812,814],{"class":306,"line":467},[304,774,775],{"class":366},"  dialect",[304,777,490],{"class":489},[304,779,611],{"class":358},[304,781,782],{"class":434}," PostgresDialect",[304,784,785],{"class":362},"({ ",[304,787,788],{"class":366},"pool",[304,790,490],{"class":489},[304,792,611],{"class":358},[304,794,795],{"class":434}," Pool",[304,797,785],{"class":362},[304,799,800],{"class":366},"connectionString",[304,802,490],{"class":489},[304,804,805],{"class":441}," process",[304,807,221],{"class":362},[304,809,447],{"class":366},[304,811,221],{"class":362},[304,813,452],{"class":426},[304,815,816],{"class":362}," }) }),\n",[304,818,819],{"class":306,"line":483},[304,820,540],{"class":362},[304,822,823],{"class":306,"line":515},[304,824,417],{"emptyLinePlaceholder":416},[304,826,827,829,831,833],{"class":306,"line":537},[304,828,470],{"class":358},[304,830,474],{"class":473},[304,832,477],{"class":434},[304,834,480],{"class":362},[304,836,838,840,842,845,847,849,851,854,856,859,861,864,866,868],{"class":306,"line":837},11,[304,839,486],{"class":366},[304,841,490],{"class":489},[304,843,844],{"class":434}," kyselyAdapter",[304,846,438],{"class":362},[304,848,498],{"class":366},[304,850,501],{"class":362},[304,852,853],{"class":366},"dialect",[304,855,490],{"class":489},[304,857,858],{"class":376}," 'postgres'",[304,860,334],{"class":362},[304,862,863],{"class":366},"type",[304,865,490],{"class":489},[304,867,509],{"class":376},[304,869,512],{"class":362},[304,871,873,875,877,879,881,883,885],{"class":306,"line":872},12,[304,874,518],{"class":366},[304,876,490],{"class":489},[304,878,363],{"class":362},[304,880,525],{"class":366},[304,882,490],{"class":489},[304,884,531],{"class":530},[304,886,534],{"class":362},[304,888,890],{"class":306,"line":889},13,[304,891,540],{"class":362},[228,893,895],{"id":894},"schema-setup","Schema Setup",[214,897,898],{},"You must create the required tables manually. Better Auth provides a CLI to generate schemas:",[295,900,902],{"className":297,"code":901,"language":299,"meta":300,"style":300},"npx auth@latest generate\n",[290,903,904],{"__ignoreMap":300},[304,905,906,909,912],{"class":306,"line":307},[304,907,908],{"class":310},"npx",[304,910,911],{"class":314}," auth@latest",[304,913,914],{"class":314}," generate\n",[214,916,917],{},"This generates migration files for your adapter. Apply them with your database tool.",[919,920,922],"h3",{"id":921},"cli-config-nuxt","CLI config (Nuxt)",[214,924,925,926,929,930,932,933,935],{},"The CLI reads a Better Auth instance from ",[290,927,928],{},"auth.ts",", not your ",[290,931,350],{},". Add a dedicated ",[290,934,928],{}," file for CLI generation.",[295,937,939],{"className":348,"code":938,"filename":928,"language":351,"meta":300,"style":300},"import { betterAuth } from 'better-auth'\nimport { drizzleAdapter } from 'better-auth\u002Fadapters\u002Fdrizzle'\nimport { drizzle } from 'drizzle-orm\u002Fnode-postgres'\n\nconst db = drizzle(process.env.DATABASE_URL!)\n\nexport const auth = betterAuth({\n  database: drizzleAdapter(db, { provider: 'pg' }),\n  emailAndPassword: { enabled: true },\n})\n",[290,940,941,957,971,985,989,1015,1019,1036,1058,1074],{"__ignoreMap":300},[304,942,943,945,947,950,952,954],{"class":306,"line":307},[304,944,359],{"class":358},[304,946,363],{"class":362},[304,948,949],{"class":366},"betterAuth",[304,951,370],{"class":362},[304,953,373],{"class":358},[304,955,956],{"class":376}," 'better-auth'\n",[304,958,959,961,963,965,967,969],{"class":306,"line":380},[304,960,359],{"class":358},[304,962,363],{"class":362},[304,964,387],{"class":366},[304,966,370],{"class":362},[304,968,373],{"class":358},[304,970,394],{"class":376},[304,972,973,975,977,979,981,983],{"class":306,"line":397},[304,974,359],{"class":358},[304,976,363],{"class":362},[304,978,333],{"class":366},[304,980,370],{"class":362},[304,982,373],{"class":358},[304,984,410],{"class":376},[304,986,987],{"class":306,"line":413},[304,988,417],{"emptyLinePlaceholder":416},[304,990,991,993,995,997,999,1001,1003,1005,1007,1009,1011,1013],{"class":306,"line":420},[304,992,423],{"class":358},[304,994,427],{"class":426},[304,996,431],{"class":430},[304,998,435],{"class":434},[304,1000,438],{"class":362},[304,1002,442],{"class":441},[304,1004,221],{"class":362},[304,1006,447],{"class":366},[304,1008,221],{"class":362},[304,1010,452],{"class":426},[304,1012,456],{"class":455},[304,1014,459],{"class":362},[304,1016,1017],{"class":306,"line":462},[304,1018,417],{"emptyLinePlaceholder":416},[304,1020,1021,1023,1026,1029,1031,1034],{"class":306,"line":467},[304,1022,470],{"class":358},[304,1024,1025],{"class":358}," const",[304,1027,1028],{"class":426}," auth",[304,1030,431],{"class":430},[304,1032,1033],{"class":434}," betterAuth",[304,1035,480],{"class":362},[304,1037,1038,1040,1042,1044,1046,1048,1050,1052,1054,1056],{"class":306,"line":483},[304,1039,486],{"class":366},[304,1041,490],{"class":489},[304,1043,493],{"class":434},[304,1045,438],{"class":362},[304,1047,498],{"class":441},[304,1049,501],{"class":362},[304,1051,504],{"class":366},[304,1053,490],{"class":489},[304,1055,509],{"class":376},[304,1057,512],{"class":362},[304,1059,1060,1062,1064,1066,1068,1070,1072],{"class":306,"line":515},[304,1061,518],{"class":366},[304,1063,490],{"class":489},[304,1065,363],{"class":362},[304,1067,525],{"class":366},[304,1069,490],{"class":489},[304,1071,531],{"class":530},[304,1073,534],{"class":362},[304,1075,1076],{"class":306,"line":537},[304,1077,540],{"class":362},[214,1079,1080,1081,1083,1084,1086],{},"If you use ",[218,1082],{"name":337}," or ",[218,1085],{"name":341},", swap the adapter section to match your setup.",[214,1088,1089,1090,1093],{},"Use ",[290,1091,1092],{},"--config"," if you place the file elsewhere:",[295,1095,1097],{"className":297,"code":1096,"language":299,"meta":300,"style":300},"npx auth@latest generate --config server\u002Fauth\u002Fauth.ts\n",[290,1098,1099],{"__ignoreMap":300},[304,1100,1101,1103,1105,1108,1111],{"class":306,"line":307},[304,1102,908],{"class":310},[304,1104,911],{"class":314},[304,1106,1107],{"class":314}," generate",[304,1109,1110],{"class":530}," --config",[304,1112,1113],{"class":314}," server\u002Fauth\u002Fauth.ts\n",[214,1115,1116,1117,1119],{},"Keep this config in sync with ",[290,1118,350],{}," so the generated schema matches your runtime plugins and options.",[1121,1122,1125,1126,1129],"callout",{"icon":1123,"to":1124},"i-lucide-book","https:\u002F\u002Fwww.better-auth.com\u002Fdocs\u002Fconcepts\u002Fdatabase","See ",[279,1127,1128],{},"Better Auth database docs"," for full schema reference and adapter options.",[228,1131,1133],{"id":1132},"environment-variables","Environment Variables",[214,1135,1136],{},"Store your connection string securely:",[295,1138,1143],{"className":1139,"code":1140,"filename":1141,"language":1142,"meta":300,"style":300},"language-ini shiki shiki-themes one-light synthwave-84 synthwave-84","DATABASE_URL=\"postgresql:\u002F\u002Fuser:password@localhost:5432\u002Fmyapp\"\n",".env","ini",[290,1144,1145],{"__ignoreMap":300},[304,1146,1147],{"class":306,"line":307},[304,1148,1140],{},[1150,1151,1152],"warning",{},"Never commit database credentials to version control. Use environment variables in production.",[1154,1155,1156],"style",{},"html pre.shiki code .siqUp, html code.shiki .siqUp{--shiki-light:#4078F2;--shiki-default:#FE4450;--shiki-dark:#FE4450}html pre.shiki code .sI3kV, html code.shiki .sI3kV{--shiki-light:#50A14F;--shiki-default:#BBBBBB;--shiki-dark:#BBBBBB}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sqe1H, html code.shiki .sqe1H{--shiki-light:#A626A4;--shiki-default:#FEDE5D;--shiki-dark:#FEDE5D}html pre.shiki code .s17Py, html code.shiki .s17Py{--shiki-light:#383A42;--shiki-default:#BBBBBB;--shiki-dark:#BBBBBB}html pre.shiki code .sYvLG, html code.shiki .sYvLG{--shiki-light:#E45649;--shiki-default:#FF7EDB;--shiki-dark:#FF7EDB}html pre.shiki code .sPAZv, html code.shiki .sPAZv{--shiki-light:#50A14F;--shiki-default:#FF8B39;--shiki-dark:#FF8B39}html pre.shiki code .s6Rhl, html code.shiki .s6Rhl{--shiki-light:#986801;--shiki-default:#FF7EDB;--shiki-dark:#FF7EDB}html pre.shiki code .sQBpM, html code.shiki .sQBpM{--shiki-light:#0184BC;--shiki-default:#FFFFFFEE;--shiki-dark:#FFFFFFEE}html pre.shiki code .sfT9l, html code.shiki .sfT9l{--shiki-light:#4078F2;--shiki-default:#36F9F6;--shiki-dark:#36F9F6}html pre.shiki code .svFNh, html code.shiki .svFNh{--shiki-light:#383A42;--shiki-default:#FF7EDB;--shiki-dark:#FF7EDB}html pre.shiki code .sn-Jc, html code.shiki .sn-Jc{--shiki-light:#0184BC;--shiki-default:#FEDE5D;--shiki-dark:#FEDE5D}html pre.shiki code .sKg8T, html code.shiki .sKg8T{--shiki-light:#E45649;--shiki-default:#FEDE5D;--shiki-dark:#FEDE5D}html pre.shiki code .sVnqq, html code.shiki .sVnqq{--shiki-light:#0184BC;--shiki-default:#B6B1B1;--shiki-dark:#B6B1B1}html pre.shiki code .s3ZNE, html code.shiki .s3ZNE{--shiki-light:#986801;--shiki-default:#F97E72;--shiki-dark:#F97E72}",{"title":300,"searchDepth":380,"depth":380,"links":1158},[1159,1160,1161,1162,1163,1164,1167],{"id":230,"depth":380,"text":231},{"id":284,"depth":380,"text":285},{"id":344,"depth":380,"text":345},{"id":543,"depth":380,"text":544},{"id":678,"depth":380,"text":679},{"id":894,"depth":380,"text":895,"children":1165},[1166],{"id":921,"depth":397,"text":922},{"id":1132,"depth":380,"text":1133},"Use your own database with Drizzle, Prisma, or Kysely adapters.","md",null,{},{"title":87,"description":1168},"z8FVv8o2sFWmuBdbnoD18tOZ2uFaeOsKJKx5lJ__yvs",[1175,1177],{"title":83,"path":84,"stem":85,"description":1176,"children":-1},"Configure OAuth providers and sign in with `useSignIn('social')`.",{"title":91,"path":92,"stem":93,"description":1178,"children":-1},"Run Better Auth without a database for edge and serverless deployments.",1791215139937]