[{"data":1,"prerenderedAt":1468},["ShallowReactive",2],{"docs-navigation:en":3,"content-page:docs:0X88KT78snDRuuj89OasXzNgdnqXvD1KrO8vuqDzA3w":595,"content-page-surround:docs:0X88KT78snDRuuj89OasXzNgdnqXvD1KrO8vuqDzA3w":1455,"i-lucide:file":1460,"i-lucide:terminal":1464,"i-lucide:clipboard":1466},[4,55,123,191,450,509,554,590],{"title":5,"page":6,"canonicalKey":7,"locale":8,"id":9,"draft":6,"icon":10,"sidebar":11,"children":12},"Learn",false,"1","en","content:docs:1.overview:.navigation.yml","i-lucide-book-open","section",[13,20,27,34,41,48],{"title":14,"id":15,"canonicalKey":16,"locale":8,"draft":6,"navigation":17,"icon":18,"path":19},"Better Convex Nuxt","content:docs:1.overview:1.introduction.md","1\u002F1",{"icon":18},"i-lucide-orbit","\u002Fdocs\u002Foverview\u002Fintroduction",{"title":21,"id":22,"canonicalKey":23,"locale":8,"draft":6,"navigation":24,"icon":25,"path":26},"Why Better Convex Nuxt","content:docs:1.overview:2.why-better-convex-nuxt.md","1\u002F2",{"icon":25},"i-lucide-badge-check","\u002Fdocs\u002Foverview\u002Fwhy-better-convex-nuxt",{"title":28,"id":29,"canonicalKey":30,"locale":8,"draft":6,"navigation":31,"icon":32,"path":33},"Who It Is For","content:docs:1.overview:3.who-it-is-for.md","1\u002F3",{"icon":32},"i-lucide-users","\u002Fdocs\u002Foverview\u002Fwho-it-is-for",{"title":35,"id":36,"canonicalKey":37,"locale":8,"draft":6,"navigation":38,"icon":39,"path":40},"Use Cases","content:docs:1.overview:4.use-cases.md","1\u002F4",{"icon":39},"i-lucide-layout-dashboard","\u002Fdocs\u002Foverview\u002Fuse-cases",{"title":42,"id":43,"canonicalKey":44,"locale":8,"draft":6,"navigation":45,"icon":46,"path":47},"Compare Nuxt Integrations","content:docs:1.overview:5.comparison.md","1\u002F5",{"icon":46},"i-lucide-scale","\u002Fdocs\u002Foverview\u002Fcomparison",{"title":49,"id":50,"canonicalKey":51,"locale":8,"draft":6,"navigation":52,"icon":53,"path":54},"Limitations and Trade-offs","content:docs:1.overview:6.limitations.md","1\u002F6",{"icon":53},"i-lucide-triangle-alert","\u002Fdocs\u002Foverview\u002Flimitations",{"title":56,"page":6,"canonicalKey":57,"locale":8,"id":58,"draft":6,"icon":59,"children":60},"Understand","2","content:docs:2.understand:.navigation.yml","i-lucide-brain",[61,67,74,81,88,95,102,109,116],{"title":62,"id":63,"canonicalKey":64,"locale":8,"draft":6,"navigation":65,"icon":59,"path":66},"Mental Model","content:docs:2.understand:1.mental-model.md","2\u002F1",{"icon":59},"\u002Fdocs\u002Funderstand\u002Fmental-model",{"title":68,"id":69,"canonicalKey":70,"locale":8,"draft":6,"navigation":71,"icon":72,"path":73},"Request Lifecycle","content:docs:2.understand:2.request-lifecycle.md","2\u002F2",{"icon":72},"i-lucide-route","\u002Fdocs\u002Funderstand\u002Frequest-lifecycle",{"title":75,"id":76,"canonicalKey":77,"locale":8,"draft":6,"navigation":78,"icon":79,"path":80},"SSR, Hydration, and Real-Time","content:docs:2.understand:3.ssr-hydration-realtime.md","2\u002F3",{"icon":79},"i-lucide-refresh-cw","\u002Fdocs\u002Funderstand\u002Fssr-hydration-realtime",{"title":82,"id":83,"canonicalKey":84,"locale":8,"draft":6,"navigation":85,"icon":86,"path":87},"Query Ownership and Caching","content:docs:2.understand:4.query-ownership-and-caching.md","2\u002F4",{"icon":86},"i-lucide-database","\u002Fdocs\u002Funderstand\u002Fquery-ownership-and-caching",{"title":89,"id":90,"canonicalKey":91,"locale":8,"draft":6,"navigation":92,"icon":93,"path":94},"Authentication and Identity","content:docs:2.understand:5.authentication-and-identity.md","2\u002F5",{"icon":93},"i-lucide-fingerprint","\u002Fdocs\u002Funderstand\u002Fauthentication-and-identity",{"title":96,"id":97,"canonicalKey":98,"locale":8,"draft":6,"navigation":99,"icon":100,"path":101},"Server and Client Boundaries","content:docs:2.understand:6.server-and-client-boundaries.md","2\u002F6",{"icon":100},"i-lucide-panels-top-left","\u002Fdocs\u002Funderstand\u002Fserver-and-client-boundaries",{"title":103,"id":104,"canonicalKey":105,"locale":8,"draft":6,"navigation":106,"icon":107,"path":108},"Errors and Failures","content:docs:2.understand:7.errors-and-failures.md","2\u002F7",{"icon":107},"i-lucide-circle-x","\u002Fdocs\u002Funderstand\u002Ferrors-and-failures",{"title":110,"id":111,"canonicalKey":112,"locale":8,"draft":6,"navigation":113,"icon":114,"path":115},"Design Decisions","content:docs:2.understand:8.design-decisions.md","2\u002F8",{"icon":114},"i-lucide-git-branch","\u002Fdocs\u002Funderstand\u002Fdesign-decisions",{"title":117,"id":118,"canonicalKey":119,"locale":8,"draft":6,"navigation":120,"icon":121,"path":122},"Glossary","content:docs:2.understand:9.glossary.md","2\u002F9",{"icon":121},"i-lucide-book-a","\u002Fdocs\u002Funderstand\u002Fglossary",{"title":124,"page":6,"canonicalKey":125,"locale":8,"id":126,"draft":6,"icon":127,"children":128},"Get Started","3","content:docs:3.get-started:.navigation.yml","i-lucide-rocket",[129,136,143,150,157,164,171,178,185],{"title":130,"id":131,"canonicalKey":132,"locale":8,"draft":6,"navigation":133,"icon":134,"path":135},"Choose Your Path","content:docs:3.get-started:1.choose-your-path.md","3\u002F1",{"icon":134},"i-lucide-signpost","\u002Fdocs\u002Fget-started\u002Fchoose-your-path",{"title":137,"id":138,"canonicalKey":139,"locale":8,"draft":6,"navigation":140,"icon":141,"path":142},"Installation","content:docs:3.get-started:2.installation.md","3\u002F2",{"icon":141},"i-lucide-download","\u002Fdocs\u002Fget-started\u002Finstallation",{"title":144,"id":145,"canonicalKey":146,"locale":8,"draft":6,"navigation":147,"icon":148,"path":149},"First Real-Time Page","content:docs:3.get-started:3.first-realtime-page.md","3\u002F3",{"icon":148},"i-lucide-radio","\u002Fdocs\u002Fget-started\u002Ffirst-realtime-page",{"title":151,"id":152,"canonicalKey":153,"locale":8,"draft":6,"navigation":154,"icon":155,"path":156},"Add a Mutation","content:docs:3.get-started:4.add-a-mutation.md","3\u002F4",{"icon":155},"i-lucide-square-pen","\u002Fdocs\u002Fget-started\u002Fadd-a-mutation",{"title":158,"id":159,"canonicalKey":160,"locale":8,"draft":6,"navigation":161,"icon":162,"path":163},"Add Authentication","content:docs:3.get-started:5.add-authentication.md","3\u002F5",{"icon":162},"i-lucide-log-in","\u002Fdocs\u002Fget-started\u002Fadd-authentication",{"title":165,"id":166,"canonicalKey":167,"locale":8,"draft":6,"navigation":168,"icon":169,"path":170},"Protect Data","content:docs:3.get-started:6.protect-data.md","3\u002F6",{"icon":169},"i-lucide-shield-check","\u002Fdocs\u002Fget-started\u002Fprotect-data",{"title":172,"id":173,"canonicalKey":174,"locale":8,"draft":6,"navigation":175,"icon":176,"path":177},"Project Structure","content:docs:3.get-started:7.project-structure.md","3\u002F7",{"icon":176},"i-lucide-folder-tree","\u002Fdocs\u002Fget-started\u002Fproject-structure",{"title":179,"id":180,"canonicalKey":181,"locale":8,"draft":6,"navigation":182,"icon":183,"path":184},"Next Steps","content:docs:3.get-started:8.next-steps.md","3\u002F8",{"icon":183},"i-lucide-arrow-right","\u002Fdocs\u002Fget-started\u002Fnext-steps",{"title":186,"id":187,"canonicalKey":188,"locale":8,"draft":6,"navigation":189,"icon":100,"path":190},"Plain Vue and Vite","content:docs:3.get-started:9.plain-vue.md","3\u002F9",{"icon":100},"\u002Fdocs\u002Fget-started\u002Fplain-vue",{"title":192,"page":6,"canonicalKey":193,"locale":8,"id":194,"draft":6,"icon":195,"sidebar":11,"children":196},"Build","4","content:docs:4.build:.navigation.yml","i-lucide-blocks",[197,234,265,336,368,393,432],{"title":198,"page":6,"canonicalKey":199,"locale":8,"children":200},"Queries","4\u002F1",[201,206,213,220,227],{"title":198,"id":202,"canonicalKey":203,"locale":8,"draft":6,"navigation":204,"icon":86,"path":205},"content:docs:4.build:1.queries:1.queries.md","4\u002F1\u002F1",{"icon":86},"\u002Fdocs\u002Fbuild\u002Fqueries\u002Fqueries",{"title":207,"id":208,"canonicalKey":209,"locale":8,"draft":6,"navigation":210,"icon":211,"path":212},"Reactive Arguments","content:docs:4.build:1.queries:2.reactive-arguments.md","4\u002F1\u002F2",{"icon":211},"i-lucide-sliders-horizontal","\u002Fdocs\u002Fbuild\u002Fqueries\u002Freactive-arguments",{"title":214,"id":215,"canonicalKey":216,"locale":8,"draft":6,"navigation":217,"icon":218,"path":219},"Loading and Stale Data","content:docs:4.build:1.queries:3.loading-and-stale-data.md","4\u002F1\u002F3",{"icon":218},"i-lucide-loader-circle","\u002Fdocs\u002Fbuild\u002Fqueries\u002Floading-and-stale-data",{"title":221,"id":222,"canonicalKey":223,"locale":8,"draft":6,"navigation":224,"icon":225,"path":226},"Query Execution Options","content:docs:4.build:1.queries:4.ssr-options.md","4\u002F1\u002F4",{"icon":225},"i-lucide-server-cog","\u002Fdocs\u002Fbuild\u002Fqueries\u002Fssr-options",{"title":228,"id":229,"canonicalKey":230,"locale":8,"draft":6,"navigation":231,"icon":232,"path":233},"Pagination","content:docs:4.build:1.queries:6.pagination.md","4\u002F1\u002F6",{"icon":232},"i-lucide-list-plus","\u002Fdocs\u002Fbuild\u002Fqueries\u002Fpagination",{"title":235,"page":6,"canonicalKey":236,"locale":8,"children":237},"Write Data","4\u002F2",[238,244,251,258],{"title":239,"id":240,"canonicalKey":241,"locale":8,"draft":6,"navigation":242,"icon":155,"path":243},"Mutations","content:docs:4.build:2.write-data:1.mutations.md","4\u002F2\u002F1",{"icon":155},"\u002Fdocs\u002Fbuild\u002Fwrite-data\u002Fmutations",{"title":245,"id":246,"canonicalKey":247,"locale":8,"draft":6,"navigation":248,"icon":249,"path":250},"Actions","content:docs:4.build:2.write-data:2.actions.md","4\u002F2\u002F2",{"icon":249},"i-lucide-zap","\u002Fdocs\u002Fbuild\u002Fwrite-data\u002Factions",{"title":252,"id":253,"canonicalKey":254,"locale":8,"draft":6,"navigation":255,"icon":256,"path":257},"Optimistic Updates","content:docs:4.build:2.write-data:3.optimistic-updates.md","4\u002F2\u002F3",{"icon":256},"i-lucide-gauge","\u002Fdocs\u002Fbuild\u002Fwrite-data\u002Foptimistic-updates",{"title":259,"id":260,"canonicalKey":261,"locale":8,"draft":6,"navigation":262,"icon":263,"path":264},"Concurrent Operations","content:docs:4.build:2.write-data:4.concurrent-operations.md","4\u002F2\u002F4",{"icon":263},"i-lucide-git-fork","\u002Fdocs\u002Fbuild\u002Fwrite-data\u002Fconcurrent-operations",{"title":266,"page":6,"canonicalKey":267,"locale":8,"children":268},"Authentication","4\u002F3",[269,275,282,289,295,301,308,315,322,329],{"title":266,"id":270,"canonicalKey":271,"locale":8,"draft":6,"navigation":272,"icon":273,"path":274},"content:docs:4.build:3.authentication:1.overview.md","4\u002F3\u002F1",{"icon":273},"i-lucide-shield","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Foverview",{"title":276,"id":277,"canonicalKey":278,"locale":8,"draft":6,"navigation":279,"icon":280,"path":281},"Better Auth Setup","content:docs:4.build:3.authentication:2.better-auth-setup.md","4\u002F3\u002F2",{"icon":280},"i-lucide-settings-2","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fbetter-auth-setup",{"title":283,"id":284,"canonicalKey":285,"locale":8,"draft":6,"navigation":286,"icon":287,"path":288},"Auth State and User Data","content:docs:4.build:3.authentication:3.auth-state-and-user.md","4\u002F3\u002F3",{"icon":287},"i-lucide-user-round","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fauth-state-and-user",{"title":290,"id":291,"canonicalKey":292,"locale":8,"draft":6,"navigation":293,"icon":162,"path":294},"Sign In and Sign Out","content:docs:4.build:3.authentication:4.sign-in-and-sign-out.md","4\u002F3\u002F4",{"icon":162},"\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fsign-in-and-sign-out",{"title":296,"id":297,"canonicalKey":298,"locale":8,"draft":6,"navigation":299,"icon":72,"path":300},"Route Protection","content:docs:4.build:3.authentication:5.route-protection.md","4\u002F3\u002F5",{"icon":72},"\u002Fdocs\u002Fbuild\u002Fauthentication\u002Froute-protection",{"title":302,"id":303,"canonicalKey":304,"locale":8,"draft":6,"navigation":305,"icon":306,"path":307},"Backend Authorization","content:docs:4.build:3.authentication:6.backend-authorization.md","4\u002F3\u002F6",{"icon":306},"i-lucide-lock-keyhole","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fbackend-authorization",{"title":309,"id":310,"canonicalKey":311,"locale":8,"draft":6,"navigation":312,"icon":313,"path":314},"Better Auth Plugins","content:docs:4.build:3.authentication:7.better-auth-plugins.md","4\u002F3\u002F7",{"icon":313},"i-lucide-plug","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fbetter-auth-plugins",{"title":316,"id":317,"canonicalKey":318,"locale":8,"draft":6,"navigation":319,"icon":320,"path":321},"Custom User Fields","content:docs:4.build:3.authentication:8.custom-user-fields.md","4\u002F3\u002F8",{"icon":320},"i-lucide-user-cog","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fcustom-user-fields",{"title":323,"id":324,"canonicalKey":325,"locale":8,"draft":6,"navigation":326,"icon":327,"path":328},"User Synchronization","content:docs:4.build:3.authentication:9.user-synchronization.md","4\u002F3\u002F9",{"icon":327},"i-lucide-refresh-ccw","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fuser-synchronization",{"title":330,"id":331,"canonicalKey":332,"locale":8,"draft":6,"navigation":333,"icon":334,"path":335},"Delegated OAuth and MCP","content:docs:4.build:3.authentication:10.delegated-oauth-and-mcp.md","4\u002F3\u002F10",{"icon":334},"i-lucide-bot","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fdelegated-oauth-and-mcp",{"title":337,"page":6,"canonicalKey":338,"locale":8,"children":339},"Server","4\u002F4",[340,347,354,361],{"title":341,"id":342,"canonicalKey":343,"locale":8,"draft":6,"navigation":344,"icon":345,"path":346},"serverConvex","content:docs:4.build:4.server:1.server-convex.md","4\u002F4\u002F1",{"icon":345},"i-lucide-server","\u002Fdocs\u002Fbuild\u002Fserver\u002Fserver-convex",{"title":348,"id":349,"canonicalKey":350,"locale":8,"draft":6,"navigation":351,"icon":352,"path":353},"Server Routes","content:docs:4.build:4.server:2.server-routes.md","4\u002F4\u002F2",{"icon":352},"i-lucide-waypoints","\u002Fdocs\u002Fbuild\u002Fserver\u002Fserver-routes",{"title":355,"id":356,"canonicalKey":357,"locale":8,"draft":6,"navigation":358,"icon":359,"path":360},"Webhooks and Jobs","content:docs:4.build:4.server:3.webhooks-and-jobs.md","4\u002F4\u002F3",{"icon":359},"i-lucide-webhook","\u002Fdocs\u002Fbuild\u002Fserver\u002Fwebhooks-and-jobs",{"title":362,"id":363,"canonicalKey":364,"locale":8,"draft":6,"navigation":365,"icon":366,"path":367},"Credentials and Server Security","content:docs:4.build:4.server:4.credentials-and-security.md","4\u002F4\u002F4",{"icon":366},"i-lucide-key-round","\u002Fdocs\u002Fbuild\u002Fserver\u002Fcredentials-and-security",{"title":369,"page":6,"canonicalKey":370,"locale":8,"children":371},"Files","4\u002F5",[372,379,386],{"title":373,"id":374,"canonicalKey":375,"locale":8,"draft":6,"navigation":376,"icon":377,"path":378},"Upload Files","content:docs:4.build:5.files:1.upload-files.md","4\u002F5\u002F1",{"icon":377},"i-lucide-upload","\u002Fdocs\u002Fbuild\u002Ffiles\u002Fupload-files",{"title":380,"id":381,"canonicalKey":382,"locale":8,"draft":6,"navigation":383,"icon":384,"path":385},"Storage URLs","content:docs:4.build:5.files:3.storage-urls.md","4\u002F5\u002F3",{"icon":384},"i-lucide-link","\u002Fdocs\u002Fbuild\u002Ffiles\u002Fstorage-urls",{"title":387,"id":388,"canonicalKey":389,"locale":8,"draft":6,"navigation":390,"icon":391,"path":392},"File Validation and Deletion","content:docs:4.build:5.files:4.validation-and-deletion.md","4\u002F5\u002F4",{"icon":391},"i-lucide-file-x","\u002Fdocs\u002Fbuild\u002Ffiles\u002Fvalidation-and-deletion",{"title":394,"page":6,"canonicalKey":395,"locale":8,"children":396},"Application Behavior","4\u002F6",[397,404,411,418,425],{"title":398,"id":399,"canonicalKey":400,"locale":8,"draft":6,"navigation":401,"icon":402,"path":403},"Connection State","content:docs:4.build:6.application-behavior:1.connection-state.md","4\u002F6\u002F1",{"icon":402},"i-lucide-wifi","\u002Fdocs\u002Fbuild\u002Fapplication-behavior\u002Fconnection-state",{"title":405,"id":406,"canonicalKey":407,"locale":8,"draft":6,"navigation":408,"icon":409,"path":410},"Error Handling","content:docs:4.build:6.application-behavior:2.error-handling.md","4\u002F6\u002F2",{"icon":409},"i-lucide-circle-alert","\u002Fdocs\u002Fbuild\u002Fapplication-behavior\u002Ferror-handling",{"title":412,"id":413,"canonicalKey":414,"locale":8,"draft":6,"navigation":415,"icon":416,"path":417},"Logging","content:docs:4.build:6.application-behavior:3.logging.md","4\u002F6\u002F3",{"icon":416},"i-lucide-scroll-text","\u002Fdocs\u002Fbuild\u002Fapplication-behavior\u002Flogging",{"title":419,"id":420,"canonicalKey":421,"locale":8,"draft":6,"navigation":422,"icon":423,"path":424},"DevTools","content:docs:4.build:6.application-behavior:4.devtools.md","4\u002F6\u002F4",{"icon":423},"i-lucide-wrench","\u002Fdocs\u002Fbuild\u002Fapplication-behavior\u002Fdevtools",{"title":426,"id":427,"canonicalKey":428,"locale":8,"draft":6,"navigation":429,"icon":430,"path":431},"Performance","content:docs:4.build:6.application-behavior:5.performance.md","4\u002F6\u002F5",{"icon":430},"i-lucide-chart-no-axes-combined","\u002Fdocs\u002Fbuild\u002Fapplication-behavior\u002Fperformance",{"title":433,"page":6,"canonicalKey":434,"locale":8,"id":435,"draft":6,"icon":334,"children":436},"Agents and MCP","4\u002F7","content:docs:4.build:7.agents:.navigation.yml",[437,444],{"title":438,"id":439,"canonicalKey":440,"locale":8,"draft":6,"navigation":441,"icon":442,"path":443},"MCP on Convex","content:docs:4.build:7.agents:1.mcp.md","4\u002F7\u002F1",{"icon":442},"i-lucide-plug-zap","\u002Fdocs\u002Fbuild\u002Fagents\u002Fmcp",{"title":445,"id":446,"canonicalKey":447,"locale":8,"draft":6,"navigation":448,"icon":100,"path":449},"Vue MCP Apps","content:docs:4.build:7.agents:2.mcp-apps.md","4\u002F7\u002F2",{"icon":100},"\u002Fdocs\u002Fbuild\u002Fagents\u002Fmcp-apps",{"title":451,"page":6,"canonicalKey":452,"locale":8,"id":453,"draft":6,"icon":454,"children":455},"Recipes","5","content:docs:5.recipes:.navigation.yml","i-lucide-cooking-pot",[456,462,469,476,483,490,497,503],{"title":457,"id":458,"canonicalKey":459,"locale":8,"draft":6,"navigation":460,"icon":39,"path":461},"Protected Dashboard","content:docs:5.recipes:1.protected-dashboard.md","5\u002F1",{"icon":39},"\u002Fdocs\u002Frecipes\u002Fprotected-dashboard",{"title":463,"id":464,"canonicalKey":465,"locale":8,"draft":6,"navigation":466,"icon":467,"path":468},"Real-Time Feed","content:docs:5.recipes:2.realtime-feed.md","5\u002F2",{"icon":467},"i-lucide-messages-square","\u002Fdocs\u002Frecipes\u002Frealtime-feed",{"title":470,"id":471,"canonicalKey":472,"locale":8,"draft":6,"navigation":473,"icon":474,"path":475},"Optimistic Todo List","content:docs:5.recipes:3.optimistic-todo-list.md","5\u002F3",{"icon":474},"i-lucide-list-todo","\u002Fdocs\u002Frecipes\u002Foptimistic-todo-list",{"title":477,"id":478,"canonicalKey":479,"locale":8,"draft":6,"navigation":480,"icon":481,"path":482},"Infinite Scroll","content:docs:5.recipes:4.infinite-scroll.md","5\u002F4",{"icon":481},"i-lucide-mouse","\u002Fdocs\u002Frecipes\u002Finfinite-scroll",{"title":484,"id":485,"canonicalKey":486,"locale":8,"draft":6,"navigation":487,"icon":488,"path":489},"File Upload Form","content:docs:5.recipes:5.file-upload-form.md","5\u002F5",{"icon":488},"i-lucide-file-up","\u002Fdocs\u002Frecipes\u002Ffile-upload-form",{"title":491,"id":492,"canonicalKey":493,"locale":8,"draft":6,"navigation":494,"icon":495,"path":496},"Organization Permissions","content:docs:5.recipes:6.organization-permissions.md","5\u002F6",{"icon":495},"i-lucide-building-2","\u002Fdocs\u002Frecipes\u002Forganization-permissions",{"title":498,"id":499,"canonicalKey":500,"locale":8,"draft":6,"navigation":501,"icon":345,"path":502},"Authenticated Server Route","content:docs:5.recipes:7.authenticated-server-route.md","5\u002F7",{"icon":345},"\u002Fdocs\u002Frecipes\u002Fauthenticated-server-route",{"title":504,"id":505,"canonicalKey":506,"locale":8,"draft":6,"navigation":507,"icon":100,"path":508},"Public and Private Data","content:docs:5.recipes:8.public-and-private-data.md","5\u002F8",{"icon":100},"\u002Fdocs\u002Frecipes\u002Fpublic-and-private-data",{"title":510,"page":6,"canonicalKey":511,"locale":8,"id":512,"draft":6,"icon":513,"children":514},"Reference","6","content:docs:6.reference:.navigation.yml","i-lucide-braces",[515,521,527,533,540,547],{"title":516,"id":517,"canonicalKey":518,"locale":8,"draft":6,"navigation":519,"icon":513,"path":520},"Composables","content:docs:6.reference:1.composables.md","6\u002F1",{"icon":513},"\u002Fdocs\u002Freference\u002Fcomposables",{"title":522,"id":523,"canonicalKey":524,"locale":8,"draft":6,"navigation":525,"icon":345,"path":526},"Server API","content:docs:6.reference:3.server-api.md","6\u002F3",{"icon":345},"\u002Fdocs\u002Freference\u002Fserver-api",{"title":528,"id":529,"canonicalKey":530,"locale":8,"draft":6,"navigation":531,"icon":107,"path":532},"Error Types","content:docs:6.reference:4.error-types.md","6\u002F4",{"icon":107},"\u002Fdocs\u002Freference\u002Ferror-types",{"title":534,"id":535,"canonicalKey":536,"locale":8,"draft":6,"navigation":537,"icon":538,"path":539},"Module Configuration","content:docs:6.reference:5.module-configuration.md","6\u002F5",{"icon":538},"i-lucide-settings","\u002Fdocs\u002Freference\u002Fmodule-configuration",{"title":541,"id":542,"canonicalKey":543,"locale":8,"draft":6,"navigation":544,"icon":545,"path":546},"Package Exports","content:docs:6.reference:6.package-exports.md","6\u002F6",{"icon":545},"i-lucide-package-open","\u002Fdocs\u002Freference\u002Fpackage-exports",{"title":548,"id":549,"canonicalKey":550,"locale":8,"draft":6,"navigation":551,"icon":552,"path":553},"API Surface","content:docs:6.reference:7.api-surface.md","6\u002F7",{"icon":552},"i-lucide-list","\u002Fdocs\u002Freference\u002Fapi-surface",{"title":555,"page":6,"canonicalKey":556,"locale":8,"id":557,"draft":6,"icon":280,"children":558},"Operations","7","content:docs:7.operations:.navigation.yml",[559,566,572,578,584],{"title":560,"id":561,"canonicalKey":562,"locale":8,"draft":6,"navigation":563,"icon":564,"path":565},"Environment Variables","content:docs:7.operations:1.environment-variables.md","7\u002F1",{"icon":564},"i-lucide-variable","\u002Fdocs\u002Foperations\u002Fenvironment-variables",{"title":567,"id":568,"canonicalKey":569,"locale":8,"draft":6,"navigation":570,"icon":127,"path":571},"Deployment","content:docs:7.operations:2.deployment.md","7\u002F2",{"icon":127},"\u002Fdocs\u002Foperations\u002Fdeployment",{"title":573,"id":574,"canonicalKey":575,"locale":8,"draft":6,"navigation":576,"icon":169,"path":577},"Security Model","content:docs:7.operations:3.security-model.md","7\u002F3",{"icon":169},"\u002Fdocs\u002Foperations\u002Fsecurity-model",{"title":579,"id":580,"canonicalKey":581,"locale":8,"draft":6,"navigation":582,"icon":423,"path":583},"Troubleshooting","content:docs:7.operations:4.troubleshooting.md","7\u002F4",{"icon":423},"\u002Fdocs\u002Foperations\u002Ftroubleshooting",{"title":585,"id":586,"canonicalKey":587,"locale":8,"draft":6,"navigation":588,"icon":25,"path":589},"Release Compatibility","content:docs:7.operations:5.release-compatibility.md","7\u002F5",{"icon":25},"\u002Fdocs\u002Foperations\u002Frelease-compatibility",{"title":591,"id":592,"canonicalKey":593,"locale":8,"draft":6,"path":594},"Better Convex documentation","content:docs:index.md","\u002F","\u002Fdocs",{"title":560,"description":596,"navigation":597,"body":598,"type":1442,"id":561,"canonicalKey":562,"draft":6,"partial":6,"locale":8,"collection":1443,"navigationFile":6,"file":1444,"route":1450,"resolution":1452},"Configure Convex, Nuxt, and Better Auth without mixing build-time and runtime concerns.",{"icon":564},{"type":599,"children":600,"toc":1433},"root",[601,609,616,759,785,798,843,849,854,957,1188,1199,1216,1225,1250,1272,1290,1296,1329,1340,1346,1351,1421],{"type":602,"tag":603,"props":604,"children":605},"element","p",{},[606],{"type":607,"value":608},"text","Better Convex Nuxt connects three environments: the Nuxt build, the deployed Nuxt server and browser, and the Convex deployment. Put each value in the environment that consumes it.",{"type":602,"tag":610,"props":611,"children":613},"h2",{"id":612},"nuxt-variables",[614],{"type":607,"value":615},"Nuxt variables",{"type":602,"tag":617,"props":618,"children":619},"table",{},[620,644],{"type":602,"tag":621,"props":622,"children":623},"thead",{},[624],{"type":602,"tag":625,"props":626,"children":627},"tr",{},[628,634,639],{"type":602,"tag":629,"props":630,"children":631},"th",{},[632],{"type":607,"value":633},"Variable",{"type":602,"tag":629,"props":635,"children":636},{},[637],{"type":607,"value":638},"Required",{"type":602,"tag":629,"props":640,"children":641},{},[642],{"type":607,"value":643},"Purpose",{"type":602,"tag":645,"props":646,"children":647},"tbody",{},[648,671,697,718,738],{"type":602,"tag":625,"props":649,"children":650},{},[651,661,666],{"type":602,"tag":652,"props":653,"children":654},"td",{},[655],{"type":602,"tag":656,"props":657,"children":658},"code",{},[659],{"type":607,"value":660},"SITE_URL",{"type":602,"tag":652,"props":662,"children":663},{},[664],{"type":607,"value":665},"Yes with auth",{"type":602,"tag":652,"props":667,"children":668},{},[669],{"type":607,"value":670},"Exact public Nuxt origin used by the same-origin proxy",{"type":602,"tag":625,"props":672,"children":673},{},[674,682,687],{"type":602,"tag":652,"props":675,"children":676},{},[677],{"type":602,"tag":656,"props":678,"children":679},{},[680],{"type":607,"value":681},"NUXT_PUBLIC_CONVEX_URL",{"type":602,"tag":652,"props":683,"children":684},{},[685],{"type":607,"value":686},"Yes",{"type":602,"tag":652,"props":688,"children":689},{},[690,692],{"type":607,"value":691},"Public Convex deployment URL, usually ending in ",{"type":602,"tag":656,"props":693,"children":694},{},[695],{"type":607,"value":696},".convex.cloud",{"type":602,"tag":625,"props":698,"children":699},{},[700,708,713],{"type":602,"tag":652,"props":701,"children":702},{},[703],{"type":602,"tag":656,"props":704,"children":705},{},[706],{"type":607,"value":707},"NUXT_PUBLIC_CONVEX_SITE_URL",{"type":602,"tag":652,"props":709,"children":710},{},[711],{"type":607,"value":712},"With auth for local or custom domains",{"type":602,"tag":652,"props":714,"children":715},{},[716],{"type":607,"value":717},"Convex HTTP Actions origin used by the same-origin auth proxy",{"type":602,"tag":625,"props":719,"children":720},{},[721,729,733],{"type":602,"tag":652,"props":722,"children":723},{},[724],{"type":602,"tag":656,"props":725,"children":726},{},[727],{"type":607,"value":728},"BCN_AUTH_PROXY_IP_SECRET",{"type":602,"tag":652,"props":730,"children":731},{},[732],{"type":607,"value":665},{"type":602,"tag":652,"props":734,"children":735},{},[736],{"type":607,"value":737},"Private signature key shared only with the Convex environment",{"type":602,"tag":625,"props":739,"children":740},{},[741,749,754],{"type":602,"tag":652,"props":742,"children":743},{},[744],{"type":602,"tag":656,"props":745,"children":746},{},[747],{"type":607,"value":748},"BCN_AUTH_TRUSTED_CLIENT_IP_HEADER",{"type":602,"tag":652,"props":750,"children":751},{},[752],{"type":607,"value":753},"Outside exact loopback development",{"type":602,"tag":652,"props":755,"children":756},{},[757],{"type":607,"value":758},"Ingress-owned header containing exactly one client IP",{"type":602,"tag":603,"props":760,"children":761},{},[762,764,769,771,776,778,783],{"type":607,"value":763},"The module also reads ",{"type":602,"tag":656,"props":765,"children":766},{},[767],{"type":607,"value":768},"CONVEX_URL",{"type":607,"value":770}," and ",{"type":602,"tag":656,"props":772,"children":773},{},[774],{"type":607,"value":775},"CONVEX_SITE_URL",{"type":607,"value":777}," while Nuxt config is evaluated. Prefer the ",{"type":602,"tag":656,"props":779,"children":780},{},[781],{"type":607,"value":782},"NUXT_PUBLIC_*",{"type":607,"value":784}," names in deployment environments: Nuxt can apply those native public runtime-config overrides after the image was built.",{"type":602,"tag":786,"props":787,"children":791},"pre",{"language":788,"filename":789,"class":790},"dotenv",".env.local","shiki dark:dark-plus",[792],{"type":602,"tag":656,"props":793,"children":795},{"class":794},"language-dotenv",[796],{"type":607,"value":797},"SITE_URL=https:\u002F\u002Fapp.example.com\nNUXT_PUBLIC_CONVEX_URL=https:\u002F\u002Fexample.convex.cloud\nNUXT_PUBLIC_CONVEX_SITE_URL=https:\u002F\u002Fexample.convex.site\nBCN_AUTH_PROXY_IP_SECRET=\nBCN_AUTH_TRUSTED_CLIENT_IP_HEADER=",{"type":602,"tag":603,"props":799,"children":800},{},[801,803,807,809,814,816,821,823,828,830,834,836,841],{"type":607,"value":802},"For local development, keep these values with the Convex CLI selection in the\nignored ",{"type":602,"tag":656,"props":804,"children":805},{},[806],{"type":607,"value":789},{"type":607,"value":808}," that ",{"type":602,"tag":656,"props":810,"children":811},{},[812],{"type":607,"value":813},"better-convex-nuxt-convex configure",{"type":607,"value":815}," creates, and pass\n",{"type":602,"tag":656,"props":817,"children":818},{},[819],{"type":607,"value":820},"--dotenv .env.local",{"type":607,"value":822}," to Nuxt commands. Do not add a sibling ",{"type":602,"tag":656,"props":824,"children":825},{},[826],{"type":607,"value":827},".env",{"type":607,"value":829}," with a\nsecond copy. The endpoint values are public. ",{"type":602,"tag":656,"props":831,"children":832},{},[833],{"type":607,"value":728},{"type":607,"value":835}," is not:\ngenerate it separately, set the same value in Nuxt and Convex, and leave the\nexample blank until then so missing configuration fails closed. Do not place it\nin ",{"type":602,"tag":656,"props":837,"children":838},{},[839],{"type":607,"value":840},"runtimeConfig.public",{"type":607,"value":842},", commit it, or expose it to browser code.",{"type":602,"tag":610,"props":844,"children":846},{"id":845},"convex-variables-for-authentication",[847],{"type":607,"value":848},"Convex variables for authentication",{"type":602,"tag":603,"props":850,"children":851},{},[852],{"type":607,"value":853},"These values exist in the Convex deployment, not in the browser bundle:",{"type":602,"tag":617,"props":855,"children":856},{},[857,876],{"type":602,"tag":621,"props":858,"children":859},{},[860],{"type":602,"tag":625,"props":861,"children":862},{},[863,867,872],{"type":602,"tag":629,"props":864,"children":865},{},[866],{"type":607,"value":633},{"type":602,"tag":629,"props":868,"children":869},{},[870],{"type":607,"value":871},"Required with auth",{"type":602,"tag":629,"props":873,"children":874},{},[875],{"type":607,"value":643},{"type":602,"tag":645,"props":877,"children":878},{},[879,898,918,938],{"type":602,"tag":625,"props":880,"children":881},{},[882,889,893],{"type":602,"tag":652,"props":883,"children":884},{},[885],{"type":602,"tag":656,"props":886,"children":887},{},[888],{"type":607,"value":660},{"type":602,"tag":652,"props":890,"children":891},{},[892],{"type":607,"value":686},{"type":602,"tag":652,"props":894,"children":895},{},[896],{"type":607,"value":897},"Exact public Nuxt origin used as the Better Auth base and trusted origin",{"type":602,"tag":625,"props":899,"children":900},{},[901,908,913],{"type":602,"tag":652,"props":902,"children":903},{},[904],{"type":602,"tag":656,"props":905,"children":906},{},[907],{"type":607,"value":775},{"type":602,"tag":652,"props":909,"children":910},{},[911],{"type":607,"value":912},"Built in",{"type":602,"tag":652,"props":914,"children":915},{},[916],{"type":607,"value":917},"Deployment-owned HTTP Actions origin used as the Convex session JWT issuer",{"type":602,"tag":625,"props":919,"children":920},{},[921,929,933],{"type":602,"tag":652,"props":922,"children":923},{},[924],{"type":602,"tag":656,"props":925,"children":926},{},[927],{"type":607,"value":928},"BETTER_AUTH_SECRETS",{"type":602,"tag":652,"props":930,"children":931},{},[932],{"type":607,"value":686},{"type":602,"tag":652,"props":934,"children":935},{},[936],{"type":607,"value":937},"Versioned Better Auth encryption\u002Fsigning secrets, newest version first",{"type":602,"tag":625,"props":939,"children":940},{},[941,948,952],{"type":602,"tag":652,"props":942,"children":943},{},[944],{"type":602,"tag":656,"props":945,"children":946},{},[947],{"type":607,"value":728},{"type":602,"tag":652,"props":949,"children":950},{},[951],{"type":607,"value":686},{"type":602,"tag":652,"props":953,"children":954},{},[955],{"type":607,"value":956},"Same separate proxy signature key used by the Nuxt server",{"type":602,"tag":786,"props":958,"children":961},{"language":959,"class":960},"bash","shiki shiki-themes light-plus dark-plus dark:dark-plus",[962],{"type":602,"tag":656,"props":963,"children":965},{"class":964},"language-bash",[966,1023,1025,1063,1064,1132,1133],{"type":602,"tag":967,"props":968,"children":971},"span",{"class":969,"style":970},"line","display: inline",[972,978,984,990,996,1002,1007,1012,1018],{"type":602,"tag":967,"props":973,"children":975},{"style":974},"color:#0000FF;--shiki-dark:#569CD6",[976],{"type":607,"value":977},"export",{"type":602,"tag":967,"props":979,"children":981},{"style":980},"color:#001080;--shiki-dark:#9CDCFE",[982],{"type":607,"value":983}," BCN_AUTH_PROXY_IP_SECRET",{"type":602,"tag":967,"props":985,"children":987},{"style":986},"color:#000000;--shiki-dark:#D4D4D4",[988],{"type":607,"value":989},"=",{"type":602,"tag":967,"props":991,"children":993},{"style":992},"color:#A31515;--shiki-dark:#CE9178",[994],{"type":607,"value":995},"\"$(",{"type":602,"tag":967,"props":997,"children":999},{"style":998},"color:#795E26;--shiki-dark:#DCDCAA",[1000],{"type":607,"value":1001},"openssl",{"type":602,"tag":967,"props":1003,"children":1004},{"style":992},[1005],{"type":607,"value":1006}," rand ",{"type":602,"tag":967,"props":1008,"children":1009},{"style":974},[1010],{"type":607,"value":1011},"-base64",{"type":602,"tag":967,"props":1013,"children":1015},{"style":1014},"color:#098658;--shiki-dark:#B5CEA8",[1016],{"type":607,"value":1017}," 32",{"type":602,"tag":967,"props":1019,"children":1020},{"style":992},[1021],{"type":607,"value":1022},")\"",{"type":607,"value":1024},"\n",{"type":602,"tag":967,"props":1026,"children":1027},{"class":969,"style":970},[1028,1033,1038,1043,1048,1053,1058],{"type":602,"tag":967,"props":1029,"children":1030},{"style":998},[1031],{"type":607,"value":1032},"pnpm",{"type":602,"tag":967,"props":1034,"children":1035},{"style":992},[1036],{"type":607,"value":1037}," exec",{"type":602,"tag":967,"props":1039,"children":1040},{"style":992},[1041],{"type":607,"value":1042}," better-convex-nuxt-convex",{"type":602,"tag":967,"props":1044,"children":1045},{"style":992},[1046],{"type":607,"value":1047}," env",{"type":602,"tag":967,"props":1049,"children":1050},{"style":992},[1051],{"type":607,"value":1052}," set",{"type":602,"tag":967,"props":1054,"children":1055},{"style":992},[1056],{"type":607,"value":1057}," SITE_URL",{"type":602,"tag":967,"props":1059,"children":1060},{"style":992},[1061],{"type":607,"value":1062}," https:\u002F\u002Fapp.example.com",{"type":607,"value":1024},{"type":602,"tag":967,"props":1065,"children":1066},{"class":969,"style":970},[1067,1072,1077,1082,1086,1090,1094,1098,1102,1107,1111,1115,1119,1123,1127],{"type":602,"tag":967,"props":1068,"children":1069},{"style":998},[1070],{"type":607,"value":1071},"printf",{"type":602,"tag":967,"props":1073,"children":1074},{"style":992},[1075],{"type":607,"value":1076}," '1:%s'",{"type":602,"tag":967,"props":1078,"children":1079},{"style":992},[1080],{"type":607,"value":1081}," \"$(",{"type":602,"tag":967,"props":1083,"children":1084},{"style":998},[1085],{"type":607,"value":1001},{"type":602,"tag":967,"props":1087,"children":1088},{"style":992},[1089],{"type":607,"value":1006},{"type":602,"tag":967,"props":1091,"children":1092},{"style":974},[1093],{"type":607,"value":1011},{"type":602,"tag":967,"props":1095,"children":1096},{"style":1014},[1097],{"type":607,"value":1017},{"type":602,"tag":967,"props":1099,"children":1100},{"style":992},[1101],{"type":607,"value":1022},{"type":602,"tag":967,"props":1103,"children":1104},{"style":986},[1105],{"type":607,"value":1106}," | ",{"type":602,"tag":967,"props":1108,"children":1109},{"style":998},[1110],{"type":607,"value":1032},{"type":602,"tag":967,"props":1112,"children":1113},{"style":992},[1114],{"type":607,"value":1037},{"type":602,"tag":967,"props":1116,"children":1117},{"style":992},[1118],{"type":607,"value":1042},{"type":602,"tag":967,"props":1120,"children":1121},{"style":992},[1122],{"type":607,"value":1047},{"type":602,"tag":967,"props":1124,"children":1125},{"style":992},[1126],{"type":607,"value":1052},{"type":602,"tag":967,"props":1128,"children":1129},{"style":992},[1130],{"type":607,"value":1131}," BETTER_AUTH_SECRETS",{"type":607,"value":1024},{"type":602,"tag":967,"props":1134,"children":1135},{"class":969,"style":970},[1136,1140,1145,1150,1155,1160,1164,1168,1172,1176,1180,1184],{"type":602,"tag":967,"props":1137,"children":1138},{"style":998},[1139],{"type":607,"value":1071},{"type":602,"tag":967,"props":1141,"children":1142},{"style":992},[1143],{"type":607,"value":1144}," '%s'",{"type":602,"tag":967,"props":1146,"children":1147},{"style":992},[1148],{"type":607,"value":1149}," \"",{"type":602,"tag":967,"props":1151,"children":1152},{"style":980},[1153],{"type":607,"value":1154},"$BCN_AUTH_PROXY_IP_SECRET",{"type":602,"tag":967,"props":1156,"children":1157},{"style":992},[1158],{"type":607,"value":1159},"\"",{"type":602,"tag":967,"props":1161,"children":1162},{"style":986},[1163],{"type":607,"value":1106},{"type":602,"tag":967,"props":1165,"children":1166},{"style":998},[1167],{"type":607,"value":1032},{"type":602,"tag":967,"props":1169,"children":1170},{"style":992},[1171],{"type":607,"value":1037},{"type":602,"tag":967,"props":1173,"children":1174},{"style":992},[1175],{"type":607,"value":1042},{"type":602,"tag":967,"props":1177,"children":1178},{"style":992},[1179],{"type":607,"value":1047},{"type":602,"tag":967,"props":1181,"children":1182},{"style":992},[1183],{"type":607,"value":1052},{"type":602,"tag":967,"props":1185,"children":1186},{"style":992},[1187],{"type":607,"value":983},{"type":602,"tag":603,"props":1189,"children":1190},{},[1191,1193,1197],{"type":607,"value":1192},"Inject that same exported ",{"type":602,"tag":656,"props":1194,"children":1195},{},[1196],{"type":607,"value":728},{"type":607,"value":1198}," into the Nuxt process with your secret manager, or start Nuxt from the same shell. Do not print or commit it. A blank Nuxt value deliberately fails closed.",{"type":602,"tag":603,"props":1200,"children":1201},{},[1202,1204,1208,1210,1214],{"type":607,"value":1203},"Convex injects ",{"type":602,"tag":656,"props":1205,"children":1206},{},[1207],{"type":607,"value":775},{"type":607,"value":1209}," into functions as a deployment-owned built-in,\nand the CLI rejects attempts to override it. Do not shadow or manually provision\nit. Configure the matching public URL for Nuxt through\n",{"type":602,"tag":656,"props":1211,"children":1212},{},[1213],{"type":607,"value":707},{"type":607,"value":1215},".",{"type":602,"tag":603,"props":1217,"children":1218},{},[1219,1223],{"type":602,"tag":656,"props":1220,"children":1221},{},[1222],{"type":607,"value":660},{"type":607,"value":1224}," must be an origin only: no path, query, or fragment. Use HTTPS outside loopback development. Configure separate values for preview and production deployments.",{"type":602,"tag":603,"props":1226,"children":1227},{},[1228,1230,1235,1237,1241,1243,1248],{"type":607,"value":1229},"Every supported Convex CLI command in this guide uses\n",{"type":602,"tag":656,"props":1231,"children":1232},{},[1233],{"type":607,"value":1234},"better-convex-nuxt-convex",{"type":607,"value":1236},". The checked runner reads only ",{"type":602,"tag":656,"props":1238,"children":1239},{},[1240],{"type":607,"value":789},{"type":607,"value":1242}," for its\ndeployment selection, rejects hidden or conflicting authority, strips inherited\n",{"type":602,"tag":656,"props":1244,"children":1245},{},[1246],{"type":607,"value":1247},"CONVEX_*",{"type":607,"value":1249}," values, and rejects command-line target overrides before starting the\npinned Convex CLI. Before any production command, inspect the file and verify\nits deployment-scoped key against the intended release target.",{"type":602,"tag":603,"props":1251,"children":1252},{},[1253,1258,1259,1264,1266,1270],{"type":602,"tag":656,"props":1254,"children":1255},{},[1256],{"type":607,"value":1257},"BETTER_AUTH_SECRET",{"type":607,"value":770},{"type":602,"tag":656,"props":1260,"children":1261},{},[1262],{"type":607,"value":1263},"AUTH_SECRET",{"type":607,"value":1265}," are rejected, not treated as aliases or decryption fallbacks; ",{"type":602,"tag":656,"props":1267,"children":1268},{},[1269],{"type":607,"value":928},{"type":607,"value":1271}," is the sole accepted Better Auth secret setting.",{"type":602,"tag":603,"props":1273,"children":1274},{},[1275,1277,1281,1283,1288],{"type":607,"value":1276},"Rotate ",{"type":602,"tag":656,"props":1278,"children":1279},{},[1280],{"type":607,"value":928},{"type":607,"value":1282}," by adding a higher-numbered current value first, for example ",{"type":602,"tag":656,"props":1284,"children":1285},{},[1286],{"type":607,"value":1287},"2:new,1:old",{"type":607,"value":1289},". Better Auth writes with the first version and retains the remaining versions for decryption. Do not reuse a Better Auth secret as the proxy signature key.",{"type":602,"tag":610,"props":1291,"children":1293},{"id":1292},"build-time-versus-deploy-time",[1294],{"type":607,"value":1295},"Build-time versus deploy-time",{"type":602,"tag":603,"props":1297,"children":1298},{},[1299,1303,1305,1310,1312,1316,1318,1322,1323,1327],{"type":602,"tag":656,"props":1300,"children":1301},{},[1302],{"type":607,"value":768},{"type":607,"value":1304}," is read when ",{"type":602,"tag":656,"props":1306,"children":1307},{},[1308],{"type":607,"value":1309},"nuxt.config.ts",{"type":607,"value":1311}," runs. If a platform builds once and promotes the same artifact between environments, a later ",{"type":602,"tag":656,"props":1313,"children":1314},{},[1315],{"type":607,"value":768},{"type":607,"value":1317}," does not replace the baked public config. Use ",{"type":602,"tag":656,"props":1319,"children":1320},{},[1321],{"type":607,"value":681},{"type":607,"value":770},{"type":602,"tag":656,"props":1324,"children":1325},{},[1326],{"type":607,"value":707},{"type":607,"value":1328}," as native deploy-time overrides, or rebuild for each environment.",{"type":602,"tag":603,"props":1330,"children":1331},{},[1332,1334,1338],{"type":607,"value":1333},"Auth identity is also environment-specific. A preview Nuxt origin must point to a Convex deployment whose ",{"type":602,"tag":656,"props":1335,"children":1336},{},[1337],{"type":607,"value":660},{"type":607,"value":1339}," matches that preview exactly. Do not share production cookies, secrets, or Convex data with previews.",{"type":602,"tag":610,"props":1341,"children":1343},{"id":1342},"verify-before-deployment",[1344],{"type":607,"value":1345},"Verify before deployment",{"type":602,"tag":603,"props":1347,"children":1348},{},[1349],{"type":607,"value":1350},"Check all seven boundaries:",{"type":602,"tag":1352,"props":1353,"children":1354},"ol",{},[1355,1366,1371,1381,1392,1401,1410],{"type":602,"tag":1356,"props":1357,"children":1358},"li",{},[1359,1361,1365],{"type":607,"value":1360},"The browser can reach ",{"type":602,"tag":656,"props":1362,"children":1363},{},[1364],{"type":607,"value":681},{"type":607,"value":1215},{"type":602,"tag":1356,"props":1367,"children":1368},{},[1369],{"type":607,"value":1370},"The Nuxt server can reach both Convex origins.",{"type":602,"tag":1356,"props":1372,"children":1373},{},[1374,1376,1380],{"type":607,"value":1375},"Nuxt and Convex have the same exact public origin in ",{"type":602,"tag":656,"props":1377,"children":1378},{},[1379],{"type":607,"value":660},{"type":607,"value":1215},{"type":602,"tag":1356,"props":1382,"children":1383},{},[1384,1386,1390],{"type":607,"value":1385},"Convex exposes its deployment-owned ",{"type":602,"tag":656,"props":1387,"children":1388},{},[1389],{"type":607,"value":775},{"type":607,"value":1391},", and Nuxt targets that exact origin.",{"type":602,"tag":1356,"props":1393,"children":1394},{},[1395,1399],{"type":602,"tag":656,"props":1396,"children":1397},{},[1398],{"type":607,"value":928},{"type":607,"value":1400}," exists only in Convex and its secret manager.",{"type":602,"tag":1356,"props":1402,"children":1403},{},[1404,1408],{"type":602,"tag":656,"props":1405,"children":1406},{},[1407],{"type":607,"value":728},{"type":607,"value":1409}," matches in Nuxt and Convex but is absent from public config.",{"type":602,"tag":1356,"props":1411,"children":1412},{},[1413,1415,1419],{"type":607,"value":1414},"Outside exact loopback development, ",{"type":602,"tag":656,"props":1416,"children":1417},{},[1418],{"type":607,"value":748},{"type":607,"value":1420},"\nnames a header that the ingress overwrites with exactly one client IP.",{"type":602,"tag":603,"props":1422,"children":1423},{},[1424,1426,1431],{"type":607,"value":1425},"Continue with ",{"type":602,"tag":1427,"props":1428,"children":1429},"a",{"href":571},[1430],{"type":607,"value":567},{"type":607,"value":1432}," for the complete release checklist.",{"title":1434,"searchDepth":1435,"depth":1435,"links":1436},"",4,[1437,1439,1440,1441],{"id":612,"depth":1438,"text":615},2,{"id":845,"depth":1438,"text":848},{"id":1292,"depth":1438,"text":1295},{"id":1342,"depth":1438,"text":1345},"markdown","docs",{"source":1445,"path":1446,"stem":1447,"dir":1448,"extension":1449},"content","docs\u002F7.operations\u002F1.environment-variables.md","docs\u002F7.operations\u002F1.environment-variables","operations","md",{"requestedPath":565,"resolvedPath":565,"alternates":1451},[],{"requested":1453,"resolved":1454,"usedFallback":6},{},{"locale":8},{"previous":1456,"next":1458},{"title":548,"id":549,"canonicalKey":550,"locale":8,"draft":6,"navigation":1457,"icon":552,"path":553},{"icon":552},{"title":567,"id":568,"canonicalKey":569,"locale":8,"draft":6,"navigation":1459,"icon":127,"path":571},{"icon":127},{"left":1461,"top":1461,"width":1462,"height":1462,"rotate":1461,"vFlip":6,"hFlip":6,"body":1463},0,24,"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\"\u002F>\u003Cpath d=\"M14 2v5a1 1 0 0 0 1 1h5\"\u002F>\u003C\u002Fg>",{"left":1461,"top":1461,"width":1462,"height":1462,"rotate":1461,"vFlip":6,"hFlip":6,"body":1465},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 19h8M4 17l6-6l-6-6\"\u002F>",{"left":1461,"top":1461,"width":1462,"height":1462,"rotate":1461,"vFlip":6,"hFlip":6,"body":1467},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"8\" height=\"4\" x=\"8\" y=\"2\" rx=\"1\" ry=\"1\"\u002F>\u003Cpath d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\"\u002F>\u003C\u002Fg>",1786627532018]