[{"data":1,"prerenderedAt":583},["ShallowReactive",2],{"navigation":3,"\u002Frecipes\u002Fdeploy\u002Fneon":208,"\u002Frecipes\u002Fdeploy\u002Fneon-surround":578},[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":155,"body":210,"description":571,"extension":572,"links":573,"meta":574,"navigation":575,"path":156,"seo":576,"stem":157,"__hash__":577},"docs\u002F2.recipes\u002F3.deploy\u002F4.neon.md",{"type":211,"value":212,"toc":566},"minimark",[213,232,237,252,263,486,493,496,510,549,552,556,562],[214,215,216,222,223,227,228,231],"p",{},[217,218,155],"a",{"href":219,"rel":220},"https:\u002F\u002Fneon.tech",[221],"nofollow"," is a Postgres reached through ",[224,225,226],"code",{},"DATABASE_URL",", like ",[217,229,230],{"href":146},"any other",". What sets it apart is its serverless drivers.",[233,234,236],"h2",{"id":235},"drivers","Drivers",[214,238,239,240,243,244,247,248,251],{},"Neon's serverless drivers (",[224,241,242],{},"@neondatabase\u002Fserverless",", through ",[224,245,246],{},"drizzle-orm\u002Fneon-http"," or ",[224,249,250],{},"drizzle-orm\u002Fneon-serverless",") speak HTTP and WebSocket to Neon's proxy, not the Postgres wire protocol. That is what makes them fast from a serverless function, and why they cannot reach the development socket, which speaks the wire protocol only.",[214,253,254,255,258,259,262],{},"Use ",[224,256,257],{},"node-postgres"," in development and switch on ",[224,260,261],{},"import.meta.dev",", which the bundler replaces with a constant, so only the production driver is in the build:",[264,265,271],"pre",{"className":266,"code":267,"filename":268,"language":269,"meta":270,"style":270},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { drizzle as drizzleNeon } from 'drizzle-orm\u002Fneon-http'\nimport { drizzle as drizzlePg } from 'drizzle-orm\u002Fnode-postgres'\n\nimport { relations } from '..\u002Fdatabase\u002Frelations'\n\nexport function useDB() {\n  const url = process.env.DATABASE_URL!\n  return import.meta.dev ? drizzlePg(url, { relations }) : drizzleNeon(url, { relations })\n}\n","server\u002Futils\u002Fdb.ts","ts","",[224,272,273,311,336,343,364,369,389,417,480],{"__ignoreMap":270},[274,275,278,282,286,290,293,296,299,302,305,308],"span",{"class":276,"line":277},"line",1,[274,279,281],{"class":280},"s7zQu","import",[274,283,285],{"class":284},"sMK4o"," {",[274,287,289],{"class":288},"sTEyZ"," drizzle",[274,291,292],{"class":280}," as",[274,294,295],{"class":288}," drizzleNeon",[274,297,298],{"class":284}," }",[274,300,301],{"class":280}," from",[274,303,304],{"class":284}," '",[274,306,246],{"class":307},"sfazB",[274,309,310],{"class":284},"'\n",[274,312,314,316,318,320,322,325,327,329,331,334],{"class":276,"line":313},2,[274,315,281],{"class":280},[274,317,285],{"class":284},[274,319,289],{"class":288},[274,321,292],{"class":280},[274,323,324],{"class":288}," drizzlePg",[274,326,298],{"class":284},[274,328,301],{"class":280},[274,330,304],{"class":284},[274,332,333],{"class":307},"drizzle-orm\u002Fnode-postgres",[274,335,310],{"class":284},[274,337,339],{"class":276,"line":338},3,[274,340,342],{"emptyLinePlaceholder":341},true,"\n",[274,344,346,348,350,353,355,357,359,362],{"class":276,"line":345},4,[274,347,281],{"class":280},[274,349,285],{"class":284},[274,351,352],{"class":288}," relations",[274,354,298],{"class":284},[274,356,301],{"class":280},[274,358,304],{"class":284},[274,360,361],{"class":307},"..\u002Fdatabase\u002Frelations",[274,363,310],{"class":284},[274,365,367],{"class":276,"line":366},5,[274,368,342],{"emptyLinePlaceholder":341},[274,370,372,375,379,383,386],{"class":276,"line":371},6,[274,373,374],{"class":280},"export",[274,376,378],{"class":377},"spNyl"," function",[274,380,382],{"class":381},"s2Zo4"," useDB",[274,384,385],{"class":284},"()",[274,387,388],{"class":284}," {\n",[274,390,392,395,398,401,404,407,410,412,414],{"class":276,"line":391},7,[274,393,394],{"class":377},"  const",[274,396,397],{"class":288}," url",[274,399,400],{"class":284}," =",[274,402,403],{"class":288}," process",[274,405,406],{"class":284},".",[274,408,409],{"class":288},"env",[274,411,406],{"class":284},[274,413,226],{"class":288},[274,415,416],{"class":284},"!\n",[274,418,420,423,426,428,431,433,436,439,441,445,448,451,453,455,457,460,463,465,467,469,471,473,475,477],{"class":276,"line":419},8,[274,421,422],{"class":280},"  return",[274,424,425],{"class":280}," import",[274,427,406],{"class":284},[274,429,430],{"class":288},"meta",[274,432,406],{"class":284},[274,434,435],{"class":288},"dev",[274,437,438],{"class":284}," ?",[274,440,324],{"class":381},[274,442,444],{"class":443},"swJcz","(",[274,446,447],{"class":288},"url",[274,449,450],{"class":284},",",[274,452,285],{"class":284},[274,454,352],{"class":288},[274,456,298],{"class":284},[274,458,459],{"class":443},") ",[274,461,462],{"class":284},":",[274,464,295],{"class":381},[274,466,444],{"class":443},[274,468,447],{"class":288},[274,470,450],{"class":284},[274,472,285],{"class":284},[274,474,352],{"class":288},[274,476,298],{"class":284},[274,478,479],{"class":443},")\n",[274,481,483],{"class":276,"line":482},9,[274,484,485],{"class":284},"}\n",[214,487,488,489,492],{},"Both drivers return the same Drizzle API, so the routes do not know which one they got. If you do not need the serverless drivers, connect to Neon with ",[224,490,491],{},"pg"," in production too, through its standard connection string, and skip the switch.",[233,494,105],{"id":495},"migrations",[214,497,498,499,502,503,505,506,462],{},"Neon does not apply migrations: you do. Apply the same files ",[224,500,501],{},"init"," applies locally, with the production ",[224,504,226],{},", from CI or the build command, as for ",[217,507,509],{"href":508},"\u002Frecipes\u002Fdeploy\u002Fpostgres#migrations","any Postgres",[264,511,516],{"className":512,"code":513,"filename":514,"language":515,"meta":270,"style":270},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","- run: pnpm drizzle-kit migrate\n  env:\n    DATABASE_URL: ${{ secrets.DATABASE_URL }}\n",".github\u002Fworkflows\u002Fdeploy.yml","yaml",[224,517,518,531,539],{"__ignoreMap":270},[274,519,520,523,526,528],{"class":276,"line":277},[274,521,522],{"class":284},"-",[274,524,525],{"class":443}," run",[274,527,462],{"class":284},[274,529,530],{"class":307}," pnpm drizzle-kit migrate\n",[274,532,533,536],{"class":276,"line":313},[274,534,535],{"class":443},"  env",[274,537,538],{"class":284},":\n",[274,540,541,544,546],{"class":276,"line":338},[274,542,543],{"class":443},"    DATABASE_URL",[274,545,462],{"class":284},[274,547,548],{"class":307}," ${{ secrets.DATABASE_URL }}\n",[214,550,551],{},"Give it Neon's direct (unpooled) connection string, as Neon recommends for schema changes: its pooler runs in transaction mode, which session-level statements in a migration can trip on.",[233,553,555],{"id":554},"branches","Branches",[214,557,558,559,561],{},"Neon branches a database in seconds, which pairs well with preview deployments: create a branch per pull request in CI, apply the migrations to it, and hand its URL to the preview as ",[224,560,226],{},". Production gets them once the branch is merged.",[563,564,565],"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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);}",{"title":270,"searchDepth":277,"depth":313,"links":567},[568,569,570],{"id":235,"depth":313,"text":236},{"id":495,"depth":313,"text":105},{"id":554,"depth":313,"text":555},"Neon's HTTP and WebSocket drivers in production, node-postgres against the socket in development, and the migrations applied from CI.","md",null,{},{"icon":158},{"title":155,"description":571},"WeFB7HGf_R1ApvacimUKzrcwZgoxyPQiMmOWpa6C3Ws",[579,581],{"title":150,"path":151,"stem":152,"description":580,"icon":153,"children":-1},"Netlify Database in production, the socket's netlify preset in development, and the committed migrations applied by Netlify on deploy. This site is the worked example.",{"title":165,"path":161,"stem":162,"description":582,"icon":166,"children":-1},"nuxt-pglite\u002Fcore, the config helper and the lazy instance provider, usable in any runtime.",1791474261395]