[{"data":1,"prerenderedAt":1996},["ShallowReactive",2],{"navigation_docs":3,"-docs-deploy-overview":493,"-docs-deploy-overview-surround":1991},[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":142,"body":495,"description":1984,"extension":1985,"links":1986,"meta":1987,"navigation":1988,"path":299,"seo":1989,"stem":300,"__hash__":1990},"docs\u002Fdocs\u002F06.deploy\u002F01.overview.md",{"type":496,"value":497,"toc":1971},"minimark",[498,519,531,536,639,642,646,657,669,672,1092,1110,1116,1142,1145,1149,1165,1333,1347,1454,1475,1508,1646,1653,1661,1744,1747,1754,1769,1777,1788,1792,1795,1829,1836,1856,1892,1913,1917,1967],[499,500,501,502,506,507,510,511,514,515,518],"p",{},"You write one app — controllers, modules, providers that don't know what they're deployed to. ",[503,504,505],"code",{},"vp build"," can\nturn that same source into eight different native artifacts: a Cloudflare Worker with a complete\n",[503,508,509],{},"wrangler.json",", a Vercel Build Output API tree, an AWS Lambda handler, a Deno Deploy script, and more. What\nchanges per target is one line — a ",[503,512,513],{},"platform"," entry in ",[503,516,517],{},"heximon.config.ts",".",[499,520,521,522,526,527,530],{},"The part that matters most: not every platform can run every feature — a Lambda invocation has no standing\nprocess for an in-process cron timer; Deno Deploy has no Durable Object equivalent. Heximon checks this at\n",[523,524,525],"strong",{},"compile time",". Point a Durable Object at ",[503,528,529],{},"LambdaStrategy"," and the build fails with a diagnostic naming the\nclass and the platform, before anything ships — never a silent gap that only shows up in production.",[532,533,535],"h2",{"id":534},"where-are-you-deploying","Where are you deploying?",[537,538,539,553],"table",{},[540,541,542],"thead",{},[543,544,545,550],"tr",{},[546,547,549],"th",{"align":548},"left","Platform",[546,551,552],{"align":548},"Guide",[554,555,556,568,578,588,598,607,616,629],"tbody",{},[543,557,558,562],{},[559,560,561],"td",{"align":548},"Node, Bun, or Deno (no vendor, your own process)",[559,563,564,567],{"align":548},[565,566,302],"a",{"href":303}," — the zero-config default.",[543,569,570,573],{},[559,571,572],{"align":548},"Cloudflare Workers",[559,574,575,577],{"align":548},[565,576,307],{"href":308}," — Durable Objects, hibernating WebSockets, a real workerd dev host.",[543,579,580,583],{},[559,581,582],{"align":548},"Vercel Functions or Edge",[559,584,585,587],{"align":548},[565,586,312],{"href":313}," — cron, queues, and the one freezing platform with full workflow\u002Fsaga support.",[543,589,590,593],{},[559,591,592],{"align":548},"Netlify Functions or Edge",[559,594,595,597],{"align":548},[565,596,317],{"href":318}," — scheduled functions, Async Workloads queue.",[543,599,600,602],{},[559,601,322],{"align":548},[559,603,604,606],{"align":548},[565,605,322],{"href":323}," — API Gateway v2, SQS push-consumer queues.",[543,608,609,611],{},[559,610,327],{"align":548},[559,612,613,615],{"align":548},[565,614,327],{"href":328}," — the smallest artifact: cron only, no queue, no DO.",[543,617,618,621],{},[559,619,620],{"align":548},"Nitro (one codebase, many presets)",[559,622,623,625,626,518],{"align":548},[565,624,332],{"href":333}," — Node, Cloudflare, Deno, Bun, Lambda from a single ",[503,627,628],{},"preset",[543,630,631,634],{},[559,632,633],{"align":548},"Nuxt (API + Vue on one server)",[559,635,636,638],{"align":548},[565,637,337],{"href":338}," — a Heximon API alongside your pages, SSR cookies included.",[499,640,641],{},"Each guide covers exactly what lands in that platform's output tree and which of its own features are\nnative vs. degraded.",[532,643,645],{"id":644},"the-feature-platform-matrix","The feature × platform matrix",[499,647,648,649,652,653,656],{},"Every cell below is enforced by a ",[503,650,651],{},"supportedFeatures"," flag on that platform's ",[503,654,655],{},"PlatformStrategy"," — the same\nflag the compiler's plugins read to decide whether to fail your build.",[499,658,659,661,662,664,665,668],{},[523,660,332],{}," reuses the underlying vendor strategy (so its ",[503,663,651],{}," match column-for-column) but\n",[523,666,667],{},"subtracts"," two things because it supersedes the vendor's own entry emitter: cron only works for\nCloudflare-module\u002F-durable and Vercel presets (Netlify natively supports cron, but Netlify-under-Nitro does\nnot), and the freeze-safe workflow\u002Fsaga drain never wires up under any Nitro preset, even Vercel.",[499,670,671],{},"Both fail loud with a diagnostic naming the native host to use instead.",[537,673,674,701],{},[540,675,676],{},[543,677,678,681,683,685,688,691,694,697,699],{},[546,679,680],{"align":548},"Feature",[546,682,302],{"align":548},[546,684,307],{"align":548},[546,686,687],{"align":548},"Vercel Functions",[546,689,690],{"align":548},"Vercel Edge",[546,692,693],{"align":548},"Netlify Functions",[546,695,696],{"align":548},"Netlify Edge",[546,698,322],{"align":548},[546,700,327],{"align":548},[554,702,703,725,747,769,790,811,833,858,879,900,921,942,963,984,1005,1026,1047,1071],{},[543,704,705,708,711,713,715,717,719,721,723],{},[559,706,707],{"align":548},"HTTP controllers \u002F contracts",[559,709,710],{"align":548},"yes",[559,712,710],{"align":548},[559,714,710],{"align":548},[559,716,710],{"align":548},[559,718,710],{"align":548},[559,720,710],{"align":548},[559,722,710],{"align":548},[559,724,710],{"align":548},[543,726,727,730,732,734,737,739,741,743,745],{},[559,728,729],{"align":548},"WebSockets (plain)",[559,731,710],{"align":548},[559,733,710],{"align":548},[559,735,736],{"align":548},"no",[559,738,736],{"align":548},[559,740,736],{"align":548},[559,742,736],{"align":548},[559,744,736],{"align":548},[559,746,736],{"align":548},[543,748,749,752,755,757,759,761,763,765,767],{},[559,750,751],{"align":548},"WebSockets (durable, hibernating)",[559,753,754],{"align":548},"dev-only",[559,756,710],{"align":548},[559,758,736],{"align":548},[559,760,736],{"align":548},[559,762,736],{"align":548},[559,764,736],{"align":548},[559,766,736],{"align":548},[559,768,736],{"align":548},[543,770,771,774,776,778,780,782,784,786,788],{},[559,772,773],{"align":548},"Server-Sent Events (plain)",[559,775,710],{"align":548},[559,777,710],{"align":548},[559,779,736],{"align":548},[559,781,736],{"align":548},[559,783,736],{"align":548},[559,785,736],{"align":548},[559,787,736],{"align":548},[559,789,736],{"align":548},[543,791,792,795,797,799,801,803,805,807,809],{},[559,793,794],{"align":548},"Server-Sent Events (durable)",[559,796,754],{"align":548},[559,798,710],{"align":548},[559,800,736],{"align":548},[559,802,736],{"align":548},[559,804,736],{"align":548},[559,806,736],{"align":548},[559,808,736],{"align":548},[559,810,736],{"align":548},[543,812,813,815,818,820,823,825,827,829,831],{},[559,814,289],{"align":548},[559,816,817],{"align":548},"dev shim only",[559,819,710],{"align":548},[559,821,822],{"align":548},"n\u002Fa",[559,824,822],{"align":548},[559,826,822],{"align":548},[559,828,822],{"align":548},[559,830,822],{"align":548},[559,832,822],{"align":548},[543,834,835,842,844,846,848,850,852,854,856],{},[559,836,837,838,841],{"align":548},"Cron (",[503,839,840],{},"@heximon\u002Fschedule",")",[559,843,710],{"align":548},[559,845,710],{"align":548},[559,847,710],{"align":548},[559,849,710],{"align":548},[559,851,710],{"align":548},[559,853,736],{"align":548},[559,855,736],{"align":548},[559,857,710],{"align":548},[543,859,860,863,865,867,869,871,873,875,877],{},[559,861,862],{"align":548},"Queue — producer",[559,864,710],{"align":548},[559,866,710],{"align":548},[559,868,710],{"align":548},[559,870,736],{"align":548},[559,872,710],{"align":548},[559,874,736],{"align":548},[559,876,710],{"align":548},[559,878,736],{"align":548},[543,880,881,884,886,888,890,892,894,896,898],{},[559,882,883],{"align":548},"Queue — consumer (poll: Drizzle\u002FSQS\u002FUpstash)",[559,885,710],{"align":548},[559,887,822],{"align":548},[559,889,736],{"align":548},[559,891,736],{"align":548},[559,893,736],{"align":548},[559,895,736],{"align":548},[559,897,736],{"align":548},[559,899,736],{"align":548},[543,901,902,905,907,909,911,913,915,917,919],{},[559,903,904],{"align":548},"Queue — consumer (push)",[559,906,822],{"align":548},[559,908,710],{"align":548},[559,910,710],{"align":548},[559,912,736],{"align":548},[559,914,710],{"align":548},[559,916,736],{"align":548},[559,918,710],{"align":548},[559,920,736],{"align":548},[543,922,923,926,928,930,932,934,936,938,940],{},[559,924,925],{"align":548},"Durable workflows",[559,927,710],{"align":548},[559,929,710],{"align":548},[559,931,710],{"align":548},[559,933,736],{"align":548},[559,935,736],{"align":548},[559,937,736],{"align":548},[559,939,736],{"align":548},[559,941,736],{"align":548},[543,943,944,947,949,951,953,955,957,959,961],{},[559,945,946],{"align":548},"Saga timers",[559,948,710],{"align":548},[559,950,710],{"align":548},[559,952,710],{"align":548},[559,954,736],{"align":548},[559,956,736],{"align":548},[559,958,736],{"align":548},[559,960,736],{"align":548},[559,962,736],{"align":548},[543,964,965,968,970,972,974,976,978,980,982],{},[559,966,967],{"align":548},"Cross-service events — split \u002F broadcast",[559,969,710],{"align":548},[559,971,710],{"align":548},[559,973,736],{"align":548},[559,975,736],{"align":548},[559,977,736],{"align":548},[559,979,736],{"align":548},[559,981,736],{"align":548},[559,983,736],{"align":548},[543,985,986,989,991,993,995,997,999,1001,1003],{},[559,987,988],{"align":548},"Cross-service events — QStash push",[559,990,710],{"align":548},[559,992,710],{"align":548},[559,994,710],{"align":548},[559,996,822],{"align":548},[559,998,710],{"align":548},[559,1000,822],{"align":548},[559,1002,710],{"align":548},[559,1004,822],{"align":548},[543,1006,1007,1010,1012,1014,1016,1018,1020,1022,1024],{},[559,1008,1009],{"align":548},"Auth — Scrypt hashing",[559,1011,710],{"align":548},[559,1013,736],{"align":548},[559,1015,710],{"align":548},[559,1017,736],{"align":548},[559,1019,710],{"align":548},[559,1021,736],{"align":548},[559,1023,710],{"align":548},[559,1025,736],{"align":548},[543,1027,1028,1031,1033,1035,1037,1039,1041,1043,1045],{},[559,1029,1030],{"align":548},"Auth — Pbkdf2 hashing",[559,1032,710],{"align":548},[559,1034,710],{"align":548},[559,1036,710],{"align":548},[559,1038,710],{"align":548},[559,1040,710],{"align":548},[559,1042,710],{"align":548},[559,1044,710],{"align":548},[559,1046,710],{"align":548},[543,1048,1049,1052,1055,1058,1061,1063,1065,1067,1069],{},[559,1050,1051],{"align":548},"OTel flush model",[559,1053,1054],{"align":548},"shutdown",[559,1056,1057],{"align":548},"waitUntil",[559,1059,1060],{"align":548},"perInvocation",[559,1062,1057],{"align":548},[559,1064,1060],{"align":548},[559,1066,1057],{"align":548},[559,1068,1060],{"align":548},[559,1070,1057],{"align":548},[543,1072,1073,1076,1078,1080,1082,1084,1086,1088,1090],{},[559,1074,1075],{"align":548},"Caching, health, notifications, OpenAPI\u002FMCP",[559,1077,710],{"align":548},[559,1079,710],{"align":548},[559,1081,710],{"align":548},[559,1083,710],{"align":548},[559,1085,710],{"align":548},[559,1087,710],{"align":548},[559,1089,710],{"align":548},[559,1091,710],{"align":548},[499,1093,1094,1096,1097,1099,1100,1102,1103,1105,1106,1109],{},[523,1095,710],{}," = production-supported · ",[523,1098,736],{}," = fails the build at compile time with a named diagnostic · ",[523,1101,822],{}," =\nthe concept doesn't apply to this platform's model · ",[523,1104,754],{}," = works in ",[503,1107,1108],{},"vp dev"," for local iteration,\nnot a production guarantee.",[499,1111,1112,1113,1115],{},"The pattern behind most of the ",[503,1114,736],{},"s: a freezing platform (Vercel, Netlify, Lambda) has no standing process to\nhold a WebSocket, stream SSE, or run a long poll loop on — so plain WS\u002FSSE, durable rooms, and poll-based queue\nconsumers are Node\u002FCloudflare-only, while push-based queues, cron (mostly), and QStash's push-broadcast leg\nreach every platform instead. Two exceptions worth calling out by name:",[1117,1118,1119,1128],"ul",{},[1120,1121,1122,1125,1126,518],"li",{},[523,1123,1124],{},"Vercel Functions runs workflows and saga timers despite freezing"," — a timer-wakeup switch (drain cron by\ndefault, or an opt-in delayed queue message) re-enters a suspended run; see ",[565,1127,312],{"href":313},[1120,1129,1130,1133,1134,1137,1138,1141],{},[523,1131,1132],{},"Auth's Scrypt hashing is Node-only"," because it imports ",[503,1135,1136],{},"node:crypto","; ",[503,1139,1140],{},"Pbkdf2"," (WebCrypto-only) is the\nedge-safe default and runs everywhere, including every edge target.",[499,1143,1144],{},"Netlify Edge additionally rejects cron outright (no scheduled-function primitive at all — the edge catch-all\nwould silently swallow it), and Lambda has no first-class cron entry alongside its HTTP handler (wire\nEventBridge yourself, outside the framework).",[532,1146,1148],{"id":1147},"pick-a-strategy","Pick a strategy",[499,1150,1151,1152,1155,1156,1158,1159,1161,1162,1164],{},"A ",[523,1153,1154],{},"deploy strategy"," is a class you instantiate on the ",[503,1157,513],{}," config key. It bundles everything the build\nneeds to know about the target: its runtime lifetime (a long-lived process vs. a request-scoped isolate), its\nvendor identity, its ",[503,1160,651],{}," set, and — for ",[503,1163,505],{}," — how to assemble the platform's entry file\nand where to write it.",[1166,1167,1172],"pre",{"className":1168,"code":1169,"filename":517,"language":1170,"meta":1171,"style":1171},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineHeximonConfig } from \"@heximon\u002Fbuild\";\nimport { CloudflareWorkersStrategy } from \"@heximon\u002Fcloudflare\";\nimport { HttpPlugin } from \"@heximon\u002Fhttp\u002Fcompiler\";\n\nexport default defineHeximonConfig({\n  platform: new CloudflareWorkersStrategy(),\n  plugins: [new HttpPlugin()],\n});\n","ts","",[503,1173,1174,1210,1233,1256,1263,1281,1302,1323],{"__ignoreMap":1171},[1175,1176,1179,1183,1187,1191,1194,1197,1200,1204,1207],"span",{"class":1177,"line":1178},"line",1,[1175,1180,1182],{"class":1181},"s7zQu","import",[1175,1184,1186],{"class":1185},"sMK4o"," {",[1175,1188,1190],{"class":1189},"sTEyZ"," defineHeximonConfig",[1175,1192,1193],{"class":1185}," }",[1175,1195,1196],{"class":1181}," from",[1175,1198,1199],{"class":1185}," \"",[1175,1201,1203],{"class":1202},"sfazB","@heximon\u002Fbuild",[1175,1205,1206],{"class":1185},"\"",[1175,1208,1209],{"class":1185},";\n",[1175,1211,1213,1215,1217,1220,1222,1224,1226,1229,1231],{"class":1177,"line":1212},2,[1175,1214,1182],{"class":1181},[1175,1216,1186],{"class":1185},[1175,1218,1219],{"class":1189}," CloudflareWorkersStrategy",[1175,1221,1193],{"class":1185},[1175,1223,1196],{"class":1181},[1175,1225,1199],{"class":1185},[1175,1227,1228],{"class":1202},"@heximon\u002Fcloudflare",[1175,1230,1206],{"class":1185},[1175,1232,1209],{"class":1185},[1175,1234,1236,1238,1240,1243,1245,1247,1249,1252,1254],{"class":1177,"line":1235},3,[1175,1237,1182],{"class":1181},[1175,1239,1186],{"class":1185},[1175,1241,1242],{"class":1189}," HttpPlugin",[1175,1244,1193],{"class":1185},[1175,1246,1196],{"class":1181},[1175,1248,1199],{"class":1185},[1175,1250,1251],{"class":1202},"@heximon\u002Fhttp\u002Fcompiler",[1175,1253,1206],{"class":1185},[1175,1255,1209],{"class":1185},[1175,1257,1259],{"class":1177,"line":1258},4,[1175,1260,1262],{"emptyLinePlaceholder":1261},true,"\n",[1175,1264,1266,1269,1272,1275,1278],{"class":1177,"line":1265},5,[1175,1267,1268],{"class":1181},"export",[1175,1270,1271],{"class":1181}," default",[1175,1273,1190],{"class":1274},"s2Zo4",[1175,1276,1277],{"class":1189},"(",[1175,1279,1280],{"class":1185},"{\n",[1175,1282,1284,1288,1291,1294,1296,1299],{"class":1177,"line":1283},6,[1175,1285,1287],{"class":1286},"swJcz","  platform",[1175,1289,1290],{"class":1185},":",[1175,1292,1293],{"class":1185}," new",[1175,1295,1219],{"class":1274},[1175,1297,1298],{"class":1189},"()",[1175,1300,1301],{"class":1185},",\n",[1175,1303,1305,1308,1310,1313,1316,1318,1321],{"class":1177,"line":1304},7,[1175,1306,1307],{"class":1286},"  plugins",[1175,1309,1290],{"class":1185},[1175,1311,1312],{"class":1189}," [",[1175,1314,1315],{"class":1185},"new",[1175,1317,1242],{"class":1274},[1175,1319,1320],{"class":1189},"()]",[1175,1322,1301],{"class":1185},[1175,1324,1326,1329,1331],{"class":1177,"line":1325},8,[1175,1327,1328],{"class":1185},"}",[1175,1330,841],{"class":1189},[1175,1332,1209],{"class":1185},[499,1334,1335,1336,1338,1339,1342,1343,1346],{},"Omit ",[503,1337,513],{}," entirely and Heximon resolves ",[503,1340,1341],{},"NodeHostStrategy"," — the zero-config default: a standalone\n",[503,1344,1345],{},"dist\u002Fserver.js"," that runs on Node, Bun, or Deno.",[537,1348,1349,1361],{},[540,1350,1351],{},[543,1352,1353,1355,1358],{},[546,1354,549],{"align":548},[546,1356,1357],{"align":548},"Strategy",[546,1359,1360],{"align":548},"Package",[554,1362,1363,1377,1390,1409,1427,1440],{},[543,1364,1365,1368,1372],{},[559,1366,1367],{"align":548},"Node (default)",[559,1369,1370],{"align":548},[503,1371,1341],{},[559,1373,1374],{"align":548},[503,1375,1376],{},"@heximon\u002Fnode",[543,1378,1379,1381,1386],{},[559,1380,572],{"align":548},[559,1382,1383],{"align":548},[503,1384,1385],{},"CloudflareWorkersStrategy",[559,1387,1388],{"align":548},[503,1389,1228],{},[543,1391,1392,1395,1404],{},[559,1393,1394],{"align":548},"Vercel Functions \u002F Edge",[559,1396,1397,1400,1401],{"align":548},[503,1398,1399],{},"VercelFunctionsStrategy"," \u002F ",[503,1402,1403],{},"VercelEdgeStrategy",[559,1405,1406],{"align":548},[503,1407,1408],{},"@heximon\u002Fvercel",[543,1410,1411,1414,1422],{},[559,1412,1413],{"align":548},"Netlify Functions \u002F Edge",[559,1415,1416,1400,1419],{"align":548},[503,1417,1418],{},"NetlifyFunctionsStrategy",[503,1420,1421],{},"NetlifyEdgeStrategy",[559,1423,1424],{"align":548},[503,1425,1426],{},"@heximon\u002Fnetlify",[543,1428,1429,1431,1435],{},[559,1430,322],{"align":548},[559,1432,1433],{"align":548},[503,1434,529],{},[559,1436,1437],{"align":548},[503,1438,1439],{},"@heximon\u002Faws",[543,1441,1442,1444,1449],{},[559,1443,327],{"align":548},[559,1445,1446],{"align":548},[503,1447,1448],{},"DenoDeployStrategy",[559,1450,1451],{"align":548},[503,1452,1453],{},"@heximon\u002Fdeno",[499,1455,1456,1457,1459,1460,1463,1464,1467,1468,1471,1472,1474],{},"A strategy also injects the compiler plugins its entry needs (the worker-entry emitter, a ",[503,1458,509],{},"\nwriter, and so on) — you only ever list your ",[523,1461,1462],{},"own"," concept plugins (",[503,1465,1466],{},"HttpPlugin",", ",[503,1469,1470],{},"CqrsPlugin",", …). Switching\nplatforms is a one-line change in ",[503,1473,517],{},"; nothing in your app source references a vendor.",[499,1476,1477,1478,1467,1481,1484,1485,1488,1489,1492,1493,1467,1496,1499,1500,1503,1504,1507],{},"The plugin list itself tracks the platform: this real Lambda config omits ",[503,1479,1480],{},"SchedulePlugin",[503,1482,1483],{},"SagaPlugin",", and\n",[503,1486,1487],{},"WorkflowPlugin"," because ",[503,1490,1491],{},"LambdaStrategy.supportedFeatures"," marks ",[503,1494,1495],{},"cron",[503,1497,1498],{},"saga",", and ",[503,1501,1502],{},"workflows"," all ",[503,1505,1506],{},"false"," —\nthere's no point registering a plugin over a concept the target can't run.",[1166,1509,1512],{"className":1168,"code":1510,"filename":1511,"language":1170,"meta":1171,"style":1171},"export default defineHeximonConfig({\n  platform: new LambdaStrategy(),\n  plugins: [\n    new HttpPlugin(),\n    new CqrsPlugin(),\n    new EventEmitterPlugin(),\n    new DomainEventsPlugin(),\n    new IntegrationEventsPlugin(),\n    new HealthPlugin(),\n    new OtelPlugin(),\n  ],\n});\n","examples\u002Fflagship\u002Fapps\u002Flambda\u002Fheximon.config.ts",[503,1513,1514,1526,1541,1550,1561,1572,1583,1594,1605,1617,1629,1637],{"__ignoreMap":1171},[1175,1515,1516,1518,1520,1522,1524],{"class":1177,"line":1178},[1175,1517,1268],{"class":1181},[1175,1519,1271],{"class":1181},[1175,1521,1190],{"class":1274},[1175,1523,1277],{"class":1189},[1175,1525,1280],{"class":1185},[1175,1527,1528,1530,1532,1534,1537,1539],{"class":1177,"line":1212},[1175,1529,1287],{"class":1286},[1175,1531,1290],{"class":1185},[1175,1533,1293],{"class":1185},[1175,1535,1536],{"class":1274}," LambdaStrategy",[1175,1538,1298],{"class":1189},[1175,1540,1301],{"class":1185},[1175,1542,1543,1545,1547],{"class":1177,"line":1235},[1175,1544,1307],{"class":1286},[1175,1546,1290],{"class":1185},[1175,1548,1549],{"class":1189}," [\n",[1175,1551,1552,1555,1557,1559],{"class":1177,"line":1258},[1175,1553,1554],{"class":1185},"    new",[1175,1556,1242],{"class":1274},[1175,1558,1298],{"class":1189},[1175,1560,1301],{"class":1185},[1175,1562,1563,1565,1568,1570],{"class":1177,"line":1265},[1175,1564,1554],{"class":1185},[1175,1566,1567],{"class":1274}," CqrsPlugin",[1175,1569,1298],{"class":1189},[1175,1571,1301],{"class":1185},[1175,1573,1574,1576,1579,1581],{"class":1177,"line":1283},[1175,1575,1554],{"class":1185},[1175,1577,1578],{"class":1274}," EventEmitterPlugin",[1175,1580,1298],{"class":1189},[1175,1582,1301],{"class":1185},[1175,1584,1585,1587,1590,1592],{"class":1177,"line":1304},[1175,1586,1554],{"class":1185},[1175,1588,1589],{"class":1274}," DomainEventsPlugin",[1175,1591,1298],{"class":1189},[1175,1593,1301],{"class":1185},[1175,1595,1596,1598,1601,1603],{"class":1177,"line":1325},[1175,1597,1554],{"class":1185},[1175,1599,1600],{"class":1274}," IntegrationEventsPlugin",[1175,1602,1298],{"class":1189},[1175,1604,1301],{"class":1185},[1175,1606,1608,1610,1613,1615],{"class":1177,"line":1607},9,[1175,1609,1554],{"class":1185},[1175,1611,1612],{"class":1274}," HealthPlugin",[1175,1614,1298],{"class":1189},[1175,1616,1301],{"class":1185},[1175,1618,1620,1622,1625,1627],{"class":1177,"line":1619},10,[1175,1621,1554],{"class":1185},[1175,1623,1624],{"class":1274}," OtelPlugin",[1175,1626,1298],{"class":1189},[1175,1628,1301],{"class":1185},[1175,1630,1632,1635],{"class":1177,"line":1631},11,[1175,1633,1634],{"class":1189},"  ]",[1175,1636,1301],{"class":1185},[1175,1638,1640,1642,1644],{"class":1177,"line":1639},12,[1175,1641,1328],{"class":1185},[1175,1643,841],{"class":1189},[1175,1645,1209],{"class":1185},[532,1647,1649,1650,1652],{"id":1648},"what-vp-build-actually-does","What ",[503,1651,505],{}," actually does",[499,1654,1655,1657,1658,1660],{},[503,1656,505],{}," runs the same compiler pass as ",[503,1659,1108],{},", then hands the generated wiring to the configured\nstrategy instead of the default in-memory dev server:",[1662,1663,1664,1684,1711],"ol",{},[1120,1665,1666,1669,1670,1673,1674,1677,1678,1681,1682,518],{},[523,1667,1668],{},"Compile"," — the compiler walks your ",[503,1671,1672],{},"Module","\u002F",[503,1675,1676],{},"Controller","\u002Fhandler classes, builds the static DI graph, and\nemits plain JS into ",[503,1679,1680],{},".heximon\u002F",", exactly as it does for ",[503,1683,1108],{},[1120,1685,1686,1689,1690,1693,1694,1301,1697,1467,1700,1467,1703,1706,1707,1710],{},[523,1687,1688],{},"Assemble the entry"," — the strategy's ",[503,1691,1692],{},"PlatformEmitter"," writes the platform-specific boot file (",[503,1695,1696],{},"worker-entry.js",[503,1698,1699],{},"vercel-entry.js",[503,1701,1702],{},"lambda-entry.js",[503,1704,1705],{},"deno-entry.js",", …) that wires the generated ",[503,1708,1709],{},"fetch"," handler (plus\nscheduled\u002Fqueue consumers, if your app declares them) into the shape the platform's runtime expects.",[1120,1712,1713,1689,1716,1719,1720,1723,1724,1727,1728,1731,1732,1735,1736,1739,1740,1743],{},[523,1714,1715],{},"Write the deploy artifact",[503,1717,1718],{},"writeOutput"," step produces the platform's native output tree:\n",[503,1721,1722],{},"dist\u002Fworker.js"," + ",[503,1725,1726],{},"dist\u002Fwrangler.json"," for Cloudflare, ",[503,1729,1730],{},".vercel\u002Foutput\u002F"," for Vercel, ",[503,1733,1734],{},".netlify\u002F"," for Netlify,\n",[503,1737,1738],{},"dist\u002Flambda.js"," for AWS, ",[503,1741,1742],{},"dist\u002Fdeno-worker.js"," for Deno.",[499,1745,1746],{},"Each platform's page in this section covers exactly what lands in its tree and why.",[532,1748,1750,1751,1753],{"id":1749},"two-ways-to-ship-native-vp-build-or-nitro","Two ways to ship: native ",[503,1752,505],{},", or Nitro",[499,1755,1756,1757,1760,1761,1467,1763,1765,1766,1768],{},"Every platform above has a ",[523,1758,1759],{},"native"," strategy package (",[503,1762,1228],{},[503,1764,1408],{},", …) that\n",[503,1767,505],{}," targets directly — this is the deepest integration, and the only path for Durable Objects,\nfreeze-safe workflow drains, and a few other platform-specific guarantees called out per-page.",[499,1770,1771,1773,1774,1776],{},[565,1772,332],{"href":333}," is the other path: one codebase, one ",[503,1775,628],{}," string, covering Node, Cloudflare,\nDeno, Bun, and Lambda without per-vendor packages — pick it when you want a single build to retarget across\nruntimes with less platform-specific ceremony, and you don't need the two Nitro-subtracted features (native\ncron on Netlify, freeze-safe workflow\u002Fsaga drain) called out in the matrix above.",[499,1778,1779,1780,1782,1783,1673,1785,1787],{},"See ",[565,1781,346],{"href":347}," for how the two paths relate to ",[503,1784,1108],{},[503,1786,505],{}," and the other host options\n(library mode, alternate bundlers).",[532,1789,1791],{"id":1790},"verification-status","Verification status",[499,1793,1794],{},"Deploy claims in these pages are labeled by how they were checked:",[1117,1796,1797,1816],{},[1120,1798,1799,1802,1803,1806,1807,1815],{},[523,1800,1801],{},"Live-verified"," — actually run against the real vendor (or the vendor's own runtime locally, e.g.\nworkerd via Miniflare). Cloudflare's REST-through-DO + SSE + 2-client WS + saga-timer path, Vercel's\ndurable-queue round trip and both ",[503,1804,1805],{},"step.sleep"," wakeup legs, and Netlify's mixed-runtime split are all\nlive-verified this way — see ",[565,1808,1812],{"href":1809,"rel":1810},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Fblob\u002Fmain\u002Fdocs\u002Flive-deploy-verification.md",[1811],"nofollow",[503,1813,1814],{},"docs\u002Flive-deploy-verification.md","\nfor the dated ledger.",[1120,1817,1818,1821,1822,1825,1826,1828],{},[523,1819,1820],{},"Expected, not yet live-deployed"," — a real ",[503,1823,1824],{},"wrangler deploy"," to the Cloudflare network, any live AWS\nLambda deploy, and any live Deno Deploy push are exercised via ",[503,1827,505],{}," artifacts and in-process\u002Fe2e tests,\nnot an actual vendor deploy yet. Each platform's page says so where it applies — don't read \"supported\" as\n\"verified on the vendor's network\" unless the ledger confirms it.",[532,1830,1832,1833],{"id":1831},"ship-it-heximon-deploy","Ship it — ",[503,1834,1835],{},"heximon deploy",[499,1837,1838,1839,1841,1842,1301,1844,1847,1848,1852,1853,1855],{},"Once a platform is configured, ",[503,1840,505],{}," plus a hand-run vendor CLI command (",[503,1843,1824],{},[503,1845,1846],{},"vercel deploy --prebuilt",", …) is a valid path. The ",[565,1849,1850],{"href":375},[503,1851,1835],{}," CLI command automates that\nsame build-then-ship sequence — it resolves the ship step straight off your configured ",[503,1854,513],{}," instance, so\nthere's no separate deploy config to maintain:",[1166,1857,1862],{"className":1858,"code":1859,"filename":1860,"language":1861,"meta":1171,"style":1171},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","heximon deploy                    # vp build, then ship via the configured platform's native CLI\nheximon deploy --env production   # --prod on Vercel\u002FNetlify\u002FDeno; production secrets on --provision\n","terminal","bash",[503,1863,1864,1877],{"__ignoreMap":1171},[1175,1865,1866,1870,1873],{"class":1177,"line":1178},[1175,1867,1869],{"class":1868},"sBMFI","heximon",[1175,1871,1872],{"class":1202}," deploy",[1175,1874,1876],{"class":1875},"sHwdD","                    # vp build, then ship via the configured platform's native CLI\n",[1175,1878,1879,1881,1883,1886,1889],{"class":1177,"line":1212},[1175,1880,1869],{"class":1868},[1175,1882,1872],{"class":1202},[1175,1884,1885],{"class":1202}," --env",[1175,1887,1888],{"class":1202}," production",[1175,1890,1891],{"class":1875},"   # --prod on Vercel\u002FNetlify\u002FDeno; production secrets on --provision\n",[499,1893,1894,1895,1898,1899,1902,1903,1906,1907,1499,1910,518],{},"See the ",[565,1896,1897],{"href":375},"CLI deploy command"," for the full flag set — preflight checks, ",[503,1900,1901],{},"--create"," for a\nfresh vendor account, ",[503,1904,1905],{},"--provision"," for secrets and infrastructure, ",[503,1908,1909],{},"--migrate",[503,1911,1912],{},"--verify",[532,1914,1916],{"id":1915},"next-steps","Next steps",[1117,1918,1919,1926,1934,1939,1944,1949,1957,1962],{},[1120,1920,1921,1923,1924,518],{},[565,1922,302],{"href":303}," — the zero-config default: a standalone ",[503,1925,1345],{},[1120,1927,1928,1930,1931,1933],{},[565,1929,307],{"href":308}," — Workers, ",[503,1932,509],{}," as a build artifact, and the workerd dev host.",[1120,1935,1936,1938],{},[565,1937,312],{"href":313}," — Functions and Edge, the Build Output API tree, cron and queues.",[1120,1940,1941,1943],{},[565,1942,317],{"href":318}," — Functions and Edge, scheduled functions, Async Workloads.",[1120,1945,1946,1948],{},[565,1947,322],{"href":323}," — the API Gateway v2 handler shape and SQS event-source queues.",[1120,1950,1951,1953,1954,518],{},[565,1952,327],{"href":328}," — the self-contained Worker script and ",[503,1955,1956],{},"Deno.cron",[1120,1958,1959,1961],{},[565,1960,342],{"href":343}," — one deploy, two runtimes, routed by prefix.",[1120,1963,1964,1966],{},[565,1965,346],{"href":347}," — the full host picture: Vite dev server, Nitro, Nuxt, library mode, alternate bundlers.",[1968,1969,1970],"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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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":1171,"searchDepth":1212,"depth":1212,"links":1972},[1973,1974,1975,1976,1978,1980,1981,1983],{"id":534,"depth":1212,"text":535},{"id":644,"depth":1212,"text":645},{"id":1147,"depth":1212,"text":1148},{"id":1648,"depth":1212,"text":1977},"What vp build actually does",{"id":1749,"depth":1212,"text":1979},"Two ways to ship: native vp build, or Nitro",{"id":1790,"depth":1212,"text":1791},{"id":1831,"depth":1212,"text":1982},"Ship it — heximon deploy",{"id":1915,"depth":1212,"text":1916},"PlatformStrategy, heximon.platform, vp build artifacts, feature x platform support matrix, NodeHostStrategy, CloudflareWorkersStrategy, VercelFunctionsStrategy, NetlifyFunctionsStrategy, LambdaStrategy, DenoDeployStrategy, heximon deploy.","md",null,{},{"icon":6,"title":142},{"title":142,"description":1984},"aN0ZRnmIJeXzOvOOwD7-GDw7VF1fUGwnSvWoilpzens",[1992,1994],{"title":289,"path":290,"stem":291,"description":1993,"icon":80,"children":-1},"Author a single-threaded stateful actor at the edge with DurableObject and a DI-injected DurableFactory, address it by name, and reach storage through DurableContext.",{"title":302,"path":303,"stem":304,"description":1995,"icon":305,"children":-1},"NodeHostStrategy, dist\u002Fserver.js, @heximon\u002Fhttp\u002Fserve, node\u002Fbun\u002Fdeno standalone deploy, the zero-config default platform.",1783300759753]