[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-convex-convex-quickstart":3,"mdc-d6gt3k-key":35,"related-repo-convex-convex-quickstart":4857,"related-org-convex-convex-quickstart":4938},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":24,"repoUrl":25,"updatedAt":26,"license":27,"forks":28,"topics":29,"repo":30,"sourceUrl":33,"mdContent":34},"convex-quickstart","initialize Convex in applications","Creates or adds Convex to an app. Use for new Convex projects, npm create convex@latest, frontend setup, env vars, or the first npx convex dev run.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"convex","Convex","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fconvex.png","get-convex",[13,15,18,21],{"name":9,"slug":8,"type":14},"tag",{"name":16,"slug":17,"type":14},"Onboarding","onboarding",{"name":19,"slug":20,"type":14},"CLI","cli",{"name":22,"slug":23,"type":14},"Frontend","frontend",34,"https:\u002F\u002Fgithub.com\u002Fget-convex\u002Fagent-skills","2026-07-12T08:00:43.436152",null,7,[],{"repoUrl":25,"stars":24,"forks":28,"topics":31,"description":32},[],"Convex Skills for Agents","https:\u002F\u002Fgithub.com\u002Fget-convex\u002Fagent-skills\u002Ftree\u002FHEAD\u002Fskills\u002Fconvex-quickstart","---\nname: convex-quickstart\ndescription:\n  Creates or adds Convex to an app. Use for new Convex projects, npm create\n  convex@latest, frontend setup, env vars, or the first npx convex dev run.\n---\n\n# Convex Quickstart\n\nSet up a working Convex project as fast as possible.\n\n## When to Use\n\n- Starting a brand new project with Convex\n- Adding Convex to an existing React, Next.js, Vue, Svelte, or other app\n- Scaffolding a Convex app for prototyping\n\n## When Not to Use\n\n- The project already has Convex installed and `convex\u002F` exists - just start\n  building\n- You only need to add auth to an existing Convex app - use the\n  `convex-setup-auth` skill\n\n## Workflow\n\n1. Determine the starting point: new project or existing app\n2. If new project, pick a template and scaffold with `npm create convex@latest`\n3. If existing app, install `convex` and wire up the provider\n4. Run `npx convex dev --once` to provision a local anonymous deployment, push\n   the current `convex\u002F` code, typecheck it, and regenerate types — all in one\n   shot, exiting cleanly. The output tells the agent whether the schema and\n   functions are valid.\n5. Ask the user (or, for cloud agents, start in the background) `npm run dev` —\n   Convex templates wire the watcher and the frontend into a single command. If\n   the project has no combined dev script, use `npx convex dev` for the watcher\n   and run the frontend separately.\n6. Verify the setup works\n\n## Path 1: New Project (Recommended)\n\nUse the official scaffolding tool. It creates a complete project with the\nfrontend framework, Convex backend, and all config wired together.\n\n### Pick a template\n\n| Template                   | Stack                                     |\n| -------------------------- | ----------------------------------------- |\n| `react-vite-shadcn`        | React + Vite + Tailwind + shadcn\u002Fui       |\n| `nextjs-shadcn`            | Next.js App Router + Tailwind + shadcn\u002Fui |\n| `react-vite-clerk-shadcn`  | React + Vite + Clerk auth + shadcn\u002Fui     |\n| `nextjs-clerk`             | Next.js + Clerk auth                      |\n| `nextjs-convexauth-shadcn` | Next.js + Convex Auth + shadcn\u002Fui         |\n| `nextjs-lucia-shadcn`      | Next.js + Lucia auth + shadcn\u002Fui          |\n| `bare`                     | Convex backend only, no frontend          |\n\nIf the user has not specified a preference, default to `react-vite-shadcn` for\nsimple apps or `nextjs-shadcn` for apps that need SSR or API routes.\n\nYou can also use any GitHub repo as a template:\n\n```bash\nnpm create convex@latest my-app -- -t owner\u002Frepo\nnpm create convex@latest my-app -- -t owner\u002Frepo#branch\n```\n\n### Scaffold the project\n\nAlways pass the project name and template flag to avoid interactive prompts:\n\n```bash\nnpm create convex@latest my-app -- -t react-vite-shadcn\ncd my-app\nnpm install\n```\n\nThe scaffolding tool creates files but does not run `npm install`, so you must\nrun it yourself.\n\nTo scaffold in the current directory (if it is empty):\n\n```bash\nnpm create convex@latest . -- -t react-vite-shadcn\nnpm install\n```\n\n### Provision the deployment and push code\n\nRun this yourself — it is a one-shot command that exits cleanly:\n\n```bash\nnpx convex dev --once\n```\n\nIn a non-TTY environment (which is true for almost every agent run), this:\n\n- Provisions an _anonymous_ local Convex backend bound to `127.0.0.1`. No\n  browser login, no team\u002Fproject prompts.\n- Writes `CONVEX_DEPLOYMENT` and the framework's `*_CONVEX_URL` variables to\n  `.env.local`.\n- Generates `convex\u002F_generated\u002F`.\n- Pushes the current `convex\u002F` code to the deployment, **typechecks it**, and\n  **validates the schema**. The agent reads this output to find out if the code\n  it just wrote is broken.\n\nTo be explicit (recommended), set `CONVEX_AGENT_MODE=anonymous` so the behavior\ndoes not depend on TTY detection:\n\n```bash\nCONVEX_AGENT_MODE=anonymous npx convex dev --once\n```\n\nThe deployment lives under `~\u002F.convex\u002F` and persists across runs. Re-running\n`convex dev --once` after editing `convex\u002F` files is the agent's main feedback\nloop while the user-launched `npm run dev` is not in use.\n\nIf the template's `package.json` defines a `predev` script (Convex Auth\ntemplates and similar do), `npm run predev` runs `convex init` plus any one-time\nsetup (e.g. minting auth keys). Use it _in addition to_ `convex dev --once` when\npresent — `predev` handles the one-time setup, `convex dev --once` pushes and\nvalidates the code.\n\n### Start the dev loop\n\nIn most Convex templates, `npm run dev` runs both the Convex watcher and the\nfrontend dev server together (typically `convex dev --start 'vite --open'` or\nthe Next.js equivalent). That is what the user should run.\n\n```bash\nnpm run dev\n```\n\nIf the project does not have a combined `dev` script — e.g. the `bare` template,\nor an existing app where you haven't wired the frontend dev server into Convex's\n`--start` flag — the user can run the Convex watcher directly:\n\n```bash\nnpx convex dev\n```\n\n`npx convex dev` is the same long-running watcher `npm run dev` invokes under\nthe hood; it just doesn't start the frontend. Use it when there is no frontend,\nor when the user prefers to run the frontend in a separate terminal.\n\nEither way, the agent should not invoke the watcher in the foreground because it\ndoes not exit. Two options:\n\n- **Local development (user is at the keyboard):** ask the user to run\n  `npm run dev` (or `npx convex dev`) in a terminal. The deployment provisioned\n  by `convex dev --once` above is already selected, so the watcher picks up\n  immediately with no prompts.\n- **Cloud or headless agents:** start `npm run dev` (or `npx convex dev`) in the\n  background.\n\nVite apps serve on `http:\u002F\u002Flocalhost:5173`, Next.js on `http:\u002F\u002Flocalhost:3000`.\n\n### What you get\n\nAfter scaffolding, the project structure looks like:\n\n```\nmy-app\u002F\n  convex\u002F           # Backend functions and schema\n    _generated\u002F     # Auto-generated types (check this into git)\n    schema.ts       # Database schema (if template includes one)\n  src\u002F              # Frontend code (or app\u002F for Next.js)\n  package.json\n  .env.local        # CONVEX_URL \u002F VITE_CONVEX_URL \u002F NEXT_PUBLIC_CONVEX_URL\n```\n\nThe template already has:\n\n- `ConvexProvider` wired into the app root\n- Correct env var names for the framework\n- Tailwind and shadcn\u002Fui ready (for shadcn templates)\n- Auth provider configured (for auth templates)\n\nProceed to adding schema, functions, and UI.\n\n## Path 2: Add Convex to an Existing App\n\nUse this when the user already has a frontend project and wants to add Convex as\nthe backend.\n\n### Install\n\n```bash\nnpm install convex\n```\n\n### Provision and push\n\nRun `npx convex dev --once` yourself to provision a local anonymous deployment,\nwrite `.env.local`, generate types, push the current `convex\u002F` code, and\ntypecheck it. This is one-shot and exits:\n\n```bash\nnpx convex dev --once\n```\n\nThe output tells you whether the schema and functions are valid — use it as your\nfeedback loop while iterating.\n\nThen ask the user to start the watcher (or, for cloud\u002Fheadless agents, start it\nin the background). You have two options:\n\n- **Wire Convex into `npm run dev`** — change the existing app's `dev` script to\n  `convex dev --start '\u003Cexisting dev command>'`. That's the standard pattern\n  Convex templates use; the user then runs a single `npm run dev` to start both.\n- **Run them separately** — leave `npm run dev` for the frontend and tell the\n  user to run `npx convex dev` in a second terminal for the Convex watcher.\n\nSee \"Start the dev loop\" above for why the agent should not run the watcher in\nthe foreground.\n\n### Wire up the provider\n\nThe Convex client must wrap the app at the root. The setup varies by framework.\n\nCreate the `ConvexReactClient` at module scope, not inside a component:\n\n```tsx\n\u002F\u002F Bad: re-creates the client on every render\nfunction App() {\n  const convex = new ConvexReactClient(\n    import.meta.env.VITE_CONVEX_URL as string,\n  );\n  return \u003CConvexProvider client={convex}>...\u003C\u002FConvexProvider>;\n}\n\n\u002F\u002F Good: created once at module scope\nconst convex = new ConvexReactClient(import.meta.env.VITE_CONVEX_URL as string);\nfunction App() {\n  return \u003CConvexProvider client={convex}>...\u003C\u002FConvexProvider>;\n}\n```\n\n#### React (Vite)\n\n```tsx\n\u002F\u002F src\u002Fmain.tsx\nimport { StrictMode } from \"react\";\nimport { createRoot } from \"react-dom\u002Fclient\";\nimport { ConvexProvider, ConvexReactClient } from \"convex\u002Freact\";\nimport App from \".\u002FApp\";\n\nconst convex = new ConvexReactClient(import.meta.env.VITE_CONVEX_URL as string);\n\ncreateRoot(document.getElementById(\"root\")!).render(\n  \u003CStrictMode>\n    \u003CConvexProvider client={convex}>\n      \u003CApp \u002F>\n    \u003C\u002FConvexProvider>\n  \u003C\u002FStrictMode>,\n);\n```\n\n#### Next.js (App Router)\n\n```tsx\n\u002F\u002F app\u002FConvexClientProvider.tsx\n\"use client\";\n\nimport { ConvexProvider, ConvexReactClient } from \"convex\u002Freact\";\nimport { ReactNode } from \"react\";\n\nconst convex = new ConvexReactClient(process.env.NEXT_PUBLIC_CONVEX_URL!);\n\nexport function ConvexClientProvider({ children }: { children: ReactNode }) {\n  return \u003CConvexProvider client={convex}>{children}\u003C\u002FConvexProvider>;\n}\n```\n\n```tsx\n\u002F\u002F app\u002Flayout.tsx\nimport { ConvexClientProvider } from \".\u002FConvexClientProvider\";\n\nexport default function RootLayout({\n  children,\n}: {\n  children: React.ReactNode;\n}) {\n  return (\n    \u003Chtml lang=\"en\">\n      \u003Cbody>\n        \u003CConvexClientProvider>{children}\u003C\u002FConvexClientProvider>\n      \u003C\u002Fbody>\n    \u003C\u002Fhtml>\n  );\n}\n```\n\n#### Other frameworks\n\nFor Vue, Svelte, React Native, TanStack Start, Remix, and others, follow the\nmatching quickstart guide:\n\n- [Vue](https:\u002F\u002Fdocs.convex.dev\u002Fquickstart\u002Fvue)\n- [Svelte](https:\u002F\u002Fdocs.convex.dev\u002Fquickstart\u002Fsvelte)\n- [React Native](https:\u002F\u002Fdocs.convex.dev\u002Fquickstart\u002Freact-native)\n- [TanStack Start](https:\u002F\u002Fdocs.convex.dev\u002Fquickstart\u002Ftanstack-start)\n- [Remix](https:\u002F\u002Fdocs.convex.dev\u002Fquickstart\u002Fremix)\n- [Node.js (no frontend)](https:\u002F\u002Fdocs.convex.dev\u002Fquickstart\u002Fnodejs)\n\n### Environment variables\n\nThe env var name depends on the framework:\n\n| Framework    | Variable                 |\n| ------------ | ------------------------ |\n| Vite         | `VITE_CONVEX_URL`        |\n| Next.js      | `NEXT_PUBLIC_CONVEX_URL` |\n| Remix        | `CONVEX_URL`             |\n| React Native | `EXPO_PUBLIC_CONVEX_URL` |\n\n`npx convex dev` writes the correct variable to `.env.local` automatically.\n\n## Agent Mode\n\n`CONVEX_AGENT_MODE=anonymous` forces an unauthenticated local backend. It is\nalready the implicit default for any non-TTY run of `npx convex init` or\n`npx convex dev`, but set it explicitly so the behavior does not depend on TTY\ndetection:\n\n```bash\nCONVEX_AGENT_MODE=anonymous npx convex dev --once\n```\n\nUse it for:\n\n- Any AI coding agent (local or cloud).\n- CI-like setup scripts.\n- Cases where the user is logged in but you do not want to touch their personal\n  dev deployment.\n\nThe resulting backend runs on `127.0.0.1` and is not associated with any team or\nproject until the user later claims it via `npx convex login` and the\n`npx convex deployment` commands.\n\n## Verify the Setup\n\nAfter setup, confirm everything is working:\n\n1. `npx convex dev --once` exited without errors (deployment provisioned, code\n   pushed, schema validated, typecheck clean)\n2. The `convex\u002F_generated\u002F` directory exists and has `api.ts` and `server.ts`\n3. `.env.local` contains a `CONVEX_DEPLOYMENT` value and the framework's\n   `*_CONVEX_URL` variable\n4. (If applicable) `npm run dev` (or `npx convex dev` for the watcher alone) is\n   running without errors in another terminal or in the background\n\n## Writing Your First Function\n\nOnce the project is set up, create a schema and a query to verify the full loop\nworks.\n\n`convex\u002Fschema.ts`:\n\n```ts\nimport { defineSchema, defineTable } from \"convex\u002Fserver\";\nimport { v } from \"convex\u002Fvalues\";\n\nexport default defineSchema({\n  tasks: defineTable({\n    text: v.string(),\n    completed: v.boolean(),\n  }),\n});\n```\n\n`convex\u002Ftasks.ts`:\n\n```ts\nimport { query, mutation } from \".\u002F_generated\u002Fserver\";\nimport { v } from \"convex\u002Fvalues\";\n\nexport const list = query({\n  args: {},\n  handler: async (ctx) => {\n    return await ctx.db.query(\"tasks\").collect();\n  },\n});\n\nexport const create = mutation({\n  args: { text: v.string() },\n  handler: async (ctx, args) => {\n    await ctx.db.insert(\"tasks\", { text: args.text, completed: false });\n  },\n});\n```\n\nUse in a React component (adjust the import path based on your file location\nrelative to `convex\u002F`):\n\n```tsx\nimport { useQuery, useMutation } from \"convex\u002Freact\";\nimport { api } from \"..\u002Fconvex\u002F_generated\u002Fapi\";\n\nfunction Tasks() {\n  const tasks = useQuery(api.tasks.list);\n  const create = useMutation(api.tasks.create);\n\n  return (\n    \u003Cdiv>\n      \u003Cbutton onClick={() => create({ text: \"New task\" })}>Add\u003C\u002Fbutton>\n      {tasks?.map((t) => (\n        \u003Cdiv key={t._id}>{t.text}\u003C\u002Fdiv>\n      ))}\n    \u003C\u002Fdiv>\n  );\n}\n```\n\n## Development vs Production\n\nAlways use `npx convex dev` during development. It runs against your personal\ndev deployment and syncs code on save.\n\nWhen ready to ship, deploy to production:\n\n```bash\nnpx convex deploy\n```\n\nThis pushes to the production deployment, which is separate from dev. Do not use\n`deploy` during development.\n\n## Next Steps\n\n- Add authentication: use the `convex-setup-auth` skill\n- Design your schema: see\n  [Schema docs](https:\u002F\u002Fdocs.convex.dev\u002Fdatabase\u002Fschemas)\n- Build components: use the `convex-create-component` skill\n- Plan a migration: use the `convex-migration-helper` skill\n- Add file storage: see\n  [File Storage docs](https:\u002F\u002Fdocs.convex.dev\u002Ffile-storage)\n- Set up cron jobs: see [Scheduling docs](https:\u002F\u002Fdocs.convex.dev\u002Fscheduling)\n\n## Checklist\n\n- [ ] Determined starting point: new project or existing app\n- [ ] If new project: scaffolded with `npm create convex@latest` using\n      appropriate template\n- [ ] If existing app: installed `convex` and wired up the provider\n- [ ] Agent ran `npx convex dev --once`: deployment provisioned, code pushed,\n      typecheck clean\n- [ ] `npm run dev` (or `npx convex dev` for the watcher alone) is running —\n      user-launched terminal, or background for cloud agents\n- [ ] `convex\u002F_generated\u002F` directory exists with types\n- [ ] `.env.local` has the deployment URL\n- [ ] Verified a basic query\u002Fmutation round-trip works\n",{"data":36,"body":37},{"name":4,"description":6},{"type":38,"children":39},"root",[40,48,54,61,81,87,117,123,201,207,212,219,366,385,390,477,483,488,554,567,572,622,628,633,663,668,760,773,816,851,916,922,942,966,994,1016,1033,1038,1095,1115,1121,1126,1136,1141,1170,1175,1181,1186,1192,1216,1222,1247,1272,1277,1282,1346,1351,1357,1362,1375,1754,1761,2207,2213,2530,2833,2839,2844,2909,2915,2920,3006,3023,3029,3054,3091,3096,3114,3142,3148,3153,3234,3240,3245,3255,3508,3518,4063,4075,4581,4587,4599,4604,4627,4640,4646,4720,4726,4851],{"type":41,"tag":42,"props":43,"children":44},"element","h1",{"id":4},[45],{"type":46,"value":47},"text","Convex Quickstart",{"type":41,"tag":49,"props":50,"children":51},"p",{},[52],{"type":46,"value":53},"Set up a working Convex project as fast as possible.",{"type":41,"tag":55,"props":56,"children":58},"h2",{"id":57},"when-to-use",[59],{"type":46,"value":60},"When to Use",{"type":41,"tag":62,"props":63,"children":64},"ul",{},[65,71,76],{"type":41,"tag":66,"props":67,"children":68},"li",{},[69],{"type":46,"value":70},"Starting a brand new project with Convex",{"type":41,"tag":66,"props":72,"children":73},{},[74],{"type":46,"value":75},"Adding Convex to an existing React, Next.js, Vue, Svelte, or other app",{"type":41,"tag":66,"props":77,"children":78},{},[79],{"type":46,"value":80},"Scaffolding a Convex app for prototyping",{"type":41,"tag":55,"props":82,"children":84},{"id":83},"when-not-to-use",[85],{"type":46,"value":86},"When Not to Use",{"type":41,"tag":62,"props":88,"children":89},{},[90,104],{"type":41,"tag":66,"props":91,"children":92},{},[93,95,102],{"type":46,"value":94},"The project already has Convex installed and ",{"type":41,"tag":96,"props":97,"children":99},"code",{"className":98},[],[100],{"type":46,"value":101},"convex\u002F",{"type":46,"value":103}," exists - just start\nbuilding",{"type":41,"tag":66,"props":105,"children":106},{},[107,109,115],{"type":46,"value":108},"You only need to add auth to an existing Convex app - use the\n",{"type":41,"tag":96,"props":110,"children":112},{"className":111},[],[113],{"type":46,"value":114},"convex-setup-auth",{"type":46,"value":116}," skill",{"type":41,"tag":55,"props":118,"children":120},{"id":119},"workflow",[121],{"type":46,"value":122},"Workflow",{"type":41,"tag":124,"props":125,"children":126},"ol",{},[127,132,143,155,175,196],{"type":41,"tag":66,"props":128,"children":129},{},[130],{"type":46,"value":131},"Determine the starting point: new project or existing app",{"type":41,"tag":66,"props":133,"children":134},{},[135,137],{"type":46,"value":136},"If new project, pick a template and scaffold with ",{"type":41,"tag":96,"props":138,"children":140},{"className":139},[],[141],{"type":46,"value":142},"npm create convex@latest",{"type":41,"tag":66,"props":144,"children":145},{},[146,148,153],{"type":46,"value":147},"If existing app, install ",{"type":41,"tag":96,"props":149,"children":151},{"className":150},[],[152],{"type":46,"value":8},{"type":46,"value":154}," and wire up the provider",{"type":41,"tag":66,"props":156,"children":157},{},[158,160,166,168,173],{"type":46,"value":159},"Run ",{"type":41,"tag":96,"props":161,"children":163},{"className":162},[],[164],{"type":46,"value":165},"npx convex dev --once",{"type":46,"value":167}," to provision a local anonymous deployment, push\nthe current ",{"type":41,"tag":96,"props":169,"children":171},{"className":170},[],[172],{"type":46,"value":101},{"type":46,"value":174}," code, typecheck it, and regenerate types — all in one\nshot, exiting cleanly. The output tells the agent whether the schema and\nfunctions are valid.",{"type":41,"tag":66,"props":176,"children":177},{},[178,180,186,188,194],{"type":46,"value":179},"Ask the user (or, for cloud agents, start in the background) ",{"type":41,"tag":96,"props":181,"children":183},{"className":182},[],[184],{"type":46,"value":185},"npm run dev",{"type":46,"value":187}," —\nConvex templates wire the watcher and the frontend into a single command. If\nthe project has no combined dev script, use ",{"type":41,"tag":96,"props":189,"children":191},{"className":190},[],[192],{"type":46,"value":193},"npx convex dev",{"type":46,"value":195}," for the watcher\nand run the frontend separately.",{"type":41,"tag":66,"props":197,"children":198},{},[199],{"type":46,"value":200},"Verify the setup works",{"type":41,"tag":55,"props":202,"children":204},{"id":203},"path-1-new-project-recommended",[205],{"type":46,"value":206},"Path 1: New Project (Recommended)",{"type":41,"tag":49,"props":208,"children":209},{},[210],{"type":46,"value":211},"Use the official scaffolding tool. It creates a complete project with the\nfrontend framework, Convex backend, and all config wired together.",{"type":41,"tag":213,"props":214,"children":216},"h3",{"id":215},"pick-a-template",[217],{"type":46,"value":218},"Pick a template",{"type":41,"tag":220,"props":221,"children":222},"table",{},[223,242],{"type":41,"tag":224,"props":225,"children":226},"thead",{},[227],{"type":41,"tag":228,"props":229,"children":230},"tr",{},[231,237],{"type":41,"tag":232,"props":233,"children":234},"th",{},[235],{"type":46,"value":236},"Template",{"type":41,"tag":232,"props":238,"children":239},{},[240],{"type":46,"value":241},"Stack",{"type":41,"tag":243,"props":244,"children":245},"tbody",{},[246,264,281,298,315,332,349],{"type":41,"tag":228,"props":247,"children":248},{},[249,259],{"type":41,"tag":250,"props":251,"children":252},"td",{},[253],{"type":41,"tag":96,"props":254,"children":256},{"className":255},[],[257],{"type":46,"value":258},"react-vite-shadcn",{"type":41,"tag":250,"props":260,"children":261},{},[262],{"type":46,"value":263},"React + Vite + Tailwind + shadcn\u002Fui",{"type":41,"tag":228,"props":265,"children":266},{},[267,276],{"type":41,"tag":250,"props":268,"children":269},{},[270],{"type":41,"tag":96,"props":271,"children":273},{"className":272},[],[274],{"type":46,"value":275},"nextjs-shadcn",{"type":41,"tag":250,"props":277,"children":278},{},[279],{"type":46,"value":280},"Next.js App Router + Tailwind + shadcn\u002Fui",{"type":41,"tag":228,"props":282,"children":283},{},[284,293],{"type":41,"tag":250,"props":285,"children":286},{},[287],{"type":41,"tag":96,"props":288,"children":290},{"className":289},[],[291],{"type":46,"value":292},"react-vite-clerk-shadcn",{"type":41,"tag":250,"props":294,"children":295},{},[296],{"type":46,"value":297},"React + Vite + Clerk auth + shadcn\u002Fui",{"type":41,"tag":228,"props":299,"children":300},{},[301,310],{"type":41,"tag":250,"props":302,"children":303},{},[304],{"type":41,"tag":96,"props":305,"children":307},{"className":306},[],[308],{"type":46,"value":309},"nextjs-clerk",{"type":41,"tag":250,"props":311,"children":312},{},[313],{"type":46,"value":314},"Next.js + Clerk auth",{"type":41,"tag":228,"props":316,"children":317},{},[318,327],{"type":41,"tag":250,"props":319,"children":320},{},[321],{"type":41,"tag":96,"props":322,"children":324},{"className":323},[],[325],{"type":46,"value":326},"nextjs-convexauth-shadcn",{"type":41,"tag":250,"props":328,"children":329},{},[330],{"type":46,"value":331},"Next.js + Convex Auth + shadcn\u002Fui",{"type":41,"tag":228,"props":333,"children":334},{},[335,344],{"type":41,"tag":250,"props":336,"children":337},{},[338],{"type":41,"tag":96,"props":339,"children":341},{"className":340},[],[342],{"type":46,"value":343},"nextjs-lucia-shadcn",{"type":41,"tag":250,"props":345,"children":346},{},[347],{"type":46,"value":348},"Next.js + Lucia auth + shadcn\u002Fui",{"type":41,"tag":228,"props":350,"children":351},{},[352,361],{"type":41,"tag":250,"props":353,"children":354},{},[355],{"type":41,"tag":96,"props":356,"children":358},{"className":357},[],[359],{"type":46,"value":360},"bare",{"type":41,"tag":250,"props":362,"children":363},{},[364],{"type":46,"value":365},"Convex backend only, no frontend",{"type":41,"tag":49,"props":367,"children":368},{},[369,371,376,378,383],{"type":46,"value":370},"If the user has not specified a preference, default to ",{"type":41,"tag":96,"props":372,"children":374},{"className":373},[],[375],{"type":46,"value":258},{"type":46,"value":377}," for\nsimple apps or ",{"type":41,"tag":96,"props":379,"children":381},{"className":380},[],[382],{"type":46,"value":275},{"type":46,"value":384}," for apps that need SSR or API routes.",{"type":41,"tag":49,"props":386,"children":387},{},[388],{"type":46,"value":389},"You can also use any GitHub repo as a template:",{"type":41,"tag":391,"props":392,"children":397},"pre",{"className":393,"code":394,"language":395,"meta":396,"style":396},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm create convex@latest my-app -- -t owner\u002Frepo\nnpm create convex@latest my-app -- -t owner\u002Frepo#branch\n","bash","",[398],{"type":41,"tag":96,"props":399,"children":400},{"__ignoreMap":396},[401,444],{"type":41,"tag":402,"props":403,"children":406},"span",{"class":404,"line":405},"line",1,[407,413,419,424,429,434,439],{"type":41,"tag":402,"props":408,"children":410},{"style":409},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[411],{"type":46,"value":412},"npm",{"type":41,"tag":402,"props":414,"children":416},{"style":415},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[417],{"type":46,"value":418}," create",{"type":41,"tag":402,"props":420,"children":421},{"style":415},[422],{"type":46,"value":423}," convex@latest",{"type":41,"tag":402,"props":425,"children":426},{"style":415},[427],{"type":46,"value":428}," my-app",{"type":41,"tag":402,"props":430,"children":431},{"style":415},[432],{"type":46,"value":433}," --",{"type":41,"tag":402,"props":435,"children":436},{"style":415},[437],{"type":46,"value":438}," -t",{"type":41,"tag":402,"props":440,"children":441},{"style":415},[442],{"type":46,"value":443}," owner\u002Frepo\n",{"type":41,"tag":402,"props":445,"children":447},{"class":404,"line":446},2,[448,452,456,460,464,468,472],{"type":41,"tag":402,"props":449,"children":450},{"style":409},[451],{"type":46,"value":412},{"type":41,"tag":402,"props":453,"children":454},{"style":415},[455],{"type":46,"value":418},{"type":41,"tag":402,"props":457,"children":458},{"style":415},[459],{"type":46,"value":423},{"type":41,"tag":402,"props":461,"children":462},{"style":415},[463],{"type":46,"value":428},{"type":41,"tag":402,"props":465,"children":466},{"style":415},[467],{"type":46,"value":433},{"type":41,"tag":402,"props":469,"children":470},{"style":415},[471],{"type":46,"value":438},{"type":41,"tag":402,"props":473,"children":474},{"style":415},[475],{"type":46,"value":476}," owner\u002Frepo#branch\n",{"type":41,"tag":213,"props":478,"children":480},{"id":479},"scaffold-the-project",[481],{"type":46,"value":482},"Scaffold the project",{"type":41,"tag":49,"props":484,"children":485},{},[486],{"type":46,"value":487},"Always pass the project name and template flag to avoid interactive prompts:",{"type":41,"tag":391,"props":489,"children":491},{"className":393,"code":490,"language":395,"meta":396,"style":396},"npm create convex@latest my-app -- -t react-vite-shadcn\ncd my-app\nnpm install\n",[492],{"type":41,"tag":96,"props":493,"children":494},{"__ignoreMap":396},[495,527,541],{"type":41,"tag":402,"props":496,"children":497},{"class":404,"line":405},[498,502,506,510,514,518,522],{"type":41,"tag":402,"props":499,"children":500},{"style":409},[501],{"type":46,"value":412},{"type":41,"tag":402,"props":503,"children":504},{"style":415},[505],{"type":46,"value":418},{"type":41,"tag":402,"props":507,"children":508},{"style":415},[509],{"type":46,"value":423},{"type":41,"tag":402,"props":511,"children":512},{"style":415},[513],{"type":46,"value":428},{"type":41,"tag":402,"props":515,"children":516},{"style":415},[517],{"type":46,"value":433},{"type":41,"tag":402,"props":519,"children":520},{"style":415},[521],{"type":46,"value":438},{"type":41,"tag":402,"props":523,"children":524},{"style":415},[525],{"type":46,"value":526}," react-vite-shadcn\n",{"type":41,"tag":402,"props":528,"children":529},{"class":404,"line":446},[530,536],{"type":41,"tag":402,"props":531,"children":533},{"style":532},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[534],{"type":46,"value":535},"cd",{"type":41,"tag":402,"props":537,"children":538},{"style":415},[539],{"type":46,"value":540}," my-app\n",{"type":41,"tag":402,"props":542,"children":544},{"class":404,"line":543},3,[545,549],{"type":41,"tag":402,"props":546,"children":547},{"style":409},[548],{"type":46,"value":412},{"type":41,"tag":402,"props":550,"children":551},{"style":415},[552],{"type":46,"value":553}," install\n",{"type":41,"tag":49,"props":555,"children":556},{},[557,559,565],{"type":46,"value":558},"The scaffolding tool creates files but does not run ",{"type":41,"tag":96,"props":560,"children":562},{"className":561},[],[563],{"type":46,"value":564},"npm install",{"type":46,"value":566},", so you must\nrun it yourself.",{"type":41,"tag":49,"props":568,"children":569},{},[570],{"type":46,"value":571},"To scaffold in the current directory (if it is empty):",{"type":41,"tag":391,"props":573,"children":575},{"className":393,"code":574,"language":395,"meta":396,"style":396},"npm create convex@latest . -- -t react-vite-shadcn\nnpm install\n",[576],{"type":41,"tag":96,"props":577,"children":578},{"__ignoreMap":396},[579,611],{"type":41,"tag":402,"props":580,"children":581},{"class":404,"line":405},[582,586,590,594,599,603,607],{"type":41,"tag":402,"props":583,"children":584},{"style":409},[585],{"type":46,"value":412},{"type":41,"tag":402,"props":587,"children":588},{"style":415},[589],{"type":46,"value":418},{"type":41,"tag":402,"props":591,"children":592},{"style":415},[593],{"type":46,"value":423},{"type":41,"tag":402,"props":595,"children":596},{"style":415},[597],{"type":46,"value":598}," .",{"type":41,"tag":402,"props":600,"children":601},{"style":415},[602],{"type":46,"value":433},{"type":41,"tag":402,"props":604,"children":605},{"style":415},[606],{"type":46,"value":438},{"type":41,"tag":402,"props":608,"children":609},{"style":415},[610],{"type":46,"value":526},{"type":41,"tag":402,"props":612,"children":613},{"class":404,"line":446},[614,618],{"type":41,"tag":402,"props":615,"children":616},{"style":409},[617],{"type":46,"value":412},{"type":41,"tag":402,"props":619,"children":620},{"style":415},[621],{"type":46,"value":553},{"type":41,"tag":213,"props":623,"children":625},{"id":624},"provision-the-deployment-and-push-code",[626],{"type":46,"value":627},"Provision the deployment and push code",{"type":41,"tag":49,"props":629,"children":630},{},[631],{"type":46,"value":632},"Run this yourself — it is a one-shot command that exits cleanly:",{"type":41,"tag":391,"props":634,"children":636},{"className":393,"code":635,"language":395,"meta":396,"style":396},"npx convex dev --once\n",[637],{"type":41,"tag":96,"props":638,"children":639},{"__ignoreMap":396},[640],{"type":41,"tag":402,"props":641,"children":642},{"class":404,"line":405},[643,648,653,658],{"type":41,"tag":402,"props":644,"children":645},{"style":409},[646],{"type":46,"value":647},"npx",{"type":41,"tag":402,"props":649,"children":650},{"style":415},[651],{"type":46,"value":652}," convex",{"type":41,"tag":402,"props":654,"children":655},{"style":415},[656],{"type":46,"value":657}," dev",{"type":41,"tag":402,"props":659,"children":660},{"style":415},[661],{"type":46,"value":662}," --once\n",{"type":41,"tag":49,"props":664,"children":665},{},[666],{"type":46,"value":667},"In a non-TTY environment (which is true for almost every agent run), this:",{"type":41,"tag":62,"props":669,"children":670},{},[671,692,721,733],{"type":41,"tag":66,"props":672,"children":673},{},[674,676,682,684,690],{"type":46,"value":675},"Provisions an ",{"type":41,"tag":677,"props":678,"children":679},"em",{},[680],{"type":46,"value":681},"anonymous",{"type":46,"value":683}," local Convex backend bound to ",{"type":41,"tag":96,"props":685,"children":687},{"className":686},[],[688],{"type":46,"value":689},"127.0.0.1",{"type":46,"value":691},". No\nbrowser login, no team\u002Fproject prompts.",{"type":41,"tag":66,"props":693,"children":694},{},[695,697,703,705,711,713,719],{"type":46,"value":696},"Writes ",{"type":41,"tag":96,"props":698,"children":700},{"className":699},[],[701],{"type":46,"value":702},"CONVEX_DEPLOYMENT",{"type":46,"value":704}," and the framework's ",{"type":41,"tag":96,"props":706,"children":708},{"className":707},[],[709],{"type":46,"value":710},"*_CONVEX_URL",{"type":46,"value":712}," variables to\n",{"type":41,"tag":96,"props":714,"children":716},{"className":715},[],[717],{"type":46,"value":718},".env.local",{"type":46,"value":720},".",{"type":41,"tag":66,"props":722,"children":723},{},[724,726,732],{"type":46,"value":725},"Generates ",{"type":41,"tag":96,"props":727,"children":729},{"className":728},[],[730],{"type":46,"value":731},"convex\u002F_generated\u002F",{"type":46,"value":720},{"type":41,"tag":66,"props":734,"children":735},{},[736,738,743,745,751,753,758],{"type":46,"value":737},"Pushes the current ",{"type":41,"tag":96,"props":739,"children":741},{"className":740},[],[742],{"type":46,"value":101},{"type":46,"value":744}," code to the deployment, ",{"type":41,"tag":746,"props":747,"children":748},"strong",{},[749],{"type":46,"value":750},"typechecks it",{"type":46,"value":752},", and\n",{"type":41,"tag":746,"props":754,"children":755},{},[756],{"type":46,"value":757},"validates the schema",{"type":46,"value":759},". The agent reads this output to find out if the code\nit just wrote is broken.",{"type":41,"tag":49,"props":761,"children":762},{},[763,765,771],{"type":46,"value":764},"To be explicit (recommended), set ",{"type":41,"tag":96,"props":766,"children":768},{"className":767},[],[769],{"type":46,"value":770},"CONVEX_AGENT_MODE=anonymous",{"type":46,"value":772}," so the behavior\ndoes not depend on TTY detection:",{"type":41,"tag":391,"props":774,"children":776},{"className":393,"code":775,"language":395,"meta":396,"style":396},"CONVEX_AGENT_MODE=anonymous npx convex dev --once\n",[777],{"type":41,"tag":96,"props":778,"children":779},{"__ignoreMap":396},[780],{"type":41,"tag":402,"props":781,"children":782},{"class":404,"line":405},[783,789,795,799,804,808,812],{"type":41,"tag":402,"props":784,"children":786},{"style":785},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[787],{"type":46,"value":788},"CONVEX_AGENT_MODE",{"type":41,"tag":402,"props":790,"children":792},{"style":791},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[793],{"type":46,"value":794},"=",{"type":41,"tag":402,"props":796,"children":797},{"style":415},[798],{"type":46,"value":681},{"type":41,"tag":402,"props":800,"children":801},{"style":409},[802],{"type":46,"value":803}," npx",{"type":41,"tag":402,"props":805,"children":806},{"style":415},[807],{"type":46,"value":652},{"type":41,"tag":402,"props":809,"children":810},{"style":415},[811],{"type":46,"value":657},{"type":41,"tag":402,"props":813,"children":814},{"style":415},[815],{"type":46,"value":662},{"type":41,"tag":49,"props":817,"children":818},{},[819,821,827,829,835,837,842,844,849],{"type":46,"value":820},"The deployment lives under ",{"type":41,"tag":96,"props":822,"children":824},{"className":823},[],[825],{"type":46,"value":826},"~\u002F.convex\u002F",{"type":46,"value":828}," and persists across runs. Re-running\n",{"type":41,"tag":96,"props":830,"children":832},{"className":831},[],[833],{"type":46,"value":834},"convex dev --once",{"type":46,"value":836}," after editing ",{"type":41,"tag":96,"props":838,"children":840},{"className":839},[],[841],{"type":46,"value":101},{"type":46,"value":843}," files is the agent's main feedback\nloop while the user-launched ",{"type":41,"tag":96,"props":845,"children":847},{"className":846},[],[848],{"type":46,"value":185},{"type":46,"value":850}," is not in use.",{"type":41,"tag":49,"props":852,"children":853},{},[854,856,862,864,870,872,878,880,886,888,893,895,900,902,907,909,914],{"type":46,"value":855},"If the template's ",{"type":41,"tag":96,"props":857,"children":859},{"className":858},[],[860],{"type":46,"value":861},"package.json",{"type":46,"value":863}," defines a ",{"type":41,"tag":96,"props":865,"children":867},{"className":866},[],[868],{"type":46,"value":869},"predev",{"type":46,"value":871}," script (Convex Auth\ntemplates and similar do), ",{"type":41,"tag":96,"props":873,"children":875},{"className":874},[],[876],{"type":46,"value":877},"npm run predev",{"type":46,"value":879}," runs ",{"type":41,"tag":96,"props":881,"children":883},{"className":882},[],[884],{"type":46,"value":885},"convex init",{"type":46,"value":887}," plus any one-time\nsetup (e.g. minting auth keys). Use it ",{"type":41,"tag":677,"props":889,"children":890},{},[891],{"type":46,"value":892},"in addition to",{"type":46,"value":894}," ",{"type":41,"tag":96,"props":896,"children":898},{"className":897},[],[899],{"type":46,"value":834},{"type":46,"value":901}," when\npresent — ",{"type":41,"tag":96,"props":903,"children":905},{"className":904},[],[906],{"type":46,"value":869},{"type":46,"value":908}," handles the one-time setup, ",{"type":41,"tag":96,"props":910,"children":912},{"className":911},[],[913],{"type":46,"value":834},{"type":46,"value":915}," pushes and\nvalidates the code.",{"type":41,"tag":213,"props":917,"children":919},{"id":918},"start-the-dev-loop",[920],{"type":46,"value":921},"Start the dev loop",{"type":41,"tag":49,"props":923,"children":924},{},[925,927,932,934,940],{"type":46,"value":926},"In most Convex templates, ",{"type":41,"tag":96,"props":928,"children":930},{"className":929},[],[931],{"type":46,"value":185},{"type":46,"value":933}," runs both the Convex watcher and the\nfrontend dev server together (typically ",{"type":41,"tag":96,"props":935,"children":937},{"className":936},[],[938],{"type":46,"value":939},"convex dev --start 'vite --open'",{"type":46,"value":941}," or\nthe Next.js equivalent). That is what the user should run.",{"type":41,"tag":391,"props":943,"children":945},{"className":393,"code":944,"language":395,"meta":396,"style":396},"npm run dev\n",[946],{"type":41,"tag":96,"props":947,"children":948},{"__ignoreMap":396},[949],{"type":41,"tag":402,"props":950,"children":951},{"class":404,"line":405},[952,956,961],{"type":41,"tag":402,"props":953,"children":954},{"style":409},[955],{"type":46,"value":412},{"type":41,"tag":402,"props":957,"children":958},{"style":415},[959],{"type":46,"value":960}," run",{"type":41,"tag":402,"props":962,"children":963},{"style":415},[964],{"type":46,"value":965}," dev\n",{"type":41,"tag":49,"props":967,"children":968},{},[969,971,977,979,984,986,992],{"type":46,"value":970},"If the project does not have a combined ",{"type":41,"tag":96,"props":972,"children":974},{"className":973},[],[975],{"type":46,"value":976},"dev",{"type":46,"value":978}," script — e.g. the ",{"type":41,"tag":96,"props":980,"children":982},{"className":981},[],[983],{"type":46,"value":360},{"type":46,"value":985}," template,\nor an existing app where you haven't wired the frontend dev server into Convex's\n",{"type":41,"tag":96,"props":987,"children":989},{"className":988},[],[990],{"type":46,"value":991},"--start",{"type":46,"value":993}," flag — the user can run the Convex watcher directly:",{"type":41,"tag":391,"props":995,"children":997},{"className":393,"code":996,"language":395,"meta":396,"style":396},"npx convex dev\n",[998],{"type":41,"tag":96,"props":999,"children":1000},{"__ignoreMap":396},[1001],{"type":41,"tag":402,"props":1002,"children":1003},{"class":404,"line":405},[1004,1008,1012],{"type":41,"tag":402,"props":1005,"children":1006},{"style":409},[1007],{"type":46,"value":647},{"type":41,"tag":402,"props":1009,"children":1010},{"style":415},[1011],{"type":46,"value":652},{"type":41,"tag":402,"props":1013,"children":1014},{"style":415},[1015],{"type":46,"value":965},{"type":41,"tag":49,"props":1017,"children":1018},{},[1019,1024,1026,1031],{"type":41,"tag":96,"props":1020,"children":1022},{"className":1021},[],[1023],{"type":46,"value":193},{"type":46,"value":1025}," is the same long-running watcher ",{"type":41,"tag":96,"props":1027,"children":1029},{"className":1028},[],[1030],{"type":46,"value":185},{"type":46,"value":1032}," invokes under\nthe hood; it just doesn't start the frontend. Use it when there is no frontend,\nor when the user prefers to run the frontend in a separate terminal.",{"type":41,"tag":49,"props":1034,"children":1035},{},[1036],{"type":46,"value":1037},"Either way, the agent should not invoke the watcher in the foreground because it\ndoes not exit. Two options:",{"type":41,"tag":62,"props":1039,"children":1040},{},[1041,1072],{"type":41,"tag":66,"props":1042,"children":1043},{},[1044,1049,1051,1056,1058,1063,1065,1070],{"type":41,"tag":746,"props":1045,"children":1046},{},[1047],{"type":46,"value":1048},"Local development (user is at the keyboard):",{"type":46,"value":1050}," ask the user to run\n",{"type":41,"tag":96,"props":1052,"children":1054},{"className":1053},[],[1055],{"type":46,"value":185},{"type":46,"value":1057}," (or ",{"type":41,"tag":96,"props":1059,"children":1061},{"className":1060},[],[1062],{"type":46,"value":193},{"type":46,"value":1064},") in a terminal. The deployment provisioned\nby ",{"type":41,"tag":96,"props":1066,"children":1068},{"className":1067},[],[1069],{"type":46,"value":834},{"type":46,"value":1071}," above is already selected, so the watcher picks up\nimmediately with no prompts.",{"type":41,"tag":66,"props":1073,"children":1074},{},[1075,1080,1082,1087,1088,1093],{"type":41,"tag":746,"props":1076,"children":1077},{},[1078],{"type":46,"value":1079},"Cloud or headless agents:",{"type":46,"value":1081}," start ",{"type":41,"tag":96,"props":1083,"children":1085},{"className":1084},[],[1086],{"type":46,"value":185},{"type":46,"value":1057},{"type":41,"tag":96,"props":1089,"children":1091},{"className":1090},[],[1092],{"type":46,"value":193},{"type":46,"value":1094},") in the\nbackground.",{"type":41,"tag":49,"props":1096,"children":1097},{},[1098,1100,1106,1108,1114],{"type":46,"value":1099},"Vite apps serve on ",{"type":41,"tag":96,"props":1101,"children":1103},{"className":1102},[],[1104],{"type":46,"value":1105},"http:\u002F\u002Flocalhost:5173",{"type":46,"value":1107},", Next.js on ",{"type":41,"tag":96,"props":1109,"children":1111},{"className":1110},[],[1112],{"type":46,"value":1113},"http:\u002F\u002Flocalhost:3000",{"type":46,"value":720},{"type":41,"tag":213,"props":1116,"children":1118},{"id":1117},"what-you-get",[1119],{"type":46,"value":1120},"What you get",{"type":41,"tag":49,"props":1122,"children":1123},{},[1124],{"type":46,"value":1125},"After scaffolding, the project structure looks like:",{"type":41,"tag":391,"props":1127,"children":1131},{"className":1128,"code":1130,"language":46},[1129],"language-text","my-app\u002F\n  convex\u002F           # Backend functions and schema\n    _generated\u002F     # Auto-generated types (check this into git)\n    schema.ts       # Database schema (if template includes one)\n  src\u002F              # Frontend code (or app\u002F for Next.js)\n  package.json\n  .env.local        # CONVEX_URL \u002F VITE_CONVEX_URL \u002F NEXT_PUBLIC_CONVEX_URL\n",[1132],{"type":41,"tag":96,"props":1133,"children":1134},{"__ignoreMap":396},[1135],{"type":46,"value":1130},{"type":41,"tag":49,"props":1137,"children":1138},{},[1139],{"type":46,"value":1140},"The template already has:",{"type":41,"tag":62,"props":1142,"children":1143},{},[1144,1155,1160,1165],{"type":41,"tag":66,"props":1145,"children":1146},{},[1147,1153],{"type":41,"tag":96,"props":1148,"children":1150},{"className":1149},[],[1151],{"type":46,"value":1152},"ConvexProvider",{"type":46,"value":1154}," wired into the app root",{"type":41,"tag":66,"props":1156,"children":1157},{},[1158],{"type":46,"value":1159},"Correct env var names for the framework",{"type":41,"tag":66,"props":1161,"children":1162},{},[1163],{"type":46,"value":1164},"Tailwind and shadcn\u002Fui ready (for shadcn templates)",{"type":41,"tag":66,"props":1166,"children":1167},{},[1168],{"type":46,"value":1169},"Auth provider configured (for auth templates)",{"type":41,"tag":49,"props":1171,"children":1172},{},[1173],{"type":46,"value":1174},"Proceed to adding schema, functions, and UI.",{"type":41,"tag":55,"props":1176,"children":1178},{"id":1177},"path-2-add-convex-to-an-existing-app",[1179],{"type":46,"value":1180},"Path 2: Add Convex to an Existing App",{"type":41,"tag":49,"props":1182,"children":1183},{},[1184],{"type":46,"value":1185},"Use this when the user already has a frontend project and wants to add Convex as\nthe backend.",{"type":41,"tag":213,"props":1187,"children":1189},{"id":1188},"install",[1190],{"type":46,"value":1191},"Install",{"type":41,"tag":391,"props":1193,"children":1195},{"className":393,"code":1194,"language":395,"meta":396,"style":396},"npm install convex\n",[1196],{"type":41,"tag":96,"props":1197,"children":1198},{"__ignoreMap":396},[1199],{"type":41,"tag":402,"props":1200,"children":1201},{"class":404,"line":405},[1202,1206,1211],{"type":41,"tag":402,"props":1203,"children":1204},{"style":409},[1205],{"type":46,"value":412},{"type":41,"tag":402,"props":1207,"children":1208},{"style":415},[1209],{"type":46,"value":1210}," install",{"type":41,"tag":402,"props":1212,"children":1213},{"style":415},[1214],{"type":46,"value":1215}," convex\n",{"type":41,"tag":213,"props":1217,"children":1219},{"id":1218},"provision-and-push",[1220],{"type":46,"value":1221},"Provision and push",{"type":41,"tag":49,"props":1223,"children":1224},{},[1225,1226,1231,1233,1238,1240,1245],{"type":46,"value":159},{"type":41,"tag":96,"props":1227,"children":1229},{"className":1228},[],[1230],{"type":46,"value":165},{"type":46,"value":1232}," yourself to provision a local anonymous deployment,\nwrite ",{"type":41,"tag":96,"props":1234,"children":1236},{"className":1235},[],[1237],{"type":46,"value":718},{"type":46,"value":1239},", generate types, push the current ",{"type":41,"tag":96,"props":1241,"children":1243},{"className":1242},[],[1244],{"type":46,"value":101},{"type":46,"value":1246}," code, and\ntypecheck it. This is one-shot and exits:",{"type":41,"tag":391,"props":1248,"children":1249},{"className":393,"code":635,"language":395,"meta":396,"style":396},[1250],{"type":41,"tag":96,"props":1251,"children":1252},{"__ignoreMap":396},[1253],{"type":41,"tag":402,"props":1254,"children":1255},{"class":404,"line":405},[1256,1260,1264,1268],{"type":41,"tag":402,"props":1257,"children":1258},{"style":409},[1259],{"type":46,"value":647},{"type":41,"tag":402,"props":1261,"children":1262},{"style":415},[1263],{"type":46,"value":652},{"type":41,"tag":402,"props":1265,"children":1266},{"style":415},[1267],{"type":46,"value":657},{"type":41,"tag":402,"props":1269,"children":1270},{"style":415},[1271],{"type":46,"value":662},{"type":41,"tag":49,"props":1273,"children":1274},{},[1275],{"type":46,"value":1276},"The output tells you whether the schema and functions are valid — use it as your\nfeedback loop while iterating.",{"type":41,"tag":49,"props":1278,"children":1279},{},[1280],{"type":46,"value":1281},"Then ask the user to start the watcher (or, for cloud\u002Fheadless agents, start it\nin the background). You have two options:",{"type":41,"tag":62,"props":1283,"children":1284},{},[1285,1322],{"type":41,"tag":66,"props":1286,"children":1287},{},[1288,1298,1300,1305,1307,1313,1315,1320],{"type":41,"tag":746,"props":1289,"children":1290},{},[1291,1293],{"type":46,"value":1292},"Wire Convex into ",{"type":41,"tag":96,"props":1294,"children":1296},{"className":1295},[],[1297],{"type":46,"value":185},{"type":46,"value":1299}," — change the existing app's ",{"type":41,"tag":96,"props":1301,"children":1303},{"className":1302},[],[1304],{"type":46,"value":976},{"type":46,"value":1306}," script to\n",{"type":41,"tag":96,"props":1308,"children":1310},{"className":1309},[],[1311],{"type":46,"value":1312},"convex dev --start '\u003Cexisting dev command>'",{"type":46,"value":1314},". That's the standard pattern\nConvex templates use; the user then runs a single ",{"type":41,"tag":96,"props":1316,"children":1318},{"className":1317},[],[1319],{"type":46,"value":185},{"type":46,"value":1321}," to start both.",{"type":41,"tag":66,"props":1323,"children":1324},{},[1325,1330,1332,1337,1339,1344],{"type":41,"tag":746,"props":1326,"children":1327},{},[1328],{"type":46,"value":1329},"Run them separately",{"type":46,"value":1331}," — leave ",{"type":41,"tag":96,"props":1333,"children":1335},{"className":1334},[],[1336],{"type":46,"value":185},{"type":46,"value":1338}," for the frontend and tell the\nuser to run ",{"type":41,"tag":96,"props":1340,"children":1342},{"className":1341},[],[1343],{"type":46,"value":193},{"type":46,"value":1345}," in a second terminal for the Convex watcher.",{"type":41,"tag":49,"props":1347,"children":1348},{},[1349],{"type":46,"value":1350},"See \"Start the dev loop\" above for why the agent should not run the watcher in\nthe foreground.",{"type":41,"tag":213,"props":1352,"children":1354},{"id":1353},"wire-up-the-provider",[1355],{"type":46,"value":1356},"Wire up the provider",{"type":41,"tag":49,"props":1358,"children":1359},{},[1360],{"type":46,"value":1361},"The Convex client must wrap the app at the root. The setup varies by framework.",{"type":41,"tag":49,"props":1363,"children":1364},{},[1365,1367,1373],{"type":46,"value":1366},"Create the ",{"type":41,"tag":96,"props":1368,"children":1370},{"className":1369},[],[1371],{"type":46,"value":1372},"ConvexReactClient",{"type":46,"value":1374}," at module scope, not inside a component:",{"type":41,"tag":391,"props":1376,"children":1380},{"className":1377,"code":1378,"language":1379,"meta":396,"style":396},"language-tsx shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F Bad: re-creates the client on every render\nfunction App() {\n  const convex = new ConvexReactClient(\n    import.meta.env.VITE_CONVEX_URL as string,\n  );\n  return \u003CConvexProvider client={convex}>...\u003C\u002FConvexProvider>;\n}\n\n\u002F\u002F Good: created once at module scope\nconst convex = new ConvexReactClient(import.meta.env.VITE_CONVEX_URL as string);\nfunction App() {\n  return \u003CConvexProvider client={convex}>...\u003C\u002FConvexProvider>;\n}\n","tsx",[1381],{"type":41,"tag":96,"props":1382,"children":1383},{"__ignoreMap":396},[1384,1393,1417,1450,1502,1516,1572,1580,1590,1599,1678,1698,1746],{"type":41,"tag":402,"props":1385,"children":1386},{"class":404,"line":405},[1387],{"type":41,"tag":402,"props":1388,"children":1390},{"style":1389},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1391],{"type":46,"value":1392},"\u002F\u002F Bad: re-creates the client on every render\n",{"type":41,"tag":402,"props":1394,"children":1395},{"class":404,"line":446},[1396,1402,1407,1412],{"type":41,"tag":402,"props":1397,"children":1399},{"style":1398},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[1400],{"type":46,"value":1401},"function",{"type":41,"tag":402,"props":1403,"children":1404},{"style":532},[1405],{"type":46,"value":1406}," App",{"type":41,"tag":402,"props":1408,"children":1409},{"style":791},[1410],{"type":46,"value":1411},"()",{"type":41,"tag":402,"props":1413,"children":1414},{"style":791},[1415],{"type":46,"value":1416}," {\n",{"type":41,"tag":402,"props":1418,"children":1419},{"class":404,"line":543},[1420,1425,1429,1434,1439,1444],{"type":41,"tag":402,"props":1421,"children":1422},{"style":1398},[1423],{"type":46,"value":1424},"  const",{"type":41,"tag":402,"props":1426,"children":1427},{"style":785},[1428],{"type":46,"value":652},{"type":41,"tag":402,"props":1430,"children":1431},{"style":791},[1432],{"type":46,"value":1433}," =",{"type":41,"tag":402,"props":1435,"children":1436},{"style":791},[1437],{"type":46,"value":1438}," new",{"type":41,"tag":402,"props":1440,"children":1441},{"style":532},[1442],{"type":46,"value":1443}," ConvexReactClient",{"type":41,"tag":402,"props":1445,"children":1447},{"style":1446},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[1448],{"type":46,"value":1449},"(\n",{"type":41,"tag":402,"props":1451,"children":1453},{"class":404,"line":1452},4,[1454,1460,1464,1469,1473,1478,1482,1487,1492,1497],{"type":41,"tag":402,"props":1455,"children":1457},{"style":1456},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[1458],{"type":46,"value":1459},"    import",{"type":41,"tag":402,"props":1461,"children":1462},{"style":791},[1463],{"type":46,"value":720},{"type":41,"tag":402,"props":1465,"children":1466},{"style":785},[1467],{"type":46,"value":1468},"meta",{"type":41,"tag":402,"props":1470,"children":1471},{"style":791},[1472],{"type":46,"value":720},{"type":41,"tag":402,"props":1474,"children":1475},{"style":785},[1476],{"type":46,"value":1477},"env",{"type":41,"tag":402,"props":1479,"children":1480},{"style":791},[1481],{"type":46,"value":720},{"type":41,"tag":402,"props":1483,"children":1484},{"style":785},[1485],{"type":46,"value":1486},"VITE_CONVEX_URL",{"type":41,"tag":402,"props":1488,"children":1489},{"style":1456},[1490],{"type":46,"value":1491}," as",{"type":41,"tag":402,"props":1493,"children":1494},{"style":409},[1495],{"type":46,"value":1496}," string",{"type":41,"tag":402,"props":1498,"children":1499},{"style":791},[1500],{"type":46,"value":1501},",\n",{"type":41,"tag":402,"props":1503,"children":1505},{"class":404,"line":1504},5,[1506,1511],{"type":41,"tag":402,"props":1507,"children":1508},{"style":1446},[1509],{"type":46,"value":1510},"  )",{"type":41,"tag":402,"props":1512,"children":1513},{"style":791},[1514],{"type":46,"value":1515},";\n",{"type":41,"tag":402,"props":1517,"children":1519},{"class":404,"line":1518},6,[1520,1525,1530,1534,1539,1544,1548,1553,1558,1563,1567],{"type":41,"tag":402,"props":1521,"children":1522},{"style":1456},[1523],{"type":46,"value":1524},"  return",{"type":41,"tag":402,"props":1526,"children":1527},{"style":791},[1528],{"type":46,"value":1529}," \u003C",{"type":41,"tag":402,"props":1531,"children":1532},{"style":409},[1533],{"type":46,"value":1152},{"type":41,"tag":402,"props":1535,"children":1536},{"style":1398},[1537],{"type":46,"value":1538}," client",{"type":41,"tag":402,"props":1540,"children":1541},{"style":791},[1542],{"type":46,"value":1543},"={",{"type":41,"tag":402,"props":1545,"children":1546},{"style":785},[1547],{"type":46,"value":8},{"type":41,"tag":402,"props":1549,"children":1550},{"style":791},[1551],{"type":46,"value":1552},"}>",{"type":41,"tag":402,"props":1554,"children":1555},{"style":785},[1556],{"type":46,"value":1557},"...",{"type":41,"tag":402,"props":1559,"children":1560},{"style":791},[1561],{"type":46,"value":1562},"\u003C\u002F",{"type":41,"tag":402,"props":1564,"children":1565},{"style":409},[1566],{"type":46,"value":1152},{"type":41,"tag":402,"props":1568,"children":1569},{"style":791},[1570],{"type":46,"value":1571},">;\n",{"type":41,"tag":402,"props":1573,"children":1574},{"class":404,"line":28},[1575],{"type":41,"tag":402,"props":1576,"children":1577},{"style":791},[1578],{"type":46,"value":1579},"}\n",{"type":41,"tag":402,"props":1581,"children":1583},{"class":404,"line":1582},8,[1584],{"type":41,"tag":402,"props":1585,"children":1587},{"emptyLinePlaceholder":1586},true,[1588],{"type":46,"value":1589},"\n",{"type":41,"tag":402,"props":1591,"children":1593},{"class":404,"line":1592},9,[1594],{"type":41,"tag":402,"props":1595,"children":1596},{"style":1389},[1597],{"type":46,"value":1598},"\u002F\u002F Good: created once at module scope\n",{"type":41,"tag":402,"props":1600,"children":1602},{"class":404,"line":1601},10,[1603,1608,1613,1617,1621,1625,1630,1635,1639,1643,1647,1651,1655,1660,1665,1669,1674],{"type":41,"tag":402,"props":1604,"children":1605},{"style":1398},[1606],{"type":46,"value":1607},"const",{"type":41,"tag":402,"props":1609,"children":1610},{"style":785},[1611],{"type":46,"value":1612}," convex ",{"type":41,"tag":402,"props":1614,"children":1615},{"style":791},[1616],{"type":46,"value":794},{"type":41,"tag":402,"props":1618,"children":1619},{"style":791},[1620],{"type":46,"value":1438},{"type":41,"tag":402,"props":1622,"children":1623},{"style":532},[1624],{"type":46,"value":1443},{"type":41,"tag":402,"props":1626,"children":1627},{"style":785},[1628],{"type":46,"value":1629},"(",{"type":41,"tag":402,"props":1631,"children":1632},{"style":1456},[1633],{"type":46,"value":1634},"import",{"type":41,"tag":402,"props":1636,"children":1637},{"style":791},[1638],{"type":46,"value":720},{"type":41,"tag":402,"props":1640,"children":1641},{"style":785},[1642],{"type":46,"value":1468},{"type":41,"tag":402,"props":1644,"children":1645},{"style":791},[1646],{"type":46,"value":720},{"type":41,"tag":402,"props":1648,"children":1649},{"style":785},[1650],{"type":46,"value":1477},{"type":41,"tag":402,"props":1652,"children":1653},{"style":791},[1654],{"type":46,"value":720},{"type":41,"tag":402,"props":1656,"children":1657},{"style":785},[1658],{"type":46,"value":1659},"VITE_CONVEX_URL ",{"type":41,"tag":402,"props":1661,"children":1662},{"style":1456},[1663],{"type":46,"value":1664},"as",{"type":41,"tag":402,"props":1666,"children":1667},{"style":409},[1668],{"type":46,"value":1496},{"type":41,"tag":402,"props":1670,"children":1671},{"style":785},[1672],{"type":46,"value":1673},")",{"type":41,"tag":402,"props":1675,"children":1676},{"style":791},[1677],{"type":46,"value":1515},{"type":41,"tag":402,"props":1679,"children":1681},{"class":404,"line":1680},11,[1682,1686,1690,1694],{"type":41,"tag":402,"props":1683,"children":1684},{"style":1398},[1685],{"type":46,"value":1401},{"type":41,"tag":402,"props":1687,"children":1688},{"style":532},[1689],{"type":46,"value":1406},{"type":41,"tag":402,"props":1691,"children":1692},{"style":791},[1693],{"type":46,"value":1411},{"type":41,"tag":402,"props":1695,"children":1696},{"style":791},[1697],{"type":46,"value":1416},{"type":41,"tag":402,"props":1699,"children":1701},{"class":404,"line":1700},12,[1702,1706,1710,1714,1718,1722,1726,1730,1734,1738,1742],{"type":41,"tag":402,"props":1703,"children":1704},{"style":1456},[1705],{"type":46,"value":1524},{"type":41,"tag":402,"props":1707,"children":1708},{"style":791},[1709],{"type":46,"value":1529},{"type":41,"tag":402,"props":1711,"children":1712},{"style":409},[1713],{"type":46,"value":1152},{"type":41,"tag":402,"props":1715,"children":1716},{"style":1398},[1717],{"type":46,"value":1538},{"type":41,"tag":402,"props":1719,"children":1720},{"style":791},[1721],{"type":46,"value":1543},{"type":41,"tag":402,"props":1723,"children":1724},{"style":785},[1725],{"type":46,"value":8},{"type":41,"tag":402,"props":1727,"children":1728},{"style":791},[1729],{"type":46,"value":1552},{"type":41,"tag":402,"props":1731,"children":1732},{"style":785},[1733],{"type":46,"value":1557},{"type":41,"tag":402,"props":1735,"children":1736},{"style":791},[1737],{"type":46,"value":1562},{"type":41,"tag":402,"props":1739,"children":1740},{"style":409},[1741],{"type":46,"value":1152},{"type":41,"tag":402,"props":1743,"children":1744},{"style":791},[1745],{"type":46,"value":1571},{"type":41,"tag":402,"props":1747,"children":1749},{"class":404,"line":1748},13,[1750],{"type":41,"tag":402,"props":1751,"children":1752},{"style":791},[1753],{"type":46,"value":1579},{"type":41,"tag":1755,"props":1756,"children":1758},"h4",{"id":1757},"react-vite",[1759],{"type":46,"value":1760},"React (Vite)",{"type":41,"tag":391,"props":1762,"children":1764},{"className":1377,"code":1763,"language":1379,"meta":396,"style":396},"\u002F\u002F src\u002Fmain.tsx\nimport { StrictMode } from \"react\";\nimport { createRoot } from \"react-dom\u002Fclient\";\nimport { ConvexProvider, ConvexReactClient } from \"convex\u002Freact\";\nimport App from \".\u002FApp\";\n\nconst convex = new ConvexReactClient(import.meta.env.VITE_CONVEX_URL as string);\n\ncreateRoot(document.getElementById(\"root\")!).render(\n  \u003CStrictMode>\n    \u003CConvexProvider client={convex}>\n      \u003CApp \u002F>\n    \u003C\u002FConvexProvider>\n  \u003C\u002FStrictMode>,\n);\n",[1765],{"type":41,"tag":96,"props":1766,"children":1767},{"__ignoreMap":396},[1768,1776,1822,1863,1913,1947,1954,2025,2032,2096,2114,2143,2161,2177,2195],{"type":41,"tag":402,"props":1769,"children":1770},{"class":404,"line":405},[1771],{"type":41,"tag":402,"props":1772,"children":1773},{"style":1389},[1774],{"type":46,"value":1775},"\u002F\u002F src\u002Fmain.tsx\n",{"type":41,"tag":402,"props":1777,"children":1778},{"class":404,"line":446},[1779,1783,1788,1793,1798,1803,1808,1813,1818],{"type":41,"tag":402,"props":1780,"children":1781},{"style":1456},[1782],{"type":46,"value":1634},{"type":41,"tag":402,"props":1784,"children":1785},{"style":791},[1786],{"type":46,"value":1787}," {",{"type":41,"tag":402,"props":1789,"children":1790},{"style":785},[1791],{"type":46,"value":1792}," StrictMode",{"type":41,"tag":402,"props":1794,"children":1795},{"style":791},[1796],{"type":46,"value":1797}," }",{"type":41,"tag":402,"props":1799,"children":1800},{"style":1456},[1801],{"type":46,"value":1802}," from",{"type":41,"tag":402,"props":1804,"children":1805},{"style":791},[1806],{"type":46,"value":1807}," \"",{"type":41,"tag":402,"props":1809,"children":1810},{"style":415},[1811],{"type":46,"value":1812},"react",{"type":41,"tag":402,"props":1814,"children":1815},{"style":791},[1816],{"type":46,"value":1817},"\"",{"type":41,"tag":402,"props":1819,"children":1820},{"style":791},[1821],{"type":46,"value":1515},{"type":41,"tag":402,"props":1823,"children":1824},{"class":404,"line":543},[1825,1829,1833,1838,1842,1846,1850,1855,1859],{"type":41,"tag":402,"props":1826,"children":1827},{"style":1456},[1828],{"type":46,"value":1634},{"type":41,"tag":402,"props":1830,"children":1831},{"style":791},[1832],{"type":46,"value":1787},{"type":41,"tag":402,"props":1834,"children":1835},{"style":785},[1836],{"type":46,"value":1837}," createRoot",{"type":41,"tag":402,"props":1839,"children":1840},{"style":791},[1841],{"type":46,"value":1797},{"type":41,"tag":402,"props":1843,"children":1844},{"style":1456},[1845],{"type":46,"value":1802},{"type":41,"tag":402,"props":1847,"children":1848},{"style":791},[1849],{"type":46,"value":1807},{"type":41,"tag":402,"props":1851,"children":1852},{"style":415},[1853],{"type":46,"value":1854},"react-dom\u002Fclient",{"type":41,"tag":402,"props":1856,"children":1857},{"style":791},[1858],{"type":46,"value":1817},{"type":41,"tag":402,"props":1860,"children":1861},{"style":791},[1862],{"type":46,"value":1515},{"type":41,"tag":402,"props":1864,"children":1865},{"class":404,"line":1452},[1866,1870,1874,1879,1884,1888,1892,1896,1900,1905,1909],{"type":41,"tag":402,"props":1867,"children":1868},{"style":1456},[1869],{"type":46,"value":1634},{"type":41,"tag":402,"props":1871,"children":1872},{"style":791},[1873],{"type":46,"value":1787},{"type":41,"tag":402,"props":1875,"children":1876},{"style":785},[1877],{"type":46,"value":1878}," ConvexProvider",{"type":41,"tag":402,"props":1880,"children":1881},{"style":791},[1882],{"type":46,"value":1883},",",{"type":41,"tag":402,"props":1885,"children":1886},{"style":785},[1887],{"type":46,"value":1443},{"type":41,"tag":402,"props":1889,"children":1890},{"style":791},[1891],{"type":46,"value":1797},{"type":41,"tag":402,"props":1893,"children":1894},{"style":1456},[1895],{"type":46,"value":1802},{"type":41,"tag":402,"props":1897,"children":1898},{"style":791},[1899],{"type":46,"value":1807},{"type":41,"tag":402,"props":1901,"children":1902},{"style":415},[1903],{"type":46,"value":1904},"convex\u002Freact",{"type":41,"tag":402,"props":1906,"children":1907},{"style":791},[1908],{"type":46,"value":1817},{"type":41,"tag":402,"props":1910,"children":1911},{"style":791},[1912],{"type":46,"value":1515},{"type":41,"tag":402,"props":1914,"children":1915},{"class":404,"line":1504},[1916,1920,1925,1930,1934,1939,1943],{"type":41,"tag":402,"props":1917,"children":1918},{"style":1456},[1919],{"type":46,"value":1634},{"type":41,"tag":402,"props":1921,"children":1922},{"style":785},[1923],{"type":46,"value":1924}," App ",{"type":41,"tag":402,"props":1926,"children":1927},{"style":1456},[1928],{"type":46,"value":1929},"from",{"type":41,"tag":402,"props":1931,"children":1932},{"style":791},[1933],{"type":46,"value":1807},{"type":41,"tag":402,"props":1935,"children":1936},{"style":415},[1937],{"type":46,"value":1938},".\u002FApp",{"type":41,"tag":402,"props":1940,"children":1941},{"style":791},[1942],{"type":46,"value":1817},{"type":41,"tag":402,"props":1944,"children":1945},{"style":791},[1946],{"type":46,"value":1515},{"type":41,"tag":402,"props":1948,"children":1949},{"class":404,"line":1518},[1950],{"type":41,"tag":402,"props":1951,"children":1952},{"emptyLinePlaceholder":1586},[1953],{"type":46,"value":1589},{"type":41,"tag":402,"props":1955,"children":1956},{"class":404,"line":28},[1957,1961,1965,1969,1973,1977,1981,1985,1989,1993,1997,2001,2005,2009,2013,2017,2021],{"type":41,"tag":402,"props":1958,"children":1959},{"style":1398},[1960],{"type":46,"value":1607},{"type":41,"tag":402,"props":1962,"children":1963},{"style":785},[1964],{"type":46,"value":1612},{"type":41,"tag":402,"props":1966,"children":1967},{"style":791},[1968],{"type":46,"value":794},{"type":41,"tag":402,"props":1970,"children":1971},{"style":791},[1972],{"type":46,"value":1438},{"type":41,"tag":402,"props":1974,"children":1975},{"style":532},[1976],{"type":46,"value":1443},{"type":41,"tag":402,"props":1978,"children":1979},{"style":785},[1980],{"type":46,"value":1629},{"type":41,"tag":402,"props":1982,"children":1983},{"style":1456},[1984],{"type":46,"value":1634},{"type":41,"tag":402,"props":1986,"children":1987},{"style":791},[1988],{"type":46,"value":720},{"type":41,"tag":402,"props":1990,"children":1991},{"style":785},[1992],{"type":46,"value":1468},{"type":41,"tag":402,"props":1994,"children":1995},{"style":791},[1996],{"type":46,"value":720},{"type":41,"tag":402,"props":1998,"children":1999},{"style":785},[2000],{"type":46,"value":1477},{"type":41,"tag":402,"props":2002,"children":2003},{"style":791},[2004],{"type":46,"value":720},{"type":41,"tag":402,"props":2006,"children":2007},{"style":785},[2008],{"type":46,"value":1659},{"type":41,"tag":402,"props":2010,"children":2011},{"style":1456},[2012],{"type":46,"value":1664},{"type":41,"tag":402,"props":2014,"children":2015},{"style":409},[2016],{"type":46,"value":1496},{"type":41,"tag":402,"props":2018,"children":2019},{"style":785},[2020],{"type":46,"value":1673},{"type":41,"tag":402,"props":2022,"children":2023},{"style":791},[2024],{"type":46,"value":1515},{"type":41,"tag":402,"props":2026,"children":2027},{"class":404,"line":1582},[2028],{"type":41,"tag":402,"props":2029,"children":2030},{"emptyLinePlaceholder":1586},[2031],{"type":46,"value":1589},{"type":41,"tag":402,"props":2033,"children":2034},{"class":404,"line":1592},[2035,2040,2045,2049,2054,2058,2062,2066,2070,2074,2079,2083,2087,2092],{"type":41,"tag":402,"props":2036,"children":2037},{"style":532},[2038],{"type":46,"value":2039},"createRoot",{"type":41,"tag":402,"props":2041,"children":2042},{"style":785},[2043],{"type":46,"value":2044},"(document",{"type":41,"tag":402,"props":2046,"children":2047},{"style":791},[2048],{"type":46,"value":720},{"type":41,"tag":402,"props":2050,"children":2051},{"style":532},[2052],{"type":46,"value":2053},"getElementById",{"type":41,"tag":402,"props":2055,"children":2056},{"style":785},[2057],{"type":46,"value":1629},{"type":41,"tag":402,"props":2059,"children":2060},{"style":791},[2061],{"type":46,"value":1817},{"type":41,"tag":402,"props":2063,"children":2064},{"style":415},[2065],{"type":46,"value":38},{"type":41,"tag":402,"props":2067,"children":2068},{"style":791},[2069],{"type":46,"value":1817},{"type":41,"tag":402,"props":2071,"children":2072},{"style":785},[2073],{"type":46,"value":1673},{"type":41,"tag":402,"props":2075,"children":2076},{"style":791},[2077],{"type":46,"value":2078},"!",{"type":41,"tag":402,"props":2080,"children":2081},{"style":785},[2082],{"type":46,"value":1673},{"type":41,"tag":402,"props":2084,"children":2085},{"style":791},[2086],{"type":46,"value":720},{"type":41,"tag":402,"props":2088,"children":2089},{"style":532},[2090],{"type":46,"value":2091},"render",{"type":41,"tag":402,"props":2093,"children":2094},{"style":785},[2095],{"type":46,"value":1449},{"type":41,"tag":402,"props":2097,"children":2098},{"class":404,"line":1601},[2099,2104,2109],{"type":41,"tag":402,"props":2100,"children":2101},{"style":791},[2102],{"type":46,"value":2103},"  \u003C",{"type":41,"tag":402,"props":2105,"children":2106},{"style":409},[2107],{"type":46,"value":2108},"StrictMode",{"type":41,"tag":402,"props":2110,"children":2111},{"style":791},[2112],{"type":46,"value":2113},">\n",{"type":41,"tag":402,"props":2115,"children":2116},{"class":404,"line":1680},[2117,2122,2126,2130,2134,2138],{"type":41,"tag":402,"props":2118,"children":2119},{"style":791},[2120],{"type":46,"value":2121},"    \u003C",{"type":41,"tag":402,"props":2123,"children":2124},{"style":409},[2125],{"type":46,"value":1152},{"type":41,"tag":402,"props":2127,"children":2128},{"style":1398},[2129],{"type":46,"value":1538},{"type":41,"tag":402,"props":2131,"children":2132},{"style":791},[2133],{"type":46,"value":1543},{"type":41,"tag":402,"props":2135,"children":2136},{"style":785},[2137],{"type":46,"value":8},{"type":41,"tag":402,"props":2139,"children":2140},{"style":791},[2141],{"type":46,"value":2142},"}>\n",{"type":41,"tag":402,"props":2144,"children":2145},{"class":404,"line":1700},[2146,2151,2156],{"type":41,"tag":402,"props":2147,"children":2148},{"style":791},[2149],{"type":46,"value":2150},"      \u003C",{"type":41,"tag":402,"props":2152,"children":2153},{"style":409},[2154],{"type":46,"value":2155},"App",{"type":41,"tag":402,"props":2157,"children":2158},{"style":791},[2159],{"type":46,"value":2160}," \u002F>\n",{"type":41,"tag":402,"props":2162,"children":2163},{"class":404,"line":1748},[2164,2169,2173],{"type":41,"tag":402,"props":2165,"children":2166},{"style":791},[2167],{"type":46,"value":2168},"    \u003C\u002F",{"type":41,"tag":402,"props":2170,"children":2171},{"style":409},[2172],{"type":46,"value":1152},{"type":41,"tag":402,"props":2174,"children":2175},{"style":791},[2176],{"type":46,"value":2113},{"type":41,"tag":402,"props":2178,"children":2180},{"class":404,"line":2179},14,[2181,2186,2190],{"type":41,"tag":402,"props":2182,"children":2183},{"style":791},[2184],{"type":46,"value":2185},"  \u003C\u002F",{"type":41,"tag":402,"props":2187,"children":2188},{"style":409},[2189],{"type":46,"value":2108},{"type":41,"tag":402,"props":2191,"children":2192},{"style":791},[2193],{"type":46,"value":2194},">,\n",{"type":41,"tag":402,"props":2196,"children":2198},{"class":404,"line":2197},15,[2199,2203],{"type":41,"tag":402,"props":2200,"children":2201},{"style":785},[2202],{"type":46,"value":1673},{"type":41,"tag":402,"props":2204,"children":2205},{"style":791},[2206],{"type":46,"value":1515},{"type":41,"tag":1755,"props":2208,"children":2210},{"id":2209},"nextjs-app-router",[2211],{"type":46,"value":2212},"Next.js (App Router)",{"type":41,"tag":391,"props":2214,"children":2216},{"className":1377,"code":2215,"language":1379,"meta":396,"style":396},"\u002F\u002F app\u002FConvexClientProvider.tsx\n\"use client\";\n\nimport { ConvexProvider, ConvexReactClient } from \"convex\u002Freact\";\nimport { ReactNode } from \"react\";\n\nconst convex = new ConvexReactClient(process.env.NEXT_PUBLIC_CONVEX_URL!);\n\nexport function ConvexClientProvider({ children }: { children: ReactNode }) {\n  return \u003CConvexProvider client={convex}>{children}\u003C\u002FConvexProvider>;\n}\n",[2217],{"type":41,"tag":96,"props":2218,"children":2219},{"__ignoreMap":396},[2220,2228,2248,2255,2302,2342,2349,2406,2413,2473,2523],{"type":41,"tag":402,"props":2221,"children":2222},{"class":404,"line":405},[2223],{"type":41,"tag":402,"props":2224,"children":2225},{"style":1389},[2226],{"type":46,"value":2227},"\u002F\u002F app\u002FConvexClientProvider.tsx\n",{"type":41,"tag":402,"props":2229,"children":2230},{"class":404,"line":446},[2231,2235,2240,2244],{"type":41,"tag":402,"props":2232,"children":2233},{"style":791},[2234],{"type":46,"value":1817},{"type":41,"tag":402,"props":2236,"children":2237},{"style":415},[2238],{"type":46,"value":2239},"use client",{"type":41,"tag":402,"props":2241,"children":2242},{"style":791},[2243],{"type":46,"value":1817},{"type":41,"tag":402,"props":2245,"children":2246},{"style":791},[2247],{"type":46,"value":1515},{"type":41,"tag":402,"props":2249,"children":2250},{"class":404,"line":543},[2251],{"type":41,"tag":402,"props":2252,"children":2253},{"emptyLinePlaceholder":1586},[2254],{"type":46,"value":1589},{"type":41,"tag":402,"props":2256,"children":2257},{"class":404,"line":1452},[2258,2262,2266,2270,2274,2278,2282,2286,2290,2294,2298],{"type":41,"tag":402,"props":2259,"children":2260},{"style":1456},[2261],{"type":46,"value":1634},{"type":41,"tag":402,"props":2263,"children":2264},{"style":791},[2265],{"type":46,"value":1787},{"type":41,"tag":402,"props":2267,"children":2268},{"style":785},[2269],{"type":46,"value":1878},{"type":41,"tag":402,"props":2271,"children":2272},{"style":791},[2273],{"type":46,"value":1883},{"type":41,"tag":402,"props":2275,"children":2276},{"style":785},[2277],{"type":46,"value":1443},{"type":41,"tag":402,"props":2279,"children":2280},{"style":791},[2281],{"type":46,"value":1797},{"type":41,"tag":402,"props":2283,"children":2284},{"style":1456},[2285],{"type":46,"value":1802},{"type":41,"tag":402,"props":2287,"children":2288},{"style":791},[2289],{"type":46,"value":1807},{"type":41,"tag":402,"props":2291,"children":2292},{"style":415},[2293],{"type":46,"value":1904},{"type":41,"tag":402,"props":2295,"children":2296},{"style":791},[2297],{"type":46,"value":1817},{"type":41,"tag":402,"props":2299,"children":2300},{"style":791},[2301],{"type":46,"value":1515},{"type":41,"tag":402,"props":2303,"children":2304},{"class":404,"line":1504},[2305,2309,2313,2318,2322,2326,2330,2334,2338],{"type":41,"tag":402,"props":2306,"children":2307},{"style":1456},[2308],{"type":46,"value":1634},{"type":41,"tag":402,"props":2310,"children":2311},{"style":791},[2312],{"type":46,"value":1787},{"type":41,"tag":402,"props":2314,"children":2315},{"style":785},[2316],{"type":46,"value":2317}," ReactNode",{"type":41,"tag":402,"props":2319,"children":2320},{"style":791},[2321],{"type":46,"value":1797},{"type":41,"tag":402,"props":2323,"children":2324},{"style":1456},[2325],{"type":46,"value":1802},{"type":41,"tag":402,"props":2327,"children":2328},{"style":791},[2329],{"type":46,"value":1807},{"type":41,"tag":402,"props":2331,"children":2332},{"style":415},[2333],{"type":46,"value":1812},{"type":41,"tag":402,"props":2335,"children":2336},{"style":791},[2337],{"type":46,"value":1817},{"type":41,"tag":402,"props":2339,"children":2340},{"style":791},[2341],{"type":46,"value":1515},{"type":41,"tag":402,"props":2343,"children":2344},{"class":404,"line":1518},[2345],{"type":41,"tag":402,"props":2346,"children":2347},{"emptyLinePlaceholder":1586},[2348],{"type":46,"value":1589},{"type":41,"tag":402,"props":2350,"children":2351},{"class":404,"line":28},[2352,2356,2360,2364,2368,2372,2377,2381,2385,2389,2394,2398,2402],{"type":41,"tag":402,"props":2353,"children":2354},{"style":1398},[2355],{"type":46,"value":1607},{"type":41,"tag":402,"props":2357,"children":2358},{"style":785},[2359],{"type":46,"value":1612},{"type":41,"tag":402,"props":2361,"children":2362},{"style":791},[2363],{"type":46,"value":794},{"type":41,"tag":402,"props":2365,"children":2366},{"style":791},[2367],{"type":46,"value":1438},{"type":41,"tag":402,"props":2369,"children":2370},{"style":532},[2371],{"type":46,"value":1443},{"type":41,"tag":402,"props":2373,"children":2374},{"style":785},[2375],{"type":46,"value":2376},"(process",{"type":41,"tag":402,"props":2378,"children":2379},{"style":791},[2380],{"type":46,"value":720},{"type":41,"tag":402,"props":2382,"children":2383},{"style":785},[2384],{"type":46,"value":1477},{"type":41,"tag":402,"props":2386,"children":2387},{"style":791},[2388],{"type":46,"value":720},{"type":41,"tag":402,"props":2390,"children":2391},{"style":785},[2392],{"type":46,"value":2393},"NEXT_PUBLIC_CONVEX_URL",{"type":41,"tag":402,"props":2395,"children":2396},{"style":791},[2397],{"type":46,"value":2078},{"type":41,"tag":402,"props":2399,"children":2400},{"style":785},[2401],{"type":46,"value":1673},{"type":41,"tag":402,"props":2403,"children":2404},{"style":791},[2405],{"type":46,"value":1515},{"type":41,"tag":402,"props":2407,"children":2408},{"class":404,"line":1582},[2409],{"type":41,"tag":402,"props":2410,"children":2411},{"emptyLinePlaceholder":1586},[2412],{"type":46,"value":1589},{"type":41,"tag":402,"props":2414,"children":2415},{"class":404,"line":1592},[2416,2421,2426,2431,2436,2442,2447,2451,2455,2460,2464,2469],{"type":41,"tag":402,"props":2417,"children":2418},{"style":1456},[2419],{"type":46,"value":2420},"export",{"type":41,"tag":402,"props":2422,"children":2423},{"style":1398},[2424],{"type":46,"value":2425}," function",{"type":41,"tag":402,"props":2427,"children":2428},{"style":532},[2429],{"type":46,"value":2430}," ConvexClientProvider",{"type":41,"tag":402,"props":2432,"children":2433},{"style":791},[2434],{"type":46,"value":2435},"({",{"type":41,"tag":402,"props":2437,"children":2439},{"style":2438},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[2440],{"type":46,"value":2441}," children",{"type":41,"tag":402,"props":2443,"children":2444},{"style":791},[2445],{"type":46,"value":2446}," }:",{"type":41,"tag":402,"props":2448,"children":2449},{"style":791},[2450],{"type":46,"value":1787},{"type":41,"tag":402,"props":2452,"children":2453},{"style":1446},[2454],{"type":46,"value":2441},{"type":41,"tag":402,"props":2456,"children":2457},{"style":791},[2458],{"type":46,"value":2459},":",{"type":41,"tag":402,"props":2461,"children":2462},{"style":409},[2463],{"type":46,"value":2317},{"type":41,"tag":402,"props":2465,"children":2466},{"style":791},[2467],{"type":46,"value":2468}," })",{"type":41,"tag":402,"props":2470,"children":2471},{"style":791},[2472],{"type":46,"value":1416},{"type":41,"tag":402,"props":2474,"children":2475},{"class":404,"line":1601},[2476,2480,2484,2488,2492,2496,2500,2505,2510,2515,2519],{"type":41,"tag":402,"props":2477,"children":2478},{"style":1456},[2479],{"type":46,"value":1524},{"type":41,"tag":402,"props":2481,"children":2482},{"style":791},[2483],{"type":46,"value":1529},{"type":41,"tag":402,"props":2485,"children":2486},{"style":409},[2487],{"type":46,"value":1152},{"type":41,"tag":402,"props":2489,"children":2490},{"style":1398},[2491],{"type":46,"value":1538},{"type":41,"tag":402,"props":2493,"children":2494},{"style":791},[2495],{"type":46,"value":1543},{"type":41,"tag":402,"props":2497,"children":2498},{"style":785},[2499],{"type":46,"value":8},{"type":41,"tag":402,"props":2501,"children":2502},{"style":791},[2503],{"type":46,"value":2504},"}>{",{"type":41,"tag":402,"props":2506,"children":2507},{"style":785},[2508],{"type":46,"value":2509},"children",{"type":41,"tag":402,"props":2511,"children":2512},{"style":791},[2513],{"type":46,"value":2514},"}\u003C\u002F",{"type":41,"tag":402,"props":2516,"children":2517},{"style":409},[2518],{"type":46,"value":1152},{"type":41,"tag":402,"props":2520,"children":2521},{"style":791},[2522],{"type":46,"value":1571},{"type":41,"tag":402,"props":2524,"children":2525},{"class":404,"line":1680},[2526],{"type":41,"tag":402,"props":2527,"children":2528},{"style":791},[2529],{"type":46,"value":1579},{"type":41,"tag":391,"props":2531,"children":2533},{"className":1377,"code":2532,"language":1379,"meta":396,"style":396},"\u002F\u002F app\u002Flayout.tsx\nimport { ConvexClientProvider } from \".\u002FConvexClientProvider\";\n\nexport default function RootLayout({\n  children,\n}: {\n  children: React.ReactNode;\n}) {\n  return (\n    \u003Chtml lang=\"en\">\n      \u003Cbody>\n        \u003CConvexClientProvider>{children}\u003C\u002FConvexClientProvider>\n      \u003C\u002Fbody>\n    \u003C\u002Fhtml>\n  );\n}\n",[2534],{"type":41,"tag":96,"props":2535,"children":2536},{"__ignoreMap":396},[2537,2545,2585,2592,2618,2630,2642,2671,2683,2695,2733,2749,2783,2799,2814,2825],{"type":41,"tag":402,"props":2538,"children":2539},{"class":404,"line":405},[2540],{"type":41,"tag":402,"props":2541,"children":2542},{"style":1389},[2543],{"type":46,"value":2544},"\u002F\u002F app\u002Flayout.tsx\n",{"type":41,"tag":402,"props":2546,"children":2547},{"class":404,"line":446},[2548,2552,2556,2560,2564,2568,2572,2577,2581],{"type":41,"tag":402,"props":2549,"children":2550},{"style":1456},[2551],{"type":46,"value":1634},{"type":41,"tag":402,"props":2553,"children":2554},{"style":791},[2555],{"type":46,"value":1787},{"type":41,"tag":402,"props":2557,"children":2558},{"style":785},[2559],{"type":46,"value":2430},{"type":41,"tag":402,"props":2561,"children":2562},{"style":791},[2563],{"type":46,"value":1797},{"type":41,"tag":402,"props":2565,"children":2566},{"style":1456},[2567],{"type":46,"value":1802},{"type":41,"tag":402,"props":2569,"children":2570},{"style":791},[2571],{"type":46,"value":1807},{"type":41,"tag":402,"props":2573,"children":2574},{"style":415},[2575],{"type":46,"value":2576},".\u002FConvexClientProvider",{"type":41,"tag":402,"props":2578,"children":2579},{"style":791},[2580],{"type":46,"value":1817},{"type":41,"tag":402,"props":2582,"children":2583},{"style":791},[2584],{"type":46,"value":1515},{"type":41,"tag":402,"props":2586,"children":2587},{"class":404,"line":543},[2588],{"type":41,"tag":402,"props":2589,"children":2590},{"emptyLinePlaceholder":1586},[2591],{"type":46,"value":1589},{"type":41,"tag":402,"props":2593,"children":2594},{"class":404,"line":1452},[2595,2599,2604,2608,2613],{"type":41,"tag":402,"props":2596,"children":2597},{"style":1456},[2598],{"type":46,"value":2420},{"type":41,"tag":402,"props":2600,"children":2601},{"style":1456},[2602],{"type":46,"value":2603}," default",{"type":41,"tag":402,"props":2605,"children":2606},{"style":1398},[2607],{"type":46,"value":2425},{"type":41,"tag":402,"props":2609,"children":2610},{"style":532},[2611],{"type":46,"value":2612}," RootLayout",{"type":41,"tag":402,"props":2614,"children":2615},{"style":791},[2616],{"type":46,"value":2617},"({\n",{"type":41,"tag":402,"props":2619,"children":2620},{"class":404,"line":1504},[2621,2626],{"type":41,"tag":402,"props":2622,"children":2623},{"style":2438},[2624],{"type":46,"value":2625},"  children",{"type":41,"tag":402,"props":2627,"children":2628},{"style":791},[2629],{"type":46,"value":1501},{"type":41,"tag":402,"props":2631,"children":2632},{"class":404,"line":1518},[2633,2638],{"type":41,"tag":402,"props":2634,"children":2635},{"style":791},[2636],{"type":46,"value":2637},"}:",{"type":41,"tag":402,"props":2639,"children":2640},{"style":791},[2641],{"type":46,"value":1416},{"type":41,"tag":402,"props":2643,"children":2644},{"class":404,"line":28},[2645,2649,2653,2658,2662,2667],{"type":41,"tag":402,"props":2646,"children":2647},{"style":1446},[2648],{"type":46,"value":2625},{"type":41,"tag":402,"props":2650,"children":2651},{"style":791},[2652],{"type":46,"value":2459},{"type":41,"tag":402,"props":2654,"children":2655},{"style":409},[2656],{"type":46,"value":2657}," React",{"type":41,"tag":402,"props":2659,"children":2660},{"style":791},[2661],{"type":46,"value":720},{"type":41,"tag":402,"props":2663,"children":2664},{"style":409},[2665],{"type":46,"value":2666},"ReactNode",{"type":41,"tag":402,"props":2668,"children":2669},{"style":791},[2670],{"type":46,"value":1515},{"type":41,"tag":402,"props":2672,"children":2673},{"class":404,"line":1582},[2674,2679],{"type":41,"tag":402,"props":2675,"children":2676},{"style":791},[2677],{"type":46,"value":2678},"})",{"type":41,"tag":402,"props":2680,"children":2681},{"style":791},[2682],{"type":46,"value":1416},{"type":41,"tag":402,"props":2684,"children":2685},{"class":404,"line":1592},[2686,2690],{"type":41,"tag":402,"props":2687,"children":2688},{"style":1456},[2689],{"type":46,"value":1524},{"type":41,"tag":402,"props":2691,"children":2692},{"style":1446},[2693],{"type":46,"value":2694}," (\n",{"type":41,"tag":402,"props":2696,"children":2697},{"class":404,"line":1601},[2698,2702,2707,2712,2716,2720,2725,2729],{"type":41,"tag":402,"props":2699,"children":2700},{"style":791},[2701],{"type":46,"value":2121},{"type":41,"tag":402,"props":2703,"children":2704},{"style":1446},[2705],{"type":46,"value":2706},"html",{"type":41,"tag":402,"props":2708,"children":2709},{"style":1398},[2710],{"type":46,"value":2711}," lang",{"type":41,"tag":402,"props":2713,"children":2714},{"style":791},[2715],{"type":46,"value":794},{"type":41,"tag":402,"props":2717,"children":2718},{"style":791},[2719],{"type":46,"value":1817},{"type":41,"tag":402,"props":2721,"children":2722},{"style":415},[2723],{"type":46,"value":2724},"en",{"type":41,"tag":402,"props":2726,"children":2727},{"style":791},[2728],{"type":46,"value":1817},{"type":41,"tag":402,"props":2730,"children":2731},{"style":791},[2732],{"type":46,"value":2113},{"type":41,"tag":402,"props":2734,"children":2735},{"class":404,"line":1680},[2736,2740,2745],{"type":41,"tag":402,"props":2737,"children":2738},{"style":791},[2739],{"type":46,"value":2150},{"type":41,"tag":402,"props":2741,"children":2742},{"style":1446},[2743],{"type":46,"value":2744},"body",{"type":41,"tag":402,"props":2746,"children":2747},{"style":791},[2748],{"type":46,"value":2113},{"type":41,"tag":402,"props":2750,"children":2751},{"class":404,"line":1700},[2752,2757,2762,2767,2771,2775,2779],{"type":41,"tag":402,"props":2753,"children":2754},{"style":791},[2755],{"type":46,"value":2756},"        \u003C",{"type":41,"tag":402,"props":2758,"children":2759},{"style":409},[2760],{"type":46,"value":2761},"ConvexClientProvider",{"type":41,"tag":402,"props":2763,"children":2764},{"style":791},[2765],{"type":46,"value":2766},">{",{"type":41,"tag":402,"props":2768,"children":2769},{"style":785},[2770],{"type":46,"value":2509},{"type":41,"tag":402,"props":2772,"children":2773},{"style":791},[2774],{"type":46,"value":2514},{"type":41,"tag":402,"props":2776,"children":2777},{"style":409},[2778],{"type":46,"value":2761},{"type":41,"tag":402,"props":2780,"children":2781},{"style":791},[2782],{"type":46,"value":2113},{"type":41,"tag":402,"props":2784,"children":2785},{"class":404,"line":1748},[2786,2791,2795],{"type":41,"tag":402,"props":2787,"children":2788},{"style":791},[2789],{"type":46,"value":2790},"      \u003C\u002F",{"type":41,"tag":402,"props":2792,"children":2793},{"style":1446},[2794],{"type":46,"value":2744},{"type":41,"tag":402,"props":2796,"children":2797},{"style":791},[2798],{"type":46,"value":2113},{"type":41,"tag":402,"props":2800,"children":2801},{"class":404,"line":2179},[2802,2806,2810],{"type":41,"tag":402,"props":2803,"children":2804},{"style":791},[2805],{"type":46,"value":2168},{"type":41,"tag":402,"props":2807,"children":2808},{"style":1446},[2809],{"type":46,"value":2706},{"type":41,"tag":402,"props":2811,"children":2812},{"style":791},[2813],{"type":46,"value":2113},{"type":41,"tag":402,"props":2815,"children":2816},{"class":404,"line":2197},[2817,2821],{"type":41,"tag":402,"props":2818,"children":2819},{"style":1446},[2820],{"type":46,"value":1510},{"type":41,"tag":402,"props":2822,"children":2823},{"style":791},[2824],{"type":46,"value":1515},{"type":41,"tag":402,"props":2826,"children":2828},{"class":404,"line":2827},16,[2829],{"type":41,"tag":402,"props":2830,"children":2831},{"style":791},[2832],{"type":46,"value":1579},{"type":41,"tag":1755,"props":2834,"children":2836},{"id":2835},"other-frameworks",[2837],{"type":46,"value":2838},"Other frameworks",{"type":41,"tag":49,"props":2840,"children":2841},{},[2842],{"type":46,"value":2843},"For Vue, Svelte, React Native, TanStack Start, Remix, and others, follow the\nmatching quickstart guide:",{"type":41,"tag":62,"props":2845,"children":2846},{},[2847,2859,2869,2879,2889,2899],{"type":41,"tag":66,"props":2848,"children":2849},{},[2850],{"type":41,"tag":2851,"props":2852,"children":2856},"a",{"href":2853,"rel":2854},"https:\u002F\u002Fdocs.convex.dev\u002Fquickstart\u002Fvue",[2855],"nofollow",[2857],{"type":46,"value":2858},"Vue",{"type":41,"tag":66,"props":2860,"children":2861},{},[2862],{"type":41,"tag":2851,"props":2863,"children":2866},{"href":2864,"rel":2865},"https:\u002F\u002Fdocs.convex.dev\u002Fquickstart\u002Fsvelte",[2855],[2867],{"type":46,"value":2868},"Svelte",{"type":41,"tag":66,"props":2870,"children":2871},{},[2872],{"type":41,"tag":2851,"props":2873,"children":2876},{"href":2874,"rel":2875},"https:\u002F\u002Fdocs.convex.dev\u002Fquickstart\u002Freact-native",[2855],[2877],{"type":46,"value":2878},"React Native",{"type":41,"tag":66,"props":2880,"children":2881},{},[2882],{"type":41,"tag":2851,"props":2883,"children":2886},{"href":2884,"rel":2885},"https:\u002F\u002Fdocs.convex.dev\u002Fquickstart\u002Ftanstack-start",[2855],[2887],{"type":46,"value":2888},"TanStack Start",{"type":41,"tag":66,"props":2890,"children":2891},{},[2892],{"type":41,"tag":2851,"props":2893,"children":2896},{"href":2894,"rel":2895},"https:\u002F\u002Fdocs.convex.dev\u002Fquickstart\u002Fremix",[2855],[2897],{"type":46,"value":2898},"Remix",{"type":41,"tag":66,"props":2900,"children":2901},{},[2902],{"type":41,"tag":2851,"props":2903,"children":2906},{"href":2904,"rel":2905},"https:\u002F\u002Fdocs.convex.dev\u002Fquickstart\u002Fnodejs",[2855],[2907],{"type":46,"value":2908},"Node.js (no frontend)",{"type":41,"tag":213,"props":2910,"children":2912},{"id":2911},"environment-variables",[2913],{"type":46,"value":2914},"Environment variables",{"type":41,"tag":49,"props":2916,"children":2917},{},[2918],{"type":46,"value":2919},"The env var name depends on the framework:",{"type":41,"tag":220,"props":2921,"children":2922},{},[2923,2939],{"type":41,"tag":224,"props":2924,"children":2925},{},[2926],{"type":41,"tag":228,"props":2927,"children":2928},{},[2929,2934],{"type":41,"tag":232,"props":2930,"children":2931},{},[2932],{"type":46,"value":2933},"Framework",{"type":41,"tag":232,"props":2935,"children":2936},{},[2937],{"type":46,"value":2938},"Variable",{"type":41,"tag":243,"props":2940,"children":2941},{},[2942,2958,2974,2990],{"type":41,"tag":228,"props":2943,"children":2944},{},[2945,2950],{"type":41,"tag":250,"props":2946,"children":2947},{},[2948],{"type":46,"value":2949},"Vite",{"type":41,"tag":250,"props":2951,"children":2952},{},[2953],{"type":41,"tag":96,"props":2954,"children":2956},{"className":2955},[],[2957],{"type":46,"value":1486},{"type":41,"tag":228,"props":2959,"children":2960},{},[2961,2966],{"type":41,"tag":250,"props":2962,"children":2963},{},[2964],{"type":46,"value":2965},"Next.js",{"type":41,"tag":250,"props":2967,"children":2968},{},[2969],{"type":41,"tag":96,"props":2970,"children":2972},{"className":2971},[],[2973],{"type":46,"value":2393},{"type":41,"tag":228,"props":2975,"children":2976},{},[2977,2981],{"type":41,"tag":250,"props":2978,"children":2979},{},[2980],{"type":46,"value":2898},{"type":41,"tag":250,"props":2982,"children":2983},{},[2984],{"type":41,"tag":96,"props":2985,"children":2987},{"className":2986},[],[2988],{"type":46,"value":2989},"CONVEX_URL",{"type":41,"tag":228,"props":2991,"children":2992},{},[2993,2997],{"type":41,"tag":250,"props":2994,"children":2995},{},[2996],{"type":46,"value":2878},{"type":41,"tag":250,"props":2998,"children":2999},{},[3000],{"type":41,"tag":96,"props":3001,"children":3003},{"className":3002},[],[3004],{"type":46,"value":3005},"EXPO_PUBLIC_CONVEX_URL",{"type":41,"tag":49,"props":3007,"children":3008},{},[3009,3014,3016,3021],{"type":41,"tag":96,"props":3010,"children":3012},{"className":3011},[],[3013],{"type":46,"value":193},{"type":46,"value":3015}," writes the correct variable to ",{"type":41,"tag":96,"props":3017,"children":3019},{"className":3018},[],[3020],{"type":46,"value":718},{"type":46,"value":3022}," automatically.",{"type":41,"tag":55,"props":3024,"children":3026},{"id":3025},"agent-mode",[3027],{"type":46,"value":3028},"Agent Mode",{"type":41,"tag":49,"props":3030,"children":3031},{},[3032,3037,3039,3045,3047,3052],{"type":41,"tag":96,"props":3033,"children":3035},{"className":3034},[],[3036],{"type":46,"value":770},{"type":46,"value":3038}," forces an unauthenticated local backend. It is\nalready the implicit default for any non-TTY run of ",{"type":41,"tag":96,"props":3040,"children":3042},{"className":3041},[],[3043],{"type":46,"value":3044},"npx convex init",{"type":46,"value":3046}," or\n",{"type":41,"tag":96,"props":3048,"children":3050},{"className":3049},[],[3051],{"type":46,"value":193},{"type":46,"value":3053},", but set it explicitly so the behavior does not depend on TTY\ndetection:",{"type":41,"tag":391,"props":3055,"children":3056},{"className":393,"code":775,"language":395,"meta":396,"style":396},[3057],{"type":41,"tag":96,"props":3058,"children":3059},{"__ignoreMap":396},[3060],{"type":41,"tag":402,"props":3061,"children":3062},{"class":404,"line":405},[3063,3067,3071,3075,3079,3083,3087],{"type":41,"tag":402,"props":3064,"children":3065},{"style":785},[3066],{"type":46,"value":788},{"type":41,"tag":402,"props":3068,"children":3069},{"style":791},[3070],{"type":46,"value":794},{"type":41,"tag":402,"props":3072,"children":3073},{"style":415},[3074],{"type":46,"value":681},{"type":41,"tag":402,"props":3076,"children":3077},{"style":409},[3078],{"type":46,"value":803},{"type":41,"tag":402,"props":3080,"children":3081},{"style":415},[3082],{"type":46,"value":652},{"type":41,"tag":402,"props":3084,"children":3085},{"style":415},[3086],{"type":46,"value":657},{"type":41,"tag":402,"props":3088,"children":3089},{"style":415},[3090],{"type":46,"value":662},{"type":41,"tag":49,"props":3092,"children":3093},{},[3094],{"type":46,"value":3095},"Use it for:",{"type":41,"tag":62,"props":3097,"children":3098},{},[3099,3104,3109],{"type":41,"tag":66,"props":3100,"children":3101},{},[3102],{"type":46,"value":3103},"Any AI coding agent (local or cloud).",{"type":41,"tag":66,"props":3105,"children":3106},{},[3107],{"type":46,"value":3108},"CI-like setup scripts.",{"type":41,"tag":66,"props":3110,"children":3111},{},[3112],{"type":46,"value":3113},"Cases where the user is logged in but you do not want to touch their personal\ndev deployment.",{"type":41,"tag":49,"props":3115,"children":3116},{},[3117,3119,3124,3126,3132,3134,3140],{"type":46,"value":3118},"The resulting backend runs on ",{"type":41,"tag":96,"props":3120,"children":3122},{"className":3121},[],[3123],{"type":46,"value":689},{"type":46,"value":3125}," and is not associated with any team or\nproject until the user later claims it via ",{"type":41,"tag":96,"props":3127,"children":3129},{"className":3128},[],[3130],{"type":46,"value":3131},"npx convex login",{"type":46,"value":3133}," and the\n",{"type":41,"tag":96,"props":3135,"children":3137},{"className":3136},[],[3138],{"type":46,"value":3139},"npx convex deployment",{"type":46,"value":3141}," commands.",{"type":41,"tag":55,"props":3143,"children":3145},{"id":3144},"verify-the-setup",[3146],{"type":46,"value":3147},"Verify the Setup",{"type":41,"tag":49,"props":3149,"children":3150},{},[3151],{"type":46,"value":3152},"After setup, confirm everything is working:",{"type":41,"tag":124,"props":3154,"children":3155},{},[3156,3166,3192,3216],{"type":41,"tag":66,"props":3157,"children":3158},{},[3159,3164],{"type":41,"tag":96,"props":3160,"children":3162},{"className":3161},[],[3163],{"type":46,"value":165},{"type":46,"value":3165}," exited without errors (deployment provisioned, code\npushed, schema validated, typecheck clean)",{"type":41,"tag":66,"props":3167,"children":3168},{},[3169,3171,3176,3178,3184,3186],{"type":46,"value":3170},"The ",{"type":41,"tag":96,"props":3172,"children":3174},{"className":3173},[],[3175],{"type":46,"value":731},{"type":46,"value":3177}," directory exists and has ",{"type":41,"tag":96,"props":3179,"children":3181},{"className":3180},[],[3182],{"type":46,"value":3183},"api.ts",{"type":46,"value":3185}," and ",{"type":41,"tag":96,"props":3187,"children":3189},{"className":3188},[],[3190],{"type":46,"value":3191},"server.ts",{"type":41,"tag":66,"props":3193,"children":3194},{},[3195,3200,3202,3207,3209,3214],{"type":41,"tag":96,"props":3196,"children":3198},{"className":3197},[],[3199],{"type":46,"value":718},{"type":46,"value":3201}," contains a ",{"type":41,"tag":96,"props":3203,"children":3205},{"className":3204},[],[3206],{"type":46,"value":702},{"type":46,"value":3208}," value and the framework's\n",{"type":41,"tag":96,"props":3210,"children":3212},{"className":3211},[],[3213],{"type":46,"value":710},{"type":46,"value":3215}," variable",{"type":41,"tag":66,"props":3217,"children":3218},{},[3219,3221,3226,3227,3232],{"type":46,"value":3220},"(If applicable) ",{"type":41,"tag":96,"props":3222,"children":3224},{"className":3223},[],[3225],{"type":46,"value":185},{"type":46,"value":1057},{"type":41,"tag":96,"props":3228,"children":3230},{"className":3229},[],[3231],{"type":46,"value":193},{"type":46,"value":3233}," for the watcher alone) is\nrunning without errors in another terminal or in the background",{"type":41,"tag":55,"props":3235,"children":3237},{"id":3236},"writing-your-first-function",[3238],{"type":46,"value":3239},"Writing Your First Function",{"type":41,"tag":49,"props":3241,"children":3242},{},[3243],{"type":46,"value":3244},"Once the project is set up, create a schema and a query to verify the full loop\nworks.",{"type":41,"tag":49,"props":3246,"children":3247},{},[3248,3254],{"type":41,"tag":96,"props":3249,"children":3251},{"className":3250},[],[3252],{"type":46,"value":3253},"convex\u002Fschema.ts",{"type":46,"value":2459},{"type":41,"tag":391,"props":3256,"children":3260},{"className":3257,"code":3258,"language":3259,"meta":396,"style":396},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineSchema, defineTable } from \"convex\u002Fserver\";\nimport { v } from \"convex\u002Fvalues\";\n\nexport default defineSchema({\n  tasks: defineTable({\n    text: v.string(),\n    completed: v.boolean(),\n  }),\n});\n","ts",[3261],{"type":41,"tag":96,"props":3262,"children":3263},{"__ignoreMap":396},[3264,3314,3355,3362,3386,3410,3443,3476,3492],{"type":41,"tag":402,"props":3265,"children":3266},{"class":404,"line":405},[3267,3271,3275,3280,3284,3289,3293,3297,3301,3306,3310],{"type":41,"tag":402,"props":3268,"children":3269},{"style":1456},[3270],{"type":46,"value":1634},{"type":41,"tag":402,"props":3272,"children":3273},{"style":791},[3274],{"type":46,"value":1787},{"type":41,"tag":402,"props":3276,"children":3277},{"style":785},[3278],{"type":46,"value":3279}," defineSchema",{"type":41,"tag":402,"props":3281,"children":3282},{"style":791},[3283],{"type":46,"value":1883},{"type":41,"tag":402,"props":3285,"children":3286},{"style":785},[3287],{"type":46,"value":3288}," defineTable",{"type":41,"tag":402,"props":3290,"children":3291},{"style":791},[3292],{"type":46,"value":1797},{"type":41,"tag":402,"props":3294,"children":3295},{"style":1456},[3296],{"type":46,"value":1802},{"type":41,"tag":402,"props":3298,"children":3299},{"style":791},[3300],{"type":46,"value":1807},{"type":41,"tag":402,"props":3302,"children":3303},{"style":415},[3304],{"type":46,"value":3305},"convex\u002Fserver",{"type":41,"tag":402,"props":3307,"children":3308},{"style":791},[3309],{"type":46,"value":1817},{"type":41,"tag":402,"props":3311,"children":3312},{"style":791},[3313],{"type":46,"value":1515},{"type":41,"tag":402,"props":3315,"children":3316},{"class":404,"line":446},[3317,3321,3325,3330,3334,3338,3342,3347,3351],{"type":41,"tag":402,"props":3318,"children":3319},{"style":1456},[3320],{"type":46,"value":1634},{"type":41,"tag":402,"props":3322,"children":3323},{"style":791},[3324],{"type":46,"value":1787},{"type":41,"tag":402,"props":3326,"children":3327},{"style":785},[3328],{"type":46,"value":3329}," v",{"type":41,"tag":402,"props":3331,"children":3332},{"style":791},[3333],{"type":46,"value":1797},{"type":41,"tag":402,"props":3335,"children":3336},{"style":1456},[3337],{"type":46,"value":1802},{"type":41,"tag":402,"props":3339,"children":3340},{"style":791},[3341],{"type":46,"value":1807},{"type":41,"tag":402,"props":3343,"children":3344},{"style":415},[3345],{"type":46,"value":3346},"convex\u002Fvalues",{"type":41,"tag":402,"props":3348,"children":3349},{"style":791},[3350],{"type":46,"value":1817},{"type":41,"tag":402,"props":3352,"children":3353},{"style":791},[3354],{"type":46,"value":1515},{"type":41,"tag":402,"props":3356,"children":3357},{"class":404,"line":543},[3358],{"type":41,"tag":402,"props":3359,"children":3360},{"emptyLinePlaceholder":1586},[3361],{"type":46,"value":1589},{"type":41,"tag":402,"props":3363,"children":3364},{"class":404,"line":1452},[3365,3369,3373,3377,3381],{"type":41,"tag":402,"props":3366,"children":3367},{"style":1456},[3368],{"type":46,"value":2420},{"type":41,"tag":402,"props":3370,"children":3371},{"style":1456},[3372],{"type":46,"value":2603},{"type":41,"tag":402,"props":3374,"children":3375},{"style":532},[3376],{"type":46,"value":3279},{"type":41,"tag":402,"props":3378,"children":3379},{"style":785},[3380],{"type":46,"value":1629},{"type":41,"tag":402,"props":3382,"children":3383},{"style":791},[3384],{"type":46,"value":3385},"{\n",{"type":41,"tag":402,"props":3387,"children":3388},{"class":404,"line":1504},[3389,3394,3398,3402,3406],{"type":41,"tag":402,"props":3390,"children":3391},{"style":1446},[3392],{"type":46,"value":3393},"  tasks",{"type":41,"tag":402,"props":3395,"children":3396},{"style":791},[3397],{"type":46,"value":2459},{"type":41,"tag":402,"props":3399,"children":3400},{"style":532},[3401],{"type":46,"value":3288},{"type":41,"tag":402,"props":3403,"children":3404},{"style":785},[3405],{"type":46,"value":1629},{"type":41,"tag":402,"props":3407,"children":3408},{"style":791},[3409],{"type":46,"value":3385},{"type":41,"tag":402,"props":3411,"children":3412},{"class":404,"line":1518},[3413,3418,3422,3426,3430,3435,3439],{"type":41,"tag":402,"props":3414,"children":3415},{"style":1446},[3416],{"type":46,"value":3417},"    text",{"type":41,"tag":402,"props":3419,"children":3420},{"style":791},[3421],{"type":46,"value":2459},{"type":41,"tag":402,"props":3423,"children":3424},{"style":785},[3425],{"type":46,"value":3329},{"type":41,"tag":402,"props":3427,"children":3428},{"style":791},[3429],{"type":46,"value":720},{"type":41,"tag":402,"props":3431,"children":3432},{"style":532},[3433],{"type":46,"value":3434},"string",{"type":41,"tag":402,"props":3436,"children":3437},{"style":785},[3438],{"type":46,"value":1411},{"type":41,"tag":402,"props":3440,"children":3441},{"style":791},[3442],{"type":46,"value":1501},{"type":41,"tag":402,"props":3444,"children":3445},{"class":404,"line":28},[3446,3451,3455,3459,3463,3468,3472],{"type":41,"tag":402,"props":3447,"children":3448},{"style":1446},[3449],{"type":46,"value":3450},"    completed",{"type":41,"tag":402,"props":3452,"children":3453},{"style":791},[3454],{"type":46,"value":2459},{"type":41,"tag":402,"props":3456,"children":3457},{"style":785},[3458],{"type":46,"value":3329},{"type":41,"tag":402,"props":3460,"children":3461},{"style":791},[3462],{"type":46,"value":720},{"type":41,"tag":402,"props":3464,"children":3465},{"style":532},[3466],{"type":46,"value":3467},"boolean",{"type":41,"tag":402,"props":3469,"children":3470},{"style":785},[3471],{"type":46,"value":1411},{"type":41,"tag":402,"props":3473,"children":3474},{"style":791},[3475],{"type":46,"value":1501},{"type":41,"tag":402,"props":3477,"children":3478},{"class":404,"line":1582},[3479,3484,3488],{"type":41,"tag":402,"props":3480,"children":3481},{"style":791},[3482],{"type":46,"value":3483},"  }",{"type":41,"tag":402,"props":3485,"children":3486},{"style":785},[3487],{"type":46,"value":1673},{"type":41,"tag":402,"props":3489,"children":3490},{"style":791},[3491],{"type":46,"value":1501},{"type":41,"tag":402,"props":3493,"children":3494},{"class":404,"line":1592},[3495,3500,3504],{"type":41,"tag":402,"props":3496,"children":3497},{"style":791},[3498],{"type":46,"value":3499},"}",{"type":41,"tag":402,"props":3501,"children":3502},{"style":785},[3503],{"type":46,"value":1673},{"type":41,"tag":402,"props":3505,"children":3506},{"style":791},[3507],{"type":46,"value":1515},{"type":41,"tag":49,"props":3509,"children":3510},{},[3511,3517],{"type":41,"tag":96,"props":3512,"children":3514},{"className":3513},[],[3515],{"type":46,"value":3516},"convex\u002Ftasks.ts",{"type":46,"value":2459},{"type":41,"tag":391,"props":3519,"children":3521},{"className":3257,"code":3520,"language":3259,"meta":396,"style":396},"import { query, mutation } from \".\u002F_generated\u002Fserver\";\nimport { v } from \"convex\u002Fvalues\";\n\nexport const list = query({\n  args: {},\n  handler: async (ctx) => {\n    return await ctx.db.query(\"tasks\").collect();\n  },\n});\n\nexport const create = mutation({\n  args: { text: v.string() },\n  handler: async (ctx, args) => {\n    await ctx.db.insert(\"tasks\", { text: args.text, completed: false });\n  },\n});\n",[3522],{"type":41,"tag":96,"props":3523,"children":3524},{"__ignoreMap":396},[3525,3575,3614,3621,3654,3671,3711,3785,3793,3808,3815,3847,3893,3937,4041,4048],{"type":41,"tag":402,"props":3526,"children":3527},{"class":404,"line":405},[3528,3532,3536,3541,3545,3550,3554,3558,3562,3567,3571],{"type":41,"tag":402,"props":3529,"children":3530},{"style":1456},[3531],{"type":46,"value":1634},{"type":41,"tag":402,"props":3533,"children":3534},{"style":791},[3535],{"type":46,"value":1787},{"type":41,"tag":402,"props":3537,"children":3538},{"style":785},[3539],{"type":46,"value":3540}," query",{"type":41,"tag":402,"props":3542,"children":3543},{"style":791},[3544],{"type":46,"value":1883},{"type":41,"tag":402,"props":3546,"children":3547},{"style":785},[3548],{"type":46,"value":3549}," mutation",{"type":41,"tag":402,"props":3551,"children":3552},{"style":791},[3553],{"type":46,"value":1797},{"type":41,"tag":402,"props":3555,"children":3556},{"style":1456},[3557],{"type":46,"value":1802},{"type":41,"tag":402,"props":3559,"children":3560},{"style":791},[3561],{"type":46,"value":1807},{"type":41,"tag":402,"props":3563,"children":3564},{"style":415},[3565],{"type":46,"value":3566},".\u002F_generated\u002Fserver",{"type":41,"tag":402,"props":3568,"children":3569},{"style":791},[3570],{"type":46,"value":1817},{"type":41,"tag":402,"props":3572,"children":3573},{"style":791},[3574],{"type":46,"value":1515},{"type":41,"tag":402,"props":3576,"children":3577},{"class":404,"line":446},[3578,3582,3586,3590,3594,3598,3602,3606,3610],{"type":41,"tag":402,"props":3579,"children":3580},{"style":1456},[3581],{"type":46,"value":1634},{"type":41,"tag":402,"props":3583,"children":3584},{"style":791},[3585],{"type":46,"value":1787},{"type":41,"tag":402,"props":3587,"children":3588},{"style":785},[3589],{"type":46,"value":3329},{"type":41,"tag":402,"props":3591,"children":3592},{"style":791},[3593],{"type":46,"value":1797},{"type":41,"tag":402,"props":3595,"children":3596},{"style":1456},[3597],{"type":46,"value":1802},{"type":41,"tag":402,"props":3599,"children":3600},{"style":791},[3601],{"type":46,"value":1807},{"type":41,"tag":402,"props":3603,"children":3604},{"style":415},[3605],{"type":46,"value":3346},{"type":41,"tag":402,"props":3607,"children":3608},{"style":791},[3609],{"type":46,"value":1817},{"type":41,"tag":402,"props":3611,"children":3612},{"style":791},[3613],{"type":46,"value":1515},{"type":41,"tag":402,"props":3615,"children":3616},{"class":404,"line":543},[3617],{"type":41,"tag":402,"props":3618,"children":3619},{"emptyLinePlaceholder":1586},[3620],{"type":46,"value":1589},{"type":41,"tag":402,"props":3622,"children":3623},{"class":404,"line":1452},[3624,3628,3633,3638,3642,3646,3650],{"type":41,"tag":402,"props":3625,"children":3626},{"style":1456},[3627],{"type":46,"value":2420},{"type":41,"tag":402,"props":3629,"children":3630},{"style":1398},[3631],{"type":46,"value":3632}," const",{"type":41,"tag":402,"props":3634,"children":3635},{"style":785},[3636],{"type":46,"value":3637}," list ",{"type":41,"tag":402,"props":3639,"children":3640},{"style":791},[3641],{"type":46,"value":794},{"type":41,"tag":402,"props":3643,"children":3644},{"style":532},[3645],{"type":46,"value":3540},{"type":41,"tag":402,"props":3647,"children":3648},{"style":785},[3649],{"type":46,"value":1629},{"type":41,"tag":402,"props":3651,"children":3652},{"style":791},[3653],{"type":46,"value":3385},{"type":41,"tag":402,"props":3655,"children":3656},{"class":404,"line":1504},[3657,3662,3666],{"type":41,"tag":402,"props":3658,"children":3659},{"style":1446},[3660],{"type":46,"value":3661},"  args",{"type":41,"tag":402,"props":3663,"children":3664},{"style":791},[3665],{"type":46,"value":2459},{"type":41,"tag":402,"props":3667,"children":3668},{"style":791},[3669],{"type":46,"value":3670}," {},\n",{"type":41,"tag":402,"props":3672,"children":3673},{"class":404,"line":1518},[3674,3679,3683,3688,3693,3698,3702,3707],{"type":41,"tag":402,"props":3675,"children":3676},{"style":532},[3677],{"type":46,"value":3678},"  handler",{"type":41,"tag":402,"props":3680,"children":3681},{"style":791},[3682],{"type":46,"value":2459},{"type":41,"tag":402,"props":3684,"children":3685},{"style":1398},[3686],{"type":46,"value":3687}," async",{"type":41,"tag":402,"props":3689,"children":3690},{"style":791},[3691],{"type":46,"value":3692}," (",{"type":41,"tag":402,"props":3694,"children":3695},{"style":2438},[3696],{"type":46,"value":3697},"ctx",{"type":41,"tag":402,"props":3699,"children":3700},{"style":791},[3701],{"type":46,"value":1673},{"type":41,"tag":402,"props":3703,"children":3704},{"style":1398},[3705],{"type":46,"value":3706}," =>",{"type":41,"tag":402,"props":3708,"children":3709},{"style":791},[3710],{"type":46,"value":1416},{"type":41,"tag":402,"props":3712,"children":3713},{"class":404,"line":28},[3714,3719,3724,3729,3733,3738,3742,3747,3751,3755,3760,3764,3768,3772,3777,3781],{"type":41,"tag":402,"props":3715,"children":3716},{"style":1456},[3717],{"type":46,"value":3718},"    return",{"type":41,"tag":402,"props":3720,"children":3721},{"style":1456},[3722],{"type":46,"value":3723}," await",{"type":41,"tag":402,"props":3725,"children":3726},{"style":785},[3727],{"type":46,"value":3728}," ctx",{"type":41,"tag":402,"props":3730,"children":3731},{"style":791},[3732],{"type":46,"value":720},{"type":41,"tag":402,"props":3734,"children":3735},{"style":785},[3736],{"type":46,"value":3737},"db",{"type":41,"tag":402,"props":3739,"children":3740},{"style":791},[3741],{"type":46,"value":720},{"type":41,"tag":402,"props":3743,"children":3744},{"style":532},[3745],{"type":46,"value":3746},"query",{"type":41,"tag":402,"props":3748,"children":3749},{"style":1446},[3750],{"type":46,"value":1629},{"type":41,"tag":402,"props":3752,"children":3753},{"style":791},[3754],{"type":46,"value":1817},{"type":41,"tag":402,"props":3756,"children":3757},{"style":415},[3758],{"type":46,"value":3759},"tasks",{"type":41,"tag":402,"props":3761,"children":3762},{"style":791},[3763],{"type":46,"value":1817},{"type":41,"tag":402,"props":3765,"children":3766},{"style":1446},[3767],{"type":46,"value":1673},{"type":41,"tag":402,"props":3769,"children":3770},{"style":791},[3771],{"type":46,"value":720},{"type":41,"tag":402,"props":3773,"children":3774},{"style":532},[3775],{"type":46,"value":3776},"collect",{"type":41,"tag":402,"props":3778,"children":3779},{"style":1446},[3780],{"type":46,"value":1411},{"type":41,"tag":402,"props":3782,"children":3783},{"style":791},[3784],{"type":46,"value":1515},{"type":41,"tag":402,"props":3786,"children":3787},{"class":404,"line":1582},[3788],{"type":41,"tag":402,"props":3789,"children":3790},{"style":791},[3791],{"type":46,"value":3792},"  },\n",{"type":41,"tag":402,"props":3794,"children":3795},{"class":404,"line":1592},[3796,3800,3804],{"type":41,"tag":402,"props":3797,"children":3798},{"style":791},[3799],{"type":46,"value":3499},{"type":41,"tag":402,"props":3801,"children":3802},{"style":785},[3803],{"type":46,"value":1673},{"type":41,"tag":402,"props":3805,"children":3806},{"style":791},[3807],{"type":46,"value":1515},{"type":41,"tag":402,"props":3809,"children":3810},{"class":404,"line":1601},[3811],{"type":41,"tag":402,"props":3812,"children":3813},{"emptyLinePlaceholder":1586},[3814],{"type":46,"value":1589},{"type":41,"tag":402,"props":3816,"children":3817},{"class":404,"line":1680},[3818,3822,3826,3831,3835,3839,3843],{"type":41,"tag":402,"props":3819,"children":3820},{"style":1456},[3821],{"type":46,"value":2420},{"type":41,"tag":402,"props":3823,"children":3824},{"style":1398},[3825],{"type":46,"value":3632},{"type":41,"tag":402,"props":3827,"children":3828},{"style":785},[3829],{"type":46,"value":3830}," create ",{"type":41,"tag":402,"props":3832,"children":3833},{"style":791},[3834],{"type":46,"value":794},{"type":41,"tag":402,"props":3836,"children":3837},{"style":532},[3838],{"type":46,"value":3549},{"type":41,"tag":402,"props":3840,"children":3841},{"style":785},[3842],{"type":46,"value":1629},{"type":41,"tag":402,"props":3844,"children":3845},{"style":791},[3846],{"type":46,"value":3385},{"type":41,"tag":402,"props":3848,"children":3849},{"class":404,"line":1700},[3850,3854,3858,3862,3867,3871,3875,3879,3883,3888],{"type":41,"tag":402,"props":3851,"children":3852},{"style":1446},[3853],{"type":46,"value":3661},{"type":41,"tag":402,"props":3855,"children":3856},{"style":791},[3857],{"type":46,"value":2459},{"type":41,"tag":402,"props":3859,"children":3860},{"style":791},[3861],{"type":46,"value":1787},{"type":41,"tag":402,"props":3863,"children":3864},{"style":1446},[3865],{"type":46,"value":3866}," text",{"type":41,"tag":402,"props":3868,"children":3869},{"style":791},[3870],{"type":46,"value":2459},{"type":41,"tag":402,"props":3872,"children":3873},{"style":785},[3874],{"type":46,"value":3329},{"type":41,"tag":402,"props":3876,"children":3877},{"style":791},[3878],{"type":46,"value":720},{"type":41,"tag":402,"props":3880,"children":3881},{"style":532},[3882],{"type":46,"value":3434},{"type":41,"tag":402,"props":3884,"children":3885},{"style":785},[3886],{"type":46,"value":3887},"() ",{"type":41,"tag":402,"props":3889,"children":3890},{"style":791},[3891],{"type":46,"value":3892},"},\n",{"type":41,"tag":402,"props":3894,"children":3895},{"class":404,"line":1748},[3896,3900,3904,3908,3912,3916,3920,3925,3929,3933],{"type":41,"tag":402,"props":3897,"children":3898},{"style":532},[3899],{"type":46,"value":3678},{"type":41,"tag":402,"props":3901,"children":3902},{"style":791},[3903],{"type":46,"value":2459},{"type":41,"tag":402,"props":3905,"children":3906},{"style":1398},[3907],{"type":46,"value":3687},{"type":41,"tag":402,"props":3909,"children":3910},{"style":791},[3911],{"type":46,"value":3692},{"type":41,"tag":402,"props":3913,"children":3914},{"style":2438},[3915],{"type":46,"value":3697},{"type":41,"tag":402,"props":3917,"children":3918},{"style":791},[3919],{"type":46,"value":1883},{"type":41,"tag":402,"props":3921,"children":3922},{"style":2438},[3923],{"type":46,"value":3924}," args",{"type":41,"tag":402,"props":3926,"children":3927},{"style":791},[3928],{"type":46,"value":1673},{"type":41,"tag":402,"props":3930,"children":3931},{"style":1398},[3932],{"type":46,"value":3706},{"type":41,"tag":402,"props":3934,"children":3935},{"style":791},[3936],{"type":46,"value":1416},{"type":41,"tag":402,"props":3938,"children":3939},{"class":404,"line":2179},[3940,3945,3949,3953,3957,3961,3966,3970,3974,3978,3982,3986,3990,3994,3998,4002,4006,4010,4014,4019,4023,4029,4033,4037],{"type":41,"tag":402,"props":3941,"children":3942},{"style":1456},[3943],{"type":46,"value":3944},"    await",{"type":41,"tag":402,"props":3946,"children":3947},{"style":785},[3948],{"type":46,"value":3728},{"type":41,"tag":402,"props":3950,"children":3951},{"style":791},[3952],{"type":46,"value":720},{"type":41,"tag":402,"props":3954,"children":3955},{"style":785},[3956],{"type":46,"value":3737},{"type":41,"tag":402,"props":3958,"children":3959},{"style":791},[3960],{"type":46,"value":720},{"type":41,"tag":402,"props":3962,"children":3963},{"style":532},[3964],{"type":46,"value":3965},"insert",{"type":41,"tag":402,"props":3967,"children":3968},{"style":1446},[3969],{"type":46,"value":1629},{"type":41,"tag":402,"props":3971,"children":3972},{"style":791},[3973],{"type":46,"value":1817},{"type":41,"tag":402,"props":3975,"children":3976},{"style":415},[3977],{"type":46,"value":3759},{"type":41,"tag":402,"props":3979,"children":3980},{"style":791},[3981],{"type":46,"value":1817},{"type":41,"tag":402,"props":3983,"children":3984},{"style":791},[3985],{"type":46,"value":1883},{"type":41,"tag":402,"props":3987,"children":3988},{"style":791},[3989],{"type":46,"value":1787},{"type":41,"tag":402,"props":3991,"children":3992},{"style":1446},[3993],{"type":46,"value":3866},{"type":41,"tag":402,"props":3995,"children":3996},{"style":791},[3997],{"type":46,"value":2459},{"type":41,"tag":402,"props":3999,"children":4000},{"style":785},[4001],{"type":46,"value":3924},{"type":41,"tag":402,"props":4003,"children":4004},{"style":791},[4005],{"type":46,"value":720},{"type":41,"tag":402,"props":4007,"children":4008},{"style":785},[4009],{"type":46,"value":46},{"type":41,"tag":402,"props":4011,"children":4012},{"style":791},[4013],{"type":46,"value":1883},{"type":41,"tag":402,"props":4015,"children":4016},{"style":1446},[4017],{"type":46,"value":4018}," completed",{"type":41,"tag":402,"props":4020,"children":4021},{"style":791},[4022],{"type":46,"value":2459},{"type":41,"tag":402,"props":4024,"children":4026},{"style":4025},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[4027],{"type":46,"value":4028}," false",{"type":41,"tag":402,"props":4030,"children":4031},{"style":791},[4032],{"type":46,"value":1797},{"type":41,"tag":402,"props":4034,"children":4035},{"style":1446},[4036],{"type":46,"value":1673},{"type":41,"tag":402,"props":4038,"children":4039},{"style":791},[4040],{"type":46,"value":1515},{"type":41,"tag":402,"props":4042,"children":4043},{"class":404,"line":2197},[4044],{"type":41,"tag":402,"props":4045,"children":4046},{"style":791},[4047],{"type":46,"value":3792},{"type":41,"tag":402,"props":4049,"children":4050},{"class":404,"line":2827},[4051,4055,4059],{"type":41,"tag":402,"props":4052,"children":4053},{"style":791},[4054],{"type":46,"value":3499},{"type":41,"tag":402,"props":4056,"children":4057},{"style":785},[4058],{"type":46,"value":1673},{"type":41,"tag":402,"props":4060,"children":4061},{"style":791},[4062],{"type":46,"value":1515},{"type":41,"tag":49,"props":4064,"children":4065},{},[4066,4068,4073],{"type":46,"value":4067},"Use in a React component (adjust the import path based on your file location\nrelative to ",{"type":41,"tag":96,"props":4069,"children":4071},{"className":4070},[],[4072],{"type":46,"value":101},{"type":46,"value":4074},"):",{"type":41,"tag":391,"props":4076,"children":4078},{"className":1377,"code":4077,"language":1379,"meta":396,"style":396},"import { useQuery, useMutation } from \"convex\u002Freact\";\nimport { api } from \"..\u002Fconvex\u002F_generated\u002Fapi\";\n\nfunction Tasks() {\n  const tasks = useQuery(api.tasks.list);\n  const create = useMutation(api.tasks.create);\n\n  return (\n    \u003Cdiv>\n      \u003Cbutton onClick={() => create({ text: \"New task\" })}>Add\u003C\u002Fbutton>\n      {tasks?.map((t) => (\n        \u003Cdiv key={t._id}>{t.text}\u003C\u002Fdiv>\n      ))}\n    \u003C\u002Fdiv>\n  );\n}\n",[4079],{"type":41,"tag":96,"props":4080,"children":4081},{"__ignoreMap":396},[4082,4131,4172,4179,4199,4253,4305,4312,4323,4339,4428,4475,4536,4548,4563,4574],{"type":41,"tag":402,"props":4083,"children":4084},{"class":404,"line":405},[4085,4089,4093,4098,4102,4107,4111,4115,4119,4123,4127],{"type":41,"tag":402,"props":4086,"children":4087},{"style":1456},[4088],{"type":46,"value":1634},{"type":41,"tag":402,"props":4090,"children":4091},{"style":791},[4092],{"type":46,"value":1787},{"type":41,"tag":402,"props":4094,"children":4095},{"style":785},[4096],{"type":46,"value":4097}," useQuery",{"type":41,"tag":402,"props":4099,"children":4100},{"style":791},[4101],{"type":46,"value":1883},{"type":41,"tag":402,"props":4103,"children":4104},{"style":785},[4105],{"type":46,"value":4106}," useMutation",{"type":41,"tag":402,"props":4108,"children":4109},{"style":791},[4110],{"type":46,"value":1797},{"type":41,"tag":402,"props":4112,"children":4113},{"style":1456},[4114],{"type":46,"value":1802},{"type":41,"tag":402,"props":4116,"children":4117},{"style":791},[4118],{"type":46,"value":1807},{"type":41,"tag":402,"props":4120,"children":4121},{"style":415},[4122],{"type":46,"value":1904},{"type":41,"tag":402,"props":4124,"children":4125},{"style":791},[4126],{"type":46,"value":1817},{"type":41,"tag":402,"props":4128,"children":4129},{"style":791},[4130],{"type":46,"value":1515},{"type":41,"tag":402,"props":4132,"children":4133},{"class":404,"line":446},[4134,4138,4142,4147,4151,4155,4159,4164,4168],{"type":41,"tag":402,"props":4135,"children":4136},{"style":1456},[4137],{"type":46,"value":1634},{"type":41,"tag":402,"props":4139,"children":4140},{"style":791},[4141],{"type":46,"value":1787},{"type":41,"tag":402,"props":4143,"children":4144},{"style":785},[4145],{"type":46,"value":4146}," api",{"type":41,"tag":402,"props":4148,"children":4149},{"style":791},[4150],{"type":46,"value":1797},{"type":41,"tag":402,"props":4152,"children":4153},{"style":1456},[4154],{"type":46,"value":1802},{"type":41,"tag":402,"props":4156,"children":4157},{"style":791},[4158],{"type":46,"value":1807},{"type":41,"tag":402,"props":4160,"children":4161},{"style":415},[4162],{"type":46,"value":4163},"..\u002Fconvex\u002F_generated\u002Fapi",{"type":41,"tag":402,"props":4165,"children":4166},{"style":791},[4167],{"type":46,"value":1817},{"type":41,"tag":402,"props":4169,"children":4170},{"style":791},[4171],{"type":46,"value":1515},{"type":41,"tag":402,"props":4173,"children":4174},{"class":404,"line":543},[4175],{"type":41,"tag":402,"props":4176,"children":4177},{"emptyLinePlaceholder":1586},[4178],{"type":46,"value":1589},{"type":41,"tag":402,"props":4180,"children":4181},{"class":404,"line":1452},[4182,4186,4191,4195],{"type":41,"tag":402,"props":4183,"children":4184},{"style":1398},[4185],{"type":46,"value":1401},{"type":41,"tag":402,"props":4187,"children":4188},{"style":532},[4189],{"type":46,"value":4190}," Tasks",{"type":41,"tag":402,"props":4192,"children":4193},{"style":791},[4194],{"type":46,"value":1411},{"type":41,"tag":402,"props":4196,"children":4197},{"style":791},[4198],{"type":46,"value":1416},{"type":41,"tag":402,"props":4200,"children":4201},{"class":404,"line":1504},[4202,4206,4211,4215,4219,4223,4228,4232,4236,4240,4245,4249],{"type":41,"tag":402,"props":4203,"children":4204},{"style":1398},[4205],{"type":46,"value":1424},{"type":41,"tag":402,"props":4207,"children":4208},{"style":785},[4209],{"type":46,"value":4210}," tasks",{"type":41,"tag":402,"props":4212,"children":4213},{"style":791},[4214],{"type":46,"value":1433},{"type":41,"tag":402,"props":4216,"children":4217},{"style":532},[4218],{"type":46,"value":4097},{"type":41,"tag":402,"props":4220,"children":4221},{"style":1446},[4222],{"type":46,"value":1629},{"type":41,"tag":402,"props":4224,"children":4225},{"style":785},[4226],{"type":46,"value":4227},"api",{"type":41,"tag":402,"props":4229,"children":4230},{"style":791},[4231],{"type":46,"value":720},{"type":41,"tag":402,"props":4233,"children":4234},{"style":785},[4235],{"type":46,"value":3759},{"type":41,"tag":402,"props":4237,"children":4238},{"style":791},[4239],{"type":46,"value":720},{"type":41,"tag":402,"props":4241,"children":4242},{"style":785},[4243],{"type":46,"value":4244},"list",{"type":41,"tag":402,"props":4246,"children":4247},{"style":1446},[4248],{"type":46,"value":1673},{"type":41,"tag":402,"props":4250,"children":4251},{"style":791},[4252],{"type":46,"value":1515},{"type":41,"tag":402,"props":4254,"children":4255},{"class":404,"line":1518},[4256,4260,4264,4268,4272,4276,4280,4284,4288,4292,4297,4301],{"type":41,"tag":402,"props":4257,"children":4258},{"style":1398},[4259],{"type":46,"value":1424},{"type":41,"tag":402,"props":4261,"children":4262},{"style":785},[4263],{"type":46,"value":418},{"type":41,"tag":402,"props":4265,"children":4266},{"style":791},[4267],{"type":46,"value":1433},{"type":41,"tag":402,"props":4269,"children":4270},{"style":532},[4271],{"type":46,"value":4106},{"type":41,"tag":402,"props":4273,"children":4274},{"style":1446},[4275],{"type":46,"value":1629},{"type":41,"tag":402,"props":4277,"children":4278},{"style":785},[4279],{"type":46,"value":4227},{"type":41,"tag":402,"props":4281,"children":4282},{"style":791},[4283],{"type":46,"value":720},{"type":41,"tag":402,"props":4285,"children":4286},{"style":785},[4287],{"type":46,"value":3759},{"type":41,"tag":402,"props":4289,"children":4290},{"style":791},[4291],{"type":46,"value":720},{"type":41,"tag":402,"props":4293,"children":4294},{"style":785},[4295],{"type":46,"value":4296},"create",{"type":41,"tag":402,"props":4298,"children":4299},{"style":1446},[4300],{"type":46,"value":1673},{"type":41,"tag":402,"props":4302,"children":4303},{"style":791},[4304],{"type":46,"value":1515},{"type":41,"tag":402,"props":4306,"children":4307},{"class":404,"line":28},[4308],{"type":41,"tag":402,"props":4309,"children":4310},{"emptyLinePlaceholder":1586},[4311],{"type":46,"value":1589},{"type":41,"tag":402,"props":4313,"children":4314},{"class":404,"line":1582},[4315,4319],{"type":41,"tag":402,"props":4316,"children":4317},{"style":1456},[4318],{"type":46,"value":1524},{"type":41,"tag":402,"props":4320,"children":4321},{"style":1446},[4322],{"type":46,"value":2694},{"type":41,"tag":402,"props":4324,"children":4325},{"class":404,"line":1592},[4326,4330,4335],{"type":41,"tag":402,"props":4327,"children":4328},{"style":791},[4329],{"type":46,"value":2121},{"type":41,"tag":402,"props":4331,"children":4332},{"style":1446},[4333],{"type":46,"value":4334},"div",{"type":41,"tag":402,"props":4336,"children":4337},{"style":791},[4338],{"type":46,"value":2113},{"type":41,"tag":402,"props":4340,"children":4341},{"class":404,"line":1601},[4342,4346,4351,4356,4361,4365,4369,4373,4378,4382,4386,4390,4395,4399,4403,4407,4411,4416,4420,4424],{"type":41,"tag":402,"props":4343,"children":4344},{"style":791},[4345],{"type":46,"value":2150},{"type":41,"tag":402,"props":4347,"children":4348},{"style":1446},[4349],{"type":46,"value":4350},"button",{"type":41,"tag":402,"props":4352,"children":4353},{"style":1398},[4354],{"type":46,"value":4355}," onClick",{"type":41,"tag":402,"props":4357,"children":4358},{"style":791},[4359],{"type":46,"value":4360},"={()",{"type":41,"tag":402,"props":4362,"children":4363},{"style":1398},[4364],{"type":46,"value":3706},{"type":41,"tag":402,"props":4366,"children":4367},{"style":532},[4368],{"type":46,"value":418},{"type":41,"tag":402,"props":4370,"children":4371},{"style":785},[4372],{"type":46,"value":1629},{"type":41,"tag":402,"props":4374,"children":4375},{"style":791},[4376],{"type":46,"value":4377},"{",{"type":41,"tag":402,"props":4379,"children":4380},{"style":1446},[4381],{"type":46,"value":3866},{"type":41,"tag":402,"props":4383,"children":4384},{"style":791},[4385],{"type":46,"value":2459},{"type":41,"tag":402,"props":4387,"children":4388},{"style":791},[4389],{"type":46,"value":1807},{"type":41,"tag":402,"props":4391,"children":4392},{"style":415},[4393],{"type":46,"value":4394},"New task",{"type":41,"tag":402,"props":4396,"children":4397},{"style":791},[4398],{"type":46,"value":1817},{"type":41,"tag":402,"props":4400,"children":4401},{"style":791},[4402],{"type":46,"value":1797},{"type":41,"tag":402,"props":4404,"children":4405},{"style":785},[4406],{"type":46,"value":1673},{"type":41,"tag":402,"props":4408,"children":4409},{"style":791},[4410],{"type":46,"value":1552},{"type":41,"tag":402,"props":4412,"children":4413},{"style":785},[4414],{"type":46,"value":4415},"Add",{"type":41,"tag":402,"props":4417,"children":4418},{"style":791},[4419],{"type":46,"value":1562},{"type":41,"tag":402,"props":4421,"children":4422},{"style":1446},[4423],{"type":46,"value":4350},{"type":41,"tag":402,"props":4425,"children":4426},{"style":791},[4427],{"type":46,"value":2113},{"type":41,"tag":402,"props":4429,"children":4430},{"class":404,"line":1680},[4431,4436,4440,4445,4450,4454,4458,4463,4467,4471],{"type":41,"tag":402,"props":4432,"children":4433},{"style":791},[4434],{"type":46,"value":4435},"      {",{"type":41,"tag":402,"props":4437,"children":4438},{"style":785},[4439],{"type":46,"value":3759},{"type":41,"tag":402,"props":4441,"children":4442},{"style":791},[4443],{"type":46,"value":4444},"?.",{"type":41,"tag":402,"props":4446,"children":4447},{"style":532},[4448],{"type":46,"value":4449},"map",{"type":41,"tag":402,"props":4451,"children":4452},{"style":785},[4453],{"type":46,"value":1629},{"type":41,"tag":402,"props":4455,"children":4456},{"style":791},[4457],{"type":46,"value":1629},{"type":41,"tag":402,"props":4459,"children":4460},{"style":2438},[4461],{"type":46,"value":4462},"t",{"type":41,"tag":402,"props":4464,"children":4465},{"style":791},[4466],{"type":46,"value":1673},{"type":41,"tag":402,"props":4468,"children":4469},{"style":1398},[4470],{"type":46,"value":3706},{"type":41,"tag":402,"props":4472,"children":4473},{"style":785},[4474],{"type":46,"value":2694},{"type":41,"tag":402,"props":4476,"children":4477},{"class":404,"line":1700},[4478,4482,4486,4491,4495,4499,4503,4508,4512,4516,4520,4524,4528,4532],{"type":41,"tag":402,"props":4479,"children":4480},{"style":791},[4481],{"type":46,"value":2756},{"type":41,"tag":402,"props":4483,"children":4484},{"style":1446},[4485],{"type":46,"value":4334},{"type":41,"tag":402,"props":4487,"children":4488},{"style":1398},[4489],{"type":46,"value":4490}," key",{"type":41,"tag":402,"props":4492,"children":4493},{"style":791},[4494],{"type":46,"value":1543},{"type":41,"tag":402,"props":4496,"children":4497},{"style":785},[4498],{"type":46,"value":4462},{"type":41,"tag":402,"props":4500,"children":4501},{"style":791},[4502],{"type":46,"value":720},{"type":41,"tag":402,"props":4504,"children":4505},{"style":785},[4506],{"type":46,"value":4507},"_id",{"type":41,"tag":402,"props":4509,"children":4510},{"style":791},[4511],{"type":46,"value":2504},{"type":41,"tag":402,"props":4513,"children":4514},{"style":785},[4515],{"type":46,"value":4462},{"type":41,"tag":402,"props":4517,"children":4518},{"style":791},[4519],{"type":46,"value":720},{"type":41,"tag":402,"props":4521,"children":4522},{"style":785},[4523],{"type":46,"value":46},{"type":41,"tag":402,"props":4525,"children":4526},{"style":791},[4527],{"type":46,"value":2514},{"type":41,"tag":402,"props":4529,"children":4530},{"style":1446},[4531],{"type":46,"value":4334},{"type":41,"tag":402,"props":4533,"children":4534},{"style":791},[4535],{"type":46,"value":2113},{"type":41,"tag":402,"props":4537,"children":4538},{"class":404,"line":1748},[4539,4544],{"type":41,"tag":402,"props":4540,"children":4541},{"style":785},[4542],{"type":46,"value":4543},"      ))",{"type":41,"tag":402,"props":4545,"children":4546},{"style":791},[4547],{"type":46,"value":1579},{"type":41,"tag":402,"props":4549,"children":4550},{"class":404,"line":2179},[4551,4555,4559],{"type":41,"tag":402,"props":4552,"children":4553},{"style":791},[4554],{"type":46,"value":2168},{"type":41,"tag":402,"props":4556,"children":4557},{"style":1446},[4558],{"type":46,"value":4334},{"type":41,"tag":402,"props":4560,"children":4561},{"style":791},[4562],{"type":46,"value":2113},{"type":41,"tag":402,"props":4564,"children":4565},{"class":404,"line":2197},[4566,4570],{"type":41,"tag":402,"props":4567,"children":4568},{"style":1446},[4569],{"type":46,"value":1510},{"type":41,"tag":402,"props":4571,"children":4572},{"style":791},[4573],{"type":46,"value":1515},{"type":41,"tag":402,"props":4575,"children":4576},{"class":404,"line":2827},[4577],{"type":41,"tag":402,"props":4578,"children":4579},{"style":791},[4580],{"type":46,"value":1579},{"type":41,"tag":55,"props":4582,"children":4584},{"id":4583},"development-vs-production",[4585],{"type":46,"value":4586},"Development vs Production",{"type":41,"tag":49,"props":4588,"children":4589},{},[4590,4592,4597],{"type":46,"value":4591},"Always use ",{"type":41,"tag":96,"props":4593,"children":4595},{"className":4594},[],[4596],{"type":46,"value":193},{"type":46,"value":4598}," during development. It runs against your personal\ndev deployment and syncs code on save.",{"type":41,"tag":49,"props":4600,"children":4601},{},[4602],{"type":46,"value":4603},"When ready to ship, deploy to production:",{"type":41,"tag":391,"props":4605,"children":4607},{"className":393,"code":4606,"language":395,"meta":396,"style":396},"npx convex deploy\n",[4608],{"type":41,"tag":96,"props":4609,"children":4610},{"__ignoreMap":396},[4611],{"type":41,"tag":402,"props":4612,"children":4613},{"class":404,"line":405},[4614,4618,4622],{"type":41,"tag":402,"props":4615,"children":4616},{"style":409},[4617],{"type":46,"value":647},{"type":41,"tag":402,"props":4619,"children":4620},{"style":415},[4621],{"type":46,"value":652},{"type":41,"tag":402,"props":4623,"children":4624},{"style":415},[4625],{"type":46,"value":4626}," deploy\n",{"type":41,"tag":49,"props":4628,"children":4629},{},[4630,4632,4638],{"type":46,"value":4631},"This pushes to the production deployment, which is separate from dev. Do not use\n",{"type":41,"tag":96,"props":4633,"children":4635},{"className":4634},[],[4636],{"type":46,"value":4637},"deploy",{"type":46,"value":4639}," during development.",{"type":41,"tag":55,"props":4641,"children":4643},{"id":4642},"next-steps",[4644],{"type":46,"value":4645},"Next Steps",{"type":41,"tag":62,"props":4647,"children":4648},{},[4649,4660,4672,4684,4696,4708],{"type":41,"tag":66,"props":4650,"children":4651},{},[4652,4654,4659],{"type":46,"value":4653},"Add authentication: use the ",{"type":41,"tag":96,"props":4655,"children":4657},{"className":4656},[],[4658],{"type":46,"value":114},{"type":46,"value":116},{"type":41,"tag":66,"props":4661,"children":4662},{},[4663,4665],{"type":46,"value":4664},"Design your schema: see\n",{"type":41,"tag":2851,"props":4666,"children":4669},{"href":4667,"rel":4668},"https:\u002F\u002Fdocs.convex.dev\u002Fdatabase\u002Fschemas",[2855],[4670],{"type":46,"value":4671},"Schema docs",{"type":41,"tag":66,"props":4673,"children":4674},{},[4675,4677,4683],{"type":46,"value":4676},"Build components: use the ",{"type":41,"tag":96,"props":4678,"children":4680},{"className":4679},[],[4681],{"type":46,"value":4682},"convex-create-component",{"type":46,"value":116},{"type":41,"tag":66,"props":4685,"children":4686},{},[4687,4689,4695],{"type":46,"value":4688},"Plan a migration: use the ",{"type":41,"tag":96,"props":4690,"children":4692},{"className":4691},[],[4693],{"type":46,"value":4694},"convex-migration-helper",{"type":46,"value":116},{"type":41,"tag":66,"props":4697,"children":4698},{},[4699,4701],{"type":46,"value":4700},"Add file storage: see\n",{"type":41,"tag":2851,"props":4702,"children":4705},{"href":4703,"rel":4704},"https:\u002F\u002Fdocs.convex.dev\u002Ffile-storage",[2855],[4706],{"type":46,"value":4707},"File Storage docs",{"type":41,"tag":66,"props":4709,"children":4710},{},[4711,4713],{"type":46,"value":4712},"Set up cron jobs: see ",{"type":41,"tag":2851,"props":4714,"children":4717},{"href":4715,"rel":4716},"https:\u002F\u002Fdocs.convex.dev\u002Fscheduling",[2855],[4718],{"type":46,"value":4719},"Scheduling docs",{"type":41,"tag":55,"props":4721,"children":4723},{"id":4722},"checklist",[4724],{"type":46,"value":4725},"Checklist",{"type":41,"tag":62,"props":4727,"children":4730},{"className":4728},[4729],"contains-task-list",[4731,4743,4759,4775,4791,4812,4827,4842],{"type":41,"tag":66,"props":4732,"children":4735},{"className":4733},[4734],"task-list-item",[4736,4741],{"type":41,"tag":4737,"props":4738,"children":4740},"input",{"disabled":1586,"type":4739},"checkbox",[],{"type":46,"value":4742}," Determined starting point: new project or existing app",{"type":41,"tag":66,"props":4744,"children":4746},{"className":4745},[4734],[4747,4750,4752,4757],{"type":41,"tag":4737,"props":4748,"children":4749},{"disabled":1586,"type":4739},[],{"type":46,"value":4751}," If new project: scaffolded with ",{"type":41,"tag":96,"props":4753,"children":4755},{"className":4754},[],[4756],{"type":46,"value":142},{"type":46,"value":4758}," using\nappropriate template",{"type":41,"tag":66,"props":4760,"children":4762},{"className":4761},[4734],[4763,4766,4768,4773],{"type":41,"tag":4737,"props":4764,"children":4765},{"disabled":1586,"type":4739},[],{"type":46,"value":4767}," If existing app: installed ",{"type":41,"tag":96,"props":4769,"children":4771},{"className":4770},[],[4772],{"type":46,"value":8},{"type":46,"value":4774}," and wired up the provider",{"type":41,"tag":66,"props":4776,"children":4778},{"className":4777},[4734],[4779,4782,4784,4789],{"type":41,"tag":4737,"props":4780,"children":4781},{"disabled":1586,"type":4739},[],{"type":46,"value":4783}," Agent ran ",{"type":41,"tag":96,"props":4785,"children":4787},{"className":4786},[],[4788],{"type":46,"value":165},{"type":46,"value":4790},": deployment provisioned, code pushed,\ntypecheck clean",{"type":41,"tag":66,"props":4792,"children":4794},{"className":4793},[4734],[4795,4798,4799,4804,4805,4810],{"type":41,"tag":4737,"props":4796,"children":4797},{"disabled":1586,"type":4739},[],{"type":46,"value":894},{"type":41,"tag":96,"props":4800,"children":4802},{"className":4801},[],[4803],{"type":46,"value":185},{"type":46,"value":1057},{"type":41,"tag":96,"props":4806,"children":4808},{"className":4807},[],[4809],{"type":46,"value":193},{"type":46,"value":4811}," for the watcher alone) is running —\nuser-launched terminal, or background for cloud agents",{"type":41,"tag":66,"props":4813,"children":4815},{"className":4814},[4734],[4816,4819,4820,4825],{"type":41,"tag":4737,"props":4817,"children":4818},{"disabled":1586,"type":4739},[],{"type":46,"value":894},{"type":41,"tag":96,"props":4821,"children":4823},{"className":4822},[],[4824],{"type":46,"value":731},{"type":46,"value":4826}," directory exists with types",{"type":41,"tag":66,"props":4828,"children":4830},{"className":4829},[4734],[4831,4834,4835,4840],{"type":41,"tag":4737,"props":4832,"children":4833},{"disabled":1586,"type":4739},[],{"type":46,"value":894},{"type":41,"tag":96,"props":4836,"children":4838},{"className":4837},[],[4839],{"type":46,"value":718},{"type":46,"value":4841}," has the deployment URL",{"type":41,"tag":66,"props":4843,"children":4845},{"className":4844},[4734],[4846,4849],{"type":41,"tag":4737,"props":4847,"children":4848},{"disabled":1586,"type":4739},[],{"type":46,"value":4850}," Verified a basic query\u002Fmutation round-trip works",{"type":41,"tag":4852,"props":4853,"children":4854},"style",{},[4855],{"type":46,"value":4856},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":4858,"total":1518},[4859,4872,4886,4900,4917,4924],{"slug":8,"name":8,"fn":4860,"description":4861,"org":4862,"tags":4863,"stars":24,"repoUrl":25,"updatedAt":4871},"guide Convex project setup and usage","Routes general Convex requests to the right project skill. Use when the user asks which Convex skill to use or gives an underspecified Convex app task.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4864,4867,4868],{"name":4865,"slug":4866,"type":14},"Backend","backend",{"name":9,"slug":8,"type":14},{"name":4869,"slug":4870,"type":14},"Database","database","2026-07-12T08:00:45.091281",{"slug":4682,"name":4682,"fn":4873,"description":4874,"org":4875,"tags":4876,"stars":24,"repoUrl":25,"updatedAt":4885},"build reusable Convex components","Builds reusable Convex components with isolated tables and app-facing APIs. Use for new components, reusable backend modules, integrations, or component boundary work.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4877,4880,4883,4884],{"name":4878,"slug":4879,"type":14},"API Development","api-development",{"name":4881,"slug":4882,"type":14},"Architecture","architecture",{"name":4865,"slug":4866,"type":14},{"name":9,"slug":8,"type":14},"2026-07-12T08:00:39.428577",{"slug":4694,"name":4694,"fn":4887,"description":4888,"org":4889,"tags":4890,"stars":24,"repoUrl":25,"updatedAt":4899},"plan Convex schema and data migrations","Plans Convex schema and data migrations with widen-migrate-narrow and @convex-dev\u002Fmigrations. Use for breaking schema changes, backfills, table reshaping, or zero-downtime rollouts.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4891,4892,4893,4896],{"name":4865,"slug":4866,"type":14},{"name":9,"slug":8,"type":14},{"name":4894,"slug":4895,"type":14},"Data Engineering","data-engineering",{"name":4897,"slug":4898,"type":14},"Migration","migration","2026-07-12T08:00:51.27967",{"slug":4901,"name":4901,"fn":4902,"description":4903,"org":4904,"tags":4905,"stars":24,"repoUrl":25,"updatedAt":4916},"convex-performance-audit","audit Convex application performance","Audits Convex performance for reads, subscriptions, write contention, and function limits. Use for slow features, insights findings, OCC conflicts, or read amplification.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4906,4907,4910,4913],{"name":9,"slug":8,"type":14},{"name":4908,"slug":4909,"type":14},"Debugging","debugging",{"name":4911,"slug":4912,"type":14},"Monitoring","monitoring",{"name":4914,"slug":4915,"type":14},"Performance","performance","2026-07-12T08:00:50.02928",{"slug":4,"name":4,"fn":5,"description":6,"org":4918,"tags":4919,"stars":24,"repoUrl":25,"updatedAt":26},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4920,4921,4922,4923],{"name":19,"slug":20,"type":14},{"name":9,"slug":8,"type":14},{"name":22,"slug":23,"type":14},{"name":16,"slug":17,"type":14},{"slug":114,"name":114,"fn":4925,"description":4926,"org":4927,"tags":4928,"stars":24,"repoUrl":25,"updatedAt":4937},"set up authentication and access control","Sets up Convex auth, identity mapping, and access control. Use for login, auth providers, users tables, protected functions, or roles in a Convex app.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4929,4932,4935,4936],{"name":4930,"slug":4931,"type":14},"Access Control","access-control",{"name":4933,"slug":4934,"type":14},"Auth","auth",{"name":4865,"slug":4866,"type":14},{"name":9,"slug":8,"type":14},"2026-07-12T08:00:48.652641",{"items":4939,"total":5072},[4940,4946,4953,4960,4967,4974,4981,4993,5012,5026,5043,5057],{"slug":8,"name":8,"fn":4860,"description":4861,"org":4941,"tags":4942,"stars":24,"repoUrl":25,"updatedAt":4871},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4943,4944,4945],{"name":4865,"slug":4866,"type":14},{"name":9,"slug":8,"type":14},{"name":4869,"slug":4870,"type":14},{"slug":4682,"name":4682,"fn":4873,"description":4874,"org":4947,"tags":4948,"stars":24,"repoUrl":25,"updatedAt":4885},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4949,4950,4951,4952],{"name":4878,"slug":4879,"type":14},{"name":4881,"slug":4882,"type":14},{"name":4865,"slug":4866,"type":14},{"name":9,"slug":8,"type":14},{"slug":4694,"name":4694,"fn":4887,"description":4888,"org":4954,"tags":4955,"stars":24,"repoUrl":25,"updatedAt":4899},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4956,4957,4958,4959],{"name":4865,"slug":4866,"type":14},{"name":9,"slug":8,"type":14},{"name":4894,"slug":4895,"type":14},{"name":4897,"slug":4898,"type":14},{"slug":4901,"name":4901,"fn":4902,"description":4903,"org":4961,"tags":4962,"stars":24,"repoUrl":25,"updatedAt":4916},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4963,4964,4965,4966],{"name":9,"slug":8,"type":14},{"name":4908,"slug":4909,"type":14},{"name":4911,"slug":4912,"type":14},{"name":4914,"slug":4915,"type":14},{"slug":4,"name":4,"fn":5,"description":6,"org":4968,"tags":4969,"stars":24,"repoUrl":25,"updatedAt":26},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4970,4971,4972,4973],{"name":19,"slug":20,"type":14},{"name":9,"slug":8,"type":14},{"name":22,"slug":23,"type":14},{"name":16,"slug":17,"type":14},{"slug":114,"name":114,"fn":4925,"description":4926,"org":4975,"tags":4976,"stars":24,"repoUrl":25,"updatedAt":4937},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4977,4978,4979,4980],{"name":4930,"slug":4931,"type":14},{"name":4933,"slug":4934,"type":14},{"name":4865,"slug":4866,"type":14},{"name":9,"slug":8,"type":14},{"slug":4982,"name":4982,"fn":4983,"description":4984,"org":4985,"tags":4986,"stars":446,"repoUrl":4991,"updatedAt":4992},"add","add capabilities to Convex applications","Add a capability to the CURRENT Convex + Next.js project — consults the served Convex capability catalog for always-current procedures (billing, crons, auth, agent, search, …); falls back to built-in hosting or @convex-dev component search. TRIGGER when the user runs $add, or asks to add hosting\u002Fpublishing or any backend capability to an existing Convex app.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4987,4988,4989],{"name":4865,"slug":4866,"type":14},{"name":9,"slug":8,"type":14},{"name":2965,"slug":4990,"type":14},"next-js","https:\u002F\u002Fgithub.com\u002Fget-convex\u002Fconvex-codex-plugin","2026-07-12T07:59:59.358004",{"slug":4994,"name":4994,"fn":4995,"description":4996,"org":4997,"tags":4998,"stars":446,"repoUrl":4991,"updatedAt":5011},"agent","build AI agents with Convex","Build an AI agent \u002F RAG feature on Convex (@convex-dev\u002Fagent: threads, tools, vector search). TRIGGER on an AI-agent\u002Fchatbot\u002FRAG request.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4999,5002,5005,5008],{"name":5000,"slug":5001,"type":14},"Agents","agents",{"name":5003,"slug":5004,"type":14},"Engineering","engineering",{"name":5006,"slug":5007,"type":14},"RAG","rag",{"name":5009,"slug":5010,"type":14},"Search","search","2026-07-12T08:00:01.921824",{"slug":4934,"name":4934,"fn":5013,"description":5014,"org":5015,"tags":5016,"stars":446,"repoUrl":4991,"updatedAt":5025},"add authentication to Convex applications","Add sign-in (passkeys by default, OAuth\u002Fpassword optional) to the current Convex app, wired correctly incl. auth.config.ts. TRIGGER on a login\u002Fauth request for an existing app.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5017,5018,5021,5022],{"name":4933,"slug":4934,"type":14},{"name":5019,"slug":5020,"type":14},"Authentication","authentication",{"name":9,"slug":8,"type":14},{"name":5023,"slug":5024,"type":14},"OAuth","oauth","2026-07-18T05:12:54.443056",{"slug":5027,"name":5027,"fn":5028,"description":5029,"org":5030,"tags":5031,"stars":446,"repoUrl":4991,"updatedAt":5042},"billing","integrate Stripe billing in Convex apps","Add Stripe billing to a Convex app via @convex-dev\u002Fstripe (checkout + auto-verified webhook + subscription gating). TRIGGER on a payments\u002Fbilling\u002Fsubscription request.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5032,5033,5036,5039],{"name":9,"slug":8,"type":14},{"name":5034,"slug":5035,"type":14},"Payments","payments",{"name":5037,"slug":5038,"type":14},"Stripe","stripe",{"name":5040,"slug":5041,"type":14},"Webhooks","webhooks","2026-07-12T08:00:08.123246",{"slug":5044,"name":5044,"fn":5045,"description":5046,"org":5047,"tags":5048,"stars":446,"repoUrl":4991,"updatedAt":5056},"check-updates","upgrade Convex component versions","Check the CURRENT Convex app's pinned components against the latest recommended versions and offer to upgrade them — e.g. the passkey auth component's new email-first sign-in. TRIGGER when the user runs \u002Fcheck-updates or $check-updates, asks 'are my components up to date', 'any updates', 'upgrade auth', 'upgrade my components', or wants the newest features after a quickstart. Applies each upgrade behind a build gate (verify-or-revert) with the user's consent.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5049,5052,5053],{"name":5050,"slug":5051,"type":14},"Configuration","configuration",{"name":9,"slug":8,"type":14},{"name":5054,"slug":5055,"type":14},"Maintenance","maintenance","2026-07-12T08:00:03.236862",{"slug":5058,"name":5058,"fn":5059,"description":5060,"org":5061,"tags":5062,"stars":446,"repoUrl":4991,"updatedAt":5071},"convex-authz","audit and harden Convex authorization","Audit and harden a Convex app's authorization: identity-from-arg impersonation, missing per-document ownership checks, and public queries leaking PII\u002Ffinancial data by a client-supplied id — the single largest real-defect cluster measured against generated Convex backends (44 of 214). Runs a deterministic scan for the 3 shapes, then applies the canonical requireIdentity\u002FrequireOwner pattern, then verifies with tsc. TRIGGER on 'secure my app', 'audit auth', 'add login', 'who can access this data', or an explicit 'audit my authz'. NOT always-on. SKIP when there is no convex\u002F directory.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5063,5064,5067,5068],{"name":4933,"slug":4934,"type":14},{"name":5065,"slug":5066,"type":14},"Code Analysis","code-analysis",{"name":9,"slug":8,"type":14},{"name":5069,"slug":5070,"type":14},"Security","security","2026-07-12T08:00:04.516752",26]