[{"data":1,"prerenderedAt":1175},["ShallowReactive",2],{"docs-navigation:en":3,"content-page:docs:eH1LAdcDBFSggRsAdm9OdQdUAvtCCKEfZZ1yqLZ8BNY":651,"content-page-surround:docs:eH1LAdcDBFSggRsAdm9OdQdUAvtCCKEfZZ1yqLZ8BNY":1170},[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":286,"description":652,"navigation":653,"body":654,"type":1157,"id":287,"canonicalKey":288,"draft":6,"partial":6,"locale":8,"collection":1158,"navigationFile":6,"file":1159,"route":1165,"resolution":1167},"See which Better Auth plugins work with createBetterConvexAuth and what each one needs.",{"icon":290},{"type":655,"children":656,"toc":1148},"root",[657,685,692,984,1021,1027,1045,1074,1080,1121,1130,1136],{"type":658,"tag":659,"props":660,"children":661},"element","p",{},[662,669,671,676,678,683],{"type":658,"tag":663,"props":664,"children":665},"code",{},[666],{"type":667,"value":668},"text","createBetterConvexAuth",{"type":667,"value":670}," installs the Better Auth plugins itself. It does not\naccept a ",{"type":658,"tag":663,"props":672,"children":673},{},[674],{"type":667,"value":675},"plugins",{"type":667,"value":677}," option. You turn on a supported plugin with its own option.\nThe browser client accepts only the matching client plugins in\n",{"type":658,"tag":663,"props":679,"children":680},{},[681],{"type":667,"value":682},"defineConvexAuthClient",{"type":667,"value":684},". Any other client plugin fails at startup.",{"type":658,"tag":686,"props":687,"children":689},"h2",{"id":688},"supported-plugins",[690],{"type":667,"value":691},"Supported plugins",{"type":658,"tag":693,"props":694,"children":695},"table",{},[696,730],{"type":658,"tag":697,"props":698,"children":699},"thead",{},[700],{"type":658,"tag":701,"props":702,"children":703},"tr",{},[704,710,715,720,725],{"type":658,"tag":705,"props":706,"children":707},"th",{},[708],{"type":667,"value":709},"Plugin",{"type":658,"tag":705,"props":711,"children":712},{},[713],{"type":667,"value":714},"Server option",{"type":658,"tag":705,"props":716,"children":717},{},[718],{"type":667,"value":719},"Client plugin",{"type":658,"tag":705,"props":721,"children":722},{},[723],{"type":667,"value":724},"Status",{"type":658,"tag":705,"props":726,"children":727},{},[728],{"type":667,"value":729},"Notes",{"type":658,"tag":731,"props":732,"children":733},"tbody",{},[734,790,833,877,924,951],{"type":658,"tag":701,"props":735,"children":736},{},[737,743,751,766,771],{"type":658,"tag":738,"props":739,"children":740},"td",{},[741],{"type":667,"value":742},"Organization",{"type":658,"tag":738,"props":744,"children":745},{},[746],{"type":658,"tag":663,"props":747,"children":748},{},[749],{"type":667,"value":750},"organization",{"type":658,"tag":738,"props":752,"children":753},{},[754,759,761],{"type":658,"tag":663,"props":755,"children":756},{},[757],{"type":667,"value":758},"organizationClient()",{"type":667,"value":760}," from ",{"type":658,"tag":663,"props":762,"children":763},{},[764],{"type":667,"value":765},"better-auth\u002Fclient\u002Fplugins",{"type":658,"tag":738,"props":767,"children":768},{},[769],{"type":667,"value":770},"Supported",{"type":658,"tag":738,"props":772,"children":773},{},[774,776,781,783,788],{"type":667,"value":775},"Needs a local auth component. Teams work with ",{"type":658,"tag":663,"props":777,"children":778},{},[779],{"type":667,"value":780},"teams: { enabled: true }",{"type":667,"value":782},". Invitation email goes through the ",{"type":658,"tag":663,"props":784,"children":785},{},[786],{"type":667,"value":787},"email",{"type":667,"value":789}," hook.",{"type":658,"tag":701,"props":791,"children":792},{},[793,798,806,819,823],{"type":658,"tag":738,"props":794,"children":795},{},[796],{"type":667,"value":797},"Two-factor",{"type":658,"tag":738,"props":799,"children":800},{},[801],{"type":658,"tag":663,"props":802,"children":803},{},[804],{"type":667,"value":805},"twoFactor",{"type":658,"tag":738,"props":807,"children":808},{},[809,814,815],{"type":658,"tag":663,"props":810,"children":811},{},[812],{"type":667,"value":813},"twoFactorClient()",{"type":667,"value":760},{"type":658,"tag":663,"props":816,"children":817},{},[818],{"type":667,"value":765},{"type":658,"tag":738,"props":820,"children":821},{},[822],{"type":667,"value":770},{"type":658,"tag":738,"props":824,"children":825},{},[826,828,832],{"type":667,"value":827},"Needs a local auth component. One-time codes go through the ",{"type":658,"tag":663,"props":829,"children":830},{},[831],{"type":667,"value":787},{"type":667,"value":789},{"type":658,"tag":701,"props":834,"children":835},{},[836,841,849,862,866],{"type":658,"tag":738,"props":837,"children":838},{},[839],{"type":667,"value":840},"Email OTP",{"type":658,"tag":738,"props":842,"children":843},{},[844],{"type":658,"tag":663,"props":845,"children":846},{},[847],{"type":667,"value":848},"emailOTP",{"type":658,"tag":738,"props":850,"children":851},{},[852,857,858],{"type":658,"tag":663,"props":853,"children":854},{},[855],{"type":667,"value":856},"emailOTPClient()",{"type":667,"value":760},{"type":658,"tag":663,"props":859,"children":860},{},[861],{"type":667,"value":765},{"type":658,"tag":738,"props":863,"children":864},{},[865],{"type":667,"value":770},{"type":658,"tag":738,"props":867,"children":868},{},[869,871,875],{"type":667,"value":870},"Requires the ",{"type":658,"tag":663,"props":872,"children":873},{},[874],{"type":667,"value":787},{"type":667,"value":876}," hook. Adds no tables.",{"type":658,"tag":701,"props":878,"children":879},{},[880,885,893,907,912],{"type":658,"tag":738,"props":881,"children":882},{},[883],{"type":667,"value":884},"OAuth provider",{"type":658,"tag":738,"props":886,"children":887},{},[888],{"type":658,"tag":663,"props":889,"children":890},{},[891],{"type":667,"value":892},"oauth.mcp",{"type":658,"tag":738,"props":894,"children":895},{},[896,901,902],{"type":658,"tag":663,"props":897,"children":898},{},[899],{"type":667,"value":900},"oauthProviderClient()",{"type":667,"value":760},{"type":658,"tag":663,"props":903,"children":904},{},[905],{"type":667,"value":906},"@better-auth\u002Foauth-provider\u002Fclient",{"type":658,"tag":738,"props":908,"children":909},{},[910],{"type":667,"value":911},"Supported for MCP",{"type":658,"tag":738,"props":913,"children":914},{},[915,917,922],{"type":667,"value":916},"Only the MCP profile. A local auth component also needs it in the schema plugins. Dynamic client registration, UserInfo, and OpenID Connect discovery are off. See ",{"type":658,"tag":918,"props":919,"children":920},"a",{"href":270},[921],{"type":667,"value":265},{"type":667,"value":923},".",{"type":658,"tag":701,"props":925,"children":926},{},[927,932,937,941,946],{"type":658,"tag":738,"props":928,"children":929},{},[930],{"type":667,"value":931},"JWT",{"type":658,"tag":738,"props":933,"children":934},{},[935],{"type":667,"value":936},"None",{"type":658,"tag":738,"props":938,"children":939},{},[940],{"type":667,"value":936},{"type":658,"tag":738,"props":942,"children":943},{},[944],{"type":667,"value":945},"Built in",{"type":658,"tag":738,"props":947,"children":948},{},[949],{"type":667,"value":950},"The library always installs it. It stores the keys that sign Convex session tokens and OAuth access tokens. You cannot configure it.",{"type":658,"tag":701,"props":952,"children":953},{},[954,959,964,968,973],{"type":658,"tag":738,"props":955,"children":956},{},[957],{"type":667,"value":958},"Any other plugin, for example admin, API key, passkey, magic link, username, anonymous, OAuth popup, or phone number",{"type":658,"tag":738,"props":960,"children":961},{},[962],{"type":667,"value":963},"Rejected",{"type":658,"tag":738,"props":965,"children":966},{},[967],{"type":667,"value":963},{"type":658,"tag":738,"props":969,"children":970},{},[971],{"type":667,"value":972},"Not supported",{"type":658,"tag":738,"props":974,"children":975},{},[976,978,982],{"type":667,"value":977},"The factory rejects ",{"type":658,"tag":663,"props":979,"children":980},{},[981],{"type":667,"value":675},{"type":667,"value":983},", and the client rejects unknown plugin IDs.",{"type":658,"tag":659,"props":985,"children":986},{},[987,989,994,996,1001,1003,1008,1010,1014,1016,1020],{"type":667,"value":988},"Email and password sign-in, email verification, and social providers are part\nof Better Auth itself, not plugins. Configure them with ",{"type":658,"tag":663,"props":990,"children":991},{},[992],{"type":667,"value":993},"emailAndPassword",{"type":667,"value":995},",\n",{"type":658,"tag":663,"props":997,"children":998},{},[999],{"type":667,"value":1000},"emailVerification",{"type":667,"value":1002},", and ",{"type":658,"tag":663,"props":1004,"children":1005},{},[1006],{"type":667,"value":1007},"socialProviders",{"type":667,"value":1009},". See\n",{"type":658,"tag":918,"props":1011,"children":1012},{"href":284},[1013],{"type":667,"value":279},{"type":667,"value":1015}," and\n",{"type":658,"tag":918,"props":1017,"children":1018},{"href":277},[1019],{"type":667,"value":272},{"type":667,"value":923},{"type":658,"tag":686,"props":1022,"children":1024},{"id":1023},"options-the-library-sets-for-you",[1025],{"type":667,"value":1026},"Options the library sets for you",{"type":658,"tag":659,"props":1028,"children":1029},{},[1030,1032,1036,1038,1043],{"type":667,"value":1031},"Each supported plugin accepts the normal Better Auth options, except the email\ncallbacks. The ",{"type":658,"tag":663,"props":1033,"children":1034},{},[1035],{"type":667,"value":787},{"type":667,"value":1037}," hook sends every auth email, so these options fail with\n",{"type":658,"tag":663,"props":1039,"children":1040},{},[1041],{"type":667,"value":1042},"AUTH_CONFIG_INVALID",{"type":667,"value":1044},":",{"type":658,"tag":1046,"props":1047,"children":1048},"ul",{},[1049,1058,1066],{"type":658,"tag":1050,"props":1051,"children":1052},"li",{},[1053],{"type":658,"tag":663,"props":1054,"children":1055},{},[1056],{"type":667,"value":1057},"organization.sendInvitationEmail",{"type":658,"tag":1050,"props":1059,"children":1060},{},[1061],{"type":658,"tag":663,"props":1062,"children":1063},{},[1064],{"type":667,"value":1065},"twoFactor.otpOptions.sendOTP",{"type":658,"tag":1050,"props":1067,"children":1068},{},[1069],{"type":658,"tag":663,"props":1070,"children":1071},{},[1072],{"type":667,"value":1073},"emailOTP.sendVerificationOTP",{"type":658,"tag":686,"props":1075,"children":1077},{"id":1076},"turn-on-a-plugin",[1078],{"type":667,"value":1079},"Turn on a plugin",{"type":658,"tag":1081,"props":1082,"children":1083},"ol",{},[1084,1094,1111],{"type":658,"tag":1050,"props":1085,"children":1086},{},[1087,1089,1093],{"type":667,"value":1088},"Add the server option to ",{"type":658,"tag":663,"props":1090,"children":1091},{},[1092],{"type":667,"value":668},{"type":667,"value":923},{"type":658,"tag":1050,"props":1095,"children":1096},{},[1097,1099,1104,1106,1110],{"type":667,"value":1098},"For organization, two-factor, and the OAuth provider, add the plugin to\n",{"type":658,"tag":663,"props":1100,"children":1101},{},[1102],{"type":667,"value":1103},"convex\u002FbetterAuth\u002FschemaPlugins.ts",{"type":667,"value":1105}," and regenerate the auth schema. For\nthe OAuth provider, see step 1 of\n",{"type":658,"tag":918,"props":1107,"children":1108},{"href":405},[1109],{"type":667,"value":401},{"type":667,"value":923},{"type":658,"tag":1050,"props":1112,"children":1113},{},[1114,1116,1120],{"type":667,"value":1115},"Add the client plugin to ",{"type":658,"tag":663,"props":1117,"children":1118},{},[1119],{"type":667,"value":682},{"type":667,"value":923},{"type":658,"tag":659,"props":1122,"children":1123},{},[1124,1128],{"type":658,"tag":918,"props":1125,"children":1126},{"href":249},[1127],{"type":667,"value":244},{"type":667,"value":1129}," shows\neach step with the organization plugin.",{"type":658,"tag":686,"props":1131,"children":1133},{"id":1132},"why-other-plugins-are-rejected",[1134],{"type":667,"value":1135},"Why other plugins are rejected",{"type":658,"tag":659,"props":1137,"children":1138},{},[1139,1141,1147],{"type":667,"value":1140},"Each plugin adds routes, tables, and cookies. The library checks those parts\nagainst its session and token rules before it supports a plugin. A plugin\nthat is not in the table has no such check, so the factory rejects it instead\nof running it without one. To ask for a plugin, open an issue in the\n",{"type":658,"tag":918,"props":1142,"children":1144},{"href":1143},"https:\u002F\u002Fgithub.com\u002Flupinum-dev\u002Fbetter-convex\u002Fissues",[1145],{"type":667,"value":1146},"repository",{"type":667,"value":923},{"title":1149,"searchDepth":1150,"depth":1150,"links":1151},"",4,[1152,1154,1155,1156],{"id":688,"depth":1153,"text":691},2,{"id":1023,"depth":1153,"text":1026},{"id":1076,"depth":1153,"text":1079},{"id":1132,"depth":1153,"text":1135},"markdown","docs",{"source":1160,"path":1161,"stem":1162,"dir":1163,"extension":1164},"content","docs\u002F3.build\u002F3.authentication\u002F13.better-auth-plugin-support.md","docs\u002F3.build\u002F3.authentication\u002F13.better-auth-plugin-support","authentication","md",{"requestedPath":291,"resolvedPath":291,"alternates":1166},[],{"requested":1168,"resolved":1169,"usedFallback":6},{},{"locale":8},{"previous":1171,"next":1173},{"title":279,"id":280,"canonicalKey":281,"locale":8,"draft":6,"navigation":1172,"icon":283,"path":284},{"icon":283},{"title":297,"id":298,"canonicalKey":299,"locale":8,"draft":6,"navigation":1174,"icon":301,"path":302},{"icon":301},1790591496114]