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