[{"data":1,"prerenderedAt":1187},["ShallowReactive",2],{"navigation_docs":3,"-guides-custom-database":216,"-guides-custom-database-surround":1182},[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,208,212],{"title":163,"path":159,"stem":160},"Overview",{"title":165,"path":166,"stem":167},"Better Auth CLI is not installed","\u002Ferrors\u002Fnuxt-auth-cli-missing","6.errors\u002Fnuxt-auth-cli-missing",{"title":169,"path":170,"stem":171},"Better Auth CLI version does not match better-auth","\u002Ferrors\u002Fnuxt-auth-cli-version-mismatch","6.errors\u002Fnuxt-auth-cli-version-mismatch",{"title":173,"path":174,"stem":175},"Auth configuration failed to load","\u002Ferrors\u002Fnuxt-auth-config-load-failed","6.errors\u002Fnuxt-auth-config-load-failed",{"title":177,"path":178,"stem":179},"Schema generator returned no code","\u002Ferrors\u002Fnuxt-auth-empty-schema","6.errors\u002Fnuxt-auth-empty-schema",{"title":181,"path":182,"stem":183},"Invalid server auth config export","\u002Ferrors\u002Fnuxt-auth-invalid-config-export","6.errors\u002Fnuxt-auth-invalid-config-export",{"title":185,"path":186,"stem":187},"Auth plugin path must be absolute","\u002Ferrors\u002Fnuxt-auth-invalid-plugin-source","6.errors\u002Fnuxt-auth-invalid-plugin-source",{"title":189,"path":190,"stem":191},"Missing auth configuration","\u002Ferrors\u002Fnuxt-auth-missing-config","6.errors\u002Fnuxt-auth-missing-config",{"title":193,"path":194,"stem":195},"NuxtHub database alias is missing","\u002Ferrors\u002Fnuxt-auth-missing-hub-db","6.errors\u002Fnuxt-auth-missing-hub-db",{"title":197,"path":198,"stem":199},"No database provider is enabled","\u002Ferrors\u002Fnuxt-auth-no-database-provider","6.errors\u002Fnuxt-auth-no-database-provider",{"title":201,"path":202,"stem":203},"Auth schema generation failed","\u002Ferrors\u002Fnuxt-auth-schema-generation-failed","6.errors\u002Fnuxt-auth-schema-generation-failed",{"title":205,"path":206,"stem":207},"Custom session storage is missing","\u002Ferrors\u002Fnuxt-auth-schema-storage-required","6.errors\u002Fnuxt-auth-schema-storage-required",{"title":209,"path":210,"stem":211},"Secondary storage in client-only mode","\u002Ferrors\u002Fnuxt-auth-storage-client-only","6.errors\u002Fnuxt-auth-storage-client-only",{"title":213,"path":214,"stem":215},"Unsupported database dialect","\u002Ferrors\u002Fnuxt-auth-unsupported-dialect","6.errors\u002Fnuxt-auth-unsupported-dialect",{"id":217,"title":87,"body":218,"description":1176,"extension":1177,"links":1178,"meta":1179,"navigation":424,"path":88,"seo":1180,"stem":89,"__hash__":1181},"docs\u002F3.guides\u002F3.custom-database.md",{"type":219,"value":220,"toc":1165},"minimark",[221,230,235,240,290,294,302,327,336,350,354,549,553,684,688,900,904,907,923,926,931,944,1086,1095,1102,1122,1128,1138,1142,1145,1157,1161],[222,223,224,225,229],"p",{},"Use this guide when you want Better Auth to run against your existing database stack instead of ",[226,227],"brand-badge",{"name":228},"nuxthub",".",[222,231,232,233,229],{},"Better Auth supports any database through adapters. Use this guide when you need full control over your database setup or can't use ",[226,234],{"name":228},[236,237,239],"h2",{"id":238},"when-to-use-this","When to Use This",[241,242,243,256],"table",{},[244,245,246],"thead",{},[247,248,249,253],"tr",{},[250,251,252],"th",{},"Scenario",[250,254,255],{},"Recommended",[257,258,259,269,279],"tbody",{},[247,260,261,265],{},[262,263,264],"td",{},"Quick start, managed infra",[262,266,267],{},[226,268],{"name":228,"to":122},[247,270,271,274],{},[262,272,273],{},"OAuth-only, no persistence",[262,275,276],{},[277,278,91],"a",{"href":92},[247,280,281,284],{},[262,282,283],{},"Existing database, custom setup",[262,285,286],{},[287,288,289],"strong",{},"This guide",[236,291,293],{"id":292},"install-better-auth","Install Better Auth",[222,295,296,297,301],{},"Adapter imports come from the ",[298,299,300],"code",{},"better-auth"," package, so you must install it in your app.",[303,304,309],"pre",{"className":305,"code":306,"language":307,"meta":308,"style":308},"language-bash shiki shiki-themes one-light synthwave-84 synthwave-84","pnpm add better-auth\n","bash","",[298,310,311],{"__ignoreMap":308},[312,313,316,320,324],"span",{"class":314,"line":315},"line",1,[312,317,319],{"class":318},"siqUp","pnpm",[312,321,323],{"class":322},"sI3kV"," add",[312,325,326],{"class":322}," better-auth\n",[222,328,329,331,332,335],{},[298,330,300],{}," is a peer dependency of ",[298,333,334],{},"@nuxtjs\u002Fbetter-auth",". Keep the major versions aligned to avoid mismatches.",[222,337,338,339,342,343,346,347,229],{},"Choose the adapter that matches your stack: ",[226,340],{"name":341},"drizzle",", ",[226,344],{"name":345},"prisma",", or ",[226,348],{"name":349},"kysely",[236,351,353],{"id":352},"drizzle-adapter","Drizzle Adapter",[303,355,360],{"className":356,"code":357,"filename":358,"language":359,"meta":308,"style":308},"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",[298,361,362,386,403,419,426,468,473,489,521,543],{"__ignoreMap":308},[312,363,364,368,372,376,379,382],{"class":314,"line":315},[312,365,367],{"class":366},"sqe1H","import",[312,369,371],{"class":370},"s17Py"," { ",[312,373,375],{"class":374},"sYvLG","defineServerAuth",[312,377,378],{"class":370}," } ",[312,380,381],{"class":366},"from",[312,383,385],{"class":384},"sPAZv"," '@nuxtjs\u002Fbetter-auth\u002Fconfig'\n",[312,387,389,391,393,396,398,400],{"class":314,"line":388},2,[312,390,367],{"class":366},[312,392,371],{"class":370},[312,394,395],{"class":374},"drizzleAdapter",[312,397,378],{"class":370},[312,399,381],{"class":366},[312,401,402],{"class":384}," 'better-auth\u002Fadapters\u002Fdrizzle'\n",[312,404,406,408,410,412,414,416],{"class":314,"line":405},3,[312,407,367],{"class":366},[312,409,371],{"class":370},[312,411,341],{"class":374},[312,413,378],{"class":370},[312,415,381],{"class":366},[312,417,418],{"class":384}," 'drizzle-orm\u002Fnode-postgres'\n",[312,420,422],{"class":314,"line":421},4,[312,423,425],{"emptyLinePlaceholder":424},true,"\n",[312,427,429,432,436,440,444,447,451,453,456,458,461,465],{"class":314,"line":428},5,[312,430,431],{"class":366},"const",[312,433,435],{"class":434},"s6Rhl"," db",[312,437,439],{"class":438},"sQBpM"," =",[312,441,443],{"class":442},"sfT9l"," drizzle",[312,445,446],{"class":370},"(",[312,448,450],{"class":449},"svFNh","process",[312,452,229],{"class":370},[312,454,455],{"class":374},"env",[312,457,229],{"class":370},[312,459,460],{"class":434},"DATABASE_URL",[312,462,464],{"class":463},"sn-Jc","!",[312,466,467],{"class":370},")\n",[312,469,471],{"class":314,"line":470},6,[312,472,425],{"emptyLinePlaceholder":424},[312,474,476,479,483,486],{"class":314,"line":475},7,[312,477,478],{"class":366},"export",[312,480,482],{"class":481},"sKg8T"," default",[312,484,485],{"class":442}," defineServerAuth",[312,487,488],{"class":370},"({\n",[312,490,492,495,499,502,504,507,510,513,515,518],{"class":314,"line":491},8,[312,493,494],{"class":374},"  database",[312,496,498],{"class":497},"sVnqq",":",[312,500,501],{"class":442}," drizzleAdapter",[312,503,446],{"class":370},[312,505,506],{"class":374},"db",[312,508,509],{"class":370},", { ",[312,511,512],{"class":374},"provider",[312,514,498],{"class":497},[312,516,517],{"class":384}," 'pg'",[312,519,520],{"class":370}," }),\n",[312,522,524,527,529,531,534,536,540],{"class":314,"line":523},9,[312,525,526],{"class":374},"  emailAndPassword",[312,528,498],{"class":497},[312,530,371],{"class":370},[312,532,533],{"class":374},"enabled",[312,535,498],{"class":497},[312,537,539],{"class":538},"s3ZNE"," true",[312,541,542],{"class":370}," },\n",[312,544,546],{"class":314,"line":545},10,[312,547,548],{"class":370},"})\n",[236,550,552],{"id":551},"prisma-adapter","Prisma Adapter",[303,554,556],{"className":356,"code":555,"filename":358,"language":359,"meta":308,"style":308},"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",[298,557,558,572,588,604,608,626,630,640,664,680],{"__ignoreMap":308},[312,559,560,562,564,566,568,570],{"class":314,"line":315},[312,561,367],{"class":366},[312,563,371],{"class":370},[312,565,375],{"class":374},[312,567,378],{"class":370},[312,569,381],{"class":366},[312,571,385],{"class":384},[312,573,574,576,578,581,583,585],{"class":314,"line":388},[312,575,367],{"class":366},[312,577,371],{"class":370},[312,579,580],{"class":374},"prismaAdapter",[312,582,378],{"class":370},[312,584,381],{"class":366},[312,586,587],{"class":384}," 'better-auth\u002Fadapters\u002Fprisma'\n",[312,589,590,592,594,597,599,601],{"class":314,"line":405},[312,591,367],{"class":366},[312,593,371],{"class":370},[312,595,596],{"class":374},"PrismaClient",[312,598,378],{"class":370},[312,600,381],{"class":366},[312,602,603],{"class":384}," '@prisma\u002Fclient'\n",[312,605,606],{"class":314,"line":421},[312,607,425],{"emptyLinePlaceholder":424},[312,609,610,612,615,617,620,623],{"class":314,"line":428},[312,611,431],{"class":366},[312,613,614],{"class":434}," prisma",[312,616,439],{"class":438},[312,618,619],{"class":366}," new",[312,621,622],{"class":442}," PrismaClient",[312,624,625],{"class":370},"()\n",[312,627,628],{"class":314,"line":470},[312,629,425],{"emptyLinePlaceholder":424},[312,631,632,634,636,638],{"class":314,"line":475},[312,633,478],{"class":366},[312,635,482],{"class":481},[312,637,485],{"class":442},[312,639,488],{"class":370},[312,641,642,644,646,649,651,653,655,657,659,662],{"class":314,"line":491},[312,643,494],{"class":374},[312,645,498],{"class":497},[312,647,648],{"class":442}," prismaAdapter",[312,650,446],{"class":370},[312,652,345],{"class":374},[312,654,509],{"class":370},[312,656,512],{"class":374},[312,658,498],{"class":497},[312,660,661],{"class":384}," 'postgresql'",[312,663,520],{"class":370},[312,665,666,668,670,672,674,676,678],{"class":314,"line":523},[312,667,526],{"class":374},[312,669,498],{"class":497},[312,671,371],{"class":370},[312,673,533],{"class":374},[312,675,498],{"class":497},[312,677,539],{"class":538},[312,679,542],{"class":370},[312,681,682],{"class":314,"line":545},[312,683,548],{"class":370},[236,685,687],{"id":686},"kysely-adapter","Kysely Adapter",[303,689,691],{"className":356,"code":690,"filename":358,"language":359,"meta":308,"style":308},"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",[298,692,693,707,723,744,760,764,779,825,829,833,843,878,895],{"__ignoreMap":308},[312,694,695,697,699,701,703,705],{"class":314,"line":315},[312,696,367],{"class":366},[312,698,371],{"class":370},[312,700,375],{"class":374},[312,702,378],{"class":370},[312,704,381],{"class":366},[312,706,385],{"class":384},[312,708,709,711,713,716,718,720],{"class":314,"line":388},[312,710,367],{"class":366},[312,712,371],{"class":370},[312,714,715],{"class":374},"kyselyAdapter",[312,717,378],{"class":370},[312,719,381],{"class":366},[312,721,722],{"class":384}," 'better-auth\u002Fadapters\u002Fkysely'\n",[312,724,725,727,729,732,734,737,739,741],{"class":314,"line":405},[312,726,367],{"class":366},[312,728,371],{"class":370},[312,730,731],{"class":374},"Kysely",[312,733,342],{"class":370},[312,735,736],{"class":374},"PostgresDialect",[312,738,378],{"class":370},[312,740,381],{"class":366},[312,742,743],{"class":384}," 'kysely'\n",[312,745,746,748,750,753,755,757],{"class":314,"line":421},[312,747,367],{"class":366},[312,749,371],{"class":370},[312,751,752],{"class":374},"Pool",[312,754,378],{"class":370},[312,756,381],{"class":366},[312,758,759],{"class":384}," 'pg'\n",[312,761,762],{"class":314,"line":428},[312,763,425],{"emptyLinePlaceholder":424},[312,765,766,768,770,772,774,777],{"class":314,"line":470},[312,767,431],{"class":366},[312,769,435],{"class":434},[312,771,439],{"class":438},[312,773,619],{"class":366},[312,775,776],{"class":442}," Kysely",[312,778,488],{"class":370},[312,780,781,784,786,788,791,794,797,799,801,804,806,809,811,814,816,818,820,822],{"class":314,"line":475},[312,782,783],{"class":374},"  dialect",[312,785,498],{"class":497},[312,787,619],{"class":366},[312,789,790],{"class":442}," PostgresDialect",[312,792,793],{"class":370},"({ ",[312,795,796],{"class":374},"pool",[312,798,498],{"class":497},[312,800,619],{"class":366},[312,802,803],{"class":442}," Pool",[312,805,793],{"class":370},[312,807,808],{"class":374},"connectionString",[312,810,498],{"class":497},[312,812,813],{"class":449}," process",[312,815,229],{"class":370},[312,817,455],{"class":374},[312,819,229],{"class":370},[312,821,460],{"class":434},[312,823,824],{"class":370}," }) }),\n",[312,826,827],{"class":314,"line":491},[312,828,548],{"class":370},[312,830,831],{"class":314,"line":523},[312,832,425],{"emptyLinePlaceholder":424},[312,834,835,837,839,841],{"class":314,"line":545},[312,836,478],{"class":366},[312,838,482],{"class":481},[312,840,485],{"class":442},[312,842,488],{"class":370},[312,844,846,848,850,853,855,857,859,862,864,867,869,872,874,876],{"class":314,"line":845},11,[312,847,494],{"class":374},[312,849,498],{"class":497},[312,851,852],{"class":442}," kyselyAdapter",[312,854,446],{"class":370},[312,856,506],{"class":374},[312,858,509],{"class":370},[312,860,861],{"class":374},"dialect",[312,863,498],{"class":497},[312,865,866],{"class":384}," 'postgres'",[312,868,342],{"class":370},[312,870,871],{"class":374},"type",[312,873,498],{"class":497},[312,875,517],{"class":384},[312,877,520],{"class":370},[312,879,881,883,885,887,889,891,893],{"class":314,"line":880},12,[312,882,526],{"class":374},[312,884,498],{"class":497},[312,886,371],{"class":370},[312,888,533],{"class":374},[312,890,498],{"class":497},[312,892,539],{"class":538},[312,894,542],{"class":370},[312,896,898],{"class":314,"line":897},13,[312,899,548],{"class":370},[236,901,903],{"id":902},"schema-setup","Schema Setup",[222,905,906],{},"You must create the required tables manually. Better Auth provides a CLI to generate schemas:",[303,908,910],{"className":305,"code":909,"language":307,"meta":308,"style":308},"npx auth@latest generate\n",[298,911,912],{"__ignoreMap":308},[312,913,914,917,920],{"class":314,"line":315},[312,915,916],{"class":318},"npx",[312,918,919],{"class":322}," auth@latest",[312,921,922],{"class":322}," generate\n",[222,924,925],{},"This generates migration files for your adapter. Apply them with your database tool.",[927,928,930],"h3",{"id":929},"cli-config-nuxt","CLI config (Nuxt)",[222,932,933,934,937,938,940,941,943],{},"The CLI reads a Better Auth instance from ",[298,935,936],{},"auth.ts",", not your ",[298,939,358],{},". Add a dedicated ",[298,942,936],{}," file for CLI generation.",[303,945,947],{"className":356,"code":946,"filename":936,"language":359,"meta":308,"style":308},"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",[298,948,949,965,979,993,997,1023,1027,1044,1066,1082],{"__ignoreMap":308},[312,950,951,953,955,958,960,962],{"class":314,"line":315},[312,952,367],{"class":366},[312,954,371],{"class":370},[312,956,957],{"class":374},"betterAuth",[312,959,378],{"class":370},[312,961,381],{"class":366},[312,963,964],{"class":384}," 'better-auth'\n",[312,966,967,969,971,973,975,977],{"class":314,"line":388},[312,968,367],{"class":366},[312,970,371],{"class":370},[312,972,395],{"class":374},[312,974,378],{"class":370},[312,976,381],{"class":366},[312,978,402],{"class":384},[312,980,981,983,985,987,989,991],{"class":314,"line":405},[312,982,367],{"class":366},[312,984,371],{"class":370},[312,986,341],{"class":374},[312,988,378],{"class":370},[312,990,381],{"class":366},[312,992,418],{"class":384},[312,994,995],{"class":314,"line":421},[312,996,425],{"emptyLinePlaceholder":424},[312,998,999,1001,1003,1005,1007,1009,1011,1013,1015,1017,1019,1021],{"class":314,"line":428},[312,1000,431],{"class":366},[312,1002,435],{"class":434},[312,1004,439],{"class":438},[312,1006,443],{"class":442},[312,1008,446],{"class":370},[312,1010,450],{"class":449},[312,1012,229],{"class":370},[312,1014,455],{"class":374},[312,1016,229],{"class":370},[312,1018,460],{"class":434},[312,1020,464],{"class":463},[312,1022,467],{"class":370},[312,1024,1025],{"class":314,"line":470},[312,1026,425],{"emptyLinePlaceholder":424},[312,1028,1029,1031,1034,1037,1039,1042],{"class":314,"line":475},[312,1030,478],{"class":366},[312,1032,1033],{"class":366}," const",[312,1035,1036],{"class":434}," auth",[312,1038,439],{"class":438},[312,1040,1041],{"class":442}," betterAuth",[312,1043,488],{"class":370},[312,1045,1046,1048,1050,1052,1054,1056,1058,1060,1062,1064],{"class":314,"line":491},[312,1047,494],{"class":374},[312,1049,498],{"class":497},[312,1051,501],{"class":442},[312,1053,446],{"class":370},[312,1055,506],{"class":449},[312,1057,509],{"class":370},[312,1059,512],{"class":374},[312,1061,498],{"class":497},[312,1063,517],{"class":384},[312,1065,520],{"class":370},[312,1067,1068,1070,1072,1074,1076,1078,1080],{"class":314,"line":523},[312,1069,526],{"class":374},[312,1071,498],{"class":497},[312,1073,371],{"class":370},[312,1075,533],{"class":374},[312,1077,498],{"class":497},[312,1079,539],{"class":538},[312,1081,542],{"class":370},[312,1083,1084],{"class":314,"line":545},[312,1085,548],{"class":370},[222,1087,1088,1089,1091,1092,1094],{},"If you use ",[226,1090],{"name":345}," or ",[226,1093],{"name":349},", swap the adapter section to match your setup.",[222,1096,1097,1098,1101],{},"Use ",[298,1099,1100],{},"--config"," if you place the file elsewhere:",[303,1103,1105],{"className":305,"code":1104,"language":307,"meta":308,"style":308},"npx auth@latest generate --config server\u002Fauth\u002Fauth.ts\n",[298,1106,1107],{"__ignoreMap":308},[312,1108,1109,1111,1113,1116,1119],{"class":314,"line":315},[312,1110,916],{"class":318},[312,1112,919],{"class":322},[312,1114,1115],{"class":322}," generate",[312,1117,1118],{"class":538}," --config",[312,1120,1121],{"class":322}," server\u002Fauth\u002Fauth.ts\n",[222,1123,1124,1125,1127],{},"Keep this config in sync with ",[298,1126,358],{}," so the generated schema matches your runtime plugins and options.",[1129,1130,1133,1134,1137],"callout",{"icon":1131,"to":1132},"i-lucide-book","https:\u002F\u002Fwww.better-auth.com\u002Fdocs\u002Fconcepts\u002Fdatabase","See ",[287,1135,1136],{},"Better Auth database docs"," for full schema reference and adapter options.",[236,1139,1141],{"id":1140},"environment-variables","Environment Variables",[222,1143,1144],{},"Store your connection string securely:",[303,1146,1151],{"className":1147,"code":1148,"filename":1149,"language":1150,"meta":308,"style":308},"language-ini shiki shiki-themes one-light synthwave-84 synthwave-84","DATABASE_URL=\"postgresql:\u002F\u002Fuser:password@localhost:5432\u002Fmyapp\"\n",".env","ini",[298,1152,1153],{"__ignoreMap":308},[312,1154,1155],{"class":314,"line":315},[312,1156,1148],{},[1158,1159,1160],"warning",{},"Never commit database credentials to version control. Use environment variables in production.",[1162,1163,1164],"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":308,"searchDepth":388,"depth":388,"links":1166},[1167,1168,1169,1170,1171,1172,1175],{"id":238,"depth":388,"text":239},{"id":292,"depth":388,"text":293},{"id":352,"depth":388,"text":353},{"id":551,"depth":388,"text":552},{"id":686,"depth":388,"text":687},{"id":902,"depth":388,"text":903,"children":1173},[1174],{"id":929,"depth":405,"text":930},{"id":1140,"depth":388,"text":1141},"Use your own database with Drizzle, Prisma, or Kysely adapters.","md",null,{},{"title":87,"description":1176},"z8FVv8o2sFWmuBdbnoD18tOZ2uFaeOsKJKx5lJ__yvs",[1183,1185],{"title":83,"path":84,"stem":85,"description":1184,"children":-1},"Configure OAuth providers and sign in with `useSignIn('social')`.",{"title":91,"path":92,"stem":93,"description":1186,"children":-1},"Run Better Auth without a database for edge and serverless deployments.",1792533788426]