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