[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-openai-vercel-functions":3,"mdc--hsqjqu-key":39,"related-org-openai-vercel-functions":3139,"related-repo-openai-vercel-functions":3346},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":28,"repoUrl":29,"updatedAt":30,"license":31,"forks":32,"topics":33,"repo":34,"sourceUrl":37,"mdContent":38},"vercel-functions","configure and optimize Vercel Functions","Vercel Functions expert guidance — Serverless Functions, Edge Functions, Fluid Compute, streaming, Cron Jobs, and runtime configuration. Use when configuring, debugging, or optimizing server-side code running on Vercel.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"openai","OpenAI","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fopenai.png",[12,16,19,22,25],{"name":13,"slug":14,"type":15},"Performance","performance","tag",{"name":17,"slug":18,"type":15},"Vercel","vercel",{"name":20,"slug":21,"type":15},"Backend","backend",{"name":23,"slug":24,"type":15},"Serverless","serverless",{"name":26,"slug":27,"type":15},"Edge Functions","edge-functions",3992,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins","2026-04-06T18:41:16.259595",null,465,[],{"repoUrl":29,"stars":28,"forks":32,"topics":35,"description":36},[],"OpenAI Plugins","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins\u002Ftree\u002FHEAD\u002Fplugins\u002Fvercel\u002Fskills\u002Fvercel-functions","---\nname: vercel-functions\ndescription: Vercel Functions expert guidance — Serverless Functions, Edge Functions, Fluid Compute, streaming, Cron Jobs, and runtime configuration. Use when configuring, debugging, or optimizing server-side code running on Vercel.\nmetadata:\n  priority: 8\n  docs:\n    - \"https:\u002F\u002Fvercel.com\u002Fdocs\u002Ffunctions\"\n    - \"https:\u002F\u002Fvercel.com\u002Fdocs\u002Ffunctions\u002Fruntimes\"\n  sitemap: \"https:\u002F\u002Fvercel.com\u002Fsitemap\u002Fdocs.xml\"\n  pathPatterns:\n    - 'api\u002F**\u002F*.*'\n    - 'pages\u002Fapi\u002F**'\n    - 'src\u002Fpages\u002Fapi\u002F**'\n    - 'app\u002F**\u002Froute.*'\n    - 'src\u002Fapp\u002F**\u002Froute.*'\n    - 'apps\u002F*\u002Fapi\u002F**\u002F*.*'\n    - 'apps\u002F*\u002Fapp\u002F**\u002Froute.*'\n    - 'apps\u002F*\u002Fsrc\u002Fapp\u002F**\u002Froute.*'\n    - 'apps\u002F*\u002Fpages\u002Fapi\u002F**'\n    - 'vercel.json'\n    - 'apps\u002F*\u002Fvercel.json'\n  bashPatterns:\n    - '\\bvercel\\s+dev\\b'\n    - '\\bvercel\\s+logs\\b'\n---\n\n# Vercel Functions\n\nYou are an expert in Vercel Functions — the compute layer of the Vercel platform.\n\n## Function Types\n\n### Serverless Functions (Node.js)\n- Full Node.js runtime, all npm packages available\n- Default for Next.js API routes, Server Actions, Server Components\n- Cold starts: 800ms–2.5s (with DB connections)\n- Max duration: 10s (Hobby), 300s (Pro default), 800s (Fluid Compute Pro\u002FEnterprise)\n\n```ts\n\u002F\u002F app\u002Fapi\u002Fhello\u002Froute.ts\nexport async function GET() {\n  return Response.json({ message: 'Hello from Node.js' })\n}\n```\n\n### Edge Functions (V8 Isolates)\n- Lightweight V8 runtime, Web Standard APIs only\n- Ultra-low cold starts (\u003C1ms globally)\n- Limited API surface (no full Node.js)\n- Best for: auth checks, redirects, A\u002FB testing, simple transformations\n\n```ts\n\u002F\u002F app\u002Fapi\u002Fhello\u002Froute.ts\nexport const runtime = 'edge'\n\nexport async function GET() {\n  return new Response('Hello from the Edge')\n}\n```\n\n### Bun Runtime (Public Beta)\n\nAdd `\"bunVersion\": \"1.x\"` to `vercel.json` to run Node.js functions on Bun instead. ~28% lower latency for CPU-bound workloads. Supports Next.js, Express, Hono, Nitro.\n\n### Rust Runtime (Public Beta)\n\nRust functions run on Fluid Compute with HTTP streaming and Active CPU pricing. Built on the community Rust runtime. Supports environment variables up to 64 KB.\n\n### Node.js 24 LTS\n\nNode.js 24 LTS is now GA on Vercel for both builds and functions. Features V8 13.6, global `URLPattern`, Undici v7 for faster `fetch()`, and npm v11.\n\n### Choosing Runtime\n\n| Need | Runtime | Why |\n|------|---------|-----|\n| Full Node.js APIs, npm packages | `nodejs` | Full compatibility |\n| Lower latency, CPU-bound work | `nodejs` + Bun | ~28% latency reduction |\n| Ultra-low latency, simple logic | `edge` | \u003C1ms cold start, global |\n| Database connections, heavy deps | `nodejs` | Edge lacks full Node.js |\n| Auth\u002Fredirect at the edge | `edge` | Fastest response |\n| AI streaming | Either | Both support streaming |\n| Systems-level performance | `rust` (beta) | Native speed, Fluid Compute |\n\n## Fluid Compute\n\nFluid Compute is the unified execution model for all Vercel Functions (both Node.js and Edge).\n\nKey benefits:\n- **Optimized concurrency**: Multiple invocations on a single instance — up to 85% cost reduction for high-concurrency workloads\n- **Extended durations**: Default 300s for all plans; up to 800s on Pro\u002FEnterprise\n- **Active CPU pricing**: Charges only while CPU is actively working, not during idle\u002Fawait time. Enabled by default for all plans. Memory-only periods billed at a significantly lower rate.\n- **Background processing**: `waitUntil` \u002F `after` for post-response tasks\n- **Dynamic scaling**: Automatic during traffic spikes\n- **Bytecode caching**: Reduces cold starts via Rust-based runtime with pre-compiled function code\n- **Multi-region failover**: Default for Enterprise when Fluid is activated\n\n### Instance Sizes\n\n| Size | CPU | Memory |\n|------|-----|--------|\n| Standard (default) | 1 vCPU | 2 GB |\n| Performance | 2 vCPU | 4 GB |\n\nHobby projects use Standard CPU. The Basic CPU instance has been removed.\n\n### Background Processing with `waitUntil`\n\n```ts\n\u002F\u002F Continue work after sending response\nimport { waitUntil } from '@vercel\u002Ffunctions'\n\nexport async function POST(req: Request) {\n  const data = await req.json()\n\n  \u002F\u002F Send response immediately\n  const response = Response.json({ received: true })\n\n  \u002F\u002F Continue processing in background\n  waitUntil(async () => {\n    await processAnalytics(data)\n    await sendNotification(data)\n  })\n\n  return response\n}\n```\n\n### Next.js `after` (equivalent)\n\n```ts\nimport { after } from 'next\u002Fserver'\n\nexport async function POST(req: Request) {\n  const data = await req.json()\n\n  after(async () => {\n    await logToAnalytics(data)\n  })\n\n  return Response.json({ ok: true })\n}\n```\n\n## Streaming\n\nZero-config streaming for both runtimes. Essential for AI applications.\n\n```ts\nexport async function POST(req: Request) {\n  const encoder = new TextEncoder()\n  const stream = new ReadableStream({\n    async start(controller) {\n      for (const chunk of data) {\n        controller.enqueue(encoder.encode(chunk))\n        await new Promise(r => setTimeout(r, 100))\n      }\n      controller.close()\n    },\n  })\n\n  return new Response(stream, {\n    headers: { 'Content-Type': 'text\u002Fevent-stream' },\n  })\n}\n```\n\nFor AI streaming, use the AI SDK's `toUIMessageStreamResponse()` (for chat UIs with `useChat`) which handles SSE formatting automatically.\n\n## Cron Jobs\n\nSchedule function invocations via `vercel.json`:\n\n```json\n{\n  \"crons\": [\n    {\n      \"path\": \"\u002Fapi\u002Fdaily-report\",\n      \"schedule\": \"0 8 * * *\"\n    },\n    {\n      \"path\": \"\u002Fapi\u002Fcleanup\",\n      \"schedule\": \"0 *\u002F6 * * *\"\n    }\n  ]\n}\n```\n\nThe cron endpoint receives a normal HTTP request. Verify it's from Vercel:\n\n```ts\nexport async function GET(req: Request) {\n  const authHeader = req.headers.get('authorization')\n  if (authHeader !== `Bearer ${process.env.CRON_SECRET}`) {\n    return new Response('Unauthorized', { status: 401 })\n  }\n  \u002F\u002F Do scheduled work\n  return Response.json({ ok: true })\n}\n```\n\n## Configuration via vercel.json\n\n**Deprecation notice**: Support for the legacy `now.json` config file will be removed on **March 31, 2026**. Rename `now.json` to `vercel.json` (no content changes required).\n\n```json\n{\n  \"functions\": {\n    \"app\u002Fapi\u002Fheavy\u002F**\": {\n      \"maxDuration\": 300,\n      \"memory\": 1024\n    },\n    \"app\u002Fapi\u002Fedge\u002F**\": {\n      \"runtime\": \"edge\"\n    }\n  }\n}\n```\n\n## Timeout Limits\n\nAll plans now default to 300s execution time with Fluid Compute.\n\n| Plan | Default | Max |\n|------|---------|-----|\n| Hobby | 300s | 300s |\n| Pro | 300s | 800s |\n| Enterprise | 300s | 800s |\n\n## Common Pitfalls\n\n1. **Cold starts with DB connections**: Use connection pooling (e.g., Neon's `@neondatabase\u002Fserverless`)\n2. **Edge limitations**: No `fs`, no native modules, limited `crypto` — use Node.js runtime if needed\n3. **Timeout exceeded**: Use Fluid Compute for long-running tasks, or Workflow DevKit for very long processes\n4. **Bundle size**: Python runtime supports up to 500MB; Node.js has smaller limits\n5. **Environment variables**: Available in all functions automatically; use `vercel env pull` for local dev\n\n## Function Runtime Diagnostics\n\n### Timeout Diagnostics\n\n```\n504 Gateway Timeout?\n├─ All plans default to 300s with Fluid Compute\n├─ Pro\u002FEnterprise: configurable up to 800s\n├─ Long-running task?\n│  ├─ Under 5 min → Use Fluid Compute with streaming\n│  ├─ Up to 15 min → Use Vercel Functions with `maxDuration` in vercel.json\n│  └─ Hours\u002Fdays → Use Workflow DevKit (DurableAgent or workflow steps)\n└─ DB query slow? → Add connection pooling, check cold start, use Edge Config\n```\n\n### 500 Error Diagnostics\n\n```\n500 Internal Server Error?\n├─ Check Vercel Runtime Logs (Dashboard → Deployments → Functions tab)\n├─ Missing env vars? → Compare `.env.local` against Vercel dashboard settings\n├─ Import error? → Verify package is in `dependencies`, not `devDependencies`\n└─ Uncaught exception? → Wrap handler in try\u002Fcatch, use `after()` for error reporting\n```\n\n### Invocation Failure Diagnostics\n\n```\n\"FUNCTION_INVOCATION_FAILED\"?\n├─ Memory exceeded? → Increase `memory` in vercel.json (up to 3008 MB on Pro)\n├─ Crashed during init? → Check top-level await or heavy imports at module scope\n└─ Edge Function crash? → Check for Node.js APIs not available in Edge runtime\n```\n\n### Cold Start Diagnostics\n\n```\nCold start latency > 1s?\n├─ Using Node.js runtime? → Consider Edge Functions for latency-sensitive routes\n├─ Large function bundle? → Audit imports, use dynamic imports, tree-shake\n├─ DB connection in cold start? → Use connection pooling (Neon serverless driver)\n└─ Enable Fluid Compute to reuse warm instances across requests\n```\n\n### Edge Function Timeout Diagnostics\n\n```\n\"EDGE_FUNCTION_INVOCATION_TIMEOUT\"?\n├─ Edge Functions have 25s hard limit (not configurable)\n├─ Move heavy computation to Node.js Serverless Functions\n└─ Use streaming to start response early, process in background with `waitUntil`\n```\n\n## Official Documentation\n\n- [Vercel Functions](https:\u002F\u002Fvercel.com\u002Fdocs\u002Ffunctions)\n- [Serverless Functions](https:\u002F\u002Fvercel.com\u002Fdocs\u002Ffunctions)\n- [Edge Functions](https:\u002F\u002Fvercel.com\u002Fdocs\u002Ffunctions)\n- [Fluid Compute](https:\u002F\u002Fvercel.com\u002Fdocs\u002Ffluid-compute)\n- [Streaming](https:\u002F\u002Fvercel.com\u002Fdocs\u002Ffunctions\u002Fstreaming)\n- [Cron Jobs](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fcron-jobs)\n- [GitHub: Vercel](https:\u002F\u002Fgithub.com\u002Fvercel\u002Fvercel)\n",{"data":40,"body":62},{"name":4,"description":6,"metadata":41},{"priority":42,"docs":43,"sitemap":46,"pathPatterns":47,"bashPatterns":59},8,[44,45],"https:\u002F\u002Fvercel.com\u002Fdocs\u002Ffunctions","https:\u002F\u002Fvercel.com\u002Fdocs\u002Ffunctions\u002Fruntimes","https:\u002F\u002Fvercel.com\u002Fsitemap\u002Fdocs.xml",[48,49,50,51,52,53,54,55,56,57,58],"api\u002F**\u002F*.*","pages\u002Fapi\u002F**","src\u002Fpages\u002Fapi\u002F**","app\u002F**\u002Froute.*","src\u002Fapp\u002F**\u002Froute.*","apps\u002F*\u002Fapi\u002F**\u002F*.*","apps\u002F*\u002Fapp\u002F**\u002Froute.*","apps\u002F*\u002Fsrc\u002Fapp\u002F**\u002Froute.*","apps\u002F*\u002Fpages\u002Fapi\u002F**","vercel.json","apps\u002F*\u002Fvercel.json",[60,61],"\\bvercel\\s+dev\\b","\\bvercel\\s+logs\\b",{"type":63,"children":64},"root",[65,73,79,86,93,118,261,267,290,422,428,448,454,459,465,486,492,675,681,686,691,781,787,849,854,865,1235,1248,1509,1515,1520,1967,1988,1994,2005,2234,2239,2554,2560,2598,2799,2805,2810,2887,2893,2978,2984,2990,3000,3006,3015,3021,3030,3036,3045,3051,3060,3066,3133],{"type":66,"tag":67,"props":68,"children":69},"element","h1",{"id":4},[70],{"type":71,"value":72},"text","Vercel Functions",{"type":66,"tag":74,"props":75,"children":76},"p",{},[77],{"type":71,"value":78},"You are an expert in Vercel Functions — the compute layer of the Vercel platform.",{"type":66,"tag":80,"props":81,"children":83},"h2",{"id":82},"function-types",[84],{"type":71,"value":85},"Function Types",{"type":66,"tag":87,"props":88,"children":90},"h3",{"id":89},"serverless-functions-nodejs",[91],{"type":71,"value":92},"Serverless Functions (Node.js)",{"type":66,"tag":94,"props":95,"children":96},"ul",{},[97,103,108,113],{"type":66,"tag":98,"props":99,"children":100},"li",{},[101],{"type":71,"value":102},"Full Node.js runtime, all npm packages available",{"type":66,"tag":98,"props":104,"children":105},{},[106],{"type":71,"value":107},"Default for Next.js API routes, Server Actions, Server Components",{"type":66,"tag":98,"props":109,"children":110},{},[111],{"type":71,"value":112},"Cold starts: 800ms–2.5s (with DB connections)",{"type":66,"tag":98,"props":114,"children":115},{},[116],{"type":71,"value":117},"Max duration: 10s (Hobby), 300s (Pro default), 800s (Fluid Compute Pro\u002FEnterprise)",{"type":66,"tag":119,"props":120,"children":125},"pre",{"className":121,"code":122,"language":123,"meta":124,"style":124},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F app\u002Fapi\u002Fhello\u002Froute.ts\nexport async function GET() {\n  return Response.json({ message: 'Hello from Node.js' })\n}\n","ts","",[126],{"type":66,"tag":127,"props":128,"children":129},"code",{"__ignoreMap":124},[130,142,180,252],{"type":66,"tag":131,"props":132,"children":135},"span",{"class":133,"line":134},"line",1,[136],{"type":66,"tag":131,"props":137,"children":139},{"style":138},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[140],{"type":71,"value":141},"\u002F\u002F app\u002Fapi\u002Fhello\u002Froute.ts\n",{"type":66,"tag":131,"props":143,"children":145},{"class":133,"line":144},2,[146,152,158,163,169,175],{"type":66,"tag":131,"props":147,"children":149},{"style":148},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[150],{"type":71,"value":151},"export",{"type":66,"tag":131,"props":153,"children":155},{"style":154},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[156],{"type":71,"value":157}," async",{"type":66,"tag":131,"props":159,"children":160},{"style":154},[161],{"type":71,"value":162}," function",{"type":66,"tag":131,"props":164,"children":166},{"style":165},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[167],{"type":71,"value":168}," GET",{"type":66,"tag":131,"props":170,"children":172},{"style":171},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[173],{"type":71,"value":174},"()",{"type":66,"tag":131,"props":176,"children":177},{"style":171},[178],{"type":71,"value":179}," {\n",{"type":66,"tag":131,"props":181,"children":183},{"class":133,"line":182},3,[184,189,195,200,205,211,216,221,226,231,237,242,247],{"type":66,"tag":131,"props":185,"children":186},{"style":148},[187],{"type":71,"value":188},"  return",{"type":66,"tag":131,"props":190,"children":192},{"style":191},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[193],{"type":71,"value":194}," Response",{"type":66,"tag":131,"props":196,"children":197},{"style":171},[198],{"type":71,"value":199},".",{"type":66,"tag":131,"props":201,"children":202},{"style":165},[203],{"type":71,"value":204},"json",{"type":66,"tag":131,"props":206,"children":208},{"style":207},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[209],{"type":71,"value":210},"(",{"type":66,"tag":131,"props":212,"children":213},{"style":171},[214],{"type":71,"value":215},"{",{"type":66,"tag":131,"props":217,"children":218},{"style":207},[219],{"type":71,"value":220}," message",{"type":66,"tag":131,"props":222,"children":223},{"style":171},[224],{"type":71,"value":225},":",{"type":66,"tag":131,"props":227,"children":228},{"style":171},[229],{"type":71,"value":230}," '",{"type":66,"tag":131,"props":232,"children":234},{"style":233},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[235],{"type":71,"value":236},"Hello from Node.js",{"type":66,"tag":131,"props":238,"children":239},{"style":171},[240],{"type":71,"value":241},"'",{"type":66,"tag":131,"props":243,"children":244},{"style":171},[245],{"type":71,"value":246}," }",{"type":66,"tag":131,"props":248,"children":249},{"style":207},[250],{"type":71,"value":251},")\n",{"type":66,"tag":131,"props":253,"children":255},{"class":133,"line":254},4,[256],{"type":66,"tag":131,"props":257,"children":258},{"style":171},[259],{"type":71,"value":260},"}\n",{"type":66,"tag":87,"props":262,"children":264},{"id":263},"edge-functions-v8-isolates",[265],{"type":71,"value":266},"Edge Functions (V8 Isolates)",{"type":66,"tag":94,"props":268,"children":269},{},[270,275,280,285],{"type":66,"tag":98,"props":271,"children":272},{},[273],{"type":71,"value":274},"Lightweight V8 runtime, Web Standard APIs only",{"type":66,"tag":98,"props":276,"children":277},{},[278],{"type":71,"value":279},"Ultra-low cold starts (\u003C1ms globally)",{"type":66,"tag":98,"props":281,"children":282},{},[283],{"type":71,"value":284},"Limited API surface (no full Node.js)",{"type":66,"tag":98,"props":286,"children":287},{},[288],{"type":71,"value":289},"Best for: auth checks, redirects, A\u002FB testing, simple transformations",{"type":66,"tag":119,"props":291,"children":293},{"className":121,"code":292,"language":123,"meta":124,"style":124},"\u002F\u002F app\u002Fapi\u002Fhello\u002Froute.ts\nexport const runtime = 'edge'\n\nexport async function GET() {\n  return new Response('Hello from the Edge')\n}\n",[294],{"type":66,"tag":127,"props":295,"children":296},{"__ignoreMap":124},[297,304,340,349,376,414],{"type":66,"tag":131,"props":298,"children":299},{"class":133,"line":134},[300],{"type":66,"tag":131,"props":301,"children":302},{"style":138},[303],{"type":71,"value":141},{"type":66,"tag":131,"props":305,"children":306},{"class":133,"line":144},[307,311,316,321,326,330,335],{"type":66,"tag":131,"props":308,"children":309},{"style":148},[310],{"type":71,"value":151},{"type":66,"tag":131,"props":312,"children":313},{"style":154},[314],{"type":71,"value":315}," const",{"type":66,"tag":131,"props":317,"children":318},{"style":191},[319],{"type":71,"value":320}," runtime ",{"type":66,"tag":131,"props":322,"children":323},{"style":171},[324],{"type":71,"value":325},"=",{"type":66,"tag":131,"props":327,"children":328},{"style":171},[329],{"type":71,"value":230},{"type":66,"tag":131,"props":331,"children":332},{"style":233},[333],{"type":71,"value":334},"edge",{"type":66,"tag":131,"props":336,"children":337},{"style":171},[338],{"type":71,"value":339},"'\n",{"type":66,"tag":131,"props":341,"children":342},{"class":133,"line":182},[343],{"type":66,"tag":131,"props":344,"children":346},{"emptyLinePlaceholder":345},true,[347],{"type":71,"value":348},"\n",{"type":66,"tag":131,"props":350,"children":351},{"class":133,"line":254},[352,356,360,364,368,372],{"type":66,"tag":131,"props":353,"children":354},{"style":148},[355],{"type":71,"value":151},{"type":66,"tag":131,"props":357,"children":358},{"style":154},[359],{"type":71,"value":157},{"type":66,"tag":131,"props":361,"children":362},{"style":154},[363],{"type":71,"value":162},{"type":66,"tag":131,"props":365,"children":366},{"style":165},[367],{"type":71,"value":168},{"type":66,"tag":131,"props":369,"children":370},{"style":171},[371],{"type":71,"value":174},{"type":66,"tag":131,"props":373,"children":374},{"style":171},[375],{"type":71,"value":179},{"type":66,"tag":131,"props":377,"children":379},{"class":133,"line":378},5,[380,384,389,393,397,401,406,410],{"type":66,"tag":131,"props":381,"children":382},{"style":148},[383],{"type":71,"value":188},{"type":66,"tag":131,"props":385,"children":386},{"style":171},[387],{"type":71,"value":388}," new",{"type":66,"tag":131,"props":390,"children":391},{"style":165},[392],{"type":71,"value":194},{"type":66,"tag":131,"props":394,"children":395},{"style":207},[396],{"type":71,"value":210},{"type":66,"tag":131,"props":398,"children":399},{"style":171},[400],{"type":71,"value":241},{"type":66,"tag":131,"props":402,"children":403},{"style":233},[404],{"type":71,"value":405},"Hello from the Edge",{"type":66,"tag":131,"props":407,"children":408},{"style":171},[409],{"type":71,"value":241},{"type":66,"tag":131,"props":411,"children":412},{"style":207},[413],{"type":71,"value":251},{"type":66,"tag":131,"props":415,"children":417},{"class":133,"line":416},6,[418],{"type":66,"tag":131,"props":419,"children":420},{"style":171},[421],{"type":71,"value":260},{"type":66,"tag":87,"props":423,"children":425},{"id":424},"bun-runtime-public-beta",[426],{"type":71,"value":427},"Bun Runtime (Public Beta)",{"type":66,"tag":74,"props":429,"children":430},{},[431,433,439,441,446],{"type":71,"value":432},"Add ",{"type":66,"tag":127,"props":434,"children":436},{"className":435},[],[437],{"type":71,"value":438},"\"bunVersion\": \"1.x\"",{"type":71,"value":440}," to ",{"type":66,"tag":127,"props":442,"children":444},{"className":443},[],[445],{"type":71,"value":57},{"type":71,"value":447}," to run Node.js functions on Bun instead. ~28% lower latency for CPU-bound workloads. Supports Next.js, Express, Hono, Nitro.",{"type":66,"tag":87,"props":449,"children":451},{"id":450},"rust-runtime-public-beta",[452],{"type":71,"value":453},"Rust Runtime (Public Beta)",{"type":66,"tag":74,"props":455,"children":456},{},[457],{"type":71,"value":458},"Rust functions run on Fluid Compute with HTTP streaming and Active CPU pricing. Built on the community Rust runtime. Supports environment variables up to 64 KB.",{"type":66,"tag":87,"props":460,"children":462},{"id":461},"nodejs-24-lts",[463],{"type":71,"value":464},"Node.js 24 LTS",{"type":66,"tag":74,"props":466,"children":467},{},[468,470,476,478,484],{"type":71,"value":469},"Node.js 24 LTS is now GA on Vercel for both builds and functions. Features V8 13.6, global ",{"type":66,"tag":127,"props":471,"children":473},{"className":472},[],[474],{"type":71,"value":475},"URLPattern",{"type":71,"value":477},", Undici v7 for faster ",{"type":66,"tag":127,"props":479,"children":481},{"className":480},[],[482],{"type":71,"value":483},"fetch()",{"type":71,"value":485},", and npm v11.",{"type":66,"tag":87,"props":487,"children":489},{"id":488},"choosing-runtime",[490],{"type":71,"value":491},"Choosing Runtime",{"type":66,"tag":493,"props":494,"children":495},"table",{},[496,520],{"type":66,"tag":497,"props":498,"children":499},"thead",{},[500],{"type":66,"tag":501,"props":502,"children":503},"tr",{},[504,510,515],{"type":66,"tag":505,"props":506,"children":507},"th",{},[508],{"type":71,"value":509},"Need",{"type":66,"tag":505,"props":511,"children":512},{},[513],{"type":71,"value":514},"Runtime",{"type":66,"tag":505,"props":516,"children":517},{},[518],{"type":71,"value":519},"Why",{"type":66,"tag":521,"props":522,"children":523},"tbody",{},[524,547,570,591,612,633,651],{"type":66,"tag":501,"props":525,"children":526},{},[527,533,542],{"type":66,"tag":528,"props":529,"children":530},"td",{},[531],{"type":71,"value":532},"Full Node.js APIs, npm packages",{"type":66,"tag":528,"props":534,"children":535},{},[536],{"type":66,"tag":127,"props":537,"children":539},{"className":538},[],[540],{"type":71,"value":541},"nodejs",{"type":66,"tag":528,"props":543,"children":544},{},[545],{"type":71,"value":546},"Full compatibility",{"type":66,"tag":501,"props":548,"children":549},{},[550,555,565],{"type":66,"tag":528,"props":551,"children":552},{},[553],{"type":71,"value":554},"Lower latency, CPU-bound work",{"type":66,"tag":528,"props":556,"children":557},{},[558,563],{"type":66,"tag":127,"props":559,"children":561},{"className":560},[],[562],{"type":71,"value":541},{"type":71,"value":564}," + Bun",{"type":66,"tag":528,"props":566,"children":567},{},[568],{"type":71,"value":569},"~28% latency reduction",{"type":66,"tag":501,"props":571,"children":572},{},[573,578,586],{"type":66,"tag":528,"props":574,"children":575},{},[576],{"type":71,"value":577},"Ultra-low latency, simple logic",{"type":66,"tag":528,"props":579,"children":580},{},[581],{"type":66,"tag":127,"props":582,"children":584},{"className":583},[],[585],{"type":71,"value":334},{"type":66,"tag":528,"props":587,"children":588},{},[589],{"type":71,"value":590},"\u003C1ms cold start, global",{"type":66,"tag":501,"props":592,"children":593},{},[594,599,607],{"type":66,"tag":528,"props":595,"children":596},{},[597],{"type":71,"value":598},"Database connections, heavy deps",{"type":66,"tag":528,"props":600,"children":601},{},[602],{"type":66,"tag":127,"props":603,"children":605},{"className":604},[],[606],{"type":71,"value":541},{"type":66,"tag":528,"props":608,"children":609},{},[610],{"type":71,"value":611},"Edge lacks full Node.js",{"type":66,"tag":501,"props":613,"children":614},{},[615,620,628],{"type":66,"tag":528,"props":616,"children":617},{},[618],{"type":71,"value":619},"Auth\u002Fredirect at the edge",{"type":66,"tag":528,"props":621,"children":622},{},[623],{"type":66,"tag":127,"props":624,"children":626},{"className":625},[],[627],{"type":71,"value":334},{"type":66,"tag":528,"props":629,"children":630},{},[631],{"type":71,"value":632},"Fastest response",{"type":66,"tag":501,"props":634,"children":635},{},[636,641,646],{"type":66,"tag":528,"props":637,"children":638},{},[639],{"type":71,"value":640},"AI streaming",{"type":66,"tag":528,"props":642,"children":643},{},[644],{"type":71,"value":645},"Either",{"type":66,"tag":528,"props":647,"children":648},{},[649],{"type":71,"value":650},"Both support streaming",{"type":66,"tag":501,"props":652,"children":653},{},[654,659,670],{"type":66,"tag":528,"props":655,"children":656},{},[657],{"type":71,"value":658},"Systems-level performance",{"type":66,"tag":528,"props":660,"children":661},{},[662,668],{"type":66,"tag":127,"props":663,"children":665},{"className":664},[],[666],{"type":71,"value":667},"rust",{"type":71,"value":669}," (beta)",{"type":66,"tag":528,"props":671,"children":672},{},[673],{"type":71,"value":674},"Native speed, Fluid Compute",{"type":66,"tag":80,"props":676,"children":678},{"id":677},"fluid-compute",[679],{"type":71,"value":680},"Fluid Compute",{"type":66,"tag":74,"props":682,"children":683},{},[684],{"type":71,"value":685},"Fluid Compute is the unified execution model for all Vercel Functions (both Node.js and Edge).",{"type":66,"tag":74,"props":687,"children":688},{},[689],{"type":71,"value":690},"Key benefits:",{"type":66,"tag":94,"props":692,"children":693},{},[694,705,715,725,751,761,771],{"type":66,"tag":98,"props":695,"children":696},{},[697,703],{"type":66,"tag":698,"props":699,"children":700},"strong",{},[701],{"type":71,"value":702},"Optimized concurrency",{"type":71,"value":704},": Multiple invocations on a single instance — up to 85% cost reduction for high-concurrency workloads",{"type":66,"tag":98,"props":706,"children":707},{},[708,713],{"type":66,"tag":698,"props":709,"children":710},{},[711],{"type":71,"value":712},"Extended durations",{"type":71,"value":714},": Default 300s for all plans; up to 800s on Pro\u002FEnterprise",{"type":66,"tag":98,"props":716,"children":717},{},[718,723],{"type":66,"tag":698,"props":719,"children":720},{},[721],{"type":71,"value":722},"Active CPU pricing",{"type":71,"value":724},": Charges only while CPU is actively working, not during idle\u002Fawait time. Enabled by default for all plans. Memory-only periods billed at a significantly lower rate.",{"type":66,"tag":98,"props":726,"children":727},{},[728,733,735,741,743,749],{"type":66,"tag":698,"props":729,"children":730},{},[731],{"type":71,"value":732},"Background processing",{"type":71,"value":734},": ",{"type":66,"tag":127,"props":736,"children":738},{"className":737},[],[739],{"type":71,"value":740},"waitUntil",{"type":71,"value":742}," \u002F ",{"type":66,"tag":127,"props":744,"children":746},{"className":745},[],[747],{"type":71,"value":748},"after",{"type":71,"value":750}," for post-response tasks",{"type":66,"tag":98,"props":752,"children":753},{},[754,759],{"type":66,"tag":698,"props":755,"children":756},{},[757],{"type":71,"value":758},"Dynamic scaling",{"type":71,"value":760},": Automatic during traffic spikes",{"type":66,"tag":98,"props":762,"children":763},{},[764,769],{"type":66,"tag":698,"props":765,"children":766},{},[767],{"type":71,"value":768},"Bytecode caching",{"type":71,"value":770},": Reduces cold starts via Rust-based runtime with pre-compiled function code",{"type":66,"tag":98,"props":772,"children":773},{},[774,779],{"type":66,"tag":698,"props":775,"children":776},{},[777],{"type":71,"value":778},"Multi-region failover",{"type":71,"value":780},": Default for Enterprise when Fluid is activated",{"type":66,"tag":87,"props":782,"children":784},{"id":783},"instance-sizes",[785],{"type":71,"value":786},"Instance Sizes",{"type":66,"tag":493,"props":788,"children":789},{},[790,811],{"type":66,"tag":497,"props":791,"children":792},{},[793],{"type":66,"tag":501,"props":794,"children":795},{},[796,801,806],{"type":66,"tag":505,"props":797,"children":798},{},[799],{"type":71,"value":800},"Size",{"type":66,"tag":505,"props":802,"children":803},{},[804],{"type":71,"value":805},"CPU",{"type":66,"tag":505,"props":807,"children":808},{},[809],{"type":71,"value":810},"Memory",{"type":66,"tag":521,"props":812,"children":813},{},[814,832],{"type":66,"tag":501,"props":815,"children":816},{},[817,822,827],{"type":66,"tag":528,"props":818,"children":819},{},[820],{"type":71,"value":821},"Standard (default)",{"type":66,"tag":528,"props":823,"children":824},{},[825],{"type":71,"value":826},"1 vCPU",{"type":66,"tag":528,"props":828,"children":829},{},[830],{"type":71,"value":831},"2 GB",{"type":66,"tag":501,"props":833,"children":834},{},[835,839,844],{"type":66,"tag":528,"props":836,"children":837},{},[838],{"type":71,"value":13},{"type":66,"tag":528,"props":840,"children":841},{},[842],{"type":71,"value":843},"2 vCPU",{"type":66,"tag":528,"props":845,"children":846},{},[847],{"type":71,"value":848},"4 GB",{"type":66,"tag":74,"props":850,"children":851},{},[852],{"type":71,"value":853},"Hobby projects use Standard CPU. The Basic CPU instance has been removed.",{"type":66,"tag":87,"props":855,"children":857},{"id":856},"background-processing-with-waituntil",[858,860],{"type":71,"value":859},"Background Processing with ",{"type":66,"tag":127,"props":861,"children":863},{"className":862},[],[864],{"type":71,"value":740},{"type":66,"tag":119,"props":866,"children":868},{"className":121,"code":867,"language":123,"meta":124,"style":124},"\u002F\u002F Continue work after sending response\nimport { waitUntil } from '@vercel\u002Ffunctions'\n\nexport async function POST(req: Request) {\n  const data = await req.json()\n\n  \u002F\u002F Send response immediately\n  const response = Response.json({ received: true })\n\n  \u002F\u002F Continue processing in background\n  waitUntil(async () => {\n    await processAnalytics(data)\n    await sendNotification(data)\n  })\n\n  return response\n}\n",[869],{"type":66,"tag":127,"props":870,"children":871},{"__ignoreMap":124},[872,880,920,927,976,1017,1024,1033,1092,1100,1109,1141,1168,1193,1206,1214,1227],{"type":66,"tag":131,"props":873,"children":874},{"class":133,"line":134},[875],{"type":66,"tag":131,"props":876,"children":877},{"style":138},[878],{"type":71,"value":879},"\u002F\u002F Continue work after sending response\n",{"type":66,"tag":131,"props":881,"children":882},{"class":133,"line":144},[883,888,893,898,902,907,911,916],{"type":66,"tag":131,"props":884,"children":885},{"style":148},[886],{"type":71,"value":887},"import",{"type":66,"tag":131,"props":889,"children":890},{"style":171},[891],{"type":71,"value":892}," {",{"type":66,"tag":131,"props":894,"children":895},{"style":191},[896],{"type":71,"value":897}," waitUntil",{"type":66,"tag":131,"props":899,"children":900},{"style":171},[901],{"type":71,"value":246},{"type":66,"tag":131,"props":903,"children":904},{"style":148},[905],{"type":71,"value":906}," from",{"type":66,"tag":131,"props":908,"children":909},{"style":171},[910],{"type":71,"value":230},{"type":66,"tag":131,"props":912,"children":913},{"style":233},[914],{"type":71,"value":915},"@vercel\u002Ffunctions",{"type":66,"tag":131,"props":917,"children":918},{"style":171},[919],{"type":71,"value":339},{"type":66,"tag":131,"props":921,"children":922},{"class":133,"line":182},[923],{"type":66,"tag":131,"props":924,"children":925},{"emptyLinePlaceholder":345},[926],{"type":71,"value":348},{"type":66,"tag":131,"props":928,"children":929},{"class":133,"line":254},[930,934,938,942,947,951,957,961,967,972],{"type":66,"tag":131,"props":931,"children":932},{"style":148},[933],{"type":71,"value":151},{"type":66,"tag":131,"props":935,"children":936},{"style":154},[937],{"type":71,"value":157},{"type":66,"tag":131,"props":939,"children":940},{"style":154},[941],{"type":71,"value":162},{"type":66,"tag":131,"props":943,"children":944},{"style":165},[945],{"type":71,"value":946}," POST",{"type":66,"tag":131,"props":948,"children":949},{"style":171},[950],{"type":71,"value":210},{"type":66,"tag":131,"props":952,"children":954},{"style":953},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[955],{"type":71,"value":956},"req",{"type":66,"tag":131,"props":958,"children":959},{"style":171},[960],{"type":71,"value":225},{"type":66,"tag":131,"props":962,"children":964},{"style":963},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[965],{"type":71,"value":966}," Request",{"type":66,"tag":131,"props":968,"children":969},{"style":171},[970],{"type":71,"value":971},")",{"type":66,"tag":131,"props":973,"children":974},{"style":171},[975],{"type":71,"value":179},{"type":66,"tag":131,"props":977,"children":978},{"class":133,"line":378},[979,984,989,994,999,1004,1008,1012],{"type":66,"tag":131,"props":980,"children":981},{"style":154},[982],{"type":71,"value":983},"  const",{"type":66,"tag":131,"props":985,"children":986},{"style":191},[987],{"type":71,"value":988}," data",{"type":66,"tag":131,"props":990,"children":991},{"style":171},[992],{"type":71,"value":993}," =",{"type":66,"tag":131,"props":995,"children":996},{"style":148},[997],{"type":71,"value":998}," await",{"type":66,"tag":131,"props":1000,"children":1001},{"style":191},[1002],{"type":71,"value":1003}," req",{"type":66,"tag":131,"props":1005,"children":1006},{"style":171},[1007],{"type":71,"value":199},{"type":66,"tag":131,"props":1009,"children":1010},{"style":165},[1011],{"type":71,"value":204},{"type":66,"tag":131,"props":1013,"children":1014},{"style":207},[1015],{"type":71,"value":1016},"()\n",{"type":66,"tag":131,"props":1018,"children":1019},{"class":133,"line":416},[1020],{"type":66,"tag":131,"props":1021,"children":1022},{"emptyLinePlaceholder":345},[1023],{"type":71,"value":348},{"type":66,"tag":131,"props":1025,"children":1027},{"class":133,"line":1026},7,[1028],{"type":66,"tag":131,"props":1029,"children":1030},{"style":138},[1031],{"type":71,"value":1032},"  \u002F\u002F Send response immediately\n",{"type":66,"tag":131,"props":1034,"children":1035},{"class":133,"line":42},[1036,1040,1045,1049,1053,1057,1061,1065,1069,1074,1078,1084,1088],{"type":66,"tag":131,"props":1037,"children":1038},{"style":154},[1039],{"type":71,"value":983},{"type":66,"tag":131,"props":1041,"children":1042},{"style":191},[1043],{"type":71,"value":1044}," response",{"type":66,"tag":131,"props":1046,"children":1047},{"style":171},[1048],{"type":71,"value":993},{"type":66,"tag":131,"props":1050,"children":1051},{"style":191},[1052],{"type":71,"value":194},{"type":66,"tag":131,"props":1054,"children":1055},{"style":171},[1056],{"type":71,"value":199},{"type":66,"tag":131,"props":1058,"children":1059},{"style":165},[1060],{"type":71,"value":204},{"type":66,"tag":131,"props":1062,"children":1063},{"style":207},[1064],{"type":71,"value":210},{"type":66,"tag":131,"props":1066,"children":1067},{"style":171},[1068],{"type":71,"value":215},{"type":66,"tag":131,"props":1070,"children":1071},{"style":207},[1072],{"type":71,"value":1073}," received",{"type":66,"tag":131,"props":1075,"children":1076},{"style":171},[1077],{"type":71,"value":225},{"type":66,"tag":131,"props":1079,"children":1081},{"style":1080},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[1082],{"type":71,"value":1083}," true",{"type":66,"tag":131,"props":1085,"children":1086},{"style":171},[1087],{"type":71,"value":246},{"type":66,"tag":131,"props":1089,"children":1090},{"style":207},[1091],{"type":71,"value":251},{"type":66,"tag":131,"props":1093,"children":1095},{"class":133,"line":1094},9,[1096],{"type":66,"tag":131,"props":1097,"children":1098},{"emptyLinePlaceholder":345},[1099],{"type":71,"value":348},{"type":66,"tag":131,"props":1101,"children":1103},{"class":133,"line":1102},10,[1104],{"type":66,"tag":131,"props":1105,"children":1106},{"style":138},[1107],{"type":71,"value":1108},"  \u002F\u002F Continue processing in background\n",{"type":66,"tag":131,"props":1110,"children":1112},{"class":133,"line":1111},11,[1113,1118,1122,1127,1132,1137],{"type":66,"tag":131,"props":1114,"children":1115},{"style":165},[1116],{"type":71,"value":1117},"  waitUntil",{"type":66,"tag":131,"props":1119,"children":1120},{"style":207},[1121],{"type":71,"value":210},{"type":66,"tag":131,"props":1123,"children":1124},{"style":154},[1125],{"type":71,"value":1126},"async",{"type":66,"tag":131,"props":1128,"children":1129},{"style":171},[1130],{"type":71,"value":1131}," ()",{"type":66,"tag":131,"props":1133,"children":1134},{"style":154},[1135],{"type":71,"value":1136}," =>",{"type":66,"tag":131,"props":1138,"children":1139},{"style":171},[1140],{"type":71,"value":179},{"type":66,"tag":131,"props":1142,"children":1144},{"class":133,"line":1143},12,[1145,1150,1155,1159,1164],{"type":66,"tag":131,"props":1146,"children":1147},{"style":148},[1148],{"type":71,"value":1149},"    await",{"type":66,"tag":131,"props":1151,"children":1152},{"style":165},[1153],{"type":71,"value":1154}," processAnalytics",{"type":66,"tag":131,"props":1156,"children":1157},{"style":207},[1158],{"type":71,"value":210},{"type":66,"tag":131,"props":1160,"children":1161},{"style":191},[1162],{"type":71,"value":1163},"data",{"type":66,"tag":131,"props":1165,"children":1166},{"style":207},[1167],{"type":71,"value":251},{"type":66,"tag":131,"props":1169,"children":1171},{"class":133,"line":1170},13,[1172,1176,1181,1185,1189],{"type":66,"tag":131,"props":1173,"children":1174},{"style":148},[1175],{"type":71,"value":1149},{"type":66,"tag":131,"props":1177,"children":1178},{"style":165},[1179],{"type":71,"value":1180}," sendNotification",{"type":66,"tag":131,"props":1182,"children":1183},{"style":207},[1184],{"type":71,"value":210},{"type":66,"tag":131,"props":1186,"children":1187},{"style":191},[1188],{"type":71,"value":1163},{"type":66,"tag":131,"props":1190,"children":1191},{"style":207},[1192],{"type":71,"value":251},{"type":66,"tag":131,"props":1194,"children":1196},{"class":133,"line":1195},14,[1197,1202],{"type":66,"tag":131,"props":1198,"children":1199},{"style":171},[1200],{"type":71,"value":1201},"  }",{"type":66,"tag":131,"props":1203,"children":1204},{"style":207},[1205],{"type":71,"value":251},{"type":66,"tag":131,"props":1207,"children":1209},{"class":133,"line":1208},15,[1210],{"type":66,"tag":131,"props":1211,"children":1212},{"emptyLinePlaceholder":345},[1213],{"type":71,"value":348},{"type":66,"tag":131,"props":1215,"children":1217},{"class":133,"line":1216},16,[1218,1222],{"type":66,"tag":131,"props":1219,"children":1220},{"style":148},[1221],{"type":71,"value":188},{"type":66,"tag":131,"props":1223,"children":1224},{"style":191},[1225],{"type":71,"value":1226}," response\n",{"type":66,"tag":131,"props":1228,"children":1230},{"class":133,"line":1229},17,[1231],{"type":66,"tag":131,"props":1232,"children":1233},{"style":171},[1234],{"type":71,"value":260},{"type":66,"tag":87,"props":1236,"children":1238},{"id":1237},"nextjs-after-equivalent",[1239,1241,1246],{"type":71,"value":1240},"Next.js ",{"type":66,"tag":127,"props":1242,"children":1244},{"className":1243},[],[1245],{"type":71,"value":748},{"type":71,"value":1247}," (equivalent)",{"type":66,"tag":119,"props":1249,"children":1251},{"className":121,"code":1250,"language":123,"meta":124,"style":124},"import { after } from 'next\u002Fserver'\n\nexport async function POST(req: Request) {\n  const data = await req.json()\n\n  after(async () => {\n    await logToAnalytics(data)\n  })\n\n  return Response.json({ ok: true })\n}\n",[1252],{"type":66,"tag":127,"props":1253,"children":1254},{"__ignoreMap":124},[1255,1292,1299,1342,1377,1384,1412,1436,1447,1454,1502],{"type":66,"tag":131,"props":1256,"children":1257},{"class":133,"line":134},[1258,1262,1266,1271,1275,1279,1283,1288],{"type":66,"tag":131,"props":1259,"children":1260},{"style":148},[1261],{"type":71,"value":887},{"type":66,"tag":131,"props":1263,"children":1264},{"style":171},[1265],{"type":71,"value":892},{"type":66,"tag":131,"props":1267,"children":1268},{"style":191},[1269],{"type":71,"value":1270}," after",{"type":66,"tag":131,"props":1272,"children":1273},{"style":171},[1274],{"type":71,"value":246},{"type":66,"tag":131,"props":1276,"children":1277},{"style":148},[1278],{"type":71,"value":906},{"type":66,"tag":131,"props":1280,"children":1281},{"style":171},[1282],{"type":71,"value":230},{"type":66,"tag":131,"props":1284,"children":1285},{"style":233},[1286],{"type":71,"value":1287},"next\u002Fserver",{"type":66,"tag":131,"props":1289,"children":1290},{"style":171},[1291],{"type":71,"value":339},{"type":66,"tag":131,"props":1293,"children":1294},{"class":133,"line":144},[1295],{"type":66,"tag":131,"props":1296,"children":1297},{"emptyLinePlaceholder":345},[1298],{"type":71,"value":348},{"type":66,"tag":131,"props":1300,"children":1301},{"class":133,"line":182},[1302,1306,1310,1314,1318,1322,1326,1330,1334,1338],{"type":66,"tag":131,"props":1303,"children":1304},{"style":148},[1305],{"type":71,"value":151},{"type":66,"tag":131,"props":1307,"children":1308},{"style":154},[1309],{"type":71,"value":157},{"type":66,"tag":131,"props":1311,"children":1312},{"style":154},[1313],{"type":71,"value":162},{"type":66,"tag":131,"props":1315,"children":1316},{"style":165},[1317],{"type":71,"value":946},{"type":66,"tag":131,"props":1319,"children":1320},{"style":171},[1321],{"type":71,"value":210},{"type":66,"tag":131,"props":1323,"children":1324},{"style":953},[1325],{"type":71,"value":956},{"type":66,"tag":131,"props":1327,"children":1328},{"style":171},[1329],{"type":71,"value":225},{"type":66,"tag":131,"props":1331,"children":1332},{"style":963},[1333],{"type":71,"value":966},{"type":66,"tag":131,"props":1335,"children":1336},{"style":171},[1337],{"type":71,"value":971},{"type":66,"tag":131,"props":1339,"children":1340},{"style":171},[1341],{"type":71,"value":179},{"type":66,"tag":131,"props":1343,"children":1344},{"class":133,"line":254},[1345,1349,1353,1357,1361,1365,1369,1373],{"type":66,"tag":131,"props":1346,"children":1347},{"style":154},[1348],{"type":71,"value":983},{"type":66,"tag":131,"props":1350,"children":1351},{"style":191},[1352],{"type":71,"value":988},{"type":66,"tag":131,"props":1354,"children":1355},{"style":171},[1356],{"type":71,"value":993},{"type":66,"tag":131,"props":1358,"children":1359},{"style":148},[1360],{"type":71,"value":998},{"type":66,"tag":131,"props":1362,"children":1363},{"style":191},[1364],{"type":71,"value":1003},{"type":66,"tag":131,"props":1366,"children":1367},{"style":171},[1368],{"type":71,"value":199},{"type":66,"tag":131,"props":1370,"children":1371},{"style":165},[1372],{"type":71,"value":204},{"type":66,"tag":131,"props":1374,"children":1375},{"style":207},[1376],{"type":71,"value":1016},{"type":66,"tag":131,"props":1378,"children":1379},{"class":133,"line":378},[1380],{"type":66,"tag":131,"props":1381,"children":1382},{"emptyLinePlaceholder":345},[1383],{"type":71,"value":348},{"type":66,"tag":131,"props":1385,"children":1386},{"class":133,"line":416},[1387,1392,1396,1400,1404,1408],{"type":66,"tag":131,"props":1388,"children":1389},{"style":165},[1390],{"type":71,"value":1391},"  after",{"type":66,"tag":131,"props":1393,"children":1394},{"style":207},[1395],{"type":71,"value":210},{"type":66,"tag":131,"props":1397,"children":1398},{"style":154},[1399],{"type":71,"value":1126},{"type":66,"tag":131,"props":1401,"children":1402},{"style":171},[1403],{"type":71,"value":1131},{"type":66,"tag":131,"props":1405,"children":1406},{"style":154},[1407],{"type":71,"value":1136},{"type":66,"tag":131,"props":1409,"children":1410},{"style":171},[1411],{"type":71,"value":179},{"type":66,"tag":131,"props":1413,"children":1414},{"class":133,"line":1026},[1415,1419,1424,1428,1432],{"type":66,"tag":131,"props":1416,"children":1417},{"style":148},[1418],{"type":71,"value":1149},{"type":66,"tag":131,"props":1420,"children":1421},{"style":165},[1422],{"type":71,"value":1423}," logToAnalytics",{"type":66,"tag":131,"props":1425,"children":1426},{"style":207},[1427],{"type":71,"value":210},{"type":66,"tag":131,"props":1429,"children":1430},{"style":191},[1431],{"type":71,"value":1163},{"type":66,"tag":131,"props":1433,"children":1434},{"style":207},[1435],{"type":71,"value":251},{"type":66,"tag":131,"props":1437,"children":1438},{"class":133,"line":42},[1439,1443],{"type":66,"tag":131,"props":1440,"children":1441},{"style":171},[1442],{"type":71,"value":1201},{"type":66,"tag":131,"props":1444,"children":1445},{"style":207},[1446],{"type":71,"value":251},{"type":66,"tag":131,"props":1448,"children":1449},{"class":133,"line":1094},[1450],{"type":66,"tag":131,"props":1451,"children":1452},{"emptyLinePlaceholder":345},[1453],{"type":71,"value":348},{"type":66,"tag":131,"props":1455,"children":1456},{"class":133,"line":1102},[1457,1461,1465,1469,1473,1477,1481,1486,1490,1494,1498],{"type":66,"tag":131,"props":1458,"children":1459},{"style":148},[1460],{"type":71,"value":188},{"type":66,"tag":131,"props":1462,"children":1463},{"style":191},[1464],{"type":71,"value":194},{"type":66,"tag":131,"props":1466,"children":1467},{"style":171},[1468],{"type":71,"value":199},{"type":66,"tag":131,"props":1470,"children":1471},{"style":165},[1472],{"type":71,"value":204},{"type":66,"tag":131,"props":1474,"children":1475},{"style":207},[1476],{"type":71,"value":210},{"type":66,"tag":131,"props":1478,"children":1479},{"style":171},[1480],{"type":71,"value":215},{"type":66,"tag":131,"props":1482,"children":1483},{"style":207},[1484],{"type":71,"value":1485}," ok",{"type":66,"tag":131,"props":1487,"children":1488},{"style":171},[1489],{"type":71,"value":225},{"type":66,"tag":131,"props":1491,"children":1492},{"style":1080},[1493],{"type":71,"value":1083},{"type":66,"tag":131,"props":1495,"children":1496},{"style":171},[1497],{"type":71,"value":246},{"type":66,"tag":131,"props":1499,"children":1500},{"style":207},[1501],{"type":71,"value":251},{"type":66,"tag":131,"props":1503,"children":1504},{"class":133,"line":1111},[1505],{"type":66,"tag":131,"props":1506,"children":1507},{"style":171},[1508],{"type":71,"value":260},{"type":66,"tag":80,"props":1510,"children":1512},{"id":1511},"streaming",[1513],{"type":71,"value":1514},"Streaming",{"type":66,"tag":74,"props":1516,"children":1517},{},[1518],{"type":71,"value":1519},"Zero-config streaming for both runtimes. Essential for AI applications.",{"type":66,"tag":119,"props":1521,"children":1523},{"className":121,"code":1522,"language":123,"meta":124,"style":124},"export async function POST(req: Request) {\n  const encoder = new TextEncoder()\n  const stream = new ReadableStream({\n    async start(controller) {\n      for (const chunk of data) {\n        controller.enqueue(encoder.encode(chunk))\n        await new Promise(r => setTimeout(r, 100))\n      }\n      controller.close()\n    },\n  })\n\n  return new Response(stream, {\n    headers: { 'Content-Type': 'text\u002Fevent-stream' },\n  })\n}\n",[1524],{"type":66,"tag":127,"props":1525,"children":1526},{"__ignoreMap":124},[1527,1570,1599,1633,1663,1704,1753,1811,1819,1840,1848,1859,1866,1898,1949,1960],{"type":66,"tag":131,"props":1528,"children":1529},{"class":133,"line":134},[1530,1534,1538,1542,1546,1550,1554,1558,1562,1566],{"type":66,"tag":131,"props":1531,"children":1532},{"style":148},[1533],{"type":71,"value":151},{"type":66,"tag":131,"props":1535,"children":1536},{"style":154},[1537],{"type":71,"value":157},{"type":66,"tag":131,"props":1539,"children":1540},{"style":154},[1541],{"type":71,"value":162},{"type":66,"tag":131,"props":1543,"children":1544},{"style":165},[1545],{"type":71,"value":946},{"type":66,"tag":131,"props":1547,"children":1548},{"style":171},[1549],{"type":71,"value":210},{"type":66,"tag":131,"props":1551,"children":1552},{"style":953},[1553],{"type":71,"value":956},{"type":66,"tag":131,"props":1555,"children":1556},{"style":171},[1557],{"type":71,"value":225},{"type":66,"tag":131,"props":1559,"children":1560},{"style":963},[1561],{"type":71,"value":966},{"type":66,"tag":131,"props":1563,"children":1564},{"style":171},[1565],{"type":71,"value":971},{"type":66,"tag":131,"props":1567,"children":1568},{"style":171},[1569],{"type":71,"value":179},{"type":66,"tag":131,"props":1571,"children":1572},{"class":133,"line":144},[1573,1577,1582,1586,1590,1595],{"type":66,"tag":131,"props":1574,"children":1575},{"style":154},[1576],{"type":71,"value":983},{"type":66,"tag":131,"props":1578,"children":1579},{"style":191},[1580],{"type":71,"value":1581}," encoder",{"type":66,"tag":131,"props":1583,"children":1584},{"style":171},[1585],{"type":71,"value":993},{"type":66,"tag":131,"props":1587,"children":1588},{"style":171},[1589],{"type":71,"value":388},{"type":66,"tag":131,"props":1591,"children":1592},{"style":165},[1593],{"type":71,"value":1594}," TextEncoder",{"type":66,"tag":131,"props":1596,"children":1597},{"style":207},[1598],{"type":71,"value":1016},{"type":66,"tag":131,"props":1600,"children":1601},{"class":133,"line":182},[1602,1606,1611,1615,1619,1624,1628],{"type":66,"tag":131,"props":1603,"children":1604},{"style":154},[1605],{"type":71,"value":983},{"type":66,"tag":131,"props":1607,"children":1608},{"style":191},[1609],{"type":71,"value":1610}," stream",{"type":66,"tag":131,"props":1612,"children":1613},{"style":171},[1614],{"type":71,"value":993},{"type":66,"tag":131,"props":1616,"children":1617},{"style":171},[1618],{"type":71,"value":388},{"type":66,"tag":131,"props":1620,"children":1621},{"style":165},[1622],{"type":71,"value":1623}," ReadableStream",{"type":66,"tag":131,"props":1625,"children":1626},{"style":207},[1627],{"type":71,"value":210},{"type":66,"tag":131,"props":1629,"children":1630},{"style":171},[1631],{"type":71,"value":1632},"{\n",{"type":66,"tag":131,"props":1634,"children":1635},{"class":133,"line":254},[1636,1641,1646,1650,1655,1659],{"type":66,"tag":131,"props":1637,"children":1638},{"style":154},[1639],{"type":71,"value":1640},"    async",{"type":66,"tag":131,"props":1642,"children":1643},{"style":207},[1644],{"type":71,"value":1645}," start",{"type":66,"tag":131,"props":1647,"children":1648},{"style":171},[1649],{"type":71,"value":210},{"type":66,"tag":131,"props":1651,"children":1652},{"style":953},[1653],{"type":71,"value":1654},"controller",{"type":66,"tag":131,"props":1656,"children":1657},{"style":171},[1658],{"type":71,"value":971},{"type":66,"tag":131,"props":1660,"children":1661},{"style":171},[1662],{"type":71,"value":179},{"type":66,"tag":131,"props":1664,"children":1665},{"class":133,"line":378},[1666,1671,1676,1681,1686,1691,1695,1700],{"type":66,"tag":131,"props":1667,"children":1668},{"style":148},[1669],{"type":71,"value":1670},"      for",{"type":66,"tag":131,"props":1672,"children":1673},{"style":207},[1674],{"type":71,"value":1675}," (",{"type":66,"tag":131,"props":1677,"children":1678},{"style":154},[1679],{"type":71,"value":1680},"const",{"type":66,"tag":131,"props":1682,"children":1683},{"style":191},[1684],{"type":71,"value":1685}," chunk",{"type":66,"tag":131,"props":1687,"children":1688},{"style":171},[1689],{"type":71,"value":1690}," of",{"type":66,"tag":131,"props":1692,"children":1693},{"style":191},[1694],{"type":71,"value":988},{"type":66,"tag":131,"props":1696,"children":1697},{"style":207},[1698],{"type":71,"value":1699},") ",{"type":66,"tag":131,"props":1701,"children":1702},{"style":171},[1703],{"type":71,"value":1632},{"type":66,"tag":131,"props":1705,"children":1706},{"class":133,"line":416},[1707,1712,1716,1721,1725,1730,1734,1739,1743,1748],{"type":66,"tag":131,"props":1708,"children":1709},{"style":191},[1710],{"type":71,"value":1711},"        controller",{"type":66,"tag":131,"props":1713,"children":1714},{"style":171},[1715],{"type":71,"value":199},{"type":66,"tag":131,"props":1717,"children":1718},{"style":165},[1719],{"type":71,"value":1720},"enqueue",{"type":66,"tag":131,"props":1722,"children":1723},{"style":207},[1724],{"type":71,"value":210},{"type":66,"tag":131,"props":1726,"children":1727},{"style":191},[1728],{"type":71,"value":1729},"encoder",{"type":66,"tag":131,"props":1731,"children":1732},{"style":171},[1733],{"type":71,"value":199},{"type":66,"tag":131,"props":1735,"children":1736},{"style":165},[1737],{"type":71,"value":1738},"encode",{"type":66,"tag":131,"props":1740,"children":1741},{"style":207},[1742],{"type":71,"value":210},{"type":66,"tag":131,"props":1744,"children":1745},{"style":191},[1746],{"type":71,"value":1747},"chunk",{"type":66,"tag":131,"props":1749,"children":1750},{"style":207},[1751],{"type":71,"value":1752},"))\n",{"type":66,"tag":131,"props":1754,"children":1755},{"class":133,"line":1026},[1756,1761,1765,1770,1774,1779,1783,1788,1792,1796,1801,1807],{"type":66,"tag":131,"props":1757,"children":1758},{"style":148},[1759],{"type":71,"value":1760},"        await",{"type":66,"tag":131,"props":1762,"children":1763},{"style":171},[1764],{"type":71,"value":388},{"type":66,"tag":131,"props":1766,"children":1767},{"style":963},[1768],{"type":71,"value":1769}," Promise",{"type":66,"tag":131,"props":1771,"children":1772},{"style":207},[1773],{"type":71,"value":210},{"type":66,"tag":131,"props":1775,"children":1776},{"style":953},[1777],{"type":71,"value":1778},"r",{"type":66,"tag":131,"props":1780,"children":1781},{"style":154},[1782],{"type":71,"value":1136},{"type":66,"tag":131,"props":1784,"children":1785},{"style":165},[1786],{"type":71,"value":1787}," setTimeout",{"type":66,"tag":131,"props":1789,"children":1790},{"style":207},[1791],{"type":71,"value":210},{"type":66,"tag":131,"props":1793,"children":1794},{"style":191},[1795],{"type":71,"value":1778},{"type":66,"tag":131,"props":1797,"children":1798},{"style":171},[1799],{"type":71,"value":1800},",",{"type":66,"tag":131,"props":1802,"children":1804},{"style":1803},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[1805],{"type":71,"value":1806}," 100",{"type":66,"tag":131,"props":1808,"children":1809},{"style":207},[1810],{"type":71,"value":1752},{"type":66,"tag":131,"props":1812,"children":1813},{"class":133,"line":42},[1814],{"type":66,"tag":131,"props":1815,"children":1816},{"style":171},[1817],{"type":71,"value":1818},"      }\n",{"type":66,"tag":131,"props":1820,"children":1821},{"class":133,"line":1094},[1822,1827,1831,1836],{"type":66,"tag":131,"props":1823,"children":1824},{"style":191},[1825],{"type":71,"value":1826},"      controller",{"type":66,"tag":131,"props":1828,"children":1829},{"style":171},[1830],{"type":71,"value":199},{"type":66,"tag":131,"props":1832,"children":1833},{"style":165},[1834],{"type":71,"value":1835},"close",{"type":66,"tag":131,"props":1837,"children":1838},{"style":207},[1839],{"type":71,"value":1016},{"type":66,"tag":131,"props":1841,"children":1842},{"class":133,"line":1102},[1843],{"type":66,"tag":131,"props":1844,"children":1845},{"style":171},[1846],{"type":71,"value":1847},"    },\n",{"type":66,"tag":131,"props":1849,"children":1850},{"class":133,"line":1111},[1851,1855],{"type":66,"tag":131,"props":1852,"children":1853},{"style":171},[1854],{"type":71,"value":1201},{"type":66,"tag":131,"props":1856,"children":1857},{"style":207},[1858],{"type":71,"value":251},{"type":66,"tag":131,"props":1860,"children":1861},{"class":133,"line":1143},[1862],{"type":66,"tag":131,"props":1863,"children":1864},{"emptyLinePlaceholder":345},[1865],{"type":71,"value":348},{"type":66,"tag":131,"props":1867,"children":1868},{"class":133,"line":1170},[1869,1873,1877,1881,1885,1890,1894],{"type":66,"tag":131,"props":1870,"children":1871},{"style":148},[1872],{"type":71,"value":188},{"type":66,"tag":131,"props":1874,"children":1875},{"style":171},[1876],{"type":71,"value":388},{"type":66,"tag":131,"props":1878,"children":1879},{"style":165},[1880],{"type":71,"value":194},{"type":66,"tag":131,"props":1882,"children":1883},{"style":207},[1884],{"type":71,"value":210},{"type":66,"tag":131,"props":1886,"children":1887},{"style":191},[1888],{"type":71,"value":1889},"stream",{"type":66,"tag":131,"props":1891,"children":1892},{"style":171},[1893],{"type":71,"value":1800},{"type":66,"tag":131,"props":1895,"children":1896},{"style":171},[1897],{"type":71,"value":179},{"type":66,"tag":131,"props":1899,"children":1900},{"class":133,"line":1195},[1901,1906,1910,1914,1918,1923,1927,1931,1935,1940,1944],{"type":66,"tag":131,"props":1902,"children":1903},{"style":207},[1904],{"type":71,"value":1905},"    headers",{"type":66,"tag":131,"props":1907,"children":1908},{"style":171},[1909],{"type":71,"value":225},{"type":66,"tag":131,"props":1911,"children":1912},{"style":171},[1913],{"type":71,"value":892},{"type":66,"tag":131,"props":1915,"children":1916},{"style":171},[1917],{"type":71,"value":230},{"type":66,"tag":131,"props":1919,"children":1920},{"style":207},[1921],{"type":71,"value":1922},"Content-Type",{"type":66,"tag":131,"props":1924,"children":1925},{"style":171},[1926],{"type":71,"value":241},{"type":66,"tag":131,"props":1928,"children":1929},{"style":171},[1930],{"type":71,"value":225},{"type":66,"tag":131,"props":1932,"children":1933},{"style":171},[1934],{"type":71,"value":230},{"type":66,"tag":131,"props":1936,"children":1937},{"style":233},[1938],{"type":71,"value":1939},"text\u002Fevent-stream",{"type":66,"tag":131,"props":1941,"children":1942},{"style":171},[1943],{"type":71,"value":241},{"type":66,"tag":131,"props":1945,"children":1946},{"style":171},[1947],{"type":71,"value":1948}," },\n",{"type":66,"tag":131,"props":1950,"children":1951},{"class":133,"line":1208},[1952,1956],{"type":66,"tag":131,"props":1953,"children":1954},{"style":171},[1955],{"type":71,"value":1201},{"type":66,"tag":131,"props":1957,"children":1958},{"style":207},[1959],{"type":71,"value":251},{"type":66,"tag":131,"props":1961,"children":1962},{"class":133,"line":1216},[1963],{"type":66,"tag":131,"props":1964,"children":1965},{"style":171},[1966],{"type":71,"value":260},{"type":66,"tag":74,"props":1968,"children":1969},{},[1970,1972,1978,1980,1986],{"type":71,"value":1971},"For AI streaming, use the AI SDK's ",{"type":66,"tag":127,"props":1973,"children":1975},{"className":1974},[],[1976],{"type":71,"value":1977},"toUIMessageStreamResponse()",{"type":71,"value":1979}," (for chat UIs with ",{"type":66,"tag":127,"props":1981,"children":1983},{"className":1982},[],[1984],{"type":71,"value":1985},"useChat",{"type":71,"value":1987},") which handles SSE formatting automatically.",{"type":66,"tag":80,"props":1989,"children":1991},{"id":1990},"cron-jobs",[1992],{"type":71,"value":1993},"Cron Jobs",{"type":66,"tag":74,"props":1995,"children":1996},{},[1997,1999,2004],{"type":71,"value":1998},"Schedule function invocations via ",{"type":66,"tag":127,"props":2000,"children":2002},{"className":2001},[],[2003],{"type":71,"value":57},{"type":71,"value":225},{"type":66,"tag":119,"props":2006,"children":2009},{"className":2007,"code":2008,"language":204,"meta":124,"style":124},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"crons\": [\n    {\n      \"path\": \"\u002Fapi\u002Fdaily-report\",\n      \"schedule\": \"0 8 * * *\"\n    },\n    {\n      \"path\": \"\u002Fapi\u002Fcleanup\",\n      \"schedule\": \"0 *\u002F6 * * *\"\n    }\n  ]\n}\n",[2010],{"type":66,"tag":127,"props":2011,"children":2012},{"__ignoreMap":124},[2013,2020,2047,2055,2095,2129,2136,2143,2179,2211,2219,2227],{"type":66,"tag":131,"props":2014,"children":2015},{"class":133,"line":134},[2016],{"type":66,"tag":131,"props":2017,"children":2018},{"style":171},[2019],{"type":71,"value":1632},{"type":66,"tag":131,"props":2021,"children":2022},{"class":133,"line":144},[2023,2028,2033,2038,2042],{"type":66,"tag":131,"props":2024,"children":2025},{"style":171},[2026],{"type":71,"value":2027},"  \"",{"type":66,"tag":131,"props":2029,"children":2030},{"style":154},[2031],{"type":71,"value":2032},"crons",{"type":66,"tag":131,"props":2034,"children":2035},{"style":171},[2036],{"type":71,"value":2037},"\"",{"type":66,"tag":131,"props":2039,"children":2040},{"style":171},[2041],{"type":71,"value":225},{"type":66,"tag":131,"props":2043,"children":2044},{"style":171},[2045],{"type":71,"value":2046}," [\n",{"type":66,"tag":131,"props":2048,"children":2049},{"class":133,"line":182},[2050],{"type":66,"tag":131,"props":2051,"children":2052},{"style":171},[2053],{"type":71,"value":2054},"    {\n",{"type":66,"tag":131,"props":2056,"children":2057},{"class":133,"line":254},[2058,2063,2068,2072,2076,2081,2086,2090],{"type":66,"tag":131,"props":2059,"children":2060},{"style":171},[2061],{"type":71,"value":2062},"      \"",{"type":66,"tag":131,"props":2064,"children":2065},{"style":963},[2066],{"type":71,"value":2067},"path",{"type":66,"tag":131,"props":2069,"children":2070},{"style":171},[2071],{"type":71,"value":2037},{"type":66,"tag":131,"props":2073,"children":2074},{"style":171},[2075],{"type":71,"value":225},{"type":66,"tag":131,"props":2077,"children":2078},{"style":171},[2079],{"type":71,"value":2080}," \"",{"type":66,"tag":131,"props":2082,"children":2083},{"style":233},[2084],{"type":71,"value":2085},"\u002Fapi\u002Fdaily-report",{"type":66,"tag":131,"props":2087,"children":2088},{"style":171},[2089],{"type":71,"value":2037},{"type":66,"tag":131,"props":2091,"children":2092},{"style":171},[2093],{"type":71,"value":2094},",\n",{"type":66,"tag":131,"props":2096,"children":2097},{"class":133,"line":378},[2098,2102,2107,2111,2115,2119,2124],{"type":66,"tag":131,"props":2099,"children":2100},{"style":171},[2101],{"type":71,"value":2062},{"type":66,"tag":131,"props":2103,"children":2104},{"style":963},[2105],{"type":71,"value":2106},"schedule",{"type":66,"tag":131,"props":2108,"children":2109},{"style":171},[2110],{"type":71,"value":2037},{"type":66,"tag":131,"props":2112,"children":2113},{"style":171},[2114],{"type":71,"value":225},{"type":66,"tag":131,"props":2116,"children":2117},{"style":171},[2118],{"type":71,"value":2080},{"type":66,"tag":131,"props":2120,"children":2121},{"style":233},[2122],{"type":71,"value":2123},"0 8 * * *",{"type":66,"tag":131,"props":2125,"children":2126},{"style":171},[2127],{"type":71,"value":2128},"\"\n",{"type":66,"tag":131,"props":2130,"children":2131},{"class":133,"line":416},[2132],{"type":66,"tag":131,"props":2133,"children":2134},{"style":171},[2135],{"type":71,"value":1847},{"type":66,"tag":131,"props":2137,"children":2138},{"class":133,"line":1026},[2139],{"type":66,"tag":131,"props":2140,"children":2141},{"style":171},[2142],{"type":71,"value":2054},{"type":66,"tag":131,"props":2144,"children":2145},{"class":133,"line":42},[2146,2150,2154,2158,2162,2166,2171,2175],{"type":66,"tag":131,"props":2147,"children":2148},{"style":171},[2149],{"type":71,"value":2062},{"type":66,"tag":131,"props":2151,"children":2152},{"style":963},[2153],{"type":71,"value":2067},{"type":66,"tag":131,"props":2155,"children":2156},{"style":171},[2157],{"type":71,"value":2037},{"type":66,"tag":131,"props":2159,"children":2160},{"style":171},[2161],{"type":71,"value":225},{"type":66,"tag":131,"props":2163,"children":2164},{"style":171},[2165],{"type":71,"value":2080},{"type":66,"tag":131,"props":2167,"children":2168},{"style":233},[2169],{"type":71,"value":2170},"\u002Fapi\u002Fcleanup",{"type":66,"tag":131,"props":2172,"children":2173},{"style":171},[2174],{"type":71,"value":2037},{"type":66,"tag":131,"props":2176,"children":2177},{"style":171},[2178],{"type":71,"value":2094},{"type":66,"tag":131,"props":2180,"children":2181},{"class":133,"line":1094},[2182,2186,2190,2194,2198,2202,2207],{"type":66,"tag":131,"props":2183,"children":2184},{"style":171},[2185],{"type":71,"value":2062},{"type":66,"tag":131,"props":2187,"children":2188},{"style":963},[2189],{"type":71,"value":2106},{"type":66,"tag":131,"props":2191,"children":2192},{"style":171},[2193],{"type":71,"value":2037},{"type":66,"tag":131,"props":2195,"children":2196},{"style":171},[2197],{"type":71,"value":225},{"type":66,"tag":131,"props":2199,"children":2200},{"style":171},[2201],{"type":71,"value":2080},{"type":66,"tag":131,"props":2203,"children":2204},{"style":233},[2205],{"type":71,"value":2206},"0 *\u002F6 * * *",{"type":66,"tag":131,"props":2208,"children":2209},{"style":171},[2210],{"type":71,"value":2128},{"type":66,"tag":131,"props":2212,"children":2213},{"class":133,"line":1102},[2214],{"type":66,"tag":131,"props":2215,"children":2216},{"style":171},[2217],{"type":71,"value":2218},"    }\n",{"type":66,"tag":131,"props":2220,"children":2221},{"class":133,"line":1111},[2222],{"type":66,"tag":131,"props":2223,"children":2224},{"style":171},[2225],{"type":71,"value":2226},"  ]\n",{"type":66,"tag":131,"props":2228,"children":2229},{"class":133,"line":1143},[2230],{"type":66,"tag":131,"props":2231,"children":2232},{"style":171},[2233],{"type":71,"value":260},{"type":66,"tag":74,"props":2235,"children":2236},{},[2237],{"type":71,"value":2238},"The cron endpoint receives a normal HTTP request. Verify it's from Vercel:",{"type":66,"tag":119,"props":2240,"children":2242},{"className":121,"code":2241,"language":123,"meta":124,"style":124},"export async function GET(req: Request) {\n  const authHeader = req.headers.get('authorization')\n  if (authHeader !== `Bearer ${process.env.CRON_SECRET}`) {\n    return new Response('Unauthorized', { status: 401 })\n  }\n  \u002F\u002F Do scheduled work\n  return Response.json({ ok: true })\n}\n",[2243],{"type":66,"tag":127,"props":2244,"children":2245},{"__ignoreMap":124},[2246,2289,2348,2421,2484,2492,2500,2547],{"type":66,"tag":131,"props":2247,"children":2248},{"class":133,"line":134},[2249,2253,2257,2261,2265,2269,2273,2277,2281,2285],{"type":66,"tag":131,"props":2250,"children":2251},{"style":148},[2252],{"type":71,"value":151},{"type":66,"tag":131,"props":2254,"children":2255},{"style":154},[2256],{"type":71,"value":157},{"type":66,"tag":131,"props":2258,"children":2259},{"style":154},[2260],{"type":71,"value":162},{"type":66,"tag":131,"props":2262,"children":2263},{"style":165},[2264],{"type":71,"value":168},{"type":66,"tag":131,"props":2266,"children":2267},{"style":171},[2268],{"type":71,"value":210},{"type":66,"tag":131,"props":2270,"children":2271},{"style":953},[2272],{"type":71,"value":956},{"type":66,"tag":131,"props":2274,"children":2275},{"style":171},[2276],{"type":71,"value":225},{"type":66,"tag":131,"props":2278,"children":2279},{"style":963},[2280],{"type":71,"value":966},{"type":66,"tag":131,"props":2282,"children":2283},{"style":171},[2284],{"type":71,"value":971},{"type":66,"tag":131,"props":2286,"children":2287},{"style":171},[2288],{"type":71,"value":179},{"type":66,"tag":131,"props":2290,"children":2291},{"class":133,"line":144},[2292,2296,2301,2305,2309,2313,2318,2322,2327,2331,2335,2340,2344],{"type":66,"tag":131,"props":2293,"children":2294},{"style":154},[2295],{"type":71,"value":983},{"type":66,"tag":131,"props":2297,"children":2298},{"style":191},[2299],{"type":71,"value":2300}," authHeader",{"type":66,"tag":131,"props":2302,"children":2303},{"style":171},[2304],{"type":71,"value":993},{"type":66,"tag":131,"props":2306,"children":2307},{"style":191},[2308],{"type":71,"value":1003},{"type":66,"tag":131,"props":2310,"children":2311},{"style":171},[2312],{"type":71,"value":199},{"type":66,"tag":131,"props":2314,"children":2315},{"style":191},[2316],{"type":71,"value":2317},"headers",{"type":66,"tag":131,"props":2319,"children":2320},{"style":171},[2321],{"type":71,"value":199},{"type":66,"tag":131,"props":2323,"children":2324},{"style":165},[2325],{"type":71,"value":2326},"get",{"type":66,"tag":131,"props":2328,"children":2329},{"style":207},[2330],{"type":71,"value":210},{"type":66,"tag":131,"props":2332,"children":2333},{"style":171},[2334],{"type":71,"value":241},{"type":66,"tag":131,"props":2336,"children":2337},{"style":233},[2338],{"type":71,"value":2339},"authorization",{"type":66,"tag":131,"props":2341,"children":2342},{"style":171},[2343],{"type":71,"value":241},{"type":66,"tag":131,"props":2345,"children":2346},{"style":207},[2347],{"type":71,"value":251},{"type":66,"tag":131,"props":2349,"children":2350},{"class":133,"line":182},[2351,2356,2360,2365,2370,2375,2380,2385,2390,2394,2399,2403,2408,2413,2417],{"type":66,"tag":131,"props":2352,"children":2353},{"style":148},[2354],{"type":71,"value":2355},"  if",{"type":66,"tag":131,"props":2357,"children":2358},{"style":207},[2359],{"type":71,"value":1675},{"type":66,"tag":131,"props":2361,"children":2362},{"style":191},[2363],{"type":71,"value":2364},"authHeader",{"type":66,"tag":131,"props":2366,"children":2367},{"style":171},[2368],{"type":71,"value":2369}," !==",{"type":66,"tag":131,"props":2371,"children":2372},{"style":171},[2373],{"type":71,"value":2374}," `",{"type":66,"tag":131,"props":2376,"children":2377},{"style":233},[2378],{"type":71,"value":2379},"Bearer ",{"type":66,"tag":131,"props":2381,"children":2382},{"style":171},[2383],{"type":71,"value":2384},"${",{"type":66,"tag":131,"props":2386,"children":2387},{"style":191},[2388],{"type":71,"value":2389},"process",{"type":66,"tag":131,"props":2391,"children":2392},{"style":171},[2393],{"type":71,"value":199},{"type":66,"tag":131,"props":2395,"children":2396},{"style":191},[2397],{"type":71,"value":2398},"env",{"type":66,"tag":131,"props":2400,"children":2401},{"style":171},[2402],{"type":71,"value":199},{"type":66,"tag":131,"props":2404,"children":2405},{"style":191},[2406],{"type":71,"value":2407},"CRON_SECRET",{"type":66,"tag":131,"props":2409,"children":2410},{"style":171},[2411],{"type":71,"value":2412},"}`",{"type":66,"tag":131,"props":2414,"children":2415},{"style":207},[2416],{"type":71,"value":1699},{"type":66,"tag":131,"props":2418,"children":2419},{"style":171},[2420],{"type":71,"value":1632},{"type":66,"tag":131,"props":2422,"children":2423},{"class":133,"line":254},[2424,2429,2433,2437,2441,2445,2450,2454,2458,2462,2467,2471,2476,2480],{"type":66,"tag":131,"props":2425,"children":2426},{"style":148},[2427],{"type":71,"value":2428},"    return",{"type":66,"tag":131,"props":2430,"children":2431},{"style":171},[2432],{"type":71,"value":388},{"type":66,"tag":131,"props":2434,"children":2435},{"style":165},[2436],{"type":71,"value":194},{"type":66,"tag":131,"props":2438,"children":2439},{"style":207},[2440],{"type":71,"value":210},{"type":66,"tag":131,"props":2442,"children":2443},{"style":171},[2444],{"type":71,"value":241},{"type":66,"tag":131,"props":2446,"children":2447},{"style":233},[2448],{"type":71,"value":2449},"Unauthorized",{"type":66,"tag":131,"props":2451,"children":2452},{"style":171},[2453],{"type":71,"value":241},{"type":66,"tag":131,"props":2455,"children":2456},{"style":171},[2457],{"type":71,"value":1800},{"type":66,"tag":131,"props":2459,"children":2460},{"style":171},[2461],{"type":71,"value":892},{"type":66,"tag":131,"props":2463,"children":2464},{"style":207},[2465],{"type":71,"value":2466}," status",{"type":66,"tag":131,"props":2468,"children":2469},{"style":171},[2470],{"type":71,"value":225},{"type":66,"tag":131,"props":2472,"children":2473},{"style":1803},[2474],{"type":71,"value":2475}," 401",{"type":66,"tag":131,"props":2477,"children":2478},{"style":171},[2479],{"type":71,"value":246},{"type":66,"tag":131,"props":2481,"children":2482},{"style":207},[2483],{"type":71,"value":251},{"type":66,"tag":131,"props":2485,"children":2486},{"class":133,"line":378},[2487],{"type":66,"tag":131,"props":2488,"children":2489},{"style":171},[2490],{"type":71,"value":2491},"  }\n",{"type":66,"tag":131,"props":2493,"children":2494},{"class":133,"line":416},[2495],{"type":66,"tag":131,"props":2496,"children":2497},{"style":138},[2498],{"type":71,"value":2499},"  \u002F\u002F Do scheduled work\n",{"type":66,"tag":131,"props":2501,"children":2502},{"class":133,"line":1026},[2503,2507,2511,2515,2519,2523,2527,2531,2535,2539,2543],{"type":66,"tag":131,"props":2504,"children":2505},{"style":148},[2506],{"type":71,"value":188},{"type":66,"tag":131,"props":2508,"children":2509},{"style":191},[2510],{"type":71,"value":194},{"type":66,"tag":131,"props":2512,"children":2513},{"style":171},[2514],{"type":71,"value":199},{"type":66,"tag":131,"props":2516,"children":2517},{"style":165},[2518],{"type":71,"value":204},{"type":66,"tag":131,"props":2520,"children":2521},{"style":207},[2522],{"type":71,"value":210},{"type":66,"tag":131,"props":2524,"children":2525},{"style":171},[2526],{"type":71,"value":215},{"type":66,"tag":131,"props":2528,"children":2529},{"style":207},[2530],{"type":71,"value":1485},{"type":66,"tag":131,"props":2532,"children":2533},{"style":171},[2534],{"type":71,"value":225},{"type":66,"tag":131,"props":2536,"children":2537},{"style":1080},[2538],{"type":71,"value":1083},{"type":66,"tag":131,"props":2540,"children":2541},{"style":171},[2542],{"type":71,"value":246},{"type":66,"tag":131,"props":2544,"children":2545},{"style":207},[2546],{"type":71,"value":251},{"type":66,"tag":131,"props":2548,"children":2549},{"class":133,"line":42},[2550],{"type":66,"tag":131,"props":2551,"children":2552},{"style":171},[2553],{"type":71,"value":260},{"type":66,"tag":80,"props":2555,"children":2557},{"id":2556},"configuration-via-verceljson",[2558],{"type":71,"value":2559},"Configuration via vercel.json",{"type":66,"tag":74,"props":2561,"children":2562},{},[2563,2568,2570,2576,2578,2583,2585,2590,2591,2596],{"type":66,"tag":698,"props":2564,"children":2565},{},[2566],{"type":71,"value":2567},"Deprecation notice",{"type":71,"value":2569},": Support for the legacy ",{"type":66,"tag":127,"props":2571,"children":2573},{"className":2572},[],[2574],{"type":71,"value":2575},"now.json",{"type":71,"value":2577}," config file will be removed on ",{"type":66,"tag":698,"props":2579,"children":2580},{},[2581],{"type":71,"value":2582},"March 31, 2026",{"type":71,"value":2584},". Rename ",{"type":66,"tag":127,"props":2586,"children":2588},{"className":2587},[],[2589],{"type":71,"value":2575},{"type":71,"value":440},{"type":66,"tag":127,"props":2592,"children":2594},{"className":2593},[],[2595],{"type":71,"value":57},{"type":71,"value":2597}," (no content changes required).",{"type":66,"tag":119,"props":2599,"children":2601},{"className":2007,"code":2600,"language":204,"meta":124,"style":124},"{\n  \"functions\": {\n    \"app\u002Fapi\u002Fheavy\u002F**\": {\n      \"maxDuration\": 300,\n      \"memory\": 1024\n    },\n    \"app\u002Fapi\u002Fedge\u002F**\": {\n      \"runtime\": \"edge\"\n    }\n  }\n}\n",[2602],{"type":66,"tag":127,"props":2603,"children":2604},{"__ignoreMap":124},[2605,2612,2636,2661,2690,2715,2722,2746,2778,2785,2792],{"type":66,"tag":131,"props":2606,"children":2607},{"class":133,"line":134},[2608],{"type":66,"tag":131,"props":2609,"children":2610},{"style":171},[2611],{"type":71,"value":1632},{"type":66,"tag":131,"props":2613,"children":2614},{"class":133,"line":144},[2615,2619,2624,2628,2632],{"type":66,"tag":131,"props":2616,"children":2617},{"style":171},[2618],{"type":71,"value":2027},{"type":66,"tag":131,"props":2620,"children":2621},{"style":154},[2622],{"type":71,"value":2623},"functions",{"type":66,"tag":131,"props":2625,"children":2626},{"style":171},[2627],{"type":71,"value":2037},{"type":66,"tag":131,"props":2629,"children":2630},{"style":171},[2631],{"type":71,"value":225},{"type":66,"tag":131,"props":2633,"children":2634},{"style":171},[2635],{"type":71,"value":179},{"type":66,"tag":131,"props":2637,"children":2638},{"class":133,"line":182},[2639,2644,2649,2653,2657],{"type":66,"tag":131,"props":2640,"children":2641},{"style":171},[2642],{"type":71,"value":2643},"    \"",{"type":66,"tag":131,"props":2645,"children":2646},{"style":963},[2647],{"type":71,"value":2648},"app\u002Fapi\u002Fheavy\u002F**",{"type":66,"tag":131,"props":2650,"children":2651},{"style":171},[2652],{"type":71,"value":2037},{"type":66,"tag":131,"props":2654,"children":2655},{"style":171},[2656],{"type":71,"value":225},{"type":66,"tag":131,"props":2658,"children":2659},{"style":171},[2660],{"type":71,"value":179},{"type":66,"tag":131,"props":2662,"children":2663},{"class":133,"line":254},[2664,2668,2673,2677,2681,2686],{"type":66,"tag":131,"props":2665,"children":2666},{"style":171},[2667],{"type":71,"value":2062},{"type":66,"tag":131,"props":2669,"children":2670},{"style":1803},[2671],{"type":71,"value":2672},"maxDuration",{"type":66,"tag":131,"props":2674,"children":2675},{"style":171},[2676],{"type":71,"value":2037},{"type":66,"tag":131,"props":2678,"children":2679},{"style":171},[2680],{"type":71,"value":225},{"type":66,"tag":131,"props":2682,"children":2683},{"style":1803},[2684],{"type":71,"value":2685}," 300",{"type":66,"tag":131,"props":2687,"children":2688},{"style":171},[2689],{"type":71,"value":2094},{"type":66,"tag":131,"props":2691,"children":2692},{"class":133,"line":378},[2693,2697,2702,2706,2710],{"type":66,"tag":131,"props":2694,"children":2695},{"style":171},[2696],{"type":71,"value":2062},{"type":66,"tag":131,"props":2698,"children":2699},{"style":1803},[2700],{"type":71,"value":2701},"memory",{"type":66,"tag":131,"props":2703,"children":2704},{"style":171},[2705],{"type":71,"value":2037},{"type":66,"tag":131,"props":2707,"children":2708},{"style":171},[2709],{"type":71,"value":225},{"type":66,"tag":131,"props":2711,"children":2712},{"style":1803},[2713],{"type":71,"value":2714}," 1024\n",{"type":66,"tag":131,"props":2716,"children":2717},{"class":133,"line":416},[2718],{"type":66,"tag":131,"props":2719,"children":2720},{"style":171},[2721],{"type":71,"value":1847},{"type":66,"tag":131,"props":2723,"children":2724},{"class":133,"line":1026},[2725,2729,2734,2738,2742],{"type":66,"tag":131,"props":2726,"children":2727},{"style":171},[2728],{"type":71,"value":2643},{"type":66,"tag":131,"props":2730,"children":2731},{"style":963},[2732],{"type":71,"value":2733},"app\u002Fapi\u002Fedge\u002F**",{"type":66,"tag":131,"props":2735,"children":2736},{"style":171},[2737],{"type":71,"value":2037},{"type":66,"tag":131,"props":2739,"children":2740},{"style":171},[2741],{"type":71,"value":225},{"type":66,"tag":131,"props":2743,"children":2744},{"style":171},[2745],{"type":71,"value":179},{"type":66,"tag":131,"props":2747,"children":2748},{"class":133,"line":42},[2749,2753,2758,2762,2766,2770,2774],{"type":66,"tag":131,"props":2750,"children":2751},{"style":171},[2752],{"type":71,"value":2062},{"type":66,"tag":131,"props":2754,"children":2755},{"style":1803},[2756],{"type":71,"value":2757},"runtime",{"type":66,"tag":131,"props":2759,"children":2760},{"style":171},[2761],{"type":71,"value":2037},{"type":66,"tag":131,"props":2763,"children":2764},{"style":171},[2765],{"type":71,"value":225},{"type":66,"tag":131,"props":2767,"children":2768},{"style":171},[2769],{"type":71,"value":2080},{"type":66,"tag":131,"props":2771,"children":2772},{"style":233},[2773],{"type":71,"value":334},{"type":66,"tag":131,"props":2775,"children":2776},{"style":171},[2777],{"type":71,"value":2128},{"type":66,"tag":131,"props":2779,"children":2780},{"class":133,"line":1094},[2781],{"type":66,"tag":131,"props":2782,"children":2783},{"style":171},[2784],{"type":71,"value":2218},{"type":66,"tag":131,"props":2786,"children":2787},{"class":133,"line":1102},[2788],{"type":66,"tag":131,"props":2789,"children":2790},{"style":171},[2791],{"type":71,"value":2491},{"type":66,"tag":131,"props":2793,"children":2794},{"class":133,"line":1111},[2795],{"type":66,"tag":131,"props":2796,"children":2797},{"style":171},[2798],{"type":71,"value":260},{"type":66,"tag":80,"props":2800,"children":2802},{"id":2801},"timeout-limits",[2803],{"type":71,"value":2804},"Timeout Limits",{"type":66,"tag":74,"props":2806,"children":2807},{},[2808],{"type":71,"value":2809},"All plans now default to 300s execution time with Fluid Compute.",{"type":66,"tag":493,"props":2811,"children":2812},{},[2813,2834],{"type":66,"tag":497,"props":2814,"children":2815},{},[2816],{"type":66,"tag":501,"props":2817,"children":2818},{},[2819,2824,2829],{"type":66,"tag":505,"props":2820,"children":2821},{},[2822],{"type":71,"value":2823},"Plan",{"type":66,"tag":505,"props":2825,"children":2826},{},[2827],{"type":71,"value":2828},"Default",{"type":66,"tag":505,"props":2830,"children":2831},{},[2832],{"type":71,"value":2833},"Max",{"type":66,"tag":521,"props":2835,"children":2836},{},[2837,2854,2871],{"type":66,"tag":501,"props":2838,"children":2839},{},[2840,2845,2850],{"type":66,"tag":528,"props":2841,"children":2842},{},[2843],{"type":71,"value":2844},"Hobby",{"type":66,"tag":528,"props":2846,"children":2847},{},[2848],{"type":71,"value":2849},"300s",{"type":66,"tag":528,"props":2851,"children":2852},{},[2853],{"type":71,"value":2849},{"type":66,"tag":501,"props":2855,"children":2856},{},[2857,2862,2866],{"type":66,"tag":528,"props":2858,"children":2859},{},[2860],{"type":71,"value":2861},"Pro",{"type":66,"tag":528,"props":2863,"children":2864},{},[2865],{"type":71,"value":2849},{"type":66,"tag":528,"props":2867,"children":2868},{},[2869],{"type":71,"value":2870},"800s",{"type":66,"tag":501,"props":2872,"children":2873},{},[2874,2879,2883],{"type":66,"tag":528,"props":2875,"children":2876},{},[2877],{"type":71,"value":2878},"Enterprise",{"type":66,"tag":528,"props":2880,"children":2881},{},[2882],{"type":71,"value":2849},{"type":66,"tag":528,"props":2884,"children":2885},{},[2886],{"type":71,"value":2870},{"type":66,"tag":80,"props":2888,"children":2890},{"id":2889},"common-pitfalls",[2891],{"type":71,"value":2892},"Common Pitfalls",{"type":66,"tag":2894,"props":2895,"children":2896},"ol",{},[2897,2914,2940,2950,2960],{"type":66,"tag":98,"props":2898,"children":2899},{},[2900,2905,2907,2913],{"type":66,"tag":698,"props":2901,"children":2902},{},[2903],{"type":71,"value":2904},"Cold starts with DB connections",{"type":71,"value":2906},": Use connection pooling (e.g., Neon's ",{"type":66,"tag":127,"props":2908,"children":2910},{"className":2909},[],[2911],{"type":71,"value":2912},"@neondatabase\u002Fserverless",{"type":71,"value":971},{"type":66,"tag":98,"props":2915,"children":2916},{},[2917,2922,2924,2930,2932,2938],{"type":66,"tag":698,"props":2918,"children":2919},{},[2920],{"type":71,"value":2921},"Edge limitations",{"type":71,"value":2923},": No ",{"type":66,"tag":127,"props":2925,"children":2927},{"className":2926},[],[2928],{"type":71,"value":2929},"fs",{"type":71,"value":2931},", no native modules, limited ",{"type":66,"tag":127,"props":2933,"children":2935},{"className":2934},[],[2936],{"type":71,"value":2937},"crypto",{"type":71,"value":2939}," — use Node.js runtime if needed",{"type":66,"tag":98,"props":2941,"children":2942},{},[2943,2948],{"type":66,"tag":698,"props":2944,"children":2945},{},[2946],{"type":71,"value":2947},"Timeout exceeded",{"type":71,"value":2949},": Use Fluid Compute for long-running tasks, or Workflow DevKit for very long processes",{"type":66,"tag":98,"props":2951,"children":2952},{},[2953,2958],{"type":66,"tag":698,"props":2954,"children":2955},{},[2956],{"type":71,"value":2957},"Bundle size",{"type":71,"value":2959},": Python runtime supports up to 500MB; Node.js has smaller limits",{"type":66,"tag":98,"props":2961,"children":2962},{},[2963,2968,2970,2976],{"type":66,"tag":698,"props":2964,"children":2965},{},[2966],{"type":71,"value":2967},"Environment variables",{"type":71,"value":2969},": Available in all functions automatically; use ",{"type":66,"tag":127,"props":2971,"children":2973},{"className":2972},[],[2974],{"type":71,"value":2975},"vercel env pull",{"type":71,"value":2977}," for local dev",{"type":66,"tag":80,"props":2979,"children":2981},{"id":2980},"function-runtime-diagnostics",[2982],{"type":71,"value":2983},"Function Runtime Diagnostics",{"type":66,"tag":87,"props":2985,"children":2987},{"id":2986},"timeout-diagnostics",[2988],{"type":71,"value":2989},"Timeout Diagnostics",{"type":66,"tag":119,"props":2991,"children":2995},{"className":2992,"code":2994,"language":71},[2993],"language-text","504 Gateway Timeout?\n├─ All plans default to 300s with Fluid Compute\n├─ Pro\u002FEnterprise: configurable up to 800s\n├─ Long-running task?\n│  ├─ Under 5 min → Use Fluid Compute with streaming\n│  ├─ Up to 15 min → Use Vercel Functions with `maxDuration` in vercel.json\n│  └─ Hours\u002Fdays → Use Workflow DevKit (DurableAgent or workflow steps)\n└─ DB query slow? → Add connection pooling, check cold start, use Edge Config\n",[2996],{"type":66,"tag":127,"props":2997,"children":2998},{"__ignoreMap":124},[2999],{"type":71,"value":2994},{"type":66,"tag":87,"props":3001,"children":3003},{"id":3002},"_500-error-diagnostics",[3004],{"type":71,"value":3005},"500 Error Diagnostics",{"type":66,"tag":119,"props":3007,"children":3010},{"className":3008,"code":3009,"language":71},[2993],"500 Internal Server Error?\n├─ Check Vercel Runtime Logs (Dashboard → Deployments → Functions tab)\n├─ Missing env vars? → Compare `.env.local` against Vercel dashboard settings\n├─ Import error? → Verify package is in `dependencies`, not `devDependencies`\n└─ Uncaught exception? → Wrap handler in try\u002Fcatch, use `after()` for error reporting\n",[3011],{"type":66,"tag":127,"props":3012,"children":3013},{"__ignoreMap":124},[3014],{"type":71,"value":3009},{"type":66,"tag":87,"props":3016,"children":3018},{"id":3017},"invocation-failure-diagnostics",[3019],{"type":71,"value":3020},"Invocation Failure Diagnostics",{"type":66,"tag":119,"props":3022,"children":3025},{"className":3023,"code":3024,"language":71},[2993],"\"FUNCTION_INVOCATION_FAILED\"?\n├─ Memory exceeded? → Increase `memory` in vercel.json (up to 3008 MB on Pro)\n├─ Crashed during init? → Check top-level await or heavy imports at module scope\n└─ Edge Function crash? → Check for Node.js APIs not available in Edge runtime\n",[3026],{"type":66,"tag":127,"props":3027,"children":3028},{"__ignoreMap":124},[3029],{"type":71,"value":3024},{"type":66,"tag":87,"props":3031,"children":3033},{"id":3032},"cold-start-diagnostics",[3034],{"type":71,"value":3035},"Cold Start Diagnostics",{"type":66,"tag":119,"props":3037,"children":3040},{"className":3038,"code":3039,"language":71},[2993],"Cold start latency > 1s?\n├─ Using Node.js runtime? → Consider Edge Functions for latency-sensitive routes\n├─ Large function bundle? → Audit imports, use dynamic imports, tree-shake\n├─ DB connection in cold start? → Use connection pooling (Neon serverless driver)\n└─ Enable Fluid Compute to reuse warm instances across requests\n",[3041],{"type":66,"tag":127,"props":3042,"children":3043},{"__ignoreMap":124},[3044],{"type":71,"value":3039},{"type":66,"tag":87,"props":3046,"children":3048},{"id":3047},"edge-function-timeout-diagnostics",[3049],{"type":71,"value":3050},"Edge Function Timeout Diagnostics",{"type":66,"tag":119,"props":3052,"children":3055},{"className":3053,"code":3054,"language":71},[2993],"\"EDGE_FUNCTION_INVOCATION_TIMEOUT\"?\n├─ Edge Functions have 25s hard limit (not configurable)\n├─ Move heavy computation to Node.js Serverless Functions\n└─ Use streaming to start response early, process in background with `waitUntil`\n",[3056],{"type":66,"tag":127,"props":3057,"children":3058},{"__ignoreMap":124},[3059],{"type":71,"value":3054},{"type":66,"tag":80,"props":3061,"children":3063},{"id":3062},"official-documentation",[3064],{"type":71,"value":3065},"Official Documentation",{"type":66,"tag":94,"props":3067,"children":3068},{},[3069,3079,3088,3096,3105,3114,3123],{"type":66,"tag":98,"props":3070,"children":3071},{},[3072],{"type":66,"tag":3073,"props":3074,"children":3077},"a",{"href":44,"rel":3075},[3076],"nofollow",[3078],{"type":71,"value":72},{"type":66,"tag":98,"props":3080,"children":3081},{},[3082],{"type":66,"tag":3073,"props":3083,"children":3085},{"href":44,"rel":3084},[3076],[3086],{"type":71,"value":3087},"Serverless Functions",{"type":66,"tag":98,"props":3089,"children":3090},{},[3091],{"type":66,"tag":3073,"props":3092,"children":3094},{"href":44,"rel":3093},[3076],[3095],{"type":71,"value":26},{"type":66,"tag":98,"props":3097,"children":3098},{},[3099],{"type":66,"tag":3073,"props":3100,"children":3103},{"href":3101,"rel":3102},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Ffluid-compute",[3076],[3104],{"type":71,"value":680},{"type":66,"tag":98,"props":3106,"children":3107},{},[3108],{"type":66,"tag":3073,"props":3109,"children":3112},{"href":3110,"rel":3111},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Ffunctions\u002Fstreaming",[3076],[3113],{"type":71,"value":1514},{"type":66,"tag":98,"props":3115,"children":3116},{},[3117],{"type":66,"tag":3073,"props":3118,"children":3121},{"href":3119,"rel":3120},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fcron-jobs",[3076],[3122],{"type":71,"value":1993},{"type":66,"tag":98,"props":3124,"children":3125},{},[3126],{"type":66,"tag":3073,"props":3127,"children":3130},{"href":3128,"rel":3129},"https:\u002F\u002Fgithub.com\u002Fvercel\u002Fvercel",[3076],[3131],{"type":71,"value":3132},"GitHub: Vercel",{"type":66,"tag":3134,"props":3135,"children":3136},"style",{},[3137],{"type":71,"value":3138},"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":3140,"total":3345},[3141,3162,3185,3202,3218,3237,3256,3272,3288,3302,3314,3329],{"slug":3142,"name":3142,"fn":3143,"description":3144,"org":3145,"tags":3146,"stars":3159,"repoUrl":3160,"updatedAt":3161},"prior-auth-packet-builder","build healthcare prior authorization packets","Build a concise prior authorization packet from local case files and payer policy docs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3147,3150,3153,3156],{"name":3148,"slug":3149,"type":15},"Documents","documents",{"name":3151,"slug":3152,"type":15},"Healthcare","healthcare",{"name":3154,"slug":3155,"type":15},"Insurance","insurance",{"name":3157,"slug":3158,"type":15},"Regulatory Compliance","regulatory-compliance",28169,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python","2026-04-16T05:11:39.180399",{"slug":3163,"name":3163,"fn":3164,"description":3165,"org":3166,"tags":3167,"stars":3182,"repoUrl":3183,"updatedAt":3184},"aspnet-core","build ASP.NET Core web applications","Build, review, refactor, or architect ASP.NET Core web applications using current official guidance for .NET web development. Use when working on Blazor Web Apps, Razor Pages, MVC, Minimal APIs, controller-based Web APIs, SignalR, gRPC, middleware, dependency injection, configuration, authentication, authorization, testing, performance, deployment, or ASP.NET Core upgrades.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3168,3171,3173,3176,3179],{"name":3169,"slug":3170,"type":15},".NET","dotnet",{"name":3172,"slug":3163,"type":15},"ASP.NET Core",{"name":3174,"slug":3175,"type":15},"Blazor","blazor",{"name":3177,"slug":3178,"type":15},"C#","csharp",{"name":3180,"slug":3181,"type":15},"Web Development","web-development",23787,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fskills","2026-04-12T05:07:02.819491",{"slug":3186,"name":3186,"fn":3187,"description":3188,"org":3189,"tags":3190,"stars":3182,"repoUrl":3183,"updatedAt":3201},"chatgpt-apps","build ChatGPT Apps SDK applications","Build, scaffold, refactor, and troubleshoot ChatGPT Apps SDK applications that combine an MCP server and widget UI. Use when Codex needs to design tools, register UI resources, wire the MCP Apps bridge or ChatGPT compatibility APIs, apply Apps SDK metadata or CSP or domain settings, or produce a docs-aligned project scaffold. Prefer a docs-first workflow by invoking the openai-docs skill or OpenAI developer docs MCP tools before generating code.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3191,3194,3197,3200],{"name":3192,"slug":3193,"type":15},"Apps SDK","apps-sdk",{"name":3195,"slug":3196,"type":15},"ChatGPT","chatgpt",{"name":3198,"slug":3199,"type":15},"MCP","mcp",{"name":9,"slug":8,"type":15},"2026-04-12T05:07:05.468097",{"slug":3203,"name":3203,"fn":3204,"description":3205,"org":3206,"tags":3207,"stars":3182,"repoUrl":3183,"updatedAt":3217},"cli-creator","build CLIs from API docs","Build a composable CLI for Codex from API docs, an OpenAPI spec, existing curl examples, an SDK, a web app, an admin tool, or a local script. Use when the user wants Codex to create a command-line tool that can run from any repo, expose composable read\u002Fwrite commands, return stable JSON, manage auth, and pair with a companion skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3208,3211,3214],{"name":3209,"slug":3210,"type":15},"API Development","api-development",{"name":3212,"slug":3213,"type":15},"CLI","cli",{"name":3215,"slug":3216,"type":15},"Codex","codex","2026-04-12T05:07:04.132762",{"slug":3219,"name":3219,"fn":3220,"description":3221,"org":3222,"tags":3223,"stars":3182,"repoUrl":3183,"updatedAt":3236},"cloudflare-deploy","deploy projects to Cloudflare","Deploy applications and infrastructure to Cloudflare using Workers, Pages, and related platform services. Use when the user asks to deploy, host, publish, or set up a project on Cloudflare.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3224,3227,3230,3233],{"name":3225,"slug":3226,"type":15},"Cloudflare","cloudflare",{"name":3228,"slug":3229,"type":15},"Cloudflare Pages","cloudflare-pages",{"name":3231,"slug":3232,"type":15},"Cloudflare Workers","cloudflare-workers",{"name":3234,"slug":3235,"type":15},"Deployment","deployment","2026-04-12T05:07:14.275118",{"slug":3238,"name":3238,"fn":3239,"description":3240,"org":3241,"tags":3242,"stars":3182,"repoUrl":3183,"updatedAt":3255},"define-goal","define and set measurable project goals","Help the user define a concrete, measurable goal before starting work, especially when they ask to use the goal tool, create a goal, set an objective, clarify success criteria, or turn a fuzzy intention into a quantitative outcome. Use this skill for goal creation and goal refinement only; it does not manage durable snapshots, decision logs, or long-running execution artifacts.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3243,3246,3249,3252],{"name":3244,"slug":3245,"type":15},"Productivity","productivity",{"name":3247,"slug":3248,"type":15},"Project Management","project-management",{"name":3250,"slug":3251,"type":15},"Strategy","strategy",{"name":3253,"slug":3254,"type":15},"Task Management","task-management","2026-05-23T06:17:16.870838",{"slug":3257,"name":3257,"fn":3258,"description":3259,"org":3260,"tags":3261,"stars":3182,"repoUrl":3183,"updatedAt":3271},"figma","translate Figma designs into code","Use the Figma MCP server to fetch design context, screenshots, variables, and assets from Figma, and to translate Figma nodes into production code. Trigger when a task involves Figma URLs, node IDs, design-to-code implementation, or Figma MCP setup and troubleshooting.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3262,3265,3267,3270],{"name":3263,"slug":3264,"type":15},"Design","design",{"name":3266,"slug":3257,"type":15},"Figma",{"name":3268,"slug":3269,"type":15},"Frontend","frontend",{"name":3198,"slug":3199,"type":15},"2026-04-12T05:06:47.939943",{"slug":3273,"name":3273,"fn":3274,"description":3275,"org":3276,"tags":3277,"stars":3182,"repoUrl":3183,"updatedAt":3287},"figma-code-connect-components","connect Figma designs to code components","Connects Figma design components to code components using Code Connect mapping tools. Use when user says \"code connect\", \"connect this component to code\", \"map this component\", \"link component to code\", \"create code connect mapping\", or wants to establish mappings between Figma designs and code implementations. For canvas writes via `use_figma`, use `figma-use`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3278,3279,3282,3283,3284],{"name":3263,"slug":3264,"type":15},{"name":3280,"slug":3281,"type":15},"Design System","design-system",{"name":3266,"slug":3257,"type":15},{"name":3268,"slug":3269,"type":15},{"name":3285,"slug":3286,"type":15},"UI Components","ui-components","2026-05-10T05:59:52.971881",{"slug":3289,"name":3289,"fn":3290,"description":3291,"org":3292,"tags":3293,"stars":3182,"repoUrl":3183,"updatedAt":3301},"figma-create-design-system-rules","generate design system rules from Figma","Generates custom design system rules for the user's codebase. Use when user says \"create design system rules\", \"generate rules for my project\", \"set up design rules\", \"customize design system guidelines\", or wants to establish project-specific conventions for Figma-to-code workflows. Requires Figma MCP server connection.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3294,3295,3296,3299,3300],{"name":3263,"slug":3264,"type":15},{"name":3280,"slug":3281,"type":15},{"name":3297,"slug":3298,"type":15},"Documentation","documentation",{"name":3266,"slug":3257,"type":15},{"name":3268,"slug":3269,"type":15},"2026-05-16T06:07:47.821474",{"slug":3303,"name":3303,"fn":3304,"description":3305,"org":3306,"tags":3307,"stars":3182,"repoUrl":3183,"updatedAt":3313},"figma-implement-design","translate Figma designs into application code","Translates Figma designs into production-ready application code with 1:1 visual fidelity. Use when implementing UI code from Figma files, when user mentions \"implement design\", \"generate code\", \"implement component\", provides Figma URLs, or asks to build components matching Figma specs. For Figma canvas writes via `use_figma`, use `figma-use`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3308,3309,3310,3311,3312],{"name":3263,"slug":3264,"type":15},{"name":3266,"slug":3257,"type":15},{"name":3268,"slug":3269,"type":15},{"name":3285,"slug":3286,"type":15},{"name":3180,"slug":3181,"type":15},"2026-05-16T06:07:40.583615",{"slug":3315,"name":3315,"fn":3316,"description":3317,"org":3318,"tags":3319,"stars":3182,"repoUrl":3183,"updatedAt":3328},"hatch-pet","create animated pets for Codex","Create, repair, validate, visually QA, and package Codex-compatible animated pets and pet spritesheets from character art, generated images, company or prospect brand cues, or visual references. Use when a user wants a lightweight-worker Codex pet workflow, a non-pixel custom pet style, a prospect or company mascot pet, or a full 8x9 animated pet atlas with transparent unused cells, QA contact sheets, and pet.json packaging. This skill composes the installed $imagegen system skill for visual generation and uses bundled scripts for deterministic spritesheet assembly.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3320,3323,3324,3327],{"name":3321,"slug":3322,"type":15},"Animation","animation",{"name":3215,"slug":3216,"type":15},{"name":3325,"slug":3326,"type":15},"Creative","creative",{"name":3263,"slug":3264,"type":15},"2026-05-02T05:31:48.48485",{"slug":3330,"name":3330,"fn":3331,"description":3332,"org":3333,"tags":3334,"stars":3182,"repoUrl":3183,"updatedAt":3344},"imagegen","generate and edit raster images","Generate or edit raster images when the task benefits from AI-created bitmap visuals such as photos, illustrations, textures, sprites, mockups, or transparent-background cutouts. Use when Codex should create a brand-new image, transform an existing image, or derive visual variants from references, and the output should be a bitmap asset rather than repo-native code or vector. Do not use when the task is better handled by editing existing SVG\u002Fvector\u002Fcode-native assets, extending an established icon or logo system, or building the visual directly in HTML\u002FCSS\u002Fcanvas.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3335,3336,3337,3340,3343],{"name":3325,"slug":3326,"type":15},{"name":3263,"slug":3264,"type":15},{"name":3338,"slug":3339,"type":15},"Image Generation","image-generation",{"name":3341,"slug":3342,"type":15},"Images","images",{"name":9,"slug":8,"type":15},"2026-05-15T06:23:24.312127",675,{"items":3347,"total":3455},[3348,3365,3381,3393,3409,3425,3443],{"slug":3349,"name":3349,"fn":3350,"description":3351,"org":3352,"tags":3353,"stars":28,"repoUrl":29,"updatedAt":3364},"accessibility-and-inclusive-visualization","make data visualizations accessible","Make data visualizations accessible and inclusive. Use when the user needs chart or diagram accessibility guidance, text alternatives for complex visuals, color and contrast review, keyboard support, reduced-motion behavior for animation or parallax, or an accessibility QA workflow for exported figures, UML-like diagrams, and dashboards.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3354,3357,3360,3363],{"name":3355,"slug":3356,"type":15},"Accessibility","accessibility",{"name":3358,"slug":3359,"type":15},"Charts","charts",{"name":3361,"slug":3362,"type":15},"Data Visualization","data-visualization",{"name":3263,"slug":3264,"type":15},"2026-06-30T19:00:57.102",{"slug":3366,"name":3366,"fn":3367,"description":3368,"org":3369,"tags":3370,"stars":28,"repoUrl":29,"updatedAt":3380},"agent-browser","automate browser interactions for agents","Browser automation CLI for AI agents. Use when the user needs to interact with websites, verify dev server output, test web apps, navigate pages, fill forms, click buttons, take screenshots, extract data, or automate any browser task. Also triggers when a dev server starts so you can verify it visually.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3371,3374,3377],{"name":3372,"slug":3373,"type":15},"Agents","agents",{"name":3375,"slug":3376,"type":15},"Browser Automation","browser-automation",{"name":3378,"slug":3379,"type":15},"Testing","testing","2026-04-06T18:41:03.44016",{"slug":3382,"name":3382,"fn":3383,"description":3384,"org":3385,"tags":3386,"stars":28,"repoUrl":29,"updatedAt":3392},"agent-browser-verify","verify dev server output with automated browser","Automated browser verification for dev servers. Triggers when a dev server starts to run a visual gut-check with agent-browser — verifies the page loads, checks for console errors, validates key UI elements, and reports pass\u002Ffail before continuing.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3387,3388,3391],{"name":3375,"slug":3376,"type":15},{"name":3389,"slug":3390,"type":15},"Local Development","local-development",{"name":3378,"slug":3379,"type":15},"2026-04-06T18:41:17.526867",{"slug":3394,"name":3394,"fn":3395,"description":3396,"org":3397,"tags":3398,"stars":28,"repoUrl":29,"updatedAt":3408},"agents-sdk","build AI agents on Cloudflare Workers","Build AI agents on Cloudflare Workers using the Agents SDK. Load when creating stateful agents, durable workflows, real-time WebSocket apps, scheduled tasks, MCP servers, or chat applications. Covers Agent class, state management, callable RPC, Workflows integration, and React hooks. Biases towards retrieval from Cloudflare docs over pre-trained knowledge.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3399,3400,3401,3404,3405],{"name":3372,"slug":3373,"type":15},{"name":3231,"slug":3232,"type":15},{"name":3402,"slug":3403,"type":15},"SDK","sdk",{"name":23,"slug":24,"type":15},{"name":3406,"slug":3407,"type":15},"WebSockets","websockets","2026-04-06T18:39:51.717063",{"slug":3410,"name":3410,"fn":3411,"description":3412,"org":3413,"tags":3414,"stars":28,"repoUrl":29,"updatedAt":3424},"ai-elements","build chat UIs with AI Elements","AI Elements component library guidance — pre-built React components for AI interfaces built on shadcn\u002Fui. Use when building chat UIs, message displays, tool call rendering, streaming responses, reasoning panels, or any AI-native interface with the AI SDK.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3415,3416,3419,3422,3423],{"name":3268,"slug":3269,"type":15},{"name":3417,"slug":3418,"type":15},"React","react",{"name":3420,"slug":3421,"type":15},"shadcn\u002Fui","shadcn-ui",{"name":3285,"slug":3286,"type":15},{"name":17,"slug":18,"type":15},"2026-04-06T18:40:59.619419",{"slug":3426,"name":3426,"fn":3427,"description":3428,"org":3429,"tags":3430,"stars":28,"repoUrl":29,"updatedAt":3442},"ai-gateway","configure Vercel AI Gateway","Vercel AI Gateway expert guidance. Use when configuring model routing, provider failover, cost tracking, or managing multiple AI providers through a unified API.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3431,3434,3437,3440,3441],{"name":3432,"slug":3433,"type":15},"AI Infrastructure","ai-infrastructure",{"name":3435,"slug":3436,"type":15},"Cost Optimization","cost-optimization",{"name":3438,"slug":3439,"type":15},"LLM","llm",{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},"2026-04-06T18:40:44.377464",{"slug":3444,"name":3444,"fn":3445,"description":3446,"org":3447,"tags":3448,"stars":28,"repoUrl":29,"updatedAt":3454},"ai-generation-persistence","implement persistence patterns for AI generations","AI generation persistence patterns — unique IDs, addressable URLs, database storage, and cost tracking for every LLM generation",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3449,3450,3453],{"name":3435,"slug":3436,"type":15},{"name":3451,"slug":3452,"type":15},"Database","database",{"name":3438,"slug":3439,"type":15},"2026-04-06T18:41:08.513425",600]