[{"data":1,"prerenderedAt":1140},["ShallowReactive",2],{"docs-navigation:en":3,"content-page:docs:7x5McTIu-xCakcxF01iKY-9ps_sgwYmfRf6Y-6nZEj8":651,"content-page-surround:docs:7x5McTIu-xCakcxF01iKY-9ps_sgwYmfRf6Y-6nZEj8":1135},[4,41,110,418,485,550,601,646],{"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],{"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},"Who it is for","content:docs:1.overview:2.who-it-is-for.md","1\u002F2",{"icon":25},"i-lucide-users","\u002Fdocs\u002Foverview\u002Fwho-it-is-for",{"title":28,"id":29,"canonicalKey":30,"locale":8,"draft":6,"navigation":31,"icon":32,"path":33},"Limitations and trade-offs","content:docs:1.overview:3.limitations.md","1\u002F3",{"icon":32},"i-lucide-triangle-alert","\u002Fdocs\u002Foverview\u002Flimitations",{"title":35,"id":36,"canonicalKey":37,"locale":8,"draft":6,"navigation":38,"icon":39,"path":40},"Compare Nuxt integrations","content:docs:1.overview:4.comparison.md","1\u002F4",{"icon":39},"i-lucide-scale","\u002Fdocs\u002Foverview\u002Fcomparison",{"title":42,"page":6,"canonicalKey":43,"locale":8,"id":44,"draft":6,"icon":45,"children":46},"Get started","2","content:docs:2.get-started:.navigation.yml","i-lucide-rocket",[47,54,61,68,75,82,89,96,103],{"title":48,"id":49,"canonicalKey":50,"locale":8,"draft":6,"navigation":51,"icon":52,"path":53},"Choose your path","content:docs:2.get-started:1.choose-your-path.md","2\u002F1",{"icon":52},"i-lucide-signpost","\u002Fdocs\u002Fget-started\u002Fchoose-your-path",{"title":55,"id":56,"canonicalKey":57,"locale":8,"draft":6,"navigation":58,"icon":59,"path":60},"Installation","content:docs:2.get-started:2.installation.md","2\u002F2",{"icon":59},"i-lucide-download","\u002Fdocs\u002Fget-started\u002Finstallation",{"title":62,"id":63,"canonicalKey":64,"locale":8,"draft":6,"navigation":65,"icon":66,"path":67},"First real-time page","content:docs:2.get-started:3.first-realtime-page.md","2\u002F3",{"icon":66},"i-lucide-radio","\u002Fdocs\u002Fget-started\u002Ffirst-realtime-page",{"title":69,"id":70,"canonicalKey":71,"locale":8,"draft":6,"navigation":72,"icon":73,"path":74},"Add a mutation","content:docs:2.get-started:4.add-a-mutation.md","2\u002F4",{"icon":73},"i-lucide-square-pen","\u002Fdocs\u002Fget-started\u002Fadd-a-mutation",{"title":76,"id":77,"canonicalKey":78,"locale":8,"draft":6,"navigation":79,"icon":80,"path":81},"Add authentication","content:docs:2.get-started:5.add-authentication.md","2\u002F5",{"icon":80},"i-lucide-log-in","\u002Fdocs\u002Fget-started\u002Fadd-authentication",{"title":83,"id":84,"canonicalKey":85,"locale":8,"draft":6,"navigation":86,"icon":87,"path":88},"Protect data","content:docs:2.get-started:6.protect-data.md","2\u002F6",{"icon":87},"i-lucide-shield-check","\u002Fdocs\u002Fget-started\u002Fprotect-data",{"title":90,"id":91,"canonicalKey":92,"locale":8,"draft":6,"navigation":93,"icon":94,"path":95},"Project structure","content:docs:2.get-started:7.project-structure.md","2\u002F7",{"icon":94},"i-lucide-folder-tree","\u002Fdocs\u002Fget-started\u002Fproject-structure",{"title":97,"id":98,"canonicalKey":99,"locale":8,"draft":6,"navigation":100,"icon":101,"path":102},"Next steps","content:docs:2.get-started:8.next-steps.md","2\u002F8",{"icon":101},"i-lucide-arrow-right","\u002Fdocs\u002Fget-started\u002Fnext-steps",{"title":104,"id":105,"canonicalKey":106,"locale":8,"draft":6,"navigation":107,"icon":108,"path":109},"Plain Vue and Vite","content:docs:2.get-started:9.plain-vue.md","2\u002F9",{"icon":108},"i-lucide-panels-top-left","\u002Fdocs\u002Fget-started\u002Fplain-vue",{"title":111,"page":6,"canonicalKey":112,"locale":8,"id":113,"draft":6,"icon":114,"sidebar":11,"children":115},"Build","3","content:docs:3.build:.navigation.yml","i-lucide-blocks",[116,154,199,292,324,349,388],{"title":117,"page":6,"canonicalKey":118,"locale":8,"children":119},"Queries","3\u002F1",[120,126,133,140,147],{"title":117,"id":121,"canonicalKey":122,"locale":8,"draft":6,"navigation":123,"icon":124,"path":125},"content:docs:3.build:1.queries:1.queries.md","3\u002F1\u002F1",{"icon":124},"i-lucide-database","\u002Fdocs\u002Fbuild\u002Fqueries\u002Fqueries",{"title":127,"id":128,"canonicalKey":129,"locale":8,"draft":6,"navigation":130,"icon":131,"path":132},"Reactive arguments","content:docs:3.build:1.queries:2.reactive-arguments.md","3\u002F1\u002F2",{"icon":131},"i-lucide-sliders-horizontal","\u002Fdocs\u002Fbuild\u002Fqueries\u002Freactive-arguments",{"title":134,"id":135,"canonicalKey":136,"locale":8,"draft":6,"navigation":137,"icon":138,"path":139},"Loading and stale data","content:docs:3.build:1.queries:3.loading-and-stale-data.md","3\u002F1\u002F3",{"icon":138},"i-lucide-loader-circle","\u002Fdocs\u002Fbuild\u002Fqueries\u002Floading-and-stale-data",{"title":141,"id":142,"canonicalKey":143,"locale":8,"draft":6,"navigation":144,"icon":145,"path":146},"Query execution options","content:docs:3.build:1.queries:4.ssr-options.md","3\u002F1\u002F4",{"icon":145},"i-lucide-server-cog","\u002Fdocs\u002Fbuild\u002Fqueries\u002Fssr-options",{"title":148,"id":149,"canonicalKey":150,"locale":8,"draft":6,"navigation":151,"icon":152,"path":153},"Pagination","content:docs:3.build:1.queries:6.pagination.md","3\u002F1\u002F6",{"icon":152},"i-lucide-list-plus","\u002Fdocs\u002Fbuild\u002Fqueries\u002Fpagination",{"title":155,"page":6,"canonicalKey":156,"locale":8,"children":157},"Write Data","3\u002F2",[158,164,171,178,185,192],{"title":159,"id":160,"canonicalKey":161,"locale":8,"draft":6,"navigation":162,"icon":73,"path":163},"Mutations","content:docs:3.build:2.write-data:1.mutations.md","3\u002F2\u002F1",{"icon":73},"\u002Fdocs\u002Fbuild\u002Fwrite-data\u002Fmutations",{"title":165,"id":166,"canonicalKey":167,"locale":8,"draft":6,"navigation":168,"icon":169,"path":170},"Actions","content:docs:3.build:2.write-data:2.actions.md","3\u002F2\u002F2",{"icon":169},"i-lucide-zap","\u002Fdocs\u002Fbuild\u002Fwrite-data\u002Factions",{"title":172,"id":173,"canonicalKey":174,"locale":8,"draft":6,"navigation":175,"icon":176,"path":177},"Optimistic updates","content:docs:3.build:2.write-data:3.optimistic-updates.md","3\u002F2\u002F3",{"icon":176},"i-lucide-gauge","\u002Fdocs\u002Fbuild\u002Fwrite-data\u002Foptimistic-updates",{"title":179,"id":180,"canonicalKey":181,"locale":8,"draft":6,"navigation":182,"icon":183,"path":184},"Concurrent operations","content:docs:3.build:2.write-data:4.concurrent-operations.md","3\u002F2\u002F4",{"icon":183},"i-lucide-git-fork","\u002Fdocs\u002Fbuild\u002Fwrite-data\u002Fconcurrent-operations",{"title":186,"id":187,"canonicalKey":188,"locale":8,"draft":6,"navigation":189,"icon":190,"path":191},"Form submissions","content:docs:3.build:2.write-data:5.forms.md","3\u002F2\u002F5",{"icon":190},"i-lucide-list-checks","\u002Fdocs\u002Fbuild\u002Fwrite-data\u002Fforms",{"title":193,"id":194,"canonicalKey":195,"locale":8,"draft":6,"navigation":196,"icon":197,"path":198},"Multi-step operations","content:docs:3.build:2.write-data:6.multi-step-operations.md","3\u002F2\u002F6",{"icon":197},"i-lucide-list-ordered","\u002Fdocs\u002Fbuild\u002Fwrite-data\u002Fmulti-step-operations",{"title":200,"page":6,"canonicalKey":201,"locale":8,"children":202},"Authentication","3\u002F3",[203,209,216,223,229,236,243,250,257,264,271,278,285],{"title":200,"id":204,"canonicalKey":205,"locale":8,"draft":6,"navigation":206,"icon":207,"path":208},"content:docs:3.build:3.authentication:1.overview.md","3\u002F3\u002F1",{"icon":207},"i-lucide-shield","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Foverview",{"title":210,"id":211,"canonicalKey":212,"locale":8,"draft":6,"navigation":213,"icon":214,"path":215},"Better Auth setup","content:docs:3.build:3.authentication:2.better-auth-setup.md","3\u002F3\u002F2",{"icon":214},"i-lucide-settings-2","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fbetter-auth-setup",{"title":217,"id":218,"canonicalKey":219,"locale":8,"draft":6,"navigation":220,"icon":221,"path":222},"Auth state and user data","content:docs:3.build:3.authentication:3.auth-state-and-user.md","3\u002F3\u002F3",{"icon":221},"i-lucide-user-round","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fauth-state-and-user",{"title":224,"id":225,"canonicalKey":226,"locale":8,"draft":6,"navigation":227,"icon":80,"path":228},"Sign in and sign out","content:docs:3.build:3.authentication:4.sign-in-and-sign-out.md","3\u002F3\u002F4",{"icon":80},"\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fsign-in-and-sign-out",{"title":230,"id":231,"canonicalKey":232,"locale":8,"draft":6,"navigation":233,"icon":234,"path":235},"Route protection","content:docs:3.build:3.authentication:5.route-protection.md","3\u002F3\u002F5",{"icon":234},"i-lucide-route","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Froute-protection",{"title":237,"id":238,"canonicalKey":239,"locale":8,"draft":6,"navigation":240,"icon":241,"path":242},"Backend authorization","content:docs:3.build:3.authentication:6.backend-authorization.md","3\u002F3\u002F6",{"icon":241},"i-lucide-lock-keyhole","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fbackend-authorization",{"title":244,"id":245,"canonicalKey":246,"locale":8,"draft":6,"navigation":247,"icon":248,"path":249},"Better Auth plugins","content:docs:3.build:3.authentication:7.better-auth-plugins.md","3\u002F3\u002F7",{"icon":248},"i-lucide-plug","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fbetter-auth-plugins",{"title":251,"id":252,"canonicalKey":253,"locale":8,"draft":6,"navigation":254,"icon":255,"path":256},"Custom user fields","content:docs:3.build:3.authentication:8.custom-user-fields.md","3\u002F3\u002F8",{"icon":255},"i-lucide-user-cog","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fcustom-user-fields",{"title":258,"id":259,"canonicalKey":260,"locale":8,"draft":6,"navigation":261,"icon":262,"path":263},"User synchronization","content:docs:3.build:3.authentication:9.user-synchronization.md","3\u002F3\u002F9",{"icon":262},"i-lucide-refresh-ccw","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fuser-synchronization",{"title":265,"id":266,"canonicalKey":267,"locale":8,"draft":6,"navigation":268,"icon":269,"path":270},"Delegated OAuth and MCP","content:docs:3.build:3.authentication:10.delegated-oauth-and-mcp.md","3\u002F3\u002F10",{"icon":269},"i-lucide-bot","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fdelegated-oauth-and-mcp",{"title":272,"id":273,"canonicalKey":274,"locale":8,"draft":6,"navigation":275,"icon":276,"path":277},"Transactional auth email","content:docs:3.build:3.authentication:11.transactional-email.md","3\u002F3\u002F11",{"icon":276},"i-lucide-mail","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Ftransactional-email",{"title":279,"id":280,"canonicalKey":281,"locale":8,"draft":6,"navigation":282,"icon":283,"path":284},"Social sign-in","content:docs:3.build:3.authentication:12.social-sign-in.md","3\u002F3\u002F12",{"icon":283},"i-lucide-github","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fsocial-sign-in",{"title":286,"id":287,"canonicalKey":288,"locale":8,"draft":6,"navigation":289,"icon":290,"path":291},"Better Auth plugin support","content:docs:3.build:3.authentication:13.better-auth-plugin-support.md","3\u002F3\u002F13",{"icon":290},"i-lucide-puzzle","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fbetter-auth-plugin-support",{"title":293,"page":6,"canonicalKey":294,"locale":8,"children":295},"Server","3\u002F4",[296,303,310,317],{"title":297,"id":298,"canonicalKey":299,"locale":8,"draft":6,"navigation":300,"icon":301,"path":302},"serverConvex","content:docs:3.build:4.server:1.server-convex.md","3\u002F4\u002F1",{"icon":301},"i-lucide-server","\u002Fdocs\u002Fbuild\u002Fserver\u002Fserver-convex",{"title":304,"id":305,"canonicalKey":306,"locale":8,"draft":6,"navigation":307,"icon":308,"path":309},"Server routes","content:docs:3.build:4.server:2.server-routes.md","3\u002F4\u002F2",{"icon":308},"i-lucide-waypoints","\u002Fdocs\u002Fbuild\u002Fserver\u002Fserver-routes",{"title":311,"id":312,"canonicalKey":313,"locale":8,"draft":6,"navigation":314,"icon":315,"path":316},"Webhooks and jobs","content:docs:3.build:4.server:3.webhooks-and-jobs.md","3\u002F4\u002F3",{"icon":315},"i-lucide-webhook","\u002Fdocs\u002Fbuild\u002Fserver\u002Fwebhooks-and-jobs",{"title":318,"id":319,"canonicalKey":320,"locale":8,"draft":6,"navigation":321,"icon":322,"path":323},"Credentials and server security","content:docs:3.build:4.server:4.credentials-and-security.md","3\u002F4\u002F4",{"icon":322},"i-lucide-key-round","\u002Fdocs\u002Fbuild\u002Fserver\u002Fcredentials-and-security",{"title":325,"page":6,"canonicalKey":326,"locale":8,"children":327},"Files","3\u002F5",[328,335,342],{"title":329,"id":330,"canonicalKey":331,"locale":8,"draft":6,"navigation":332,"icon":333,"path":334},"Upload files","content:docs:3.build:5.files:1.upload-files.md","3\u002F5\u002F1",{"icon":333},"i-lucide-upload","\u002Fdocs\u002Fbuild\u002Ffiles\u002Fupload-files",{"title":336,"id":337,"canonicalKey":338,"locale":8,"draft":6,"navigation":339,"icon":340,"path":341},"Storage URLs","content:docs:3.build:5.files:3.storage-urls.md","3\u002F5\u002F3",{"icon":340},"i-lucide-link","\u002Fdocs\u002Fbuild\u002Ffiles\u002Fstorage-urls",{"title":343,"id":344,"canonicalKey":345,"locale":8,"draft":6,"navigation":346,"icon":347,"path":348},"File validation and deletion","content:docs:3.build:5.files:4.validation-and-deletion.md","3\u002F5\u002F4",{"icon":347},"i-lucide-file-x","\u002Fdocs\u002Fbuild\u002Ffiles\u002Fvalidation-and-deletion",{"title":350,"page":6,"canonicalKey":351,"locale":8,"children":352},"Application Behavior","3\u002F6",[353,360,367,374,381],{"title":354,"id":355,"canonicalKey":356,"locale":8,"draft":6,"navigation":357,"icon":358,"path":359},"Connection state","content:docs:3.build:6.application-behavior:1.connection-state.md","3\u002F6\u002F1",{"icon":358},"i-lucide-wifi","\u002Fdocs\u002Fbuild\u002Fapplication-behavior\u002Fconnection-state",{"title":361,"id":362,"canonicalKey":363,"locale":8,"draft":6,"navigation":364,"icon":365,"path":366},"Error handling","content:docs:3.build:6.application-behavior:2.error-handling.md","3\u002F6\u002F2",{"icon":365},"i-lucide-circle-alert","\u002Fdocs\u002Fbuild\u002Fapplication-behavior\u002Ferror-handling",{"title":368,"id":369,"canonicalKey":370,"locale":8,"draft":6,"navigation":371,"icon":372,"path":373},"Logging","content:docs:3.build:6.application-behavior:3.logging.md","3\u002F6\u002F3",{"icon":372},"i-lucide-scroll-text","\u002Fdocs\u002Fbuild\u002Fapplication-behavior\u002Flogging",{"title":375,"id":376,"canonicalKey":377,"locale":8,"draft":6,"navigation":378,"icon":379,"path":380},"DevTools","content:docs:3.build:6.application-behavior:4.devtools.md","3\u002F6\u002F4",{"icon":379},"i-lucide-wrench","\u002Fdocs\u002Fbuild\u002Fapplication-behavior\u002Fdevtools",{"title":382,"id":383,"canonicalKey":384,"locale":8,"draft":6,"navigation":385,"icon":386,"path":387},"Performance","content:docs:3.build:6.application-behavior:5.performance.md","3\u002F6\u002F5",{"icon":386},"i-lucide-chart-no-axes-combined","\u002Fdocs\u002Fbuild\u002Fapplication-behavior\u002Fperformance",{"title":389,"page":6,"canonicalKey":390,"locale":8,"id":391,"draft":6,"icon":269,"children":392},"Agents and MCP","3\u002F7","content:docs:3.build:7.agents:.navigation.yml",[393,400,406,412],{"title":394,"id":395,"canonicalKey":396,"locale":8,"draft":6,"navigation":397,"icon":398,"path":399},"MCP on Convex","content:docs:3.build:7.agents:1.mcp.md","3\u002F7\u002F1",{"icon":398},"i-lucide-plug-zap","\u002Fdocs\u002Fbuild\u002Fagents\u002Fmcp",{"title":401,"id":402,"canonicalKey":403,"locale":8,"draft":6,"navigation":404,"icon":248,"path":405},"Add MCP to your application","content:docs:3.build:7.agents:2.mcp-application.md","3\u002F7\u002F2",{"icon":248},"\u002Fdocs\u002Fbuild\u002Fagents\u002Fmcp-application",{"title":407,"id":408,"canonicalKey":409,"locale":8,"draft":6,"navigation":410,"icon":340,"path":411},"Connect ChatGPT and Claude","content:docs:3.build:7.agents:3.connect-chatgpt-and-claude.md","3\u002F7\u002F3",{"icon":340},"\u002Fdocs\u002Fbuild\u002Fagents\u002Fconnect-chatgpt-and-claude",{"title":413,"id":414,"canonicalKey":415,"locale":8,"draft":6,"navigation":416,"icon":108,"path":417},"MCP Apps","content:docs:3.build:7.agents:4.mcp-apps.md","3\u002F7\u002F4",{"icon":108},"\u002Fdocs\u002Fbuild\u002Fagents\u002Fmcp-apps",{"title":419,"page":6,"canonicalKey":420,"locale":8,"id":421,"draft":6,"icon":422,"children":423},"Recipes","4","content:docs:4.recipes:.navigation.yml","i-lucide-cooking-pot",[424,431,438,445,452,459,466,472,478],{"title":425,"id":426,"canonicalKey":427,"locale":8,"draft":6,"navigation":428,"icon":429,"path":430},"Protected dashboard","content:docs:4.recipes:1.protected-dashboard.md","4\u002F1",{"icon":429},"i-lucide-layout-dashboard","\u002Fdocs\u002Frecipes\u002Fprotected-dashboard",{"title":432,"id":433,"canonicalKey":434,"locale":8,"draft":6,"navigation":435,"icon":436,"path":437},"Real-time feed","content:docs:4.recipes:2.realtime-feed.md","4\u002F2",{"icon":436},"i-lucide-messages-square","\u002Fdocs\u002Frecipes\u002Frealtime-feed",{"title":439,"id":440,"canonicalKey":441,"locale":8,"draft":6,"navigation":442,"icon":443,"path":444},"Optimistic todo list","content:docs:4.recipes:3.optimistic-todo-list.md","4\u002F3",{"icon":443},"i-lucide-list-todo","\u002Fdocs\u002Frecipes\u002Foptimistic-todo-list",{"title":446,"id":447,"canonicalKey":448,"locale":8,"draft":6,"navigation":449,"icon":450,"path":451},"Infinite scroll","content:docs:4.recipes:4.infinite-scroll.md","4\u002F4",{"icon":450},"i-lucide-mouse","\u002Fdocs\u002Frecipes\u002Finfinite-scroll",{"title":453,"id":454,"canonicalKey":455,"locale":8,"draft":6,"navigation":456,"icon":457,"path":458},"File upload form","content:docs:4.recipes:5.file-upload-form.md","4\u002F5",{"icon":457},"i-lucide-file-up","\u002Fdocs\u002Frecipes\u002Ffile-upload-form",{"title":460,"id":461,"canonicalKey":462,"locale":8,"draft":6,"navigation":463,"icon":464,"path":465},"Organization permissions","content:docs:4.recipes:6.organization-permissions.md","4\u002F6",{"icon":464},"i-lucide-building-2","\u002Fdocs\u002Frecipes\u002Forganization-permissions",{"title":467,"id":468,"canonicalKey":469,"locale":8,"draft":6,"navigation":470,"icon":301,"path":471},"Authenticated server route","content:docs:4.recipes:7.authenticated-server-route.md","4\u002F7",{"icon":301},"\u002Fdocs\u002Frecipes\u002Fauthenticated-server-route",{"title":473,"id":474,"canonicalKey":475,"locale":8,"draft":6,"navigation":476,"icon":108,"path":477},"Public and private data","content:docs:4.recipes:8.public-and-private-data.md","4\u002F8",{"icon":108},"\u002Fdocs\u002Frecipes\u002Fpublic-and-private-data",{"title":479,"id":480,"canonicalKey":481,"locale":8,"draft":6,"navigation":482,"icon":483,"path":484},"Test signed-in screens","content:docs:4.recipes:9.component-testing.md","4\u002F9",{"icon":483},"i-lucide-flask-conical","\u002Fdocs\u002Frecipes\u002Fcomponent-testing",{"title":486,"page":6,"canonicalKey":487,"locale":8,"id":488,"draft":6,"icon":489,"children":490},"Concepts","5","content:docs:5.concepts:.navigation.yml","i-lucide-brain",[491,497,503,510,516,523,529,536,543],{"title":492,"id":493,"canonicalKey":494,"locale":8,"draft":6,"navigation":495,"icon":489,"path":496},"Mental model","content:docs:5.concepts:1.mental-model.md","5\u002F1",{"icon":489},"\u002Fdocs\u002Fconcepts\u002Fmental-model",{"title":498,"id":499,"canonicalKey":500,"locale":8,"draft":6,"navigation":501,"icon":234,"path":502},"Request lifecycle","content:docs:5.concepts:2.request-lifecycle.md","5\u002F2",{"icon":234},"\u002Fdocs\u002Fconcepts\u002Frequest-lifecycle",{"title":504,"id":505,"canonicalKey":506,"locale":8,"draft":6,"navigation":507,"icon":508,"path":509},"SSR, hydration, and real-time","content:docs:5.concepts:3.ssr-hydration-realtime.md","5\u002F3",{"icon":508},"i-lucide-refresh-cw","\u002Fdocs\u002Fconcepts\u002Fssr-hydration-realtime",{"title":511,"id":512,"canonicalKey":513,"locale":8,"draft":6,"navigation":514,"icon":124,"path":515},"Query ownership and caching","content:docs:5.concepts:4.query-ownership-and-caching.md","5\u002F4",{"icon":124},"\u002Fdocs\u002Fconcepts\u002Fquery-ownership-and-caching",{"title":517,"id":518,"canonicalKey":519,"locale":8,"draft":6,"navigation":520,"icon":521,"path":522},"Authentication and identity","content:docs:5.concepts:5.authentication-and-identity.md","5\u002F5",{"icon":521},"i-lucide-fingerprint","\u002Fdocs\u002Fconcepts\u002Fauthentication-and-identity",{"title":524,"id":525,"canonicalKey":526,"locale":8,"draft":6,"navigation":527,"icon":108,"path":528},"Server and client boundaries","content:docs:5.concepts:6.server-and-client-boundaries.md","5\u002F6",{"icon":108},"\u002Fdocs\u002Fconcepts\u002Fserver-and-client-boundaries",{"title":530,"id":531,"canonicalKey":532,"locale":8,"draft":6,"navigation":533,"icon":534,"path":535},"Errors and failures","content:docs:5.concepts:7.errors-and-failures.md","5\u002F7",{"icon":534},"i-lucide-circle-x","\u002Fdocs\u002Fconcepts\u002Ferrors-and-failures",{"title":537,"id":538,"canonicalKey":539,"locale":8,"draft":6,"navigation":540,"icon":541,"path":542},"Design decisions","content:docs:5.concepts:8.design-decisions.md","5\u002F8",{"icon":541},"i-lucide-git-branch","\u002Fdocs\u002Fconcepts\u002Fdesign-decisions",{"title":544,"id":545,"canonicalKey":546,"locale":8,"draft":6,"navigation":547,"icon":548,"path":549},"Glossary","content:docs:5.concepts:9.glossary.md","5\u002F9",{"icon":548},"i-lucide-book-a","\u002Fdocs\u002Fconcepts\u002Fglossary",{"title":551,"page":6,"canonicalKey":552,"locale":8,"id":553,"draft":6,"icon":214,"children":554},"Operations","6","content:docs:6.operations:.navigation.yml",[555,561,568,575,581,588,594],{"title":556,"id":557,"canonicalKey":558,"locale":8,"draft":6,"navigation":559,"icon":45,"path":560},"Deployment","content:docs:6.operations:1.deployment.md","6\u002F1",{"icon":45},"\u002Fdocs\u002Foperations\u002Fdeployment",{"title":562,"id":563,"canonicalKey":564,"locale":8,"draft":6,"navigation":565,"icon":566,"path":567},"Environment variables","content:docs:6.operations:2.environment-variables.md","6\u002F2",{"icon":566},"i-lucide-variable","\u002Fdocs\u002Foperations\u002Fenvironment-variables",{"title":569,"id":570,"canonicalKey":571,"locale":8,"draft":6,"navigation":572,"icon":573,"path":574},"Deploy to Vercel","content:docs:6.operations:3.deploy-to-vercel.md","6\u002F3",{"icon":573},"i-lucide-triangle","\u002Fdocs\u002Foperations\u002Fdeploy-to-vercel",{"title":576,"id":577,"canonicalKey":578,"locale":8,"draft":6,"navigation":579,"icon":379,"path":580},"Troubleshooting","content:docs:6.operations:4.troubleshooting.md","6\u002F4",{"icon":379},"\u002Fdocs\u002Foperations\u002Ftroubleshooting",{"title":582,"id":583,"canonicalKey":584,"locale":8,"draft":6,"navigation":585,"icon":586,"path":587},"Release compatibility","content:docs:6.operations:5.release-compatibility.md","6\u002F5",{"icon":586},"i-lucide-badge-check","\u002Fdocs\u002Foperations\u002Frelease-compatibility",{"title":589,"id":590,"canonicalKey":591,"locale":8,"draft":6,"navigation":592,"icon":87,"path":593},"Security model","content:docs:6.operations:6.security-model.md","6\u002F6",{"icon":87},"\u002Fdocs\u002Foperations\u002Fsecurity-model",{"title":595,"id":596,"canonicalKey":597,"locale":8,"draft":6,"navigation":598,"icon":599,"path":600},"Upgrade to 1.0","content:docs:6.operations:7.upgrade-to-1-0.md","6\u002F7",{"icon":599},"i-lucide-arrow-up-circle","\u002Fdocs\u002Foperations\u002Fupgrade-to-1-0",{"title":602,"page":6,"canonicalKey":603,"locale":8,"id":604,"draft":6,"icon":605,"children":606},"Reference","7","content:docs:7.reference:.navigation.yml","i-lucide-braces",[607,613,619,625,632,639],{"title":608,"id":609,"canonicalKey":610,"locale":8,"draft":6,"navigation":611,"icon":605,"path":612},"Composables","content:docs:7.reference:1.composables.md","7\u002F1",{"icon":605},"\u002Fdocs\u002Freference\u002Fcomposables",{"title":614,"id":615,"canonicalKey":616,"locale":8,"draft":6,"navigation":617,"icon":301,"path":618},"Server API","content:docs:7.reference:3.server-api.md","7\u002F3",{"icon":301},"\u002Fdocs\u002Freference\u002Fserver-api",{"title":620,"id":621,"canonicalKey":622,"locale":8,"draft":6,"navigation":623,"icon":534,"path":624},"Error types","content:docs:7.reference:4.error-types.md","7\u002F4",{"icon":534},"\u002Fdocs\u002Freference\u002Ferror-types",{"title":626,"id":627,"canonicalKey":628,"locale":8,"draft":6,"navigation":629,"icon":630,"path":631},"Module configuration","content:docs:7.reference:5.module-configuration.md","7\u002F5",{"icon":630},"i-lucide-settings","\u002Fdocs\u002Freference\u002Fmodule-configuration",{"title":633,"id":634,"canonicalKey":635,"locale":8,"draft":6,"navigation":636,"icon":637,"path":638},"Package exports","content:docs:7.reference:6.package-exports.md","7\u002F6",{"icon":637},"i-lucide-package-open","\u002Fdocs\u002Freference\u002Fpackage-exports",{"title":640,"id":641,"canonicalKey":642,"locale":8,"draft":6,"navigation":643,"icon":644,"path":645},"API surface","content:docs:7.reference:7.api-surface.md","7\u002F7",{"icon":644},"i-lucide-list","\u002Fdocs\u002Freference\u002Fapi-surface",{"title":647,"id":648,"canonicalKey":649,"locale":8,"draft":6,"path":650},"Better Convex documentation","content:docs:index.md","\u002F","\u002Fdocs",{"title":537,"description":652,"navigation":653,"body":654,"type":1122,"id":538,"canonicalKey":539,"draft":6,"partial":6,"locale":8,"collection":1123,"navigationFile":6,"file":1124,"route":1130,"resolution":1132},"Understand the deliberate constraints behind the public runtime.",{"icon":541},{"type":655,"children":656,"toc":1109},"root",[657,665,672,683,693,703,713,731,737,746,755,764,773,782,788,797,806,815,831,840,851,887,896,905,934,950,956,965,974,983,992,1001,1007,1022,1031,1040,1049,1058,1064,1073,1082,1091,1100],{"type":658,"tag":659,"props":660,"children":661},"element","p",{},[662],{"type":663,"value":664},"text","These decisions describe current public behavior. They are not a roadmap.",{"type":658,"tag":666,"props":667,"children":669},"h2",{"id":668},"ssr-first-live-after-hydration",[670],{"type":663,"value":671},"SSR first, live after hydration",{"type":658,"tag":659,"props":673,"children":674},{},[675,681],{"type":658,"tag":676,"props":677,"children":678},"strong",{},[679],{"type":663,"value":680},"Decision:",{"type":663,"value":682}," Queries begin during SSR by default and continue live after hydration.",{"type":658,"tag":659,"props":684,"children":685},{},[686,691],{"type":658,"tag":676,"props":687,"children":688},{},[689],{"type":663,"value":690},"Problem:",{"type":663,"value":692}," A browser-only subscription produces no server data. A server-only fetch becomes stale after hydration.",{"type":658,"tag":659,"props":694,"children":695},{},[696,701],{"type":658,"tag":676,"props":697,"children":698},{},[699],{"type":663,"value":700},"Benefit:",{"type":663,"value":702}," One composable provides initial HTML and later live updates.",{"type":658,"tag":659,"props":704,"children":705},{},[706,711],{"type":658,"tag":676,"props":707,"children":708},{},[709],{"type":663,"value":710},"Cost:",{"type":663,"value":712}," The lifecycle performs an SSR HTTP query and a browser subscription.",{"type":658,"tag":659,"props":714,"children":715},{},[716,721,723,729],{"type":658,"tag":676,"props":717,"children":718},{},[719],{"type":663,"value":720},"Alternative:",{"type":663,"value":722}," Set ",{"type":658,"tag":724,"props":725,"children":726},"code",{},[727],{"type":663,"value":728},"server: false",{"type":663,"value":730}," on the individual call for genuinely browser-only data.",{"type":658,"tag":666,"props":732,"children":734},{"id":733},"convex-owns-subscription-deduplication",[735],{"type":663,"value":736},"Convex owns subscription deduplication",{"type":658,"tag":659,"props":738,"children":739},{},[740,744],{"type":658,"tag":676,"props":741,"children":742},{},[743],{"type":663,"value":680},{"type":663,"value":745}," The module does not maintain a parallel subscription registry.",{"type":658,"tag":659,"props":747,"children":748},{},[749,753],{"type":658,"tag":676,"props":750,"children":751},{},[752],{"type":663,"value":690},{"type":663,"value":754}," A second registry duplicates client state, reference counting, and cleanup behavior already owned by Convex.",{"type":658,"tag":659,"props":756,"children":757},{},[758,762],{"type":658,"tag":676,"props":759,"children":760},{},[761],{"type":663,"value":700},{"type":663,"value":763}," Fewer state owners and less private coupling.",{"type":658,"tag":659,"props":765,"children":766},{},[767,771],{"type":658,"tag":676,"props":768,"children":769},{},[770],{"type":663,"value":710},{"type":663,"value":772}," Composable instances still own separate Vue-visible state even when Convex deduplicates wire work.",{"type":658,"tag":659,"props":774,"children":775},{},[776,780],{"type":658,"tag":676,"props":777,"children":778},{},[779],{"type":663,"value":720},{"type":663,"value":781}," Use an ordinary application composable for code reuse; Convex remains the single live-data owner.",{"type":658,"tag":666,"props":783,"children":785},{"id":784},"identity-changes-replace-the-primary-client",[786],{"type":663,"value":787},"Identity changes replace the primary client",{"type":658,"tag":659,"props":789,"children":790},{},[791,795],{"type":658,"tag":676,"props":792,"children":793},{},[794],{"type":663,"value":680},{"type":663,"value":796}," A stable identity-key change retires the old primary client and clears identity-owned query state.",{"type":658,"tag":659,"props":798,"children":799},{},[800,804],{"type":658,"tag":676,"props":801,"children":802},{},[803],{"type":663,"value":690},{"type":663,"value":805}," Convex client state can contain cached query results and pending optimistic updates created under the previous user.",{"type":658,"tag":659,"props":807,"children":808},{},[809,813],{"type":658,"tag":676,"props":810,"children":811},{},[812],{"type":663,"value":700},{"type":663,"value":814}," User A's client state cannot become user B's local starting state.",{"type":658,"tag":659,"props":816,"children":817},{},[818,822,824,829],{"type":658,"tag":676,"props":819,"children":820},{},[821],{"type":663,"value":710},{"type":663,"value":823}," In-flight imperative calls may reject with ",{"type":658,"tag":724,"props":825,"children":826},{},[827],{"type":663,"value":828},"IDENTITY_CHANGED",{"type":663,"value":830}," during the transition.",{"type":658,"tag":659,"props":832,"children":833},{},[834,838],{"type":658,"tag":676,"props":835,"children":836},{},[837],{"type":663,"value":720},{"type":663,"value":839}," Same-user token refresh keeps the client because the stable identity did not change.",{"type":658,"tag":666,"props":841,"children":843},{"id":842},"useconvex-exposes-a-stable-narrow-handle",[844,849],{"type":658,"tag":724,"props":845,"children":846},{},[847],{"type":663,"value":848},"useConvex()",{"type":663,"value":850}," exposes a stable narrow handle",{"type":658,"tag":659,"props":852,"children":853},{},[854,858,860,865,867,872,873,878,880,885],{"type":658,"tag":676,"props":855,"children":856},{},[857],{"type":663,"value":680},{"type":663,"value":859}," The handle contains ",{"type":658,"tag":724,"props":861,"children":862},{},[863],{"type":663,"value":864},"query",{"type":663,"value":866},", ",{"type":658,"tag":724,"props":868,"children":869},{},[870],{"type":663,"value":871},"mutation",{"type":663,"value":866},{"type":658,"tag":724,"props":874,"children":875},{},[876],{"type":663,"value":877},"action",{"type":663,"value":879},", and ",{"type":658,"tag":724,"props":881,"children":882},{},[883],{"type":663,"value":884},"onUpdate",{"type":663,"value":886},", not the raw client.",{"type":658,"tag":659,"props":888,"children":889},{},[890,894],{"type":658,"tag":676,"props":891,"children":892},{},[893],{"type":663,"value":690},{"type":663,"value":895}," A captured raw client becomes closed after identity replacement and exposes lifecycle methods owned by the runtime.",{"type":658,"tag":659,"props":897,"children":898},{},[899,903],{"type":658,"tag":676,"props":900,"children":901},{},[902],{"type":663,"value":700},{"type":663,"value":904}," Calls always target the current client; subscriptions can rebind.",{"type":658,"tag":659,"props":906,"children":907},{},[908,912,914,919,920,925,927,932],{"type":658,"tag":676,"props":909,"children":910},{},[911],{"type":663,"value":710},{"type":663,"value":913}," Application code cannot call ",{"type":658,"tag":724,"props":915,"children":916},{},[917],{"type":663,"value":918},"setAuth",{"type":663,"value":866},{"type":658,"tag":724,"props":921,"children":922},{},[923],{"type":663,"value":924},"clearAuth",{"type":663,"value":926},", or ",{"type":658,"tag":724,"props":928,"children":929},{},[930],{"type":663,"value":931},"close",{"type":663,"value":933},".",{"type":658,"tag":659,"props":935,"children":936},{},[937,941,943,948],{"type":658,"tag":676,"props":938,"children":939},{},[940],{"type":663,"value":720},{"type":663,"value":942}," Use the high-level composables and ",{"type":658,"tag":724,"props":944,"children":945},{},[946],{"type":663,"value":947},"useConvexConnectionState()",{"type":663,"value":949}," for supported needs.",{"type":658,"tag":666,"props":951,"children":953},{"id":952},"authorization-stays-in-the-application",[954],{"type":663,"value":955},"Authorization stays in the application",{"type":658,"tag":659,"props":957,"children":958},{},[959,963],{"type":658,"tag":676,"props":960,"children":961},{},[962],{"type":663,"value":680},{"type":663,"value":964}," The library exposes identity and route UX primitives but no product permission framework.",{"type":658,"tag":659,"props":966,"children":967},{},[968,972],{"type":658,"tag":676,"props":969,"children":970},{},[971],{"type":663,"value":690},{"type":663,"value":973}," Only the product knows its resources, roles, membership rules, and business rules.",{"type":658,"tag":659,"props":975,"children":976},{},[977,981],{"type":658,"tag":676,"props":978,"children":979},{},[980],{"type":663,"value":700},{"type":663,"value":982}," Backend policy stays near Convex data and remains testable without frontend orchestration.",{"type":658,"tag":659,"props":984,"children":985},{},[986,990],{"type":658,"tag":676,"props":987,"children":988},{},[989],{"type":663,"value":710},{"type":663,"value":991}," Applications implement reusable authorization helpers themselves.",{"type":658,"tag":659,"props":993,"children":994},{},[995,999],{"type":658,"tag":676,"props":996,"children":997},{},[998],{"type":663,"value":720},{"type":663,"value":1000}," Use verified recipes as patterns, not as a second policy engine.",{"type":658,"tag":666,"props":1002,"children":1004},{"id":1003},"server-calls-use-request-scoped-official-primitives",[1005],{"type":663,"value":1006},"Server calls use request-scoped official primitives",{"type":658,"tag":659,"props":1008,"children":1009},{},[1010,1014,1016,1020],{"type":658,"tag":676,"props":1011,"children":1012},{},[1013],{"type":663,"value":680},{"type":663,"value":1015}," ",{"type":658,"tag":724,"props":1017,"children":1018},{},[1019],{"type":663,"value":297},{"type":663,"value":1021}," creates one request-scoped caller using the official HTTP client.",{"type":658,"tag":659,"props":1023,"children":1024},{},[1025,1029],{"type":658,"tag":676,"props":1026,"children":1027},{},[1028],{"type":663,"value":690},{"type":663,"value":1030}," Reusing a caller can mix credentials across requests. Manual protocol code adds an unnecessary transport owner.",{"type":658,"tag":659,"props":1032,"children":1033},{},[1034,1038],{"type":658,"tag":676,"props":1035,"children":1036},{},[1037],{"type":663,"value":700},{"type":663,"value":1039}," Credential resolution and call lifetime match the Nuxt request.",{"type":658,"tag":659,"props":1041,"children":1042},{},[1043,1047],{"type":658,"tag":676,"props":1044,"children":1045},{},[1046],{"type":663,"value":710},{"type":663,"value":1048}," Server calls do not share browser subscription state or hydrate client composables automatically.",{"type":658,"tag":659,"props":1050,"children":1051},{},[1052,1056],{"type":658,"tag":676,"props":1053,"children":1054},{},[1055],{"type":663,"value":720},{"type":663,"value":1057}," Call Convex directly from the browser for normal interactive data.",{"type":658,"tag":666,"props":1059,"children":1061},{"id":1060},"no-second-entity-store",[1062],{"type":663,"value":1063},"No second entity store",{"type":658,"tag":659,"props":1065,"children":1066},{},[1067,1071],{"type":658,"tag":676,"props":1068,"children":1069},{},[1070],{"type":663,"value":680},{"type":663,"value":1072}," The module relies on Convex query state and Nuxt payload reuse instead of adding a general entity cache.",{"type":658,"tag":659,"props":1074,"children":1075},{},[1076,1080],{"type":658,"tag":676,"props":1077,"children":1078},{},[1079],{"type":663,"value":690},{"type":663,"value":1081}," Another cache needs invalidation, identity partitioning, optimistic reconciliation, and a rebuild story.",{"type":658,"tag":659,"props":1083,"children":1084},{},[1085,1089],{"type":658,"tag":676,"props":1086,"children":1087},{},[1088],{"type":663,"value":700},{"type":663,"value":1090}," Server data lives in one place.",{"type":658,"tag":659,"props":1092,"children":1093},{},[1094,1098],{"type":658,"tag":676,"props":1095,"children":1096},{},[1097],{"type":663,"value":710},{"type":663,"value":1099}," UI state and server data use different tools.",{"type":658,"tag":659,"props":1101,"children":1102},{},[1103,1107],{"type":658,"tag":676,"props":1104,"children":1105},{},[1106],{"type":663,"value":720},{"type":663,"value":1108}," Keep UI-only state in local refs or an application store.",{"title":1110,"searchDepth":1111,"depth":1111,"links":1112},"",4,[1113,1115,1116,1117,1119,1120,1121],{"id":668,"depth":1114,"text":671},2,{"id":733,"depth":1114,"text":736},{"id":784,"depth":1114,"text":787},{"id":842,"depth":1114,"text":1118},"useConvex() exposes a stable narrow handle",{"id":952,"depth":1114,"text":955},{"id":1003,"depth":1114,"text":1006},{"id":1060,"depth":1114,"text":1063},"markdown","docs",{"source":1125,"path":1126,"stem":1127,"dir":1128,"extension":1129},"content","docs\u002F5.concepts\u002F8.design-decisions.md","docs\u002F5.concepts\u002F8.design-decisions","concepts","md",{"requestedPath":542,"resolvedPath":542,"alternates":1131},[],{"requested":1133,"resolved":1134,"usedFallback":6},{},{"locale":8},{"previous":1136,"next":1138},{"title":530,"id":531,"canonicalKey":532,"locale":8,"draft":6,"navigation":1137,"icon":534,"path":535},{"icon":534},{"title":544,"id":545,"canonicalKey":546,"locale":8,"draft":6,"navigation":1139,"icon":548,"path":549},{"icon":548},1790591523075]