--- name: convex-deploy description: |- Implement Convex deployment workflows, environments, and CI/CD configuration. Use for dev/prod/preview deployments, deploy keys, local deployments, environment variables, schema/index rollout safety, and HTTP action URLs. Use proactively when users mention deploy, preview, staging, CI, env vars, or local backend. Examples: - user: "Set up Convex deploy in CI" → configure deploy key + npx convex deploy steps - user: "How do preview deployments work?" → explain preview keys, lifecycle, limits - user: "Deploy to prod safely" → list safe schema/function change patterns - user: "Use local convex" → explain npx convex dev --local and limitations --- Cover deployment lifecycle, environments, and safe rollout strategies for Convex backends and full-stack apps. - Model: one prod deployment per project, one dev deployment per team member, preview deployments per branch. - Preview deployments are beta and auto-cleaned; data seeding requires `--preview-run`. - Local deployments: `npx convex dev --local --once`, no public URL, Node actions require Node 18. - Agent Mode: Use `CONVEX_AGENT_MODE=anonymous` for AI coding agents to limit permissions during development. - Env vars are per-deployment; system vars `CONVEX_CLOUD_URL` and `CONVEX_SITE_URL`. - Safe change rules: schema MUST match data; use optional/backfill/union migrations; keep functions backwards compatible; scheduled args MUST remain valid. - Project config: `convex.json` CAN change functions path, node runtime; static codegen is beta. - Pausing deployments returns errors for new calls, queues scheduled jobs, skips crons; You SHOULD test on dev first. ### Deployment Operations - Core commands: `npx convex dev`, `npx convex deploy`, `npx convex codegen`, `npx convex run` (use `--prod` for prod). - Agent Mode: You SHOULD use `CONVEX_AGENT_MODE=anonymous npx convex dev --once` when iterating as an AI agent to safely generate codegen artifacts. - Deploy target resolution: `CONVEX_DEPLOY_KEY` overrides, else uses production of `CONVEX_DEPLOYMENT` project. - Build step: `npx convex deploy --cmd "npm run build"` and `--cmd-url-env-var-name` if needed. - Deploy keys: production, preview, dev, admin (You MUST NOT commit/log). - Hosting flows: - Vercel/Netlify build command SHOULD use `npx convex deploy --cmd 'npm run build'`. - You MUST set `CONVEX_DEPLOY_KEY` per environment (Preview vs Production). - Preview seeding via `--preview-run 'functionName'`. - Custom hosting: deploy backend, host frontend elsewhere; custom domains require overriding `CONVEX_CLOUD_URL` and redeploying; optional `CONVEX_SITE_URL`. ### Required Outputs - You MUST use exact CLI commands and flags from docs. - You MUST state target deployment resolution (deploy key vs CONVEX_DEPLOYMENT). - You MUST call out deploy-side effects: schema validation, index backfill, codegen, bundling. - You SHOULD always mention `.convex.site` vs `.convex.cloud` URL usage where relevant. ### Deployment Model - Each project has one production deployment and one cloud dev deployment per team member. - Preview deployments are per-branch and are auto-cleaned after a time window. - Local deployments are dev-only and run as subprocesses of `npx convex dev`. ### CLI Workflow #### Dev - `npx convex dev`: - Watches files, pushes changes to dev deployment. - Regenerates `convex/_generated/*`. - You SHOULD use `--tail-logs` to control log output. - Local dev: - `npx convex dev --local --once` for local backend. - Note: No public URL; HTTP requests need a proxy (e.g., ngrok). - Node actions require Node 18 locally. #### Deploy - `npx convex deploy`: - Typechecks functions. - Regenerates codegen. - Bundles and pushes functions, schema, and indexes. - Deploy target resolution: - If `CONVEX_DEPLOY_KEY` is set, deploys to that key's target. - Else uses the production deployment of `CONVEX_DEPLOYMENT`'s project. - Optional build command: - `npx convex deploy --cmd "npm run build"` - Use `--cmd-url-env-var-name` to customize env var name. ### Deploy Keys - Production deploy key: targets project production deployment (typical CI). - Preview deploy key: creates preview deployment per branch. - Dev deploy key: scoped to a single dev deployment. - Admin key: full control; used for anonymous local deployments. - **Security**: You MUST NOT paste deploy keys into code or commit history. ### Preview Deployments - Beta feature, lifecycle auto-cleans (5 days default). - Preview deployment name is tied to branch; redeploy replaces previous preview. - Data seeding requires running a function during deploy (`--preview-run`). ### Environment Variables - You MUST set per-deployment via dashboard or `npx convex env`. - Same key MAY require values in both dev and prod. - System vars: - `CONVEX_CLOUD_URL` for client RPCs. - `CONVEX_SITE_URL` for HTTP actions. - You MUST NOT branch exports on `process.env` at runtime; functions set at deploy time. ### Safe Rollout Rules - Schema MUST match existing data; deploy blocks on validation failures. - Safe schema changes: - Add tables. - Add optional fields, backfill, then make required. - Widen via `v.union`, backfill, then narrow. - Functions MUST remain backward compatible while old clients are running. - Scheduled functions MUST accept previously scheduled args. ### Index Backfill - New indexes backfill during deploy; CAN slow production push. - You SHOULD use staged indexes (including search/vector) for large tables. - Removing indexes deletes them on deploy; You MUST ensure no code paths depend on them. ### URLs - HTTP actions: `https://.convex.site`. - Client URLs: `https://.convex.cloud` (via `CONVEX_CLOUD_URL`). - You SHOULD warn about mixing `.convex.site` and `.convex.cloud`. ### Response Checklist - [ ] State environment (dev/prod/preview/local). - [ ] Provide exact commands and required env vars. - [ ] List safety considerations (schema, functions, scheduled). - [ ] Mention logs location (CLI or dashboard) when troubleshooting.