[{"data":1,"prerenderedAt":1826},["ShallowReactive",2],{"navigation_docs":3,"-docs-deploy-netlify":493,"-docs-deploy-netlify-surround":1821},[4,46,135,218,257,292,355,377,420],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":45},"Getting Started","i-lucide-rocket","\u002Fdocs\u002Fgetting-started","docs\u002F01.getting-started",[10,15,20,25,30,35,40],{"title":11,"path":12,"stem":13,"icon":14},"What is Heximon?","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002F01.getting-started\u002F01.introduction","i-lucide-info",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F01.getting-started\u002F02.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Quick Start","\u002Fdocs\u002Fgetting-started\u002Fquick-start","docs\u002F01.getting-started\u002F03.quick-start","i-lucide-zap",{"title":26,"path":27,"stem":28,"icon":29},"Core Concepts","\u002Fdocs\u002Fgetting-started\u002Fcore-concepts","docs\u002F01.getting-started\u002F04.core-concepts","i-lucide-shapes",{"title":31,"path":32,"stem":33,"icon":34},"Examples","\u002Fdocs\u002Fgetting-started\u002Fexamples","docs\u002F01.getting-started\u002F05.examples","i-lucide-library",{"title":36,"path":37,"stem":38,"icon":39},"Where Next?","\u002Fdocs\u002Fgetting-started\u002Fwhere-next","docs\u002F01.getting-started\u002F06.where-next","i-lucide-signpost",{"title":41,"path":42,"stem":43,"icon":44},"Troubleshooting","\u002Fdocs\u002Fgetting-started\u002Ftroubleshooting","docs\u002F01.getting-started\u002F07.troubleshooting","i-lucide-life-buoy",false,{"title":47,"icon":48,"path":49,"stem":50,"children":51,"page":45},"Essentials","i-lucide-boxes","\u002Fdocs\u002Fessentials","docs\u002F02.essentials",[52,56,61,66,71,76,81,86,91,96,101,105,110,115,120,125,130],{"title":53,"path":54,"stem":55,"icon":48},"Modules & DI","\u002Fdocs\u002Fessentials\u002Fmodules-and-di","docs\u002F02.essentials\u002F01.modules-and-di",{"title":57,"path":58,"stem":59,"icon":60},"Controllers","\u002Fdocs\u002Fessentials\u002Fcontrollers","docs\u002F02.essentials\u002F02.controllers","i-lucide-route",{"title":62,"path":63,"stem":64,"icon":65},"Validation & DTOs","\u002Fdocs\u002Fessentials\u002Fvalidation","docs\u002F02.essentials\u002F03.validation","i-lucide-shield-check",{"title":67,"path":68,"stem":69,"icon":70},"Contracts","\u002Fdocs\u002Fessentials\u002Fcontracts","docs\u002F02.essentials\u002F04.contracts","i-lucide-file-signature",{"title":72,"path":73,"stem":74,"icon":75},"REST Client","\u002Fdocs\u002Fessentials\u002Fclient","docs\u002F02.essentials\u002F05.client","i-lucide-plug",{"title":77,"path":78,"stem":79,"icon":80},"Database","\u002Fdocs\u002Fessentials\u002Fdatabase","docs\u002F02.essentials\u002F06.database","i-lucide-database",{"title":82,"path":83,"stem":84,"icon":85},"Drizzle ORM","\u002Fdocs\u002Fessentials\u002Fdrizzle","docs\u002F02.essentials\u002F07.drizzle","i-lucide-database-zap",{"title":87,"path":88,"stem":89,"icon":90},"Persistence & Transactions","\u002Fdocs\u002Fessentials\u002Fpersistence","docs\u002F02.essentials\u002F08.persistence","i-lucide-database-backup",{"title":92,"path":93,"stem":94,"icon":95},"Migrations","\u002Fdocs\u002Fessentials\u002Fmigrations","docs\u002F02.essentials\u002F09.migrations","i-lucide-git-branch",{"title":97,"path":98,"stem":99,"icon":100},"Authentication","\u002Fdocs\u002Fessentials\u002Fauthentication","docs\u002F02.essentials\u002F10.authentication","i-lucide-key-round",{"title":102,"path":103,"stem":104,"icon":65},"Permissions & scopes","\u002Fdocs\u002Fessentials\u002Fpermissions","docs\u002F02.essentials\u002F11.permissions",{"title":106,"path":107,"stem":108,"icon":109},"Error Handling","\u002Fdocs\u002Fessentials\u002Ferrors","docs\u002F02.essentials\u002F12.errors","i-lucide-triangle-alert",{"title":111,"path":112,"stem":113,"icon":114},"Testing a Heximon App","\u002Fdocs\u002Fessentials\u002Ftesting","docs\u002F02.essentials\u002F13.testing","i-lucide-flask-conical",{"title":116,"path":117,"stem":118,"icon":119},"Test app harness","\u002Fdocs\u002Fessentials\u002Fcreatetestapp","docs\u002F02.essentials\u002F14.createtestapp","i-lucide-test-tube",{"title":121,"path":122,"stem":123,"icon":124},"Logging & Observability","\u002Fdocs\u002Fessentials\u002Flogging","docs\u002F02.essentials\u002F17.logging","i-lucide-scroll-text",{"title":126,"path":127,"stem":128,"icon":129},"Context & Lifecycle","\u002Fdocs\u002Fessentials\u002Fcontext-and-lifecycle","docs\u002F02.essentials\u002F18.context-and-lifecycle","i-lucide-radio",{"title":131,"path":132,"stem":133,"icon":134},"Project Structure","\u002Fdocs\u002Fessentials\u002Fproject-structure","docs\u002F02.essentials\u002F19.project-structure","i-lucide-folder-tree",{"title":136,"icon":137,"path":138,"stem":139,"children":140,"page":45},"Capabilities","i-lucide-sparkles","\u002Fdocs\u002Fcapabilities","docs\u002F03.capabilities",[141,145,150,155,160,164,169,174,179,184,188,193,198,203,208,213],{"title":142,"path":143,"stem":144,"icon":137},"Overview","\u002Fdocs\u002Fcapabilities\u002Foverview","docs\u002F03.capabilities\u002F01.overview",{"title":146,"path":147,"stem":148,"icon":149},"Events","\u002Fdocs\u002Fcapabilities\u002Fevents","docs\u002F03.capabilities\u002F02.events","i-lucide-radio-tower",{"title":151,"path":152,"stem":153,"icon":154},"Queue","\u002Fdocs\u002Fcapabilities\u002Fbackground-jobs","docs\u002F03.capabilities\u002F03.background-jobs","i-lucide-list-ordered",{"title":156,"path":157,"stem":158,"icon":159},"Scheduled Work","\u002Fdocs\u002Fcapabilities\u002Fscheduled-jobs","docs\u002F03.capabilities\u002F04.scheduled-jobs","i-lucide-clock",{"title":161,"path":162,"stem":163,"icon":85},"Caching","\u002Fdocs\u002Fcapabilities\u002Fcaching","docs\u002F03.capabilities\u002F05.caching",{"title":165,"path":166,"stem":167,"icon":168},"Key\u002FValue Storage","\u002Fdocs\u002Fcapabilities\u002Fkey-value","docs\u002F03.capabilities\u002F06.key-value","i-lucide-hard-drive",{"title":170,"path":171,"stem":172,"icon":173},"Blob Storage","\u002Fdocs\u002Fcapabilities\u002Fblob","docs\u002F03.capabilities\u002F07.blob","i-lucide-folder-open",{"title":175,"path":176,"stem":177,"icon":178},"Health & Readiness","\u002Fdocs\u002Fcapabilities\u002Fhealth","docs\u002F03.capabilities\u002F08.health","i-lucide-heart-pulse",{"title":180,"path":181,"stem":182,"icon":183},"Notifications","\u002Fdocs\u002Fcapabilities\u002Fnotifications","docs\u002F03.capabilities\u002F09.notifications","i-lucide-mail",{"title":185,"path":186,"stem":187,"icon":65},"Idempotency","\u002Fdocs\u002Fcapabilities\u002Fidempotency","docs\u002F03.capabilities\u002F10.idempotency",{"title":189,"path":190,"stem":191,"icon":192},"Security Hardening","\u002Fdocs\u002Fcapabilities\u002Fsecurity","docs\u002F03.capabilities\u002F11.security","i-lucide-shield",{"title":194,"path":195,"stem":196,"icon":197},"Observability & Tracing","\u002Fdocs\u002Fcapabilities\u002Fobservability","docs\u002F03.capabilities\u002F12.observability","i-lucide-activity",{"title":199,"path":200,"stem":201,"icon":202},"OpenAPI","\u002Fdocs\u002Fcapabilities\u002Fopenapi","docs\u002F03.capabilities\u002F13.openapi","i-lucide-book-marked",{"title":204,"path":205,"stem":206,"icon":207},"MCP Server","\u002Fdocs\u002Fcapabilities\u002Fmcp","docs\u002F03.capabilities\u002F14.mcp","i-lucide-bot",{"title":209,"path":210,"stem":211,"icon":212},"Schema DTOs","\u002Fdocs\u002Fcapabilities\u002Fschema","docs\u002F03.capabilities\u002F15.schema","i-lucide-file-json",{"title":214,"path":215,"stem":216,"icon":217},"Branded IDs","\u002Fdocs\u002Fcapabilities\u002Fbranded-ids","docs\u002F03.capabilities\u002F16.branded-ids","i-lucide-tag",{"title":219,"icon":220,"path":221,"stem":222,"children":223,"page":45},"Architecture","i-lucide-building","\u002Fdocs\u002Farchitecture","docs\u002F04.architecture",[224,227,232,237,242,247,252],{"title":142,"path":225,"stem":226,"icon":220},"\u002Fdocs\u002Farchitecture\u002Foverview","docs\u002F04.architecture\u002F01.overview",{"title":228,"path":229,"stem":230,"icon":231},"Domain-Driven Design","\u002Fdocs\u002Farchitecture\u002Fddd","docs\u002F04.architecture\u002F02.ddd","i-lucide-hexagon",{"title":233,"path":234,"stem":235,"icon":236},"CQRS","\u002Fdocs\u002Farchitecture\u002Fcqrs","docs\u002F04.architecture\u002F03.cqrs","i-lucide-split",{"title":238,"path":239,"stem":240,"icon":241},"Repository Pattern","\u002Fdocs\u002Farchitecture\u002Frepository-pattern","docs\u002F04.architecture\u002F04.repository-pattern","i-lucide-archive",{"title":243,"path":244,"stem":245,"icon":246},"Integration Events","\u002Fdocs\u002Farchitecture\u002Fintegration-events","docs\u002F04.architecture\u002F05.integration-events","i-lucide-send-horizontal",{"title":248,"path":249,"stem":250,"icon":251},"Saga Orchestration","\u002Fdocs\u002Farchitecture\u002Fsagas","docs\u002F04.architecture\u002F06.sagas","i-lucide-hourglass",{"title":253,"path":254,"stem":255,"icon":256},"Durable Workflows","\u002Fdocs\u002Farchitecture\u002Fworkflows","docs\u002F04.architecture\u002F07.workflows","i-lucide-workflow",{"title":258,"icon":259,"path":260,"stem":261,"children":262,"page":45},"Realtime","i-lucide-cable","\u002Fdocs\u002Frealtime","docs\u002F05.realtime",[263,266,270,274,279,284,288],{"title":142,"path":264,"stem":265,"icon":259},"\u002Fdocs\u002Frealtime\u002Foverview","docs\u002F05.realtime\u002F01.overview",{"title":267,"path":268,"stem":269,"icon":129},"WebSockets","\u002Fdocs\u002Frealtime\u002Fwebsockets","docs\u002F05.realtime\u002F02.websockets",{"title":271,"path":272,"stem":273,"icon":70},"WebSocket Contracts","\u002Fdocs\u002Frealtime\u002Fwebsocket-contracts","docs\u002F05.realtime\u002F03.websocket-contracts",{"title":275,"path":276,"stem":277,"icon":278},"Server-Sent Events","\u002Fdocs\u002Frealtime\u002Fserver-sent-events","docs\u002F05.realtime\u002F04.server-sent-events","i-lucide-rss",{"title":280,"path":281,"stem":282,"icon":283},"Typed Clients","\u002Fdocs\u002Frealtime\u002Ftyped-clients","docs\u002F05.realtime\u002F05.typed-clients","i-lucide-plug-zap",{"title":285,"path":286,"stem":287,"icon":259},"AsyncAPI","\u002Fdocs\u002Frealtime\u002Fasyncapi","docs\u002F05.realtime\u002F06.asyncapi",{"title":289,"path":290,"stem":291,"icon":80},"Durable Objects","\u002Fdocs\u002Frealtime\u002Fdurable-objects","docs\u002F05.realtime\u002F07.durable-objects",{"title":293,"icon":294,"path":295,"stem":296,"children":297,"page":45},"Deploy","i-lucide-cloud-upload","\u002Fdocs\u002Fdeploy","docs\u002F06.deploy",[298,301,306,311,316,321,326,331,336,341,345,350],{"title":142,"path":299,"stem":300,"icon":6},"\u002Fdocs\u002Fdeploy\u002Foverview","docs\u002F06.deploy\u002F01.overview",{"title":302,"path":303,"stem":304,"icon":305},"Node","\u002Fdocs\u002Fdeploy\u002Fnode","docs\u002F06.deploy\u002F02.node","la:node-js",{"title":307,"path":308,"stem":309,"icon":310},"Cloudflare","\u002Fdocs\u002Fdeploy\u002Fcloudflare","docs\u002F06.deploy\u002F03.cloudflare","simple-icons:cloudflare",{"title":312,"path":313,"stem":314,"icon":315},"Vercel","\u002Fdocs\u002Fdeploy\u002Fvercel","docs\u002F06.deploy\u002F04.vercel","ri:vercel-fill",{"title":317,"path":318,"stem":319,"icon":320},"Netlify","\u002Fdocs\u002Fdeploy\u002Fnetlify","docs\u002F06.deploy\u002F05.netlify","i-simple-icons-netlify",{"title":322,"path":323,"stem":324,"icon":325},"AWS Lambda","\u002Fdocs\u002Fdeploy\u002Faws-lambda","docs\u002F06.deploy\u002F06.aws-lambda","hugeicons:aws-lambda",{"title":327,"path":328,"stem":329,"icon":330},"Deno Deploy","\u002Fdocs\u002Fdeploy\u002Fdeno-deploy","docs\u002F06.deploy\u002F07.deno-deploy","simple-icons:denodeploy",{"title":332,"path":333,"stem":334,"icon":335},"Nitro","\u002Fdocs\u002Fdeploy\u002Fnitro","docs\u002F06.deploy\u002F08.nitro","i-unjs-nitro",{"title":337,"path":338,"stem":339,"icon":340},"Nuxt","\u002Fdocs\u002Fdeploy\u002Fnuxt","docs\u002F06.deploy\u002F09.nuxt","i-devicon-nuxt",{"title":342,"path":343,"stem":344,"icon":236},"Mixed-runtime split","\u002Fdocs\u002Fdeploy\u002Fmixed-runtime-split","docs\u002F06.deploy\u002F10.mixed-runtime-split",{"title":346,"path":347,"stem":348,"icon":349},"Hosts","\u002Fdocs\u002Fdeploy\u002Fhosts","docs\u002F06.deploy\u002F11.hosts","i-lucide-map",{"title":351,"path":352,"stem":353,"icon":354},"Cross-service events","\u002Fdocs\u002Fdeploy\u002Fcross-service-events","docs\u002F06.deploy\u002F12.cross-service-events","i-lucide-network",{"title":356,"icon":357,"path":358,"stem":359,"children":360,"page":45},"CLI","i-lucide-terminal","\u002Fdocs\u002Fcli","docs\u002F07.cli",[361,365,369,373],{"title":362,"path":363,"stem":364,"icon":357},"The heximon CLI","\u002Fdocs\u002Fcli\u002Foverview","docs\u002F07.cli\u002F01.overview",{"title":366,"path":367,"stem":368,"icon":137},"Create a New App","\u002Fdocs\u002Fcli\u002Fcreate","docs\u002F07.cli\u002F02.create",{"title":370,"path":371,"stem":372,"icon":95},"Migrations from the CLI","\u002Fdocs\u002Fcli\u002Fmigrations","docs\u002F07.cli\u002F03.migrations",{"title":374,"path":375,"stem":376,"icon":6},"Deploying a Heximon app","\u002Fdocs\u002Fcli\u002Fdeploy","docs\u002F07.cli\u002F04.deploy",{"title":378,"icon":379,"path":380,"stem":381,"children":382,"page":45},"Under the Hood","i-lucide-wrench","\u002Fdocs\u002Funder-the-hood","docs\u002F08.under-the-hood",[383,388,393,397,402,407,411,415],{"title":384,"path":385,"stem":386,"icon":387},"How the Compiler Works","\u002Fdocs\u002Funder-the-hood\u002Fhow-the-compiler-works","docs\u002F08.under-the-hood\u002F01.how-the-compiler-works","i-lucide-cog",{"title":389,"path":390,"stem":391,"icon":392},"Compiler","\u002Fdocs\u002Funder-the-hood\u002Fextending-the-compiler","docs\u002F08.under-the-hood\u002F02.extending-the-compiler","i-lucide-cpu",{"title":394,"path":395,"stem":396,"icon":357},"Compiler Diagnostics","\u002Fdocs\u002Funder-the-hood\u002Fcompiler-diagnostics","docs\u002F08.under-the-hood\u002F03.compiler-diagnostics",{"title":398,"path":399,"stem":400,"icon":401},"Library Mode","\u002Fdocs\u002Funder-the-hood\u002Flibrary-mode","docs\u002F08.under-the-hood\u002F04.library-mode","i-lucide-package",{"title":403,"path":404,"stem":405,"icon":406},"Other bundlers","\u002Fdocs\u002Funder-the-hood\u002Falternate-bundlers","docs\u002F08.under-the-hood\u002F05.alternate-bundlers","i-lucide-blocks",{"title":408,"path":409,"stem":410,"icon":401},"Packages","\u002Fdocs\u002Funder-the-hood\u002Fpackages","docs\u002F08.under-the-hood\u002F06.packages",{"title":412,"path":413,"stem":414,"icon":207},"AI Skills","\u002Fdocs\u002Funder-the-hood\u002Fai-and-agents","docs\u002F08.under-the-hood\u002F07.ai-and-agents",{"title":416,"path":417,"stem":418,"icon":419},"Advanced DI","\u002Fdocs\u002Funder-the-hood\u002Fadvanced-di","docs\u002F08.under-the-hood\u002F08.advanced-di","i-lucide-git-fork",{"title":421,"icon":422,"path":423,"stem":424,"children":425,"page":45},"Recipes","i-lucide-book-open-check","\u002Fdocs\u002Frecipes","docs\u002F09.recipes",[426,431,436,440,444,448,452,456,460,465,469,474,479,484,488],{"title":427,"path":428,"stem":429,"icon":430},"Send an Email","\u002Fdocs\u002Frecipes\u002Fsend-an-email","docs\u002F09.recipes\u002F01.send-an-email","i-lucide-send",{"title":432,"path":433,"stem":434,"icon":435},"Upload a File","\u002Fdocs\u002Frecipes\u002Fupload-a-file","docs\u002F09.recipes\u002F02.upload-a-file","i-lucide-upload",{"title":437,"path":438,"stem":439,"icon":24},"Cache an Expensive Call","\u002Fdocs\u002Frecipes\u002Fcache-an-expensive-call","docs\u002F09.recipes\u002F03.cache-an-expensive-call",{"title":441,"path":442,"stem":443,"icon":154},"Paginate a List","\u002Fdocs\u002Frecipes\u002Fpaginate-a-list","docs\u002F09.recipes\u002F04.paginate-a-list",{"title":445,"path":446,"stem":447,"icon":65},"Protect Admin Routes","\u002Fdocs\u002Frecipes\u002Fprotect-admin-routes","docs\u002F09.recipes\u002F05.protect-admin-routes",{"title":449,"path":450,"stem":451,"icon":178},"Health Probes and a Nightly Job","\u002Fdocs\u002Frecipes\u002Fhealth-probes-and-a-nightly-job","docs\u002F09.recipes\u002F06.health-probes-and-a-nightly-job",{"title":453,"path":454,"stem":455,"icon":80},"Build a CRUD API","\u002Fdocs\u002Frecipes\u002Fcrud-api","docs\u002F09.recipes\u002F07.crud-api",{"title":457,"path":458,"stem":459,"icon":100},"Add Authentication","\u002Fdocs\u002Frecipes\u002Fadd-authentication","docs\u002F09.recipes\u002F08.add-authentication",{"title":461,"path":462,"stem":463,"icon":464},"Background Jobs","\u002Fdocs\u002Frecipes\u002Fbackground-jobs","docs\u002F09.recipes\u002F09.background-jobs","i-lucide-timer",{"title":466,"path":467,"stem":468,"icon":149},"Decouple Features with Events","\u002Fdocs\u002Frecipes\u002Fevent-driven-module","docs\u002F09.recipes\u002F10.event-driven-module",{"title":470,"path":471,"stem":472,"icon":473},"Build a DDD Aggregate","\u002Fdocs\u002Frecipes\u002Fddd-aggregate","docs\u002F09.recipes\u002F11.ddd-aggregate","i-lucide-box",{"title":475,"path":476,"stem":477,"icon":478},"Publish a Feature Package","\u002Fdocs\u002Frecipes\u002Ffeature-package","docs\u002F09.recipes\u002F12.feature-package","i-lucide-package-open",{"title":480,"path":481,"stem":482,"icon":483},"Reliable Integration Events","\u002Fdocs\u002Frecipes\u002Freliable-integration-events","docs\u002F09.recipes\u002F13.reliable-integration-events","i-lucide-inbox",{"title":485,"path":486,"stem":487,"icon":95},"Reactive Choreography","\u002Fdocs\u002Frecipes\u002Freactive-choreography","docs\u002F09.recipes\u002F14.reactive-choreography",{"title":489,"path":490,"stem":491,"icon":492},"Build a Production CRUD API","\u002Fdocs\u002Frecipes\u002Fproduction-crud-api","docs\u002F09.recipes\u002F15.production-crud-api","i-lucide-layers",{"id":494,"title":317,"body":495,"description":1814,"extension":1815,"links":1816,"meta":1817,"navigation":1818,"path":318,"seo":1819,"stem":319,"__hash__":1820},"docs\u002Fdocs\u002F06.deploy\u002F05.netlify.md",{"type":496,"value":497,"toc":1803},"minimark",[498,507,512,682,704,717,725,743,751,766,777,797,801,815,994,1116,1126,1130,1154,1290,1427,1605,1624,1627,1635,1664,1675,1679,1682,1686,1704,1717,1743,1750,1754,1799],[499,500,501,502,506],"p",{},"Netlify's scheduled functions are native — each cron handler becomes its own function with a static\n",[503,504,505],"code",{},"config.schedule"," export, registered the moment you deploy. No drain cron, no polling: Heximon's Netlify\nsupport is strictly better here than the generic Nitro preset, which emits no scheduled functions at all.",[508,509,511],"h2",{"id":510},"configure-the-strategy","Configure the strategy",[513,514,520],"pre",{"className":515,"code":516,"filename":517,"language":518,"meta":519,"style":519},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineHeximonConfig } from \"@heximon\u002Fbuild\";\nimport { NetlifyFunctionsStrategy } from \"@heximon\u002Fnetlify\";\nimport { HttpPlugin } from \"@heximon\u002Fhttp\u002Fcompiler\";\n\nexport default defineHeximonConfig({\n  platform: new NetlifyFunctionsStrategy(),\n  plugins: [new HttpPlugin()],\n});\n","heximon.config.ts","ts","",[503,521,522,558,581,604,611,629,650,671],{"__ignoreMap":519},[523,524,527,531,535,539,542,545,548,552,555],"span",{"class":525,"line":526},"line",1,[523,528,530],{"class":529},"s7zQu","import",[523,532,534],{"class":533},"sMK4o"," {",[523,536,538],{"class":537},"sTEyZ"," defineHeximonConfig",[523,540,541],{"class":533}," }",[523,543,544],{"class":529}," from",[523,546,547],{"class":533}," \"",[523,549,551],{"class":550},"sfazB","@heximon\u002Fbuild",[523,553,554],{"class":533},"\"",[523,556,557],{"class":533},";\n",[523,559,561,563,565,568,570,572,574,577,579],{"class":525,"line":560},2,[523,562,530],{"class":529},[523,564,534],{"class":533},[523,566,567],{"class":537}," NetlifyFunctionsStrategy",[523,569,541],{"class":533},[523,571,544],{"class":529},[523,573,547],{"class":533},[523,575,576],{"class":550},"@heximon\u002Fnetlify",[523,578,554],{"class":533},[523,580,557],{"class":533},[523,582,584,586,588,591,593,595,597,600,602],{"class":525,"line":583},3,[523,585,530],{"class":529},[523,587,534],{"class":533},[523,589,590],{"class":537}," HttpPlugin",[523,592,541],{"class":533},[523,594,544],{"class":529},[523,596,547],{"class":533},[523,598,599],{"class":550},"@heximon\u002Fhttp\u002Fcompiler",[523,601,554],{"class":533},[523,603,557],{"class":533},[523,605,607],{"class":525,"line":606},4,[523,608,610],{"emptyLinePlaceholder":609},true,"\n",[523,612,614,617,620,623,626],{"class":525,"line":613},5,[523,615,616],{"class":529},"export",[523,618,619],{"class":529}," default",[523,621,538],{"class":622},"s2Zo4",[523,624,625],{"class":537},"(",[523,627,628],{"class":533},"{\n",[523,630,632,636,639,642,644,647],{"class":525,"line":631},6,[523,633,635],{"class":634},"swJcz","  platform",[523,637,638],{"class":533},":",[523,640,641],{"class":533}," new",[523,643,567],{"class":622},[523,645,646],{"class":537},"()",[523,648,649],{"class":533},",\n",[523,651,653,656,658,661,664,666,669],{"class":525,"line":652},7,[523,654,655],{"class":634},"  plugins",[523,657,638],{"class":533},[523,659,660],{"class":537}," [",[523,662,663],{"class":533},"new",[523,665,590],{"class":622},[523,667,668],{"class":537},"()]",[523,670,649],{"class":533},[523,672,674,677,680],{"class":525,"line":673},8,[523,675,676],{"class":533},"}",[523,678,679],{"class":537},")",[523,681,557],{"class":533},[499,683,684,687,688,691,692,695,696,699,700,703],{},[503,685,686],{},"NetlifyFunctionsStrategy"," is a ",[503,689,690],{},"node","-class strategy, platform name ",[503,693,694],{},"\"netlify\""," — Netlify Functions 2.0 run an\nAWS-Lambda-backed Node.js runtime. ",[503,697,698],{},"NetlifyEdgeStrategy"," is the opt-in ",[503,701,702],{},"edge","-class alternative, running on Deno.",[705,706,708,709,712,713,716],"callout",{"type":707},"info","Response streaming and the Functions 2.0 handler shape need ",[503,710,711],{},"compatibilityDate >= 2024-05-07"," in your\n",[503,714,715],{},"netlify.toml"," — without it Netlify falls back to the legacy v1 function format.",[508,718,720,721,724],{"id":719},"what-vp-build-emits","What ",[503,722,723],{},"vp build"," emits",[499,726,727,729,730,734,735,738,739,742],{},[503,728,723],{}," writes a Netlify deploy tree at the ",[731,732,733],"strong",{},"project root"," ",[503,736,737],{},".netlify\u002F",", so ",[503,740,741],{},"netlify deploy"," runs the\ncompiled app with no Nitro:",[513,744,749],{"className":745,"code":747,"language":748},[746],"language-text",".netlify\u002Ffunctions-internal\u002F\n  server\u002F\n    index.mjs            # the compiled bundle\n    server.mjs            # export { default } from \".\u002Findex.mjs\" + the static `config` const\n  scheduled-0\u002F\n    scheduled-0.mjs       # one scheduled function per cron\n","text",[503,750,747],{"__ignoreMap":519},[499,752,753,754,757,758,761,762,765],{},"Netlify statically analyzes a function file for its top-level ",[503,755,756],{},"config"," const, so the catch-all routing config\n(",[503,759,760],{},"{ path: \"\u002F*\", preferStatic: true, excludedPath: [\"\u002F.netlify\u002F*\"] }",") lives in the explicit ",[503,763,764],{},"server.mjs"," wrapper\nrather than being re-exported through the compiled bundle.",[499,767,768,769,772,773,776],{},"Netlify Functions deploy externalized — the\nplatform bundles ",[503,770,771],{},"node_modules"," itself — so the strategy keeps the standard Node SSR externalization; only\n",[503,774,775],{},"node:*"," builtins are forced external.",[499,778,779,780,782,783,786,787,789,790,793,794,796],{},"The Edge tier (",[503,781,698],{},") writes ",[503,784,785],{},".netlify\u002Fedge-functions\u002F"," instead — a self-contained bundle (Deno\ndoesn't load ",[503,788,771],{},") routed by a ",[503,791,792],{},"manifest.json"," catch-all, with no ",[503,795,756],{}," wrapper and no scheduled\nfunctions.",[508,798,800],{"id":799},"scheduled-work-cron","Scheduled work (cron)",[499,802,803,804,807,808,811,812,814],{},"List ",[503,805,806],{},"SchedulePlugin"," and the plugin selects ",[503,809,810],{},"NetlifyScheduleDriver"," — a clockless driver the platform triggers\nby invoking a scheduled function directly. Each discovered cron gets its own function with a static\n",[503,813,505],{}," export as its registration:",[513,816,821],{"className":817,"code":818,"filename":819,"language":820,"meta":519,"style":519},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { scheduled as heximonScheduled } from \"..\u002Fserver\u002Findex.mjs\";\n\nexport const config = { schedule: \"0 3 * * *\" };\n\nexport default async () => {\n  await heximonScheduled({ cron: \"0 3 * * *\", scheduledTime: Date.now() });\n  return new Response(null, { status: 202 });\n};\n",".netlify\u002Ffunctions-internal\u002Fscheduled-0\u002Fscheduled-0.mjs (generated)","js",[503,822,823,851,855,886,890,908,957,989],{"__ignoreMap":519},[523,824,825,827,829,832,835,838,840,842,844,847,849],{"class":525,"line":526},[523,826,530],{"class":529},[523,828,534],{"class":533},[523,830,831],{"class":537}," scheduled",[523,833,834],{"class":529}," as",[523,836,837],{"class":537}," heximonScheduled",[523,839,541],{"class":533},[523,841,544],{"class":529},[523,843,547],{"class":533},[523,845,846],{"class":550},"..\u002Fserver\u002Findex.mjs",[523,848,554],{"class":533},[523,850,557],{"class":533},[523,852,853],{"class":525,"line":560},[523,854,610],{"emptyLinePlaceholder":609},[523,856,857,859,863,866,869,871,874,876,878,881,883],{"class":525,"line":583},[523,858,616],{"class":529},[523,860,862],{"class":861},"spNyl"," const",[523,864,865],{"class":537}," config ",[523,867,868],{"class":533},"=",[523,870,534],{"class":533},[523,872,873],{"class":634}," schedule",[523,875,638],{"class":533},[523,877,547],{"class":533},[523,879,880],{"class":550},"0 3 * * *",[523,882,554],{"class":533},[523,884,885],{"class":533}," };\n",[523,887,888],{"class":525,"line":606},[523,889,610],{"emptyLinePlaceholder":609},[523,891,892,894,896,899,902,905],{"class":525,"line":613},[523,893,616],{"class":529},[523,895,619],{"class":529},[523,897,898],{"class":861}," async",[523,900,901],{"class":533}," ()",[523,903,904],{"class":861}," =>",[523,906,907],{"class":533}," {\n",[523,909,910,913,915,917,920,923,925,927,929,931,934,937,939,942,945,948,951,953,955],{"class":525,"line":631},[523,911,912],{"class":529},"  await",[523,914,837],{"class":622},[523,916,625],{"class":634},[523,918,919],{"class":533},"{",[523,921,922],{"class":634}," cron",[523,924,638],{"class":533},[523,926,547],{"class":533},[523,928,880],{"class":550},[523,930,554],{"class":533},[523,932,933],{"class":533},",",[523,935,936],{"class":634}," scheduledTime",[523,938,638],{"class":533},[523,940,941],{"class":537}," Date",[523,943,944],{"class":533},".",[523,946,947],{"class":622},"now",[523,949,950],{"class":634},"() ",[523,952,676],{"class":533},[523,954,679],{"class":634},[523,956,557],{"class":533},[523,958,959,962,964,967,969,972,974,977,979,983,985,987],{"class":525,"line":652},[523,960,961],{"class":529},"  return",[523,963,641],{"class":533},[523,965,966],{"class":622}," Response",[523,968,625],{"class":634},[523,970,971],{"class":533},"null,",[523,973,534],{"class":533},[523,975,976],{"class":634}," status",[523,978,638],{"class":533},[523,980,982],{"class":981},"sbssI"," 202",[523,984,541],{"class":533},[523,986,679],{"class":634},[523,988,557],{"class":533},[523,990,991],{"class":525,"line":673},[523,992,993],{"class":533},"};\n",[513,995,997],{"className":515,"code":996,"language":518,"meta":519,"style":519},"import type { ScheduledHandler } from \"@heximon\u002Fschedule\";\n\nexport class NightlyCleanup implements ScheduledHandler\u003C\"0 3 * * *\", { name: \"Nightly cleanup\" }> {\n  public handle(scheduledAt: Date): void {\n    \u002F\u002F …\n  }\n}\n",[503,998,999,1024,1028,1074,1100,1106,1111],{"__ignoreMap":519},[523,1000,1001,1003,1006,1008,1011,1013,1015,1017,1020,1022],{"class":525,"line":526},[523,1002,530],{"class":529},[523,1004,1005],{"class":529}," type",[523,1007,534],{"class":533},[523,1009,1010],{"class":537}," ScheduledHandler",[523,1012,541],{"class":533},[523,1014,544],{"class":529},[523,1016,547],{"class":533},[523,1018,1019],{"class":550},"@heximon\u002Fschedule",[523,1021,554],{"class":533},[523,1023,557],{"class":533},[523,1025,1026],{"class":525,"line":560},[523,1027,610],{"emptyLinePlaceholder":609},[523,1029,1030,1032,1035,1039,1042,1044,1047,1049,1051,1053,1055,1057,1060,1062,1064,1067,1069,1072],{"class":525,"line":583},[523,1031,616],{"class":529},[523,1033,1034],{"class":861}," class",[523,1036,1038],{"class":1037},"sBMFI"," NightlyCleanup",[523,1040,1041],{"class":861}," implements",[523,1043,1010],{"class":1037},[523,1045,1046],{"class":533},"\u003C",[523,1048,554],{"class":533},[523,1050,880],{"class":550},[523,1052,554],{"class":533},[523,1054,933],{"class":533},[523,1056,534],{"class":533},[523,1058,1059],{"class":634}," name",[523,1061,638],{"class":533},[523,1063,547],{"class":533},[523,1065,1066],{"class":550},"Nightly cleanup",[523,1068,554],{"class":533},[523,1070,1071],{"class":533}," }>",[523,1073,907],{"class":533},[523,1075,1076,1079,1082,1084,1088,1090,1092,1095,1098],{"class":525,"line":606},[523,1077,1078],{"class":861},"  public",[523,1080,1081],{"class":634}," handle",[523,1083,625],{"class":533},[523,1085,1087],{"class":1086},"sHdIc","scheduledAt",[523,1089,638],{"class":533},[523,1091,941],{"class":1037},[523,1093,1094],{"class":533},"):",[523,1096,1097],{"class":1037}," void",[523,1099,907],{"class":533},[523,1101,1102],{"class":525,"line":613},[523,1103,1105],{"class":1104},"sHwdD","    \u002F\u002F …\n",[523,1107,1108],{"class":525,"line":631},[523,1109,1110],{"class":533},"  }\n",[523,1112,1113],{"class":525,"line":652},[523,1114,1115],{"class":533},"}\n",[499,1117,1118,1119,1122,1123,1125],{},"Cron works only on the ",[731,1120,1121],{},"Functions"," target — Netlify Edge has no scheduled-function support at all, and a\nscheduled handler compiled against ",[503,1124,698],{}," is rejected at build time with a clear diagnostic.",[508,1127,1129],{"id":1128},"queue-transport-netlify-async-workloads","Queue transport (Netlify Async Workloads)",[499,1131,803,1132,1135,1136,1139,1140,1143,1144,1146,1147,1150,1151,1153],{},[503,1133,1134],{},"QueuePlugin"," and bind ",[503,1137,1138],{},"NetlifyAsyncWorkloadsQueue"," (from ",[503,1141,1142],{},"@heximon\u002Fqueue\u002Fnetlify",") as your ",[503,1145,151],{},"\nprovider. The strategy binds ",[503,1148,1149],{},"NetlifyAsyncWorkloadsQueueConsumer"," as the push consumer, and ",[503,1152,723],{}," emits a\nconsumer function:",[513,1155,1158],{"className":817,"code":1156,"filename":1157,"language":820,"meta":519,"style":519},"import { asyncWorkloadFn } from \"@netlify\u002Fasync-workloads\";\nimport { queueConsumer } from \"..\u002Fserver\u002Findex.mjs\";\n\nexport const asyncWorkloadConfig = { events: [\"orders-placed\"] };\n\nexport default asyncWorkloadFn(async (event) => {\n  await queueConsumer(event);\n});\n",".netlify\u002Ffunctions-internal\u002Fqueue-consumer\u002Fqueue-consumer.mjs (generated)",[503,1159,1160,1182,1203,1207,1239,1243,1268,1282],{"__ignoreMap":519},[523,1161,1162,1164,1166,1169,1171,1173,1175,1178,1180],{"class":525,"line":526},[523,1163,530],{"class":529},[523,1165,534],{"class":533},[523,1167,1168],{"class":537}," asyncWorkloadFn",[523,1170,541],{"class":533},[523,1172,544],{"class":529},[523,1174,547],{"class":533},[523,1176,1177],{"class":550},"@netlify\u002Fasync-workloads",[523,1179,554],{"class":533},[523,1181,557],{"class":533},[523,1183,1184,1186,1188,1191,1193,1195,1197,1199,1201],{"class":525,"line":560},[523,1185,530],{"class":529},[523,1187,534],{"class":533},[523,1189,1190],{"class":537}," queueConsumer",[523,1192,541],{"class":533},[523,1194,544],{"class":529},[523,1196,547],{"class":533},[523,1198,846],{"class":550},[523,1200,554],{"class":533},[523,1202,557],{"class":533},[523,1204,1205],{"class":525,"line":583},[523,1206,610],{"emptyLinePlaceholder":609},[523,1208,1209,1211,1213,1216,1218,1220,1223,1225,1227,1229,1232,1234,1237],{"class":525,"line":606},[523,1210,616],{"class":529},[523,1212,862],{"class":861},[523,1214,1215],{"class":537}," asyncWorkloadConfig ",[523,1217,868],{"class":533},[523,1219,534],{"class":533},[523,1221,1222],{"class":634}," events",[523,1224,638],{"class":533},[523,1226,660],{"class":537},[523,1228,554],{"class":533},[523,1230,1231],{"class":550},"orders-placed",[523,1233,554],{"class":533},[523,1235,1236],{"class":537},"] ",[523,1238,993],{"class":533},[523,1240,1241],{"class":525,"line":613},[523,1242,610],{"emptyLinePlaceholder":609},[523,1244,1245,1247,1249,1251,1253,1256,1259,1262,1264,1266],{"class":525,"line":631},[523,1246,616],{"class":529},[523,1248,619],{"class":529},[523,1250,1168],{"class":622},[523,1252,625],{"class":537},[523,1254,1255],{"class":861},"async",[523,1257,1258],{"class":533}," (",[523,1260,1261],{"class":1086},"event",[523,1263,679],{"class":533},[523,1265,904],{"class":861},[523,1267,907],{"class":533},[523,1269,1270,1272,1274,1276,1278,1280],{"class":525,"line":652},[523,1271,912],{"class":529},[523,1273,1190],{"class":622},[523,1275,625],{"class":634},[523,1277,1261],{"class":537},[523,1279,679],{"class":634},[523,1281,557],{"class":533},[523,1283,1284,1286,1288],{"class":525,"line":673},[523,1285,676],{"class":533},[523,1287,679],{"class":537},[523,1289,557],{"class":533},[513,1291,1293],{"className":515,"code":1292,"language":518,"meta":519,"style":519},"import { NetlifyAsyncWorkloadsQueue } from \"@heximon\u002Fqueue\u002Fnetlify\";\nimport type { QueueEventTypes } from \"@heximon\u002Fqueue\";\n\nexport interface OrderEventMap extends QueueEventTypes {\n  \"orders-placed\": { orderId: string; total: number };\n}\n\nexport class OrderQueue extends NetlifyAsyncWorkloadsQueue\u003COrderEventMap> {}\n",[503,1294,1295,1316,1340,1344,1361,1395,1399,1403],{"__ignoreMap":519},[523,1296,1297,1299,1301,1304,1306,1308,1310,1312,1314],{"class":525,"line":526},[523,1298,530],{"class":529},[523,1300,534],{"class":533},[523,1302,1303],{"class":537}," NetlifyAsyncWorkloadsQueue",[523,1305,541],{"class":533},[523,1307,544],{"class":529},[523,1309,547],{"class":533},[523,1311,1142],{"class":550},[523,1313,554],{"class":533},[523,1315,557],{"class":533},[523,1317,1318,1320,1322,1324,1327,1329,1331,1333,1336,1338],{"class":525,"line":560},[523,1319,530],{"class":529},[523,1321,1005],{"class":529},[523,1323,534],{"class":533},[523,1325,1326],{"class":537}," QueueEventTypes",[523,1328,541],{"class":533},[523,1330,544],{"class":529},[523,1332,547],{"class":533},[523,1334,1335],{"class":550},"@heximon\u002Fqueue",[523,1337,554],{"class":533},[523,1339,557],{"class":533},[523,1341,1342],{"class":525,"line":583},[523,1343,610],{"emptyLinePlaceholder":609},[523,1345,1346,1348,1351,1354,1357,1359],{"class":525,"line":606},[523,1347,616],{"class":529},[523,1349,1350],{"class":861}," interface",[523,1352,1353],{"class":1037}," OrderEventMap",[523,1355,1356],{"class":861}," extends",[523,1358,1326],{"class":1037},[523,1360,907],{"class":533},[523,1362,1363,1366,1368,1370,1372,1374,1377,1379,1382,1385,1388,1390,1393],{"class":525,"line":613},[523,1364,1365],{"class":533},"  \"",[523,1367,1231],{"class":550},[523,1369,554],{"class":533},[523,1371,638],{"class":533},[523,1373,534],{"class":533},[523,1375,1376],{"class":634}," orderId",[523,1378,638],{"class":533},[523,1380,1381],{"class":1037}," string",[523,1383,1384],{"class":533},";",[523,1386,1387],{"class":634}," total",[523,1389,638],{"class":533},[523,1391,1392],{"class":1037}," number",[523,1394,885],{"class":533},[523,1396,1397],{"class":525,"line":631},[523,1398,1115],{"class":533},[523,1400,1401],{"class":525,"line":652},[523,1402,610],{"emptyLinePlaceholder":609},[523,1404,1405,1407,1409,1412,1414,1416,1418,1421,1424],{"class":525,"line":673},[523,1406,616],{"class":529},[523,1408,1034],{"class":861},[523,1410,1411],{"class":1037}," OrderQueue",[523,1413,1356],{"class":861},[523,1415,1303],{"class":1037},[523,1417,1046],{"class":533},[523,1419,1420],{"class":1037},"OrderEventMap",[523,1422,1423],{"class":533},">",[523,1425,1426],{"class":533}," {}\n",[513,1428,1430],{"className":515,"code":1429,"language":518,"meta":519,"style":519},"import { Module } from \"@heximon\u002Fruntime\";\nimport { OrderQueue } from \".\u002Forders\u002Forder-queue.js\";\nimport { OrderPlacedHandler } from \".\u002Forders\u002Forder-placed.handler.js\";\nimport { Queue } from \"@heximon\u002Fqueue\";\n\nexport class AppModule extends Module({\n  providers: [{ provide: Queue, useClass: OrderQueue }],\n  queue: { handlers: [OrderPlacedHandler] },\n}) {}\n",[503,1431,1432,1454,1475,1497,1518,1522,1539,1574,1594],{"__ignoreMap":519},[523,1433,1434,1436,1438,1441,1443,1445,1447,1450,1452],{"class":525,"line":526},[523,1435,530],{"class":529},[523,1437,534],{"class":533},[523,1439,1440],{"class":537}," Module",[523,1442,541],{"class":533},[523,1444,544],{"class":529},[523,1446,547],{"class":533},[523,1448,1449],{"class":550},"@heximon\u002Fruntime",[523,1451,554],{"class":533},[523,1453,557],{"class":533},[523,1455,1456,1458,1460,1462,1464,1466,1468,1471,1473],{"class":525,"line":560},[523,1457,530],{"class":529},[523,1459,534],{"class":533},[523,1461,1411],{"class":537},[523,1463,541],{"class":533},[523,1465,544],{"class":529},[523,1467,547],{"class":533},[523,1469,1470],{"class":550},".\u002Forders\u002Forder-queue.js",[523,1472,554],{"class":533},[523,1474,557],{"class":533},[523,1476,1477,1479,1481,1484,1486,1488,1490,1493,1495],{"class":525,"line":583},[523,1478,530],{"class":529},[523,1480,534],{"class":533},[523,1482,1483],{"class":537}," OrderPlacedHandler",[523,1485,541],{"class":533},[523,1487,544],{"class":529},[523,1489,547],{"class":533},[523,1491,1492],{"class":550},".\u002Forders\u002Forder-placed.handler.js",[523,1494,554],{"class":533},[523,1496,557],{"class":533},[523,1498,1499,1501,1503,1506,1508,1510,1512,1514,1516],{"class":525,"line":606},[523,1500,530],{"class":529},[523,1502,534],{"class":533},[523,1504,1505],{"class":537}," Queue",[523,1507,541],{"class":533},[523,1509,544],{"class":529},[523,1511,547],{"class":533},[523,1513,1335],{"class":550},[523,1515,554],{"class":533},[523,1517,557],{"class":533},[523,1519,1520],{"class":525,"line":613},[523,1521,610],{"emptyLinePlaceholder":609},[523,1523,1524,1526,1528,1531,1533,1535,1537],{"class":525,"line":631},[523,1525,616],{"class":529},[523,1527,1034],{"class":861},[523,1529,1530],{"class":1037}," AppModule",[523,1532,1356],{"class":861},[523,1534,1440],{"class":622},[523,1536,625],{"class":537},[523,1538,628],{"class":533},[523,1540,1541,1544,1546,1548,1550,1553,1555,1557,1559,1562,1564,1567,1569,1572],{"class":525,"line":652},[523,1542,1543],{"class":634},"  providers",[523,1545,638],{"class":533},[523,1547,660],{"class":537},[523,1549,919],{"class":533},[523,1551,1552],{"class":634}," provide",[523,1554,638],{"class":533},[523,1556,1505],{"class":537},[523,1558,933],{"class":533},[523,1560,1561],{"class":634}," useClass",[523,1563,638],{"class":533},[523,1565,1566],{"class":537}," OrderQueue ",[523,1568,676],{"class":533},[523,1570,1571],{"class":537},"]",[523,1573,649],{"class":533},[523,1575,1576,1579,1581,1583,1586,1588,1591],{"class":525,"line":673},[523,1577,1578],{"class":634},"  queue",[523,1580,638],{"class":533},[523,1582,534],{"class":533},[523,1584,1585],{"class":634}," handlers",[523,1587,638],{"class":533},[523,1589,1590],{"class":537}," [OrderPlacedHandler] ",[523,1592,1593],{"class":533},"},\n",[523,1595,1597,1599,1602],{"class":525,"line":1596},9,[523,1598,676],{"class":533},[523,1600,1601],{"class":537},") ",[523,1603,1604],{"class":533},"{}\n",[499,1606,1607,1609,1610,1612,1613,1616,1619,1620,1623],{},[503,1608,1177],{}," is not a declared peer dependency of ",[503,1611,1335],{}," — its pre-release dependency\ntree is too heavy to force into the toolchain — so a real Netlify-queue deploy adds it to the app's ",[731,1614,1615],{},"own",[503,1617,1618],{},"dependencies",". Netlify Async Workloads has no built-in delay feature, so there's no ",[503,1621,1622],{},"publishWithDelay",": reach\nfor a durable timer or a polling queue transport for delayed delivery instead.",[508,1625,342],{"id":1626},"mixed-runtime-split",[499,1628,1629,1631,1632,944],{},[503,1630,686],{}," owns both a node tier (Functions) and an edge tier (Edge Functions), so it declares\n",[503,1633,1634],{},"supportsRuntimeSplit = true",[499,1636,1637,1638,1641,1642,1644,1645,1648,1649,1652,1653,1656,1657,1660,1661,1663],{},"Mark a controller ",[503,1639,1640],{},"runtime: \"edge\""," and ",[503,1643,723],{}," partitions the DI graph,\nbundling the edge partition into a self-contained ",[503,1646,1647],{},"dist\u002Fedge.js"," and emitting ",[731,1650,1651],{},"both"," a\n",[503,1654,1655],{},".netlify\u002Ffunctions-internal\u002Fserver\u002F"," node catch-all ",[731,1658,1659],{},"and"," a prefix-routed Netlify Edge Function in\n",[503,1662,785],{},". Netlify Edge runs before Functions, so the edge function intercepts its own\nprefixes and the node function serves everything else.",[499,1665,1666,1667,1670,1671,1674],{},"Because Netlify Edge runs on Deno (broad native ",[503,1668,1669],{},"node:"," compatibility), the edge tier here needs no ",[503,1672,1673],{},"unenv","\npolyfill layer — that complexity is specific to Vercel's V8-isolate Edge tier.",[508,1676,1678],{"id":1677},"dev","Dev",[499,1680,1681],{},"Netlify has no local micro-VM emulator either. The strategy's dev host returns the browser channel unchanged —\ndevelopment runs as a standard Node HTTP server on both the Functions and Edge targets, with the full build\nexperience preserved.",[508,1683,1685],{"id":1684},"ship-it","Ship it",[513,1687,1691],{"className":1688,"code":1689,"language":1690,"meta":519,"style":519},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","netlify deploy          # add --prod for production\n","bash",[503,1692,1693],{"__ignoreMap":519},[523,1694,1695,1698,1701],{"class":525,"line":526},[523,1696,1697],{"class":1037},"netlify",[523,1699,1700],{"class":550}," deploy",[523,1702,1703],{"class":1104},"          # add --prod for production\n",[499,1705,1706,1707,1709,1710,1713,1714,944],{},"A manual prebuilt deploy needs a committed ",[503,1708,715],{}," pinning\n",[503,1711,1712],{},"[functions] directory = \".netlify\u002Ffunctions-internal\""," and a no-op ",[503,1715,1716],{},"[build] command",[499,1718,1719,1720,1723,1724,1730,1731,1734,1735,1738,1739,1742],{},"Both host strategies\nimplement the ",[503,1721,1722],{},"@heximon\u002Fdeploy"," capability, so ",[1725,1726,1727],"a",{"href":375},[503,1728,1729],{},"heximon deploy"," runs the same command for you —\nplus a ",[503,1732,1733],{},"netlify api getCurrentUser"," preflight and a first-deploy site-linkage gate (halting with the one-time\n",[503,1736,1737],{},"netlify sites:create"," \u002F ",[503,1740,1741],{},"netlify link"," command on a fresh site).",[499,1744,1745,1746,1749],{},"Netlify's cron is a native scheduled function,\nnot a public route, so there's no ",[503,1747,1748],{},"CRON_SECRET"," gate the way there is on Vercel.",[508,1751,1753],{"id":1752},"see-also","See also",[1755,1756,1757,1766,1776,1784],"ul",{},[1758,1759,1760,1762,1763,1765],"li",{},[1725,1761,151],{"href":152}," — the ",[503,1764,151],{}," port and channel handler discovery.",[1758,1767,1768,1771,1772,1775],{},[1725,1769,1770],{"href":157},"Schedule"," — ",[503,1773,1774],{},"ScheduledHandler"," and the cron discovery mechanism.",[1758,1777,1778,1780,1781,1783],{},[1725,1779,342],{"href":343}," — the shared ",[503,1782,1640],{}," controller partitioning.",[1758,1785,1786,1790,1791,1794,1795,1798],{},[1725,1787,1788],{"href":375},[503,1789,1729],{}," — the CLI's Netlify-specific preflight, ",[503,1792,1793],{},"--create",", and ",[503,1796,1797],{},"--provision"," flags.",[1800,1801,1802],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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);}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":519,"searchDepth":560,"depth":560,"links":1804},[1805,1806,1808,1809,1810,1811,1812,1813],{"id":510,"depth":560,"text":511},{"id":719,"depth":560,"text":1807},"What vp build emits",{"id":799,"depth":560,"text":800},{"id":1128,"depth":560,"text":1129},{"id":1626,"depth":560,"text":342},{"id":1677,"depth":560,"text":1678},{"id":1684,"depth":560,"text":1685},{"id":1752,"depth":560,"text":1753},"NetlifyFunctionsStrategy, NetlifyEdgeStrategy, .netlify\u002F deploy tree, scheduled functions, Netlify Async Workloads queue, mixed-runtime split.","md",null,{},{"icon":320},{"title":317,"description":1814},"Lc78ynNyFzjif9nlxHCEf4xpHInRnhUnNkBmqRUNkro",[1822,1824],{"title":312,"path":313,"stem":314,"description":1823,"icon":315,"children":-1},"VercelFunctionsStrategy, VercelEdgeStrategy, .vercel\u002Foutput Build Output API v3, vercel-entry.js, cron and queue triggers, the freeze-safe workflow drain.",{"title":322,"path":323,"stem":324,"description":1825,"icon":325,"children":-1},"LambdaStrategy, lambda-entry.js, API Gateway HTTP API v2 event adapter, LambdaSqsQueueConsumer, per-invocation OTel flush.",1783300759753]