[{"data":1,"prerenderedAt":749},["ShallowReactive",2],{"navigation":3,"\u002Frecipes\u002Fnitro-database":208,"\u002Frecipes\u002Fnitro-database-surround":746},[4,98,175],{"title":5,"path":6,"stem":7,"children":8,"icon":97},"Guide","\u002Fguide","1.guide\u002F1.index",[9,12,17,22,46,61,79],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-house",{"title":13,"path":14,"stem":15,"icon":16},"Installation","\u002Fguide\u002Finstallation","1.guide\u002F2.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Quick start","\u002Fguide\u002Fquick-start","1.guide\u002F3.quick-start","i-lucide-rocket",{"title":23,"path":24,"stem":25,"children":26,"icon":45},"Server","\u002Fguide\u002Fserver","1.guide\u002F4.server\u002F1.index",[27,30,35,40],{"title":28,"path":24,"stem":25,"icon":29},"Usage","i-lucide-server",{"title":31,"path":32,"stem":33,"icon":34},"Config file","\u002Fguide\u002Fserver\u002Fconfig-file","1.guide\u002F4.server\u002F2.config-file","i-lucide-file-cog",{"title":36,"path":37,"stem":38,"icon":39},"Options","\u002Fguide\u002Fserver\u002Foptions","1.guide\u002F4.server\u002F3.options","i-lucide-settings",{"title":41,"path":42,"stem":43,"icon":44},"Advanced","\u002Fguide\u002Fserver\u002Fadvanced","1.guide\u002F4.server\u002F4.advanced","i-lucide-flask-conical",false,{"title":47,"path":48,"stem":49,"children":50,"icon":45},"Client","\u002Fguide\u002Fclient","1.guide\u002F5.client\u002F1.index",[51,53,58],{"title":28,"path":48,"stem":49,"icon":52},"i-lucide-monitor-smartphone",{"title":54,"path":55,"stem":56,"icon":57},"Live queries","\u002Fguide\u002Fclient\u002Flive-queries","1.guide\u002F5.client\u002F2.live-queries","i-lucide-radio",{"title":41,"path":59,"stem":60,"icon":44},"\u002Fguide\u002Fclient\u002Fadvanced","1.guide\u002F5.client\u002F3.advanced",{"title":62,"path":63,"stem":64,"children":65,"icon":45},"Development socket","\u002Fguide\u002Fsocket","1.guide\u002F6.socket\u002F1.index",[66,68,71,74],{"title":28,"path":63,"stem":64,"icon":67},"i-lucide-plug",{"title":36,"path":69,"stem":70,"icon":39},"\u002Fguide\u002Fsocket\u002Foptions","1.guide\u002F6.socket\u002F2.options",{"title":41,"path":72,"stem":73,"icon":44},"\u002Fguide\u002Fsocket\u002Fadvanced","1.guide\u002F6.socket\u002F3.advanced",{"title":75,"path":76,"stem":77,"icon":78},"PGlite in dev, Postgres in prod","\u002Fguide\u002Fsocket\u002Fdevelopment-only","1.guide\u002F6.socket\u002F4.development-only","i-lucide-cloud-upload",{"title":80,"path":81,"stem":82,"children":83,"icon":45},"DevTools & tooling","\u002Fguide\u002Fdevtools","1.guide\u002F7.devtools\u002F1.index",[84,87,92],{"title":85,"path":81,"stem":82,"icon":86},"DevTools tab","i-lucide-wrench",{"title":88,"path":89,"stem":90,"icon":91},"Actions","\u002Fguide\u002Fdevtools\u002Factions","1.guide\u002F7.devtools\u002F2.actions","i-lucide-zap",{"title":93,"path":94,"stem":95,"icon":96},"Terminal","\u002Fguide\u002Fdevtools\u002Fterminal","1.guide\u002F7.devtools\u002F3.terminal","i-lucide-square-terminal","i-lucide-book-open",{"title":99,"icon":100,"path":101,"stem":102,"children":103,"page":45},"Recipes","i-lucide-chef-hat","\u002Frecipes","2.recipes",[104,116,138,159,171],{"title":105,"path":106,"stem":107,"children":108,"icon":45},"Migrations","\u002Frecipes\u002Fmigrations","2.recipes\u002F1.migrations\u002F1.index",[109,111],{"title":28,"path":106,"stem":107,"icon":110},"i-lucide-database-backup",{"title":112,"path":113,"stem":114,"icon":115},"Edited migrations","\u002Frecipes\u002Fmigrations\u002Fedited-migrations","2.recipes\u002F1.migrations\u002F2.edited-migrations","i-lucide-file-diff",{"title":117,"path":118,"stem":119,"children":120,"icon":45},"Testing","\u002Frecipes\u002Ftesting","2.recipes\u002F2.testing\u002F1.index",[121,123,128,133],{"title":28,"path":118,"stem":119,"icon":122},"i-lucide-test-tube",{"title":124,"path":125,"stem":126,"icon":127},"Isolation","\u002Frecipes\u002Ftesting\u002Fisolation","2.recipes\u002F2.testing\u002F2.isolation","i-lucide-git-fork",{"title":129,"path":130,"stem":131,"icon":132},"vitest","\u002Frecipes\u002Ftesting\u002Fvitest","2.recipes\u002F2.testing\u002F3.vitest","i-simple-icons-vitest",{"title":134,"path":135,"stem":136,"icon":137},"@nuxt\u002Ftest-utils","\u002Frecipes\u002Ftesting\u002Fnuxt-test-utils","2.recipes\u002F2.testing\u002F4.nuxt-test-utils","i-simple-icons-nuxt",{"title":139,"path":140,"stem":141,"children":142,"icon":45},"Deploy","\u002Frecipes\u002Fdeploy","2.recipes\u002F3.deploy\u002F1.index",[143,144,149,154],{"title":139,"path":140,"stem":141},{"title":145,"path":146,"stem":147,"icon":148},"Any Postgres","\u002Frecipes\u002Fdeploy\u002Fpostgres","2.recipes\u002F3.deploy\u002F2.postgres","i-lucide-database",{"title":150,"path":151,"stem":152,"icon":153},"Netlify","\u002Frecipes\u002Fdeploy\u002Fnetlify","2.recipes\u002F3.deploy\u002F3.netlify","i-simple-icons-netlify",{"title":155,"path":156,"stem":157,"icon":158},"Neon","\u002Frecipes\u002Fdeploy\u002Fneon","2.recipes\u002F3.deploy\u002F4.neon","i-simple-icons-neon",{"title":160,"path":161,"stem":162,"children":163,"icon":45},"Outside Nuxt","\u002Frecipes\u002Foutside-nuxt","2.recipes\u002F4.outside-nuxt\u002F1.index",[164,167],{"title":165,"path":161,"stem":162,"icon":166},"Config and provider","i-lucide-package",{"title":168,"path":169,"stem":170,"icon":67},"Socket server","\u002Frecipes\u002Foutside-nuxt\u002Fsocket","2.recipes\u002F4.outside-nuxt\u002F2.socket",{"title":172,"path":173,"stem":174,"icon":67},"Nitro's useDatabase","\u002Frecipes\u002Fnitro-database","2.recipes\u002F5.nitro-database",{"title":176,"icon":177,"path":178,"stem":179,"children":180,"page":45},"Reference","i-lucide-code-xml","\u002Freference","3.reference",[181,185,189,193,198,203],{"title":182,"path":183,"stem":184,"icon":34},"Config files","\u002Freference\u002Fconfig-files","3.reference\u002F1.config-files",{"title":186,"path":187,"stem":188,"icon":39},"Module options","\u002Freference\u002Fmodule-options","3.reference\u002F2.module-options",{"title":190,"path":191,"stem":192,"icon":67},"Socket options","\u002Freference\u002Fsocket-options","3.reference\u002F3.socket-options",{"title":194,"path":195,"stem":196,"icon":197},"Exports","\u002Freference\u002Fexports","3.reference\u002F4.exports","i-lucide-boxes",{"title":199,"path":200,"stem":201,"icon":202},"Hooks","\u002Freference\u002Fhooks","3.reference\u002F5.hooks","i-lucide-anchor",{"title":204,"path":205,"stem":206,"icon":207},"Environment","\u002Freference\u002Fenvironment","3.reference\u002F6.environment","i-lucide-variable",{"id":209,"title":172,"body":210,"description":739,"extension":740,"links":741,"meta":742,"navigation":743,"path":173,"seo":744,"stem":174,"__hash__":745},"docs\u002F2.recipes\u002F5.nitro-database.md",{"type":211,"value":212,"toc":735},"minimark",[213,244,249,255,572,586,612,615,718,731],[214,215,216,217,227,228,231,232,235,236,239,240,243],"p",{},"Nitro ships a database layer, ",[218,219,223],"a",{"href":220,"rel":221},"https:\u002F\u002Fnitro.build\u002Fguide\u002Fdatabase",[222],"nofollow",[224,225,226],"code",{},"useDatabase()"," over db0, experimental in Nitro 2 and 3. The module does not register anything with it: db0's ",[224,229,230],{},"pglite"," connector opens an instance of its own, which cannot share a data directory with the ",[218,233,234],{"href":63},"socket"," or ",[224,237,238],{},"usePGlite()",". Its ",[224,241,242],{},"postgresql"," connector over the socket URL works, and the same connector reaches your real Postgres in production.",[245,246,248],"h2",{"id":247},"configuration","Configuration",[214,250,251,254],{},[224,252,253],{},"nitro.database"," is build-time configuration, so the development entry pins the socket port rather than reading the variable the socket exports later:",[256,257,263],"pre",{"className":258,"code":259,"filename":260,"language":261,"meta":262,"style":262},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: ['nuxt-pglite'],\n  pglite: { socket: { port: 5455 } },\n  nitro: {\n    experimental: { database: true },\n    database: {\n      default: { connector: 'postgresql', options: { url: process.env.DATABASE_URL! } },\n    },\n  },\n  $development: {\n    nitro: {\n      database: {\n        default: {\n          connector: 'postgresql',\n          options: { url: 'postgres:\u002F\u002Fpostgres@127.0.0.1:5455\u002Fpostgres' },\n        },\n      },\n    },\n  },\n})\n","nuxt.config.ts","ts","",[224,264,265,289,317,350,361,382,392,450,456,462,472,482,492,502,518,541,547,553,558,563],{"__ignoreMap":262},[266,267,270,274,277,281,285],"span",{"class":268,"line":269},"line",1,[266,271,273],{"class":272},"s7zQu","export",[266,275,276],{"class":272}," default",[266,278,280],{"class":279},"s2Zo4"," defineNuxtConfig",[266,282,284],{"class":283},"sTEyZ","(",[266,286,288],{"class":287},"sMK4o","{\n",[266,290,292,296,299,302,305,309,311,314],{"class":268,"line":291},2,[266,293,295],{"class":294},"swJcz","  modules",[266,297,298],{"class":287},":",[266,300,301],{"class":283}," [",[266,303,304],{"class":287},"'",[266,306,308],{"class":307},"sfazB","nuxt-pglite",[266,310,304],{"class":287},[266,312,313],{"class":283},"]",[266,315,316],{"class":287},",\n",[266,318,320,323,325,328,331,333,335,338,340,344,347],{"class":268,"line":319},3,[266,321,322],{"class":294},"  pglite",[266,324,298],{"class":287},[266,326,327],{"class":287}," {",[266,329,330],{"class":294}," socket",[266,332,298],{"class":287},[266,334,327],{"class":287},[266,336,337],{"class":294}," port",[266,339,298],{"class":287},[266,341,343],{"class":342},"sbssI"," 5455",[266,345,346],{"class":287}," }",[266,348,349],{"class":287}," },\n",[266,351,353,356,358],{"class":268,"line":352},4,[266,354,355],{"class":294},"  nitro",[266,357,298],{"class":287},[266,359,360],{"class":287}," {\n",[266,362,364,367,369,371,374,376,380],{"class":268,"line":363},5,[266,365,366],{"class":294},"    experimental",[266,368,298],{"class":287},[266,370,327],{"class":287},[266,372,373],{"class":294}," database",[266,375,298],{"class":287},[266,377,379],{"class":378},"sfNiH"," true",[266,381,349],{"class":287},[266,383,385,388,390],{"class":268,"line":384},6,[266,386,387],{"class":294},"    database",[266,389,298],{"class":287},[266,391,360],{"class":287},[266,393,395,398,400,402,405,407,410,412,414,417,420,422,424,427,429,432,435,438,440,443,446,448],{"class":268,"line":394},7,[266,396,397],{"class":294},"      default",[266,399,298],{"class":287},[266,401,327],{"class":287},[266,403,404],{"class":294}," connector",[266,406,298],{"class":287},[266,408,409],{"class":287}," '",[266,411,242],{"class":307},[266,413,304],{"class":287},[266,415,416],{"class":287},",",[266,418,419],{"class":294}," options",[266,421,298],{"class":287},[266,423,327],{"class":287},[266,425,426],{"class":294}," url",[266,428,298],{"class":287},[266,430,431],{"class":283}," process",[266,433,434],{"class":287},".",[266,436,437],{"class":283},"env",[266,439,434],{"class":287},[266,441,442],{"class":283},"DATABASE_URL",[266,444,445],{"class":287},"!",[266,447,346],{"class":287},[266,449,349],{"class":287},[266,451,453],{"class":268,"line":452},8,[266,454,455],{"class":287},"    },\n",[266,457,459],{"class":268,"line":458},9,[266,460,461],{"class":287},"  },\n",[266,463,465,468,470],{"class":268,"line":464},10,[266,466,467],{"class":294},"  $development",[266,469,298],{"class":287},[266,471,360],{"class":287},[266,473,475,478,480],{"class":268,"line":474},11,[266,476,477],{"class":294},"    nitro",[266,479,298],{"class":287},[266,481,360],{"class":287},[266,483,485,488,490],{"class":268,"line":484},12,[266,486,487],{"class":294},"      database",[266,489,298],{"class":287},[266,491,360],{"class":287},[266,493,495,498,500],{"class":268,"line":494},13,[266,496,497],{"class":294},"        default",[266,499,298],{"class":287},[266,501,360],{"class":287},[266,503,505,508,510,512,514,516],{"class":268,"line":504},14,[266,506,507],{"class":294},"          connector",[266,509,298],{"class":287},[266,511,409],{"class":287},[266,513,242],{"class":307},[266,515,304],{"class":287},[266,517,316],{"class":287},[266,519,521,524,526,528,530,532,534,537,539],{"class":268,"line":520},15,[266,522,523],{"class":294},"          options",[266,525,298],{"class":287},[266,527,327],{"class":287},[266,529,426],{"class":294},[266,531,298],{"class":287},[266,533,409],{"class":287},[266,535,536],{"class":307},"postgres:\u002F\u002Fpostgres@127.0.0.1:5455\u002Fpostgres",[266,538,304],{"class":287},[266,540,349],{"class":287},[266,542,544],{"class":268,"line":543},16,[266,545,546],{"class":287},"        },\n",[266,548,550],{"class":268,"line":549},17,[266,551,552],{"class":287},"      },\n",[266,554,556],{"class":268,"line":555},18,[266,557,455],{"class":287},[266,559,561],{"class":268,"line":560},19,[266,562,461],{"class":287},[266,564,566,569],{"class":268,"line":565},20,[266,567,568],{"class":287},"}",[266,570,571],{"class":283},")\n",[214,573,574,575,578,579,582,583,585],{},"Install ",[224,576,577],{},"db0"," and ",[224,580,581],{},"pg",". In production ",[224,584,442],{}," is read when the app is built, so it has to be set in the build environment as well as at runtime.",[587,588,589],"note",{},[214,590,591,592,595,596,599,600,603,604,607,608,611],{},"On Nuxt 5 (Nitro 3) the development entry is ",[224,593,594],{},"nitro.devDatabase",", which replaces ",[224,597,598],{},"database"," in ",[224,601,602],{},"nuxt dev",", and ",[224,605,606],{},"useDatabase"," is imported from ",[224,609,610],{},"nitro\u002Fdatabase"," rather than auto-imported.",[245,613,28],{"id":614},"usage",[256,616,619],{"className":258,"code":617,"filename":618,"language":261,"meta":262,"style":262},"export default defineEventHandler(async () => {\n  const db = useDatabase()\n  const { rows } = await db.sql`SELECT now() AS at`\n  return rows?.[0]\n})\n","server\u002Fapi\u002Fping.get.ts",[224,620,621,644,661,693,712],{"__ignoreMap":262},[266,622,623,625,627,630,632,636,639,642],{"class":268,"line":269},[266,624,273],{"class":272},[266,626,276],{"class":272},[266,628,629],{"class":279}," defineEventHandler",[266,631,284],{"class":283},[266,633,635],{"class":634},"spNyl","async",[266,637,638],{"class":287}," ()",[266,640,641],{"class":634}," =>",[266,643,360],{"class":287},[266,645,646,649,652,655,658],{"class":268,"line":291},[266,647,648],{"class":634},"  const",[266,650,651],{"class":283}," db",[266,653,654],{"class":287}," =",[266,656,657],{"class":279}," useDatabase",[266,659,660],{"class":294},"()\n",[266,662,663,665,667,670,672,674,677,679,681,684,687,690],{"class":268,"line":319},[266,664,648],{"class":634},[266,666,327],{"class":287},[266,668,669],{"class":283}," rows",[266,671,346],{"class":287},[266,673,654],{"class":287},[266,675,676],{"class":272}," await",[266,678,651],{"class":283},[266,680,434],{"class":287},[266,682,683],{"class":279},"sql",[266,685,686],{"class":287},"`",[266,688,689],{"class":307},"SELECT now() AS at",[266,691,692],{"class":287},"`\n",[266,694,695,698,700,703,706,709],{"class":268,"line":352},[266,696,697],{"class":272},"  return",[266,699,669],{"class":283},[266,701,702],{"class":287},"?.",[266,704,705],{"class":294},"[",[266,707,708],{"class":342},"0",[266,710,711],{"class":294},"]\n",[266,713,714,716],{"class":268,"line":363},[266,715,568],{"class":287},[266,717,571],{"class":283},[214,719,720,721,724,725,730],{},"Migrations are not part of db0: apply them from ",[224,722,723],{},"init"," with ",[218,726,727],{"href":106},[224,728,729],{},"applyMigrations",", as with any other driver.",[732,733,734],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":262,"searchDepth":269,"depth":291,"links":736},[737,738],{"id":247,"depth":291,"text":248},{"id":614,"depth":291,"text":28},"Point Nitro's experimental database layer at the development socket, with the same connector in production.","md",null,{},{"icon":67},{"title":172,"description":739},"pJxjAhVMlQh7ax8nEJIceNbql6_qpOlR7xS32PON0mg",[747,741],{"title":168,"path":169,"stem":170,"description":748,"icon":67,"children":-1},"nuxt-pglite\u002Fsocket, the Postgres wire-protocol server, in any Node, Bun or Deno process.",1791474261367]